2014-01-20 3 views
8

я удалил некоторые из моих таблиц оракулаКак обновить словарь данных в Oracle?

DROP TABLE hr.admin_emp CASCADE CONSTRAINTS; 

но ограничение первичного ключа удаляемой таблицы еще в словаре данных (all_constraints). теперь мой вопрос заключается в том, как обновить словарь данных, чтобы он не показывал первичный ключ удаленных таблиц? например, я использовал этот запрос, чтобы выбрать схему ч:

SELECT A.TABLE_NAME,A.COLUMN_NAME,A.CONSTRAINT_NAME FROM ALL_CONS_COLUMNS A, ALL_CONSTRAINTS B WHERE B.OWNER='HR' AND A.OWNER='HR'AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME AND B.constraint_type='P'; 

и результат:

REGIONS      REGION_ID 
COUNTRIES      COUNTRY_ID 
LOCATIONS      LOCATION_ID 
DEPARTMENTS     DEPARTMENT_ID 
JOBS       JOB_ID 
EMPLOYEES      EMPLOYEE_ID 
JOB_HISTORY     EMPLOYEE_ID 
JOB_HISTORY     START_DATE 
BIN$rRfAMUTnQROvBfuhBCT6RQ==$0 ID 
BIN$87Rd5FE7Rj2eQbim0H2EzA==$0 PK_B 
BIN$bQeeD0M/QMSpLzYjZqAGeA==$0 PK_A 
BIN$RzMu6nZiQ2yuj+4xQf7eAQ==$0 PK_A 

строки с странным именем таблицы являются те, я был удален.

+4

«*, но ограничение первичного ключа удаляемой таблицы еще в словаре данных *» - Я не верю в это. Это ограничение для одного и того же пользователя? Можете ли вы показать вывод своего оператора SELECT, который, по вашему мнению, подтверждает этот момент? –

+1

Вы ** ** ** не удаляете данные из словаря данных с помощью оператора DML. Это виды, которые построены на представлениях sys и таблицах, а данные в них обновлены, чтобы отразить текущее состояние базы данных. – vishad

+0

Я не удалял данные из словаря данных, я удалил некоторые из своих таблиц, но словарь данных все еще показывает ограничение упавшей таблицы! –

ответ

8

Ваш упавший стол in the recycle bin.

Ваши первоначальные имена ограничений не видны - вы больше не можете видеть имя первичного ключа (в этом представлении вы можете получить его от user_recyclebin) - но ограничение по-прежнему доступно внутри, поэтому его можно быстро восстановить если вы restore the table with flashback table hr.admin_emp to before drop.

Объекты, которые отображаются в словаре словаря данных, как BIN$..., исчезнут только после того, как вы загрузите корзину purge. Но как только вы это сделаете, они уйдут навсегда, и вы не сможете восстановить их, не восстанавливая всю базу данных, поэтому делайте это только тогда, когда вы действительно уверены, что не хотите их больше.

Вы не можете, не должны и не должны пытаться вручную обновлять какой-либо объект словаря данных или что-либо еще, что Oracle управляет внутренне.

4

Чтобы удалить все потерянные объекты из RecycleBin (текущий пользователь):

PURGE RECYCLEBIN; 

Чтобы удалить все потерянные объекты из RecycleBin (вся система):

PURGE DBA_RECYCLEBIN; 

Столы также можно отбросить, не отправив их в корзину. Пример:

DROP TABLE t1 PURGE; 
Смежные вопросы