Ручное удаление репозитория 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
- Вам также могут быть интересны следующие статьи:
- Строим сеть по данным, хранящимся в Spatial
- Oracle Streams для репликации: troubleshooting (часть 6)
- Полезные запросы для Oracle
- Сравнение и сведение данных с помощью пакета DBMS_COMPARISON
- Пример триггера на spatial таблицу
Рубрики: Database | Комментариев нет »
