2

インド(アウトソーシング)で構築された内部システムのロジックに関する情報を取得できなくなったため、現在、リエンジニアリング作業を行っています。

このプロセスでは、特定のテーブルのレコードが挿入された(そして更新される可能性がある)順序をなんとかして判断できれば、本当に役に立ちます。何らかの理由で、これを明確に明らかにするタイムスタンプが追加されていないため、私が探しているのは、隠されたOracleRDBMSインデックス/タイムスタンプとその取得方法です。select allを使用してレコードが返される順序はランダムではないと思うので、何らかの順序があるに違いないと思います。

selectでこのインデックス/タイムスタンプを参照して、レコードセットのフィールドとして返されるようにしたいと思っています。これは可能ですか、どうすればよいですか?

4

1 に答える 1

4

デフォルトでは、Oracle はこの種のものを追跡しません。この種の情報を適切に取得するには、何らかの監査テーブル、テーブル内の列、監査ログなどが必要になります。

かなり最近のバージョンの Oracle (確かに 10.2 以降) を使用していると仮定すると、ORA_ROWSCN疑似列は十分に近いものになる可能性があります。これは、行が最後に変更されたシステム変更番号 (SCN) の上限です。ROWDEPENDENCIESただし、テーブルが有効に構築されていない限り、ORA_ROWSCN行レベルではなく、ブロック レベルでのみ追跡されます。ブロック内のすべての行がほぼ同じ時点で挿入されると仮定すると、これは十分に近いかもしれません。もちろん、それは完璧ではありません。特に、行がブロックから削除され、その後の挿入によって、DELETE操作によって解放されたスペースがいっぱいになった場合はなおさらです。ただし、たまたま運が良ければ、テーブルはROWDEPENDENCIES有効化された状態で構築されており、ORA_ROWSCN行が最後に変更された (挿入または更新された) SCN が表示されます。

このSCN_TO_TIMESTAMP関数は、SCN をタイムスタンプに変換するために使用できますが、比較的限られた期間 (通常は数日) のみであり、粒度のレベルも制限されています (Oracle のバージョンに応じて +/- 5 分または 3 秒)。 )。これは を使用するほとんどの例で使用されてORA_ROWSCNいますが、残念ながら、おそらくあまり役​​に立ちません。

于 2012-09-26T21:03:20.937 に答える