Фев 172011
 

При удалении пользователя могут возникнуть ошибки, вот некоторые из них (9.2.0.8):

Ошибка с Oracle rules


SQL> DROP USER test CASCADE;
DROP USER test CASCADE
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-24170:
ORA-06512: at "SYS.DBMS_RULE_ADM", line 129
ORA-06512: at line 1

Эту ошибку исправляем так:

SELECT * FROM dba_objects d
WHERE d.owner = 'TEST'
	AND d.object_type LIKE '%RULE%';

Результатом будет список объектов типа RULE и RULE SET.
Удалим их:

ALTER SESSION SET EVENTS '25475 TRACE NAME CONTEXT FOREVER, LEVEL 2';
-- Сначала удалим объекты типа RULE
EXEC DBMS_RULE_ADM.DROP_RULE('TEST.RULE_NAME', TRUE);
COMMIT;
-- Теперь удалим RULE SET
EXEC DBMS_RULE_ADM.DROP_RULE_SET('TEST.RULE_SET_NAME', TRUE);
COMMIT;
-- Можно удалять пользователя
DROP USER test CASCADE;
Ошибка с Oracle Queue tables


SQL> DROP USER test CASCADE;
DROP USER test CASCADE;
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-24005: must use DBMS_AQADM.DROP_QUEUE_TABLE to drop queue tables

Есть весьма полезный event, который заставит БД применять команду DROP к queue tables. Устанавливать его имеет смысл только для той сессии, в которой производится удаление пользователя.

ALTER SESSION SET EVENTS '10851 TRACE NAME CONTEXT FOREVER, LEVEL 2';
DROP USER test CASCADE;

Теперь queue tables удалятся как простые объекты.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)