ORA_ROWSCN 擬似列

ORA_ROWSCN とは Oracle 10g
Oracle 10g から追加された ROW の システム変更番号(SCN) をあらわす擬似列である。 ただし、デフォルトではデータブロック単位で同じ SCN を戻す。 つまりブロック単位に作成日時(更新日時)を持っているようなものである。 これをレコード単位に SCN を保存するには、テーブルに ROWDEPENDENCIES 属性を指定する(※)。 これによってレコード毎に SCN を保存することが可能になるが、行単位に SCN の格納領域 (6 バイト) が必要になる。

(※) ROWDEPENDENCIES 句はテーブル作成時にのみ有効 ALTER TABLE では変更できない。 (Oracle 10g 時点)

定義例

CREATE TABLE RIVUS.SCN_TRACE
(
	CREATED_ON	DATE DEFAULT SYSDATE,
	MODIFIED_ON	DATE
)
ROWDEPENDENCIES		-- デフォルトは NOROWDEPENDENCIES
/

(注意) もし、この擬似列をレコードの作成日時や更新日時として代用しようと考えているなら、あまり役に立たないと思われる。(以下の SCN を日付にする方法参照) しかし SCN は COMMIT 単位に発行されるオラクルインスタンスにおける昇順のユニークな番号であるので同一トランザクションのデータを追跡するのには非常に役立つことはあると思われる。
フラッシュバック・クエリーには使用できない。代わりに バージョン問合せ疑似列 が用意されている。(VERSIONS〜 擬似列)

SCN を日付に、日付を SCN に変更する方法

SCN_TO_TIMESTAMP(SCN) と TIMESTAMP_TO_SCN(datetime_value) によって行なう。 この相互変換は SMON_SCN_TIME データディクショナリの内容に基づいて行なわれる。しかし、このデータディクショナリは連続稼動時にして約6日程度の容量しかない。 そのため、例えば一週間前に更新されたレコードの ORA_ROWSCN に SCN_TO_TIMESTAMP を使用すると

 -- 更新後 7日以上放置されたデータを取得
SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN)
  FROM SCN_TRACE
 WHERE MODIFIED_ON <= SYSDATE - 7 ;
 
ORA-08181: 指定された数字は有効なシステム変更番号ではありません

というエラーになる。



ORA_ROWSCN 擬似列に関連する内容

スポンサード リンク

ORA_ROWSCNの関連トピックス

ITエンジニア キャリアアップ・転職・求人情報

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ オラクルサポートセンター
Google