トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
3-10 SCNと、コミット時刻を求める
SQLパズル
SCNテーブルの各行の、
SCNと、コミット時刻を求める
データ作成スクリプト
create table SCNテーブル(ID number(2));
begin
for i in 1..50 Loop
insert into SCNテーブル values(i);
end Loop;
commit;
end;
/
SQL
select ID,Ora_RowSCN,
to_char(SCN_To_TimeStamp(Ora_RowSCN),'yyyy/mm/dd HH24:mi:ss') as コミット時間
from SCNテーブル
order by ID;
解説
Ora_RowSCN擬似列を使うと、
行が最後にコミットされた時間が、
TimeStamp型で取得できます(Oracle10gからの新機能)
フラッシュバッククエリでデータを復旧する時や、
行の更新時間を調べる時に使えます
ただし、rowDependencies指定でcreateしてない表の場合、
SCNが取得できる粒度は行ではなくブロックとなります。
また、scn_to_timestampがtimestamp変換できるSCNには、下限があり、
限度を超えた大過去のSCNを引数に実行するとORA-08181でエラーとなります。
行を問わない最後の更新日を求めるなら
このクエリが使えるかもしれません。
select distinct Ora_RowSCN,
to_char(SCN_To_TimeStamp(Ora_RowSCN),'yyyy/mm/dd HH24:mi:ss') as LastCommitTime
from SCNテーブル
where Ora_RowSCN = (select max(Ora_RowSCN) from SCNテーブル);