Oracle で、特定のテーブルがいつ作成されたかを調べる方法はありますか?
同様に、特定の行がいつ挿入/最後に更新されたかを調べる方法はありますか?
Oracle で、特定のテーブルがいつ作成されたかを調べる方法はありますか?
同様に、特定の行がいつ挿入/最後に更新されたかを調べる方法はありますか?
SELECT created
FROM dba_objects
WHERE object_name = <<your table name>>
AND owner = <<owner of the table>>
AND object_type = 'TABLE'
テーブルがいつ作成されたかがわかります (DBA_OBJECTS にアクセスできない場合は、テーブルに対する SELECT 権限があると仮定して、代わりに ALL_OBJECTS を使用できます)。
ただし、行からタイムスタンプを取得する場合の一般的な答えは、その情報を追跡するために列を追加した場合にのみ、そのデータを取得できるということです (もちろん、アプリケーションが列にも入力すると仮定します)。ただし、さまざまな特殊なケースがあります。DML が比較的最近 (おそらく過去 2 時間以内) に発生した場合は、フラッシュバック クエリからタイムスタンプを取得できるはずです。DML が過去数日間 (またはアーカイブ ログを保持する期間) に発生した場合は、LogMiner を使用してタイムスタンプを抽出できますが、特に多数の行のタイムスタンプを取得する場合は、非常にコストのかかる操作になります。ROWDEPENDENCIES を有効にして (デフォルトではない) テーブルを作成する場合は、次を使用できます。
SELECT scn_to_timestamp( ora_rowscn ) last_modified_date,
ora_rowscn last_modified_scn,
<<other columns>>
FROM <<your table>>
行の最終変更日と SCN (システム変更番号) を取得します。ただし、デフォルトでは、ROWDEPENDENCIES がない場合、SCN はブロック レベルのみになります。このSCN_TO_TIMESTAMP
関数は、SCN をタイムスタンプに永久にマップすることもできません。
データ ディクショナリ/カタログ ビューにクエリを実行して、オブジェクトが作成された日時と、オブジェクトに関連する最後の DDL の日時を確認できます (例: テーブルの変更)。
select *
from all_objects
where owner = '<name of schema owner>'
and object_name = '<name of table>'
「CREATED」列は、オブジェクトがいつ作成されたかを示します。「LAST_DDL_TIME」列は、オブジェクトに対して最後の DDL がいつ実行されたかを示します。
特定の行がいつ挿入/更新されたかについては、「insert_timestamp」列のような監査列を使用するか、トリガーを使用して監査テーブルに入力することができます
SELECT CREATED FROM USER_OBJECTS WHERE OBJECT_NAME='<<YOUR TABLE NAME>>'