OracleではRMANやフラッシュバック、SQLの一部機能で時点指定による操作を行うことができます。その際に使われるのが UNTIL 句です。この記事では、UNTIL句で指定可能な以下の3つの形式について詳しく解説します。
- UNTIL TIME(日時で指定)
- UNTIL SCN(SCN番号で指定)
- UNTIL SEQUENCE(アーカイブログのシーケンスで指定)
また、それぞれの確認方法や、RMAN・フラッシュバック・SQLでの使用例も併せて紹介します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. UNTIL TIME(時間)
指定した「日付・時刻」までの状態に戻したい場合に使用します。
✅ 使用例(RMAN)
RUN {
SET UNTIL TIME "TO_DATE('2024-06-15 14:30:00','YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
}
✅ 使用例(フラッシュバック)
FLASHBACK TABLE employees TO TIMESTAMP TO_TIMESTAMP('2024-06-15 14:30:00', 'YYYY-MM-DD HH24:MI:SS');
✅ 使用例(SQL)
SELECT * FROM employees AS OF TIMESTAMP TO_TIMESTAMP('2024-06-15 14:30:00', 'YYYY-MM-DD HH24:MI:SS');
✅ 時間の確認方法
次のSQLで最も直近の時間帯を把握できます。
SELECT CURRENT_TIMESTAMP FROM dual;
また、UNDOデータで戻せる最大の時間を知りたい場合は以下を参照:
SELECT TO_CHAR(BEGIN_TIME, 'YYYY-MM-DD HH24:MI:SS') AS oldest_time
FROM V$UNDOSTAT
ORDER BY BEGIN_TIME ASC
FETCH FIRST 1 ROWS ONLY;
2. UNTIL SCN(System Change Number)
SCNはOracleのトランザクション順序を示す一意の番号です。RMANやフラッシュバックで正確な復元点を指定したいときに使用されます。
✅ 使用例(RMAN)
RUN {
SET UNTIL SCN 123456789;
RESTORE DATABASE;
RECOVER DATABASE;
}
✅ 使用例(フラッシュバック)
FLASHBACK TABLE employees TO SCN 123456789;
✅ 使用例(SQL)
SELECT * FROM employees AS OF SCN 123456789;
✅ SCNの確認方法
現在のSCNを確認する:
SELECT CURRENT_SCN FROM V$DATABASE;
任意のタイムスタンプ → SCNに変換:
SELECT TIMESTAMP_TO_SCN(TO_TIMESTAMP('2024-06-15 14:30:00', 'YYYY-MM-DD HH24:MI:SS')) FROM dual;
任意のSCN → タイムスタンプに変換:
SELECT SCN_TO_TIMESTAMP(123456789) FROM dual;
SQL> create table tab1 (no number);
表が作成されました。
SQL> insert into tab1 values (1);
1行が作成されました。
SQL> commit;
コミットが完了しました。
SQL> select * from tab1;
NO
----------
1
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
2291621 ★
SQL> insert into tab1 values (2);
1行が作成されました。
SQL> commit;
コミットが完了しました。
SQL> select * from tab1;
NO
----------
1
2
SQL> select * from tab1 as of scn 2291621; ★SCNを指定
NO
----------
1 ★指定したSCN時点の情報が出力
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
3. UNTIL SEQUENCE(アーカイブログのシーケンス)
アーカイブログのログシーケンス番号で時点を指定します。RMANで主に使用され、SCNや日時よりもログ単位での復元が必要な場合に便利です。
✅ 使用例(RMAN)
RUN {
SET UNTIL SEQUENCE 150 THREAD 1;
RESTORE DATABASE;
RECOVER DATABASE;
}
✅ シーケンス番号の確認方法
SELECT THREAD#, SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE#
FROM V$ARCHIVED_LOG
ORDER BY SEQUENCE#;
この情報から、どのアーカイブログがどのSCN区間をカバーしているかが分かります。
4. 使用場面別のUNTIL句まとめ
| 使用場面 | UNTIL TIME | UNTIL SCN | UNTIL SEQUENCE |
|---|---|---|---|
| RMAN | ○ | ○ | ○ |
| フラッシュバック | ○ | ○ | × |
| AS OF句(SELECT) | ○ | ○ | × |
5. イメージ図(テキスト図)
時間軸 ─────────────────────────────────→
| | | | | |
10:00 11:00 12:00 13:00 14:00 現在
↓ ↓ ↓ ↓ ↓
SCN100 SCN200 SCN300 SCN400 SCN500
↓ ↓ ↓ ↓ ↓
Seq10 Seq20 Seq30 Seq40 Seq50
★UNTIL TIME ⇒ 「13:00に戻す」
★UNTIL SCN ⇒ 「SCN400に戻す」
★UNTIL SEQ ⇒ 「Seq40(SCN400前後)に戻す」
6. まとめ
UNTIL句は、過去の状態へデータベースを戻すための重要な手段です。それぞれの指定方法(TIME・SCN・SEQUENCE)には適材適所があります。復旧対象に応じて使い分けることで、効率的かつ安全なリカバリが可能になります。
今後、バックアップやリカバリ作業を行う際には、この記事を参考にして適切な時点指定を行ってください。
[参考]
システム変更番号(SCN)




コメント