Назад | Перейти на главную страницу

Простой способ стереть набор схем Oracle

Как вы можете стереть набор схем Oracle?

Под стиранием я подразумеваю удаление всех данных, таблиц, представлений, процедур, синонимов и т. Д. И т. Д.

Запустите sqlplus как SYSTEM и введите:

drop user MYSCHEMA cascade;

Повторите эти действия для всех схем, которые вы хотите удалить.

Это начало, а не полностью готовый сценарий - я почти уверен, что он потерпит неудачу, если пользователь, например, настроил какие-либо очереди с помощью AQ.

declare
  l_sql varchar2(2000);
begin
  for i in (select object_type, object_name 
              from dba_objects
             where owner = :user_to_be_wiped
               and object_type in ('TYPE', 'PACKAGE', 'PROCEDURE', 'FUNCTION', 
                                   'TABLE', 'VIEW', 'SEQUENCE', 'DATABASE LINK')
  loop
    l_sql := 'drop ' || :user_to_be_wiped || ' ' || i.object_type || '.' i.object_name;
    if i.object_type = 'TABLE' then
      l_sql := l_sql || ' cascade constraints';
    end if;
    execute immediate l_sql;
  end loop;
end;
/

Я считаю, что для того, чтобы иметь возможность отбрасывать объекты, вам нужно отключить константы внешнего ключа следующим образом.

select status,
 'alter table '||table_name||' disable constraint "' 
||constraint_name||'";' from user_constraints
where r_constraint_name is not null
order by owner,table_name
;

Если это не работает, я снимаю ограничения внешнего ключа следующим образом.

select status,
 'alter table '||table_name||' drop constraint "' 
||constraint_name||'";' from user_constraints
where r_constraint_name is not null
order by owner,table_name
;