2014-01-20 7 views
8

iは、オラクル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'; 

と結果は次のとおりです:たとえば、私は、hrスキーマを選択するには、このクエリを使用する奇妙な表名で

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; 

テーブルそれらをリサイクルビンに送ることなく落とすこともできます。例:

関連する問題