ORA_ROWSCN疑似列

ORA_ROWSCNは、行へ最も新しい変更のシステム変更番号(SCN)を表します。この変更には、ブロック・レベル(粗密)で行われるものと、行レベル(ファイングレイン)で行われるものがあります。後者は行レベル依存の追跡によって行われます。行レベル依存の追跡の詳細は、「CREATE TABLE」の「NOROWDEPENDENCIES | ROWDEPENDENCIES」を参照してください。行レベル依存がない場合、ORA_ROWSCNにはブロック・レベルの依存が反映されます。

ブロック・レベルの場合も行レベルの場合も、ORA_ROWSCNはSCNそのものであると考えないでください。たとえば、トランザクションによってあるブロック内のRという行が変更され、SCN 10でコミットされた場合、その行のORA_ROWSCNが常に10を返すとはかぎりません。10未満の値が返されることはありませんが、10以上のあらゆる値が返される可能性があります。つまり、行のORA_ROWSCNは、必ずその行を最後に変更したトランザクションのコミットSCNであるという保証はありません。しかし、ファイングレインORA_ROWSCNで、2つのトランザクションT1とT2によって同じ行Rが順番に変更され、コミットされた場合、T1のコミット後に行RのORA_ROWSCNに関する問合せで返される値と、T2のコミット後に返されるこの値では、T1のコミット後に返される値の方が小さくなります。同じブロックに関する問合せが2回行われた場合、最初の問合せと2番目の問合せの間にその行が更新されていなくても、ORA_ROWSCNの値は問合せ間で変わる可能性があります。唯一確実なことは、両方の問合せ内のORA_ROWSCNの値は、その行を最後に変更したトランザクションのコミットSCNよりも大きくなるということです。

ORA_ROWSCN疑似列はビューへの問合せでは使用できません。ただし、この疑似列を使用して、ビューの作成時に基礎となる表を参照することは可能です。また、UPDATE文またはDELETE文のWHERE句でこの疑似列を使用することもできます。

ORA_ROWSCNはFlashback Queryではサポートされていません。かわりに、Flashback Queryのために明示的に提供されているバージョン問合せの疑似列を使用します。フラッシュバック問合せの詳細は、SELECTflashback_query_clauseを参照してください。バージョン問合せ疑似列の詳細は、バージョン問合せ疑似列を参照してください。

ORA_ROWSCNの制限事項: この疑似列は、外部表ではサポートされません。

次の最初の文では、ORA_ROWSCN疑似列を使用して、employees表に対する最後の操作のシステム変更番号を取得します。2番目の文では、この疑似列をSCN_TO_TIMESTAMPファンクションとともに使用して、操作のタイムスタンプを判別します。

SELECT ORA_ROWSCN, last_name
  FROM employees
  WHERE employee_id = 188;

SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN), last_name
  FROM employees
  WHERE employee_id = 188;

関連項目:

SCN_TO_TIMESTAMP