Oracleで特定のテーブルがいつ作成されたかを知る方法は?
-
10-10-2019 - |
質問
Oracleでは、特定のテーブルがいつ作成されたかを知る方法はありますか?
同様に、特定の行がいつ挿入された/最後に更新されたかを知る方法はありますか?
解決
SELECT created
FROM dba_objects
WHERE object_name = <<your table name>>
AND owner = <<owner of the table>>
AND object_type = 'TABLE'
テーブルが作成されたときに教えてください(DBA_Objectsにアクセスできない場合は、テーブルに選択した特権があると仮定して、All_Objectsを使用できます)。
ただし、タイムスタンプを行から取得するための一般的な答えは、その情報を追跡するために列を追加した場合にのみデータを取得できることです(もちろん、アプリケーションが列にも入力されると仮定します)。ただし、さまざまな特別なケースがあります。 DMLが比較的最近(過去数時間で)発生した場合、フラッシュバッククエリからタイムスタンプを取得できるはずです。 DMLが過去数日間に発生した場合(またはアーカイブされたログを保持する長い時間)、LogMinerを使用してタイムスタンプを抽出できますが、特に多くの行のタイムスタンプを取得している場合は非常に高価な操作になります。 rowdependenciesを有効にしてテーブルを構築すると(デフォルトではなく)、使用できます
SELECT scn_to_timestamp( ora_rowscn ) last_modified_date,
ora_rowscn last_modified_scn,
<<other columns>>
FROM <<your table>>
行の最後の変更日とSCN(システムの変更番号)を取得します。ただし、デフォルトでは、row異議がなければ、SCNはブロックレベルのみです。 SCN_TO_TIMESTAMP
また、機能はSCNを永遠にタイムスタンプにマッピングすることもできません。
他のヒント
データ辞書/カタログビューをクエリして、オブジェクトが作成された時期とオブジェクトを含む最後のDDLの時間を確認できます(例:Tableを変更)
select *
from all_objects
where owner = '<name of schema owner>'
and object_name = '<name of table>'
「作成された」列は、オブジェクトが作成されたときにわかります。列「last_ddl_time」は、最後のDDLがオブジェクトに対して実行されたときにあなたに伝えます。
特定の行が挿入/更新されたときには、「insert_timestamp」列などの監査列を使用するか、トリガーを使用して監査テーブルに入力できます。
SELECT CREATED FROM USER_OBJECTS WHERE OBJECT_NAME='<<YOUR TABLE NAME>>'
次のコードをコピーして貼り付けます。すべてのテーブルが表示されます 名前と作成日
SELECT object_name,created FROM user_objects
WHERE object_name LIKE '%table_name%'
AND object_type = 'TABLE';
ノート: 交換 '%table_name%' あなたが探しているテーブル名で。
このクエリを試してみてください:
schema_name.table_nameからsysdateを選択します。
これにより、必要なタイムスタンプが表示されるはずです。