8

我删除了我在 oracle 中的一些表

DROP TABLE hr.admin_emp CASCADE CONSTRAINTS;

但已删除表的主键约束仍在数据字典(all_constraints)中。现在我的问题是如何更新数据字典,使其不显示已删除表的主键?例如,我使用此查询来选择 hr 架构:

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

2 回答 2

8

您丢弃的表在回收站中

您的原始约束名称不可见-您再也看不到主键名称(在该视图中;您可以从中检索它)-但该约束在内部仍然可用,因此如果您恢复表user_recyclebin,它可以快速恢复flashback table hr.admin_emp to before drop.

出现在数据字典视图中的对象BIN$...只会在您purge进入回收站时消失。但是一旦你这样做了,它们就永远消失了,如果不恢复整个数据库就无法恢复它们,所以只有在你确定不再需要它们时才这样做。

您不能、不应该、也不应尝试手动更新任何数据字典对象或 Oracle 内部管理的任何其他内容。

于 2014-01-20T09:53:14.650 回答
4

从回收站中删除所有丢弃的对象(当前用户):

PURGE RECYCLEBIN;

从回收站(系统范围)中删除所有丢弃的对象:

PURGE DBA_RECYCLEBIN;

也可以删除表而不将它们发送到回收站。例子:

DROP TABLE t1 PURGE;
于 2014-01-20T09:57:05.427 回答