Disclaimer

Данный блог является моей личной точкой зрения и не обязательно отражает точку зрения Oracle.

The views expressed on this blog are my own and do not necessarily reflect the views of Oracle

Поиск

Подписка

Ручное удаление репозитория Oracle Database 11g

25.12.2008 от aryndin99

Сегодня возникла проблема. Принесли мне базу Oracle Database 11g. Проблема состояла в том, что Database Control был сконфигурен для конкретного ip-адреса (люди! не делайте так). Чтобы грохнуть репозиторий и пересоздать его попробовал настроить переменную ORACLE_HOSTNAME.

Сначала удалялось все нормально, но в какой-то момент мне было сказано, что LISTENER (который также был переконфигурен на тот ip) отсутствует и после этого emca ушел в невменяемое состояние, утверждая, что никакого репозитория вообще нет :)

При этом удалив пользователя SYSMAN и создавая репозиторий заново я получал сообщения наподобие
25.12.2008 4:09:52 oracle.sysman.emcp.EMConfig perform
SEVERE: Error creating the repository
Refer to the log file at E:\oracle\cfgtoollogs\emca\orcl\emca_2008_12_25_04_02_39.log for more details.

В указанном журнале были сообщения наподобие
CREATE ROLE MGMT_USER
            *
ERROR at line 1:
ORA-01921: role name 'MGMT_USER' conflicts with another user or role name

Т.е. были какие-то объекты, которые мешали удалению репозитория. Экспериментально был выведен скрипт для удаления всех остатков (см. ниже). Использовать этот скрипт стоит, если это "последняя надежда". Лучше удалять репозиторий другими, классическими средствами - с помощью emca, скажем. 

[sourcecode language="sql"]

begin
begin
execute immediate 'drop user MGMT_VIEW cascade';
  exception
   when others then
     DBMS_OUTPUT.PUT_LINE(SQLERRM);
end;
begin
execute immediate 'drop user sysman cascade';
  exception
   when others then
     DBMS_OUTPUT.PUT_LINE(SQLERRM);
end;
begin
execute immediate 'drop public synonym SETEMVIEWUSERCONTEXT';
  exception
   when others then
     DBMS_OUTPUT.PUT_LINE(SQLERRM);
end;
 for i in
   (select 'drop public synonym '||object_name q from dba_objects where object_name like 'MGMT%')
 loop
   begin
   execute immediate i.q;
  exception
   when others then
     DBMS_OUTPUT.PUT_LINE(SQLERRM);
     DBMS_OUTPUT.PUT_LINE(i.q);
   end;
 end loop;
 for i in
   (select 'drop public synonym '||object_name q from dba_objects where object_name like 'ECM%')
 loop
   begin
   execute immediate i.q;
  exception
   when others then
     DBMS_OUTPUT.PUT_LINE(SQLERRM);
     DBMS_OUTPUT.PUT_LINE(i.q);
   end;
 end loop;
for i in
   (select 'drop public synonym '||object_name q from dba_objects where object_name like 'SMP%')
loop
   begin
   execute immediate i.q;
  exception
   when others then
     DBMS_OUTPUT.PUT_LINE(SQLERRM);
     DBMS_OUTPUT.PUT_LINE(i.q);
   end;
end loop;
for i in
   (select 'drop public synonym '||object_name q from dba_objects where object_name like 'EMD%')
loop
   begin
   execute immediate i.q;
  exception
   when others then
     DBMS_OUTPUT.PUT_LINE(SQLERRM);
     DBMS_OUTPUT.PUT_LINE(i.q);
   end;
end loop;
for i in
   (select 'drop role '||role q from dba_roles where role like 'MGMT%')
loop
   begin
   execute immediate i.q;
  exception
   when others then
     DBMS_OUTPUT.PUT_LINE(SQLERRM);
     DBMS_OUTPUT.PUT_LINE(i.q);
   end;
end loop;
end;

[/sourcecode]

 

После этого я пересоздал репозиторий вот такой командой
emca -config dbcontrol db -repos create -SID orcl -PORT 1521 -LISTENER_OH e:\oracle\product\11.2.0\db_1 -DBSNMP_PWD oracle -SYSMAN_PWD oracle -SYS_PWD oracle

Рубрики: Database | Комментариев нет »

Оставить комментарий

Заметьте: Включена проверка комментариев. Нет смысла повторно отправлять комментарий.