2016-06-29 10 views
-1

私は5人のテーブルで彼/彼女についての情報と更新情報を取るプログラムを持っています。プロセスは、完了するまでに多くのステップ(ページ)を必要とするため、かなり洗練されています。私はIDEコンソールでsqlクエリを見つけるのに役立つログ、sysout、およびsyserrステートメントを持っていますが、それらのすべてを持っているわけではありません。私はすでにデバッグによって他の不足しているクエリをキャッチするために何日も費やしてきましたが、これまで運がなかったのです。私がこれをやっている理由は、ユーザー情報の更新を自動化したいので、手動でユーザーの詳細を入力するすべてのページを通過する必要がないからです。特定のデータベーステーブルの変更を追跡するには?

私はすでにテーブル名を知っているので、データベーステーブルの変更を表示する方法があるのだろうかと思うのですが、それは更新か挿入文か、正確に何が変更されたか(列名と値の挿入/ )。アドバイスをいただければ幸いです。私はIBM RADとDB2データベースを持っています。ありがとう。

+0

私は、SQLトレースがそれに近づくことを意味します。 – Adam

+1

どのDB2バージョン/プラットフォームですか? – mustaccio

+0

DB2はトリガーの使用をサポートしていませんか? BIなどの大量の環境を除いて、トリガーはSQL DBの変更を追跡するための選択ツールです。 – Tyron78

答えて

0

DB2では、基本監査情報を追跡できます。

DB2は、どのデータが変更されたか、誰がデータを変更したか、およびデータを変更したSQL操作を追跡できます。

データが変更されたときを追跡するには、テーブルをシステム期間の一時テーブルとして定義します。関連する履歴テーブルの行開始列と行終了列には、データの変更がいつ発生したかに関する情報が含まれています。

データを変更したユーザーとSQLを追跡するために、非決定論的に生成された式の列を使用できます。これらの列には、データが変更された時点のCURRENT SQLID特殊レジスターの値など、監査目的に役立つ値を入れることができます。非決定論的に生成される式の列に可能な値は、CREATE TABLEおよびALTER TABLEステートメントの構文で定義されます。例えば

CREATE TABLE TempTable (balance INT, 
       userId VARCHAR(100) GENERATED ALWAYS AS (SESSION_USER) , 
       opCode CHAR(1) 
          GENERATED ALWAYS AS (DATA CHANGE OPERATION) 
       ... SYSTEM PERIOD (SYS_START, SYS_END)); 

データを改変はuserIdカラムストアの

。この列は、SESSION_USER特殊レジスターの値を含む非決定論的に生成された式列として定義されます。

opCode列には、データを変更したSQL操作が格納されます。この列は、非決定論的に生成される式の列として定義され、SQL操作のタイプを示す値を格納します。

あなたはその後、TempTableのための履歴テーブルを作成するとのTempTableとその履歴テーブルを関連付けるために、次のステートメントを使用することとします

テーブルの数が限られ、限られた時間のためのSQL文のキャプチャ
CREATE TABLE TempTable_HISTORY (balance INT, user_id VARCHAR(128) , op_code CHAR(1) ...); 

ALTER TABLE TempTable ADD VERSIONING 
       USE HISTORY TABLE TempTable_HISTORY  ON DELETE ADD EXTRA ROW; 
0

- などを私があなたの問題を理解している限り、DB2監査機能で解決できます。

create audit policy tabsql categories execute status both error type normal 

audit <tabname> using policy tabsql 

このデータベースではSECADM権限が必要です.2番目のコマンドで監査プロセスが開始されます。あなたは、パスを設定し、再度ロードすることができ区切​​りファイルに監査ファイルからデータを抽出する

のdb2audit

コマンドをチェック

audit <tabname> remove policy 

でそれを停止することができますデータベースに格納します。 必要なテーブルは、提供されたsqllib/misc/db2audit.ddlスクリプトを使用して作成できます。 SQLの詳細についてはEXECUTEテーブルを照会する必要があります

大量のデータをキャプチャできるため、必要な情報を整理してから再度オフにしてください。

関連する問題