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>'
「作成済み」列は、オブジェクトがいつ作成されたかを示します。列「LAST_DDL_TIME」は、オブジェクトに対して最後のDDLがいつ実行されたかを示します。
特定の行が挿入/更新されたときに関しては、「insert_timestamp」列のような監査列を使用するか、トリガーを使用して監査表にデータを入力できます。
次のコードをコピーして貼り付けます。 名前と作成日ですべてのテーブルが表示されます
SELECT object_name,created FROM user_objects
WHERE object_name LIKE '%table_name%'
AND object_type = 'TABLE';
注: '%table_name%'を探しているテーブル名に置き換えます。
SELECT CREATED FROM USER_OBJECTS WHERE OBJECT_NAME='<<YOUR TABLE NAME>>'