Oracleのコールドバックアップを試してみる
〜アーカイブログからの復旧〜
0.更新履歴
- 2001.10.14 新規作成
1.はじめに
このドキュメントでは,Oracle8i R8.1.7 Personal Editionを使い,Oracleのオープンバックアップを実行して取得したバックアップで,リカバリを行ってみる.
オープンバックアップとは,データベース稼動中にバックアップを行うものである.
2.今回の作業の計画
今回のバックアップ&リカバリでは,次のような順序で確認してみる.
- データベースは,NOARCHIVELOGモードで稼働している.
- 新規に表領域BK_TESTを作成する.
- BK_TESTに表を作成して,データを登録する.
- オンラインバックアップモードにする.
- BK_TEST表領域を,別のファイルに複写する.
- 複写後,再度データを登録する.
- Oracleを停止して,表領域BK_TESTをOSから消す.
- バックアップしたデータファイルBK_TESTを戻す.
- リカバリを実行する.
- データがどこまで復旧しているか確認する.
NOARCHIVELOGモードに設定する方法は,ドキュメント「REDOログの仕組み」を参照のこと.
3.テスト用表領域を作成する.
- コマンドプロンプトを起動する.
- 次のように,SQL*Plusで接続して,テーブルスペースBK_TESTを作成する.
C:\>sqlplus system/manager SQL*Plus: Release 8.1.7.0.0 - Production on 日 Oct 14 02:47:15 2001 (c) Copyright 2000 Oracle Corporation. All rights reserved. Personal Oracle8i Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production に接続されました。 SQL> create tablespace "BK_TEST" 2 datafile 'D:\oracle\oradata\recover\bk_test.dbf' 3 size 5m 4 ; 表領域が作成されました。 SQL> |
- 表領域bk_testに表testを作成する.
- 作成した表testにデータを入れておく.
SQL> create table test (t1 char(50)) tablespace bk_test; 表が作成されました。 SQL> insert into test values('a'); 1行が作成されました。 SQL> insert into test values('b'); 1行が作成されました。 SQL> select t1 from test; T1 -------------------------------------------------- b a SQL> |
4.コールドバックアップの実施
- データベースを停止する.
SQL> connect internal 接続されました。 SQL> shutdown データベースがクローズされました。 データベースがアンマウントされました。 ORACLEインスタンスがシャットダウンされました。 SQL> |
- コマンドプロンプトに戻る.
- 退避用ディレクトリを作成する.
- データベースファイルを複写する.
SQL> quit Personal Oracle8i Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Productionとの接続が切断されました。 D:\>mkdir d:\oracle\oradata\recover\bk D:\>copy d:\oracle\oradata\recover\* d:\oracle\oradata\recover\bk d:\oracle\oradata\recover\CONTROL01.CTL d:\oracle\oradata\recover\CONTROL02.CTL d:\oracle\oradata\recover\CONTROL03.CTL d:\oracle\oradata\recover\REDO01.LOG d:\oracle\oradata\recover\REDO02.LOG d:\oracle\oradata\recover\REDO03.LOG d:\oracle\oradata\recover\SYSTEM01.DBF d:\oracle\oradata\recover\RBS01.DBF d:\oracle\oradata\recover\USERS01.DBF d:\oracle\oradata\recover\TEMP01.DBF d:\oracle\oradata\recover\TOOLS01.DBF d:\oracle\oradata\recover\INDX01.DBF d:\oracle\oradata\recover\BK_TEST.DBF 13 個のファイルをコピーしました。 D:\> |
- 再度SQL*Plusで接続し,データベースを起動する.
D:\>sqlplus internal SQL*Plus: Release 8.1.7.0.0 - Production on 日 Oct 14 05:47:56 2001 (c) Copyright 2000 Oracle Corporation. All rights reserved. アイドル・インスタンスに接続しました。 SQL> startup ORACLEインスタンスが起動しました。 Total System Global Area 43489308 bytes Fixed Size 75804 bytes Variable Size 13729792 bytes Database Buffers 29605888 bytes Redo Buffers 77824 bytes データベースがマウントされました。 データベースがオープンされました。 SQL> |
- systemユーザで接続し,test表のデータを追加する.
SQL> connect system/manager 接続されました。 SQL> begin 2 for i in 1..30000 loop 3 insert into test values('LOOP INSERT'); 4 end loop; 5 end; 6 / PL/SQLプロシージャが正常に完了しました。 SQL> |
- アーカイブログを強制的に書き出す.
SQL> alter system switch logfile; システムが変更されました。 SQL> |
- データベースを停止する
SQL> connect internal 接続されました。 SQL> shutdown データベースがクローズされました。 データベースがアンマウントされました。 ORACLEインスタンスがシャットダウンされました。 SQL> quit Personal Oracle8i Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Productionとの接続が切断されました。 C:\> |
- バックアップしておいたファイルの更新日を確認する.
C:\>dir d:\oracle\oradata\recover\bk ドライブ D のボリューム ラベルは DOCUMENT です ボリューム シリアル番号は 151C-1D09 です d:\oracle\oradata\recover\bk のディレクトリ 2001/10/14 16:25 <DIR> . 2001/10/14 16:25 <DIR> .. 2001/10/14 16:24 3,338,240 CONTROL01.CTL 2001/10/14 16:24 3,338,240 CONTROL02.CTL 2001/10/14 16:24 3,338,240 CONTROL03.CTL 2001/10/14 16:23 1,049,088 REDO01.LOG 2001/10/14 16:24 1,049,088 REDO02.LOG 2001/10/14 16:22 1,049,088 REDO03.LOG 2001/10/14 16:24 73,404,416 SYSTEM01.DBF 2001/10/14 16:24 104,861,696 RBS01.DBF 2001/10/14 16:24 3,149,824 USERS01.DBF 2001/10/14 16:24 20,975,616 TEMP01.DBF 2001/10/14 16:24 3,149,824 TOOLS01.DBF 2001/10/14 16:24 3,149,824 INDX01.DBF 2001/10/14 16:24 5,246,976 BK_TEST.DBF 13 個のファイル 227,100,160 バイト 2 個のディレクトリ 2,820,931,584 バイトの空き領域 C:\> |
- 16:24分が最終更新時間であることが確認できる.
- アーカイブログファイルを確認する.
C:\>dir d:\oracle\oradata\recover\archive /od- ドライブ D のボリューム ラベルは DOCUMENT です ボリューム シリアル番号は 151C-1D09 です d:\oracle\oradata\recover\archive のディレクトリ 2001/10/14 13:47 <DIR> .. 2001/10/14 13:47 <DIR> . 2001/10/14 14:31 932,864 RECOVERT001S00206.ARC 2001/10/14 15:22 1,049,088 RECOVERT001S00207.ARC 2001/10/14 15:23 1,049,088 RECOVERT001S00208.ARC 2001/10/14 15:24 1,049,088 RECOVERT001S00209.ARC 2001/10/14 15:25 1,049,088 RECOVERT001S00210.ARC 2001/10/14 15:26 1,049,088 RECOVERT001S00211.ARC 2001/10/14 15:28 1,049,088 RECOVERT001S00212.ARC 2001/10/14 15:29 1,049,088 RECOVERT001S00213.ARC 2001/10/14 16:20 1,049,088 RECOVERT001S00214.ARC 2001/10/14 16:20 1,049,088 RECOVERT001S00215.ARC 2001/10/14 16:21 1,049,088 RECOVERT001S00216.ARC 2001/10/14 16:21 1,049,088 RECOVERT001S00217.ARC 2001/10/14 16:21 1,049,088 RECOVERT001S00218.ARC 2001/10/14 16:21 1,049,088 RECOVERT001S00219.ARC 2001/10/14 16:21 1,049,088 RECOVERT001S00220.ARC 2001/10/14 16:21 1,049,088 RECOVERT001S00221.ARC 2001/10/14 16:21 1,049,088 RECOVERT001S00222.ARC 2001/10/14 16:21 1,049,088 RECOVERT001S00223.ARC 2001/10/14 16:21 1,049,088 RECOVERT001S00224.ARC 2001/10/14 16:21 1,049,088 RECOVERT001S00225.ARC 2001/10/14 16:22 1,049,088 RECOVERT001S00226.ARC 2001/10/14 16:22 1,049,088 RECOVERT001S00227.ARC 2001/10/14 16:22 1,049,088 RECOVERT001S00228.ARC 2001/10/14 16:22 1,049,088 RECOVERT001S00229.ARC 2001/10/14 16:22 1,049,088 RECOVERT001S00230.ARC 2001/10/14 16:22 1,049,088 RECOVERT001S00231.ARC 2001/10/14 16:22 1,049,088 RECOVERT001S00232.ARC 2001/10/14 16:22 1,049,088 RECOVERT001S00233.ARC 2001/10/14 16:23 1,049,088 RECOVERT001S00234.ARC 2001/10/14 16:23 1,049,088 RECOVERT001S00235.ARC 2001/10/14 16:29 1,049,088 RECOVERT001S00236.ARC 2001/10/14 16:29 1,049,088 RECOVERT001S00237.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00238.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00239.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00240.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00241.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00242.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00243.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00244.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00245.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00246.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00247.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00248.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00249.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00250.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00251.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00252.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00253.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00254.ARC 2001/10/14 16:30 1,049,088 RECOVERT001S00255.ARC 2001/10/14 16:31 1,049,088 RECOVERT001S00256.ARC 2001/10/14 16:31 1,049,088 RECOVERT001S00257.ARC 2001/10/14 16:31 1,049,088 RECOVERT001S00258.ARC 2001/10/14 16:31 1,049,088 RECOVERT001S00259.ARC 2001/10/14 16:31 1,049,088 RECOVERT001S00260.ARC 2001/10/14 16:32 1,049,088 RECOVERT001S00261.ARC 2001/10/14 16:32 1,049,088 RECOVERT001S00262.ARC 2001/10/14 16:32 1,049,088 RECOVERT001S00263.ARC 2001/10/14 16:32 1,049,088 RECOVERT001S00264.ARC 2001/10/14 16:32 1,049,088 RECOVERT001S00265.ARC 2001/10/14 16:32 1,049,088 RECOVERT001S00266.ARC 2001/10/14 16:32 1,049,088 RECOVERT001S00267.ARC 2001/10/14 16:32 1,049,088 RECOVERT001S00269.ARC 2001/10/14 16:32 1,049,088 RECOVERT001S00268.ARC 2001/10/14 16:34 29,184 RECOVERT001S00270.ARC 65 個のファイル 67,054,592 バイト 2 個のディレクトリ 2,820,931,584 バイトの空き領域 C:\> |
- 前のデータベースファイルのバックアップファイルの最終更新時間が16:24なので,RECOVERT001S00236.ARC以降がアーカイブの適用範囲と考えられる.
5.データベースを壊す
- 現在あるデータベースファイルを退避する.
C:\>mkdir d:\oracle\oradata\recover\bk2 C:\>copy d:\oracle\oradata\recover\* d:\oracle\oradata\recover\bk2 d:\oracle\oradata\recover\CONTROL01.CTL d:\oracle\oradata\recover\CONTROL02.CTL d:\oracle\oradata\recover\CONTROL03.CTL d:\oracle\oradata\recover\REDO01.LOG d:\oracle\oradata\recover\REDO02.LOG d:\oracle\oradata\recover\REDO03.LOG d:\oracle\oradata\recover\SYSTEM01.DBF |
- OSコマンドでバックアップしていたデータファイルを戻す.
C:\>copy d:\oracle\oradata\recover\bk\*.dbf d:\oracle\oradata\recover\ d:\oracle\oradata\recover\bk\BK_TEST.DBF d:\oracle\oradata\recover\BK_TEST.DBF を上書きしますか? (Yes/No/All): all d:\oracle\oradata\recover\bk\INDX01.DBF d:\oracle\oradata\recover\bk\RBS01.DBF d:\oracle\oradata\recover\bk\SYSTEM01.DBF d:\oracle\oradata\recover\bk\TEMP01.DBF d:\oracle\oradata\recover\bk\TOOLS01.DBF d:\oracle\oradata\recover\bk\USERS01.DBF 7 個のファイルをコピーしました。 C:\> |
- この時点で,データファイルはバックアップファイルからリストアされたことになる.
- 制御ファイルおよびオンラインREDOログファイルは壊す前の状態である.
- Oracleを起動する.
C:\>svrmgrl Oracle Server Manager Release 3.1.7.0.0 - Production Copyright (c) 2000, Oracle Corporation. All Rights Reserved. Personal Oracle8i Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production SVRMGR> connect internal 接続されました。 SVRMGR> startup Oracleインスタンスが起動しました。 システム・グローバル領域合計 38332444バイト Fixed Size 75804バイト Variable Size 11882496バイト Database Buffers 26296320バイト Redo Buffers 77824バイト データベースがマウントされました。 ORA-01113: ???? 1???????????????? ORA-01110: ???????? 1 : D:\ORACLE\ORADATA\RECOVER\SYSTEM01.DBF SVRMGR> quit Server Managerを終了しました。 C:\> |
- いったんサーバマネージャを抜ける.
- 起動に失敗した後は,メッセージが文字化けを起こすようである.
- 再接続するとOK.
6.データベースを治す
- データベースリカバリを実行する.
C:\>svrmgrl Oracle Server Manager Release 3.1.7.0.0 - Production Copyright (c) 2000, Oracle Corporation. All Rights Reserved. Personal Oracle8i Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production SVRMGR> connect internal 接続されました。 SVRMGR> recover database ORA-00279: 変更 41482(10/14/2001 16:24:25で生成)にはスレッド番号 1 が必要です。 ORA-00289: 検討すべきログ・ファイル: D:\ORACLE\ORADATA\RECOVER\ARC HIVE\RECOVERT001S00236.ARC ORA-00280: 変更 41482(スレッド 1)は順序番号 236に存在します。 ログの指定: {<RET>=suggested | filename | AUTO | CANCEL} |
- 復旧するために,RECOVERT001S00236.ARCファイルを適用するか?と尋ねている.
- ReturnキーでOKとなる.
- 適用する全てのアーカイブログファイルに答えなければならないので,その場合autoと入力すると,自動的に適用される.
ログが適用されました。 ORA-00279: 変更 41551(10/14/2001 16:29:51で生成)にはスレッド番号 1 が必要です。 ORA-00289: 検討すべきログ・ファイル: D:\ORACLE\ORADATA\RECOVER\ARC HIVE\RECOVERT001S00237.ARC ORA-00280: 変更 41551(スレッド 1)は順序番号 237に存在します。 ORA-00278: ログ・ファイル D:\ORACLE\ORADATA\RECOVER\ARCHIVE\RECOVE RT001S00236.ARCはこのリカバリでは必要なくなりました。 ログの指定: {<RET>=suggested | filename | AUTO | CANCEL} auto ORA-00280: 変更 42490(スレッド 1)は順序番号 267に存在します。 ORA-00278: ログ・ファイル D:\ORACLE\ORADATA\RECOVER\ARCHIVE\RECOVE RT001S00266.ARCはこのリカバリでは必要なくなりました。 ログが適用されました。 ORA-00279: 変更 42526(10/14/2001 16:32:47で生成)にはスレッド番号 1 が必要です。 ORA-00289: 検討すべきログ・ファイル: D:\ORACLE\ORADATA\RECOVER\ARC HIVE\RECOVERT001S00268.ARC ORA-00280: 変更 42526(スレッド 1)は順序番号 268に存在します。 ORA-00278: ログ・ファイル D:\ORACLE\ORADATA\RECOVER\ARCHIVE\RECOVE RT001S00267.ARCはこのリカバリでは必要なくなりました。 ログが適用されました。 メディアのリカバリが完了しました。 SVRMGR> |
- アーカイブログファイルは,S00236〜S00270まで存在しているが,適用されたのはS00267までであった.
- これは,S00268〜S00270はオンラインREDOログから適用したものと考えられる.
- データベースを再起動する.
SVRMGR> shutdown ORA-01109: データベースがオープンされていません。 データベースがディスマウントされました。 Oracleインスタンスが停止しました。 SVRMGR> startup Oracleインスタンスが起動しました。 システム・グローバル領域合計 38332444バイト Fixed Size 75804バイト Variable Size 11882496バイト Database Buffers 26296320バイト Redo Buffers 77824バイト データベースがマウントされました。 データベースがオープンされました。 SVRMGR> |
- testテーブルの内容が復旧されているか確認する.
SVRMGR> quit Server Managerを終了しました。 C:\>sqlplus system/manager SQL*Plus: Release 8.1.7.0.0 - Production on 日 Oct 14 17:38:26 2001 (c) Copyright 2000 Oracle Corporation. All rights reserved. Personal Oracle8i Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production に接続されました。 SQL> select count(*) from test; COUNT(*) ---------- 30002 SQL> |
- アーカイブログはたまり続けるが,不要なファイルは消さなければいけない.
- 消すアーカイブログログファイルは次のようにして確認できる.
SQL> connect sys/change_on_install as sysdba 接続されました。 SQL> archive log list データベース・ログ・モード アーカイブ・モード 自動アーカイブ 使用可能 アーカイブ先 D:\oracle\oradata\recover\archive 最も古いオンライン・ログ順序 270 アーカイブする次のログ順序 272 カレント・ログ順序 272 SQL> |
- この場合,270番以前のアーカイブログは不要となる.