2016-05-19 24 views
-2

行を挿入するときに、コミット時に現在の時刻と等しい列を設定したい。oracleデータベースでコミット時に現在時刻を取得する

カラムにデフォルト値sysdateを使用すると、現在の時刻が挿入時に使用されます(コミット時間と大きく異なる可能性があります)。オン・インサート・トリガーを使用すると、実際のコミットではなく、挿入時に再び使用されます。

oracleを使用してコミットすると現在の時間を取得する方法はありますか?

+1

クロス投稿:http://dba.stackexchange.com/questions/139020/get-current-time-on-commit-with-oracle-database – ruudvan

+1

クロスポスティングのポリシーを読んで、ここでそれを削除し、[there there ](http://dba.stackexchange.com/questions/139020/get-current-time-on-commit-with-oracle-database?answertab=active#tab-top) –

+0

タイムスタンプが記録されるのを確認しようとします正常終了のためにオブジェクトを監査します。 –

答えて

2

オプションがあります。彼らはしかし、あなたが望んでいたよりもかなり重いかもしれません。

コミット時にリフレッシュする高速リフレッシュ可能なマテリアライズド・ビューを作成し、行がコミットするときに起動するマテリアライズド・ビューにトリガーを置くことができます。ただし、表にマテリアライズド・ビュー・ログが必要なため、挿入すると表とログに書き込むオーバーヘッドが発生し、コミット時にマテリアライズド・ビュー・リフレッシュのコストが発生します。マテリアライズド・ビューを完全にリフレッシュする必要があった場合は、トリガーも必ずオフにする必要があります。これは、あなたのシステムに複雑さを加える動きがかなりあります。

Oracleバージョンによっては、各バージョンのデータがコミットされたときのSCNおよびタイムスタンプを記録するフラッシュバック・データ・アーカイブ(トータル・リコールとも呼ばれます)を有効にすることができます。欠点は、潜在的に大きなヒストリー表を持っていて、気にしない情報を追跡する可能性が高いことです。

関連する問題