oracle/11.2.0.1/リストア(データファイル) をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[oracle]]
バックアップはできたものの、実際にそのバックアップから戻...
っで、オラクルさんのRMANの操作でバックアップされるファイ...
・データベースファイル
・制御ファイル
・アーカイブREDOログファイル(オリジナルな「REDO...
・初期化パラメータファイル
RMANでバックアップされたファイルを別のソフトウエア(ntback...
といっても迅速に障害から復旧してたいのなら、なるべくはRMA...
っとなると制御ファイルやアーカイブREDOログファイルの...
ここではハードウエアの構成にも寄るのだが、上記のそれぞれ...
***データベースファイル(***.dbf)が読めない [#f169c8c5]
&color(red){障害作成};:
#code{{
C:\TEMP> echo 1 > null.dbf *1byteファイル。
C:\TEMP> ocopy null.dbf *強制的な上書きコ...
}}
&color(red){障害確認};:
#code{{
SQL> select count(*) from demo10q1;
select count(*) from demo10q1
*
行1でエラーが発生しました。:
ORA-01115: ファイル(ブロック番号)からの読取りI/Oエラーが...
ORA-01110: データファイル5: 'D:\ORADATA\AERS\AERS.DBF'
ORA-27070: 非同期の読取り/書込みに失敗しました。
OSD-04006: ReadFile()に失敗しました。ファイルからの読取り...
O/S-Error: (OS 38) ファイルの終わりです。
SQL>
}}
確かに検索できなくなった
&color(red){緊急措置};:
#code{{
C:\TEMP> sqlplus sys as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on 土 6月 15 16:5...
Copyright (c) 1982, 2011, Oracle. All rights reserved.
アイドル・インスタンスに接続しました。
SQL>
}}
どうやらORACLEは自動的に落ちたみたい。落ちていないのなら
shutdown abort
で落としてみる。
&color(green){復旧活動};:
#code{{
SQL> startup mount
ORACLEインスタンスが起動しました。
Total System Global Area 2.6724E+10 bytes
Fixed Size 2267824 bytes
Variable Size 2.5904E+10 bytes
Database Buffers 805306368 bytes
Redo Buffers 12099584 bytes
データベースがマウントされました。 *mountま...
SQL>
SQL>
SQL> recover database; *recover...
ORA-00283: エラーによってリカバリ・セッションは取り消され...
ORA-01110: データファイル5: 'D:\ORADATA\AERS\AERS.DBF'
ORA-01157: データファイル5を識別/ロックできません -
DBWRトレース・ファイルを参照してください
ORA-01110: データファイル5: 'D:\ORADATA\AERS\AERS.DBF'
SQL>
}}
この段階で一応データファイル5が見えないと原因を伝えてい...
#code(sql,number,nooutline,noblock,nomenu){{
$ sqlplus SYS@AERS as sysdba
SQL> SELECT file# , error , online_status , change#...
FILE# ERROR ONLINE_STATUS CHANGE# TIME
---------- --------------- --------------- ---------- ---...
5 FILE NOT FOUND ONLINE 0
SQL>
}}
データファイルは見えない物の、まだONLINEとして認識されて...
っで、このデータファイル5なるもののありかは、
#code(sql,number,nooutline,noblock,nomenu){{
SQL> SELECT name, file#, status, TS# FROM V$DAT...
NAME FILE# STATUS ...
------------------------------ ---------- ------- -------...
D:\ORADATA\AERS\SYSTEM01.DBF 1 SYSTEM ...
D:\ORADATA\AERS\SYSAUX01.DBF 2 ONLINE ...
D:\ORADATA\AERS\UNDOTBS01.DBF 3 ONLINE ...
D:\ORADATA\AERS\USERS01.DBF 4 ONLINE ...
D:\ORADATA\AERS\AERS.DBF 5 ONLINE ...
D:\ORADATA\AERS\AERSIND.DBF 6 ONLINE ...
D:\ORADATA\AERS\AERSTBL.DBF 7 ONLINE ...
SQL>
}}
となる。ちなみにTS#は表領域の番号でこれは
#code(sql,number,nooutline,noblock,nomenu){{
SQL> SELECT TS#, name FROM V$TABLESPACE;
TS# NAME
---------- ------------------------------
0 SYSTEM
1 SYSAUX
2 UNDOTBS1
4 USERS
3 TEMP
6 AERS
7 AERSIND
8 AERSTBL
9 AERSTMP
SQL>
}}
と各TS#がどんな表領域に当てられているかが分かる。っで、問...
#code(sql,number,nooutline,noblock,nomenu){{
SQL> ALTER DATABASE DATAFILE 'D:\ORADATA\AER...
データベースが変更されました。
SQL>
}}
と指定して当該データファイルを&color(red){OFFLINE};にして...
次にバックアップから失われたファイルをリストアして、リカ...
RMANにログインして、バックアップから指定のデータファイル...
#code(sql,number,nooutline,noblock,nomenu){{
$ RMAN TARGET /
ターゲット・データベース: AERS(DBID=2976312353、未オープ...
RMAN>
RMAN> restore datafile 5;
restoreが開始されました(開始時間: 13-06-15)
リカバリ・カタログのかわりにターゲット・データベース制御...
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=63 デバイス・タイプ=DISK
チャネルORA_DISK_1: データファイル・バックアップ・セット...
チャネルORA_DISK_1: バックアップ・セットからリストアする...
チャネルORA_DISK_1: データファイル00005をD:\ORADATA\AERS\...
チャネルORA_DISK_1: バックアップ・ピースE:\BACKUP\1EOC76D...
チャネルORA_DISK_1: ピース・ハンドル=E:\BACKUP\1EOC76DG_1...
チャネルORA_DISK_1: バックアップ・ピース1がリストアされま...
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:...
restoreが完了しました(完了時間: 13-06-15)
RMAN>
}}
リストアは、バックアップからのファイルの戻し操作のみで、...
そのため、アーカイブREDOログファイルの適用と最新のREDOロ...
#code(sql,number,nooutline,noblock,nomenu){{
RMAN>
RMAN> RECOVER DATAFILE 5;
recoverが開始されました(開始時間: 13-06-15)
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: 増分データファイル・バックアップ・セ...
チャネルORA_DISK_1: バックアップ・セットからリストアする...
データファイル00005のリストア先: D:\ORADATA\AERS\AERS.DBF
チャネルORA_DISK_1: バックアップ・ピースE:\BACKUP\1UOC8QR...
チャネルORA_DISK_1: ピース・ハンドル=E:\BACKUP\1UOC8QRC_1...
チャネルORA_DISK_1: バックアップ・ピース1がリストアされま...
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:...
メディア・リカバリを開始しています
メディア・リカバリが完了しました。経過時間: 00:00:01
recoverが完了しました(完了時間: 13-06-15)
RMAN>
}}
これでリストアは完了して、データベースを公開します。
#code(sql,number,nooutline,noblock,nomenu){{
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE DATAFILE 'D:\ORADATA\AERS\...
SQL> select count(*) from aers.demo10q1;
COUNT(*)
----------
136191
SQL>
}}
以上表領域の障害時復旧。
***個別テーブルの復元 [#feb7bdd7]
データを削除(delete)、上書き(update)、追記(insert)もしく...
戻したくなる時がある。
■削除したテーブルの復旧
管理者権限で
#code(sql,number,nooutline,noblock,nomenu){{
SQL> show parameter RECYCLEBIN
NAME TYPE VALUE
------------------------------------ ----------- --------...
recyclebin string on
SQL>
}}
となっていれば、テーブル復活の呪文が使える。
&color(red){障害作成};:
#code(sql,number,nooutline,noblock,nomenu){{
SQL> create table sample(id int);
表が作成されました。
SQL> select table_name from user_tables where table_name=...
TABLE_NAME
----------
SAMPLE
SQL>
SQL> drop table sample;
表が削除されました。
SQL> select table_name from user_tables where table_name=...
レコードが選択されませんでした。
SQL>
}}
な感じでテーブルを削除
&color(green){復旧活動};:
#code(sql,number,nooutline,noblock,nomenu){{
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TY...
---------------- ------------------------------ ---------...
SAMPLE BIN$s/LmllkYRiWYyfOOCISP2Q==$0 TABLE ...
SQL>
SQL> SELECT object_name as recycle_name, original_name, t...
RECYCLE_NAME ORIGINAL_NAME TYPE
------------------------------ --------------- ----------
BIN$s/LmllkYRiWYyfOOCISP2Q==$0 SAMPLE TABLE
SQL>
SQL> flashback table sample to before drop;
フラッシュバックが完了しました。
SQL>
SQL> select table_name from user_tables where table_name=...
TABLE_NAME
----------
SAMPLE
SQL>
}}
別名保存なら
flashback table "BIN$s/LmllkYRiWYyfOOCISP2Q==$0" to befor...
とする
&color(red){*};どうも時刻(DROP TIME)が標準時で困る...
■テーブルデータの復旧
「フラッシュバック(Flashback)」機能を使えば目的の時点まで...
っでその「時点」の示し方は
-指定時刻
-特定SCN(System Commit Number)
SCNの値と時刻およびREDOファイルの関係は v$archived_log を...
#code(sql,number,nooutline,noblock,nomenu){{
select
name, thread#, sequence#, status, first_time, next_t...
from v$archived_log
}}
なので、ユーザからはscnを特定してデータを取得するのは難し...
まぁー一応、
#code(sql,number,nooutline,noblock,nomenu){{
SQL> select id,ora_rowscn from sample;
ID ORA_ROWSCN
---------- ----------
100 9239715
1 9239715
2 9239715
4 9239715
SQL>
SQL> select ora_rowscn from sample group by ora_rowscn;
ORA_ROWSCN
----------
9239715
SQL>
}}
と得られるが、目的の操作時点のscnが不明なので使えない。
となると、時刻指定で振り返るしかなく、
#code(sql,number,nooutline,noblock,nomenu){{
SQL> select * from sample as of timestamp to_timestamp('2...
ID
----------
100
1
SQL>
}}
と指定時刻でのテーブル状況が分かる。
っで、この時点のテーブルを作るには&color(green){CREATE TA...
あと、指定時刻がこのテーブルの存在以前であると
#code(sql,number,nooutline,noblock,nomenu){{
SQL> select * from sample as of timestamp to_timestamp('2...
select * from sample as of timestamp to_timestamp('201306...
*
行1でエラーが発生しました。:
ORA-01466: データを読み込めません - 表定義が変更されました
SQL>
}}
と当然ながらエラーとなる。
&color(red){*};ここでの時刻は正常に使えるみたい....
終了行:
[[oracle]]
バックアップはできたものの、実際にそのバックアップから戻...
っで、オラクルさんのRMANの操作でバックアップされるファイ...
・データベースファイル
・制御ファイル
・アーカイブREDOログファイル(オリジナルな「REDO...
・初期化パラメータファイル
RMANでバックアップされたファイルを別のソフトウエア(ntback...
といっても迅速に障害から復旧してたいのなら、なるべくはRMA...
っとなると制御ファイルやアーカイブREDOログファイルの...
ここではハードウエアの構成にも寄るのだが、上記のそれぞれ...
***データベースファイル(***.dbf)が読めない [#f169c8c5]
&color(red){障害作成};:
#code{{
C:\TEMP> echo 1 > null.dbf *1byteファイル。
C:\TEMP> ocopy null.dbf *強制的な上書きコ...
}}
&color(red){障害確認};:
#code{{
SQL> select count(*) from demo10q1;
select count(*) from demo10q1
*
行1でエラーが発生しました。:
ORA-01115: ファイル(ブロック番号)からの読取りI/Oエラーが...
ORA-01110: データファイル5: 'D:\ORADATA\AERS\AERS.DBF'
ORA-27070: 非同期の読取り/書込みに失敗しました。
OSD-04006: ReadFile()に失敗しました。ファイルからの読取り...
O/S-Error: (OS 38) ファイルの終わりです。
SQL>
}}
確かに検索できなくなった
&color(red){緊急措置};:
#code{{
C:\TEMP> sqlplus sys as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on 土 6月 15 16:5...
Copyright (c) 1982, 2011, Oracle. All rights reserved.
アイドル・インスタンスに接続しました。
SQL>
}}
どうやらORACLEは自動的に落ちたみたい。落ちていないのなら
shutdown abort
で落としてみる。
&color(green){復旧活動};:
#code{{
SQL> startup mount
ORACLEインスタンスが起動しました。
Total System Global Area 2.6724E+10 bytes
Fixed Size 2267824 bytes
Variable Size 2.5904E+10 bytes
Database Buffers 805306368 bytes
Redo Buffers 12099584 bytes
データベースがマウントされました。 *mountま...
SQL>
SQL>
SQL> recover database; *recover...
ORA-00283: エラーによってリカバリ・セッションは取り消され...
ORA-01110: データファイル5: 'D:\ORADATA\AERS\AERS.DBF'
ORA-01157: データファイル5を識別/ロックできません -
DBWRトレース・ファイルを参照してください
ORA-01110: データファイル5: 'D:\ORADATA\AERS\AERS.DBF'
SQL>
}}
この段階で一応データファイル5が見えないと原因を伝えてい...
#code(sql,number,nooutline,noblock,nomenu){{
$ sqlplus SYS@AERS as sysdba
SQL> SELECT file# , error , online_status , change#...
FILE# ERROR ONLINE_STATUS CHANGE# TIME
---------- --------------- --------------- ---------- ---...
5 FILE NOT FOUND ONLINE 0
SQL>
}}
データファイルは見えない物の、まだONLINEとして認識されて...
っで、このデータファイル5なるもののありかは、
#code(sql,number,nooutline,noblock,nomenu){{
SQL> SELECT name, file#, status, TS# FROM V$DAT...
NAME FILE# STATUS ...
------------------------------ ---------- ------- -------...
D:\ORADATA\AERS\SYSTEM01.DBF 1 SYSTEM ...
D:\ORADATA\AERS\SYSAUX01.DBF 2 ONLINE ...
D:\ORADATA\AERS\UNDOTBS01.DBF 3 ONLINE ...
D:\ORADATA\AERS\USERS01.DBF 4 ONLINE ...
D:\ORADATA\AERS\AERS.DBF 5 ONLINE ...
D:\ORADATA\AERS\AERSIND.DBF 6 ONLINE ...
D:\ORADATA\AERS\AERSTBL.DBF 7 ONLINE ...
SQL>
}}
となる。ちなみにTS#は表領域の番号でこれは
#code(sql,number,nooutline,noblock,nomenu){{
SQL> SELECT TS#, name FROM V$TABLESPACE;
TS# NAME
---------- ------------------------------
0 SYSTEM
1 SYSAUX
2 UNDOTBS1
4 USERS
3 TEMP
6 AERS
7 AERSIND
8 AERSTBL
9 AERSTMP
SQL>
}}
と各TS#がどんな表領域に当てられているかが分かる。っで、問...
#code(sql,number,nooutline,noblock,nomenu){{
SQL> ALTER DATABASE DATAFILE 'D:\ORADATA\AER...
データベースが変更されました。
SQL>
}}
と指定して当該データファイルを&color(red){OFFLINE};にして...
次にバックアップから失われたファイルをリストアして、リカ...
RMANにログインして、バックアップから指定のデータファイル...
#code(sql,number,nooutline,noblock,nomenu){{
$ RMAN TARGET /
ターゲット・データベース: AERS(DBID=2976312353、未オープ...
RMAN>
RMAN> restore datafile 5;
restoreが開始されました(開始時間: 13-06-15)
リカバリ・カタログのかわりにターゲット・データベース制御...
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=63 デバイス・タイプ=DISK
チャネルORA_DISK_1: データファイル・バックアップ・セット...
チャネルORA_DISK_1: バックアップ・セットからリストアする...
チャネルORA_DISK_1: データファイル00005をD:\ORADATA\AERS\...
チャネルORA_DISK_1: バックアップ・ピースE:\BACKUP\1EOC76D...
チャネルORA_DISK_1: ピース・ハンドル=E:\BACKUP\1EOC76DG_1...
チャネルORA_DISK_1: バックアップ・ピース1がリストアされま...
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:...
restoreが完了しました(完了時間: 13-06-15)
RMAN>
}}
リストアは、バックアップからのファイルの戻し操作のみで、...
そのため、アーカイブREDOログファイルの適用と最新のREDOロ...
#code(sql,number,nooutline,noblock,nomenu){{
RMAN>
RMAN> RECOVER DATAFILE 5;
recoverが開始されました(開始時間: 13-06-15)
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: 増分データファイル・バックアップ・セ...
チャネルORA_DISK_1: バックアップ・セットからリストアする...
データファイル00005のリストア先: D:\ORADATA\AERS\AERS.DBF
チャネルORA_DISK_1: バックアップ・ピースE:\BACKUP\1UOC8QR...
チャネルORA_DISK_1: ピース・ハンドル=E:\BACKUP\1UOC8QRC_1...
チャネルORA_DISK_1: バックアップ・ピース1がリストアされま...
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:...
メディア・リカバリを開始しています
メディア・リカバリが完了しました。経過時間: 00:00:01
recoverが完了しました(完了時間: 13-06-15)
RMAN>
}}
これでリストアは完了して、データベースを公開します。
#code(sql,number,nooutline,noblock,nomenu){{
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE DATAFILE 'D:\ORADATA\AERS\...
SQL> select count(*) from aers.demo10q1;
COUNT(*)
----------
136191
SQL>
}}
以上表領域の障害時復旧。
***個別テーブルの復元 [#feb7bdd7]
データを削除(delete)、上書き(update)、追記(insert)もしく...
戻したくなる時がある。
■削除したテーブルの復旧
管理者権限で
#code(sql,number,nooutline,noblock,nomenu){{
SQL> show parameter RECYCLEBIN
NAME TYPE VALUE
------------------------------------ ----------- --------...
recyclebin string on
SQL>
}}
となっていれば、テーブル復活の呪文が使える。
&color(red){障害作成};:
#code(sql,number,nooutline,noblock,nomenu){{
SQL> create table sample(id int);
表が作成されました。
SQL> select table_name from user_tables where table_name=...
TABLE_NAME
----------
SAMPLE
SQL>
SQL> drop table sample;
表が削除されました。
SQL> select table_name from user_tables where table_name=...
レコードが選択されませんでした。
SQL>
}}
な感じでテーブルを削除
&color(green){復旧活動};:
#code(sql,number,nooutline,noblock,nomenu){{
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TY...
---------------- ------------------------------ ---------...
SAMPLE BIN$s/LmllkYRiWYyfOOCISP2Q==$0 TABLE ...
SQL>
SQL> SELECT object_name as recycle_name, original_name, t...
RECYCLE_NAME ORIGINAL_NAME TYPE
------------------------------ --------------- ----------
BIN$s/LmllkYRiWYyfOOCISP2Q==$0 SAMPLE TABLE
SQL>
SQL> flashback table sample to before drop;
フラッシュバックが完了しました。
SQL>
SQL> select table_name from user_tables where table_name=...
TABLE_NAME
----------
SAMPLE
SQL>
}}
別名保存なら
flashback table "BIN$s/LmllkYRiWYyfOOCISP2Q==$0" to befor...
とする
&color(red){*};どうも時刻(DROP TIME)が標準時で困る...
■テーブルデータの復旧
「フラッシュバック(Flashback)」機能を使えば目的の時点まで...
っでその「時点」の示し方は
-指定時刻
-特定SCN(System Commit Number)
SCNの値と時刻およびREDOファイルの関係は v$archived_log を...
#code(sql,number,nooutline,noblock,nomenu){{
select
name, thread#, sequence#, status, first_time, next_t...
from v$archived_log
}}
なので、ユーザからはscnを特定してデータを取得するのは難し...
まぁー一応、
#code(sql,number,nooutline,noblock,nomenu){{
SQL> select id,ora_rowscn from sample;
ID ORA_ROWSCN
---------- ----------
100 9239715
1 9239715
2 9239715
4 9239715
SQL>
SQL> select ora_rowscn from sample group by ora_rowscn;
ORA_ROWSCN
----------
9239715
SQL>
}}
と得られるが、目的の操作時点のscnが不明なので使えない。
となると、時刻指定で振り返るしかなく、
#code(sql,number,nooutline,noblock,nomenu){{
SQL> select * from sample as of timestamp to_timestamp('2...
ID
----------
100
1
SQL>
}}
と指定時刻でのテーブル状況が分かる。
っで、この時点のテーブルを作るには&color(green){CREATE TA...
あと、指定時刻がこのテーブルの存在以前であると
#code(sql,number,nooutline,noblock,nomenu){{
SQL> select * from sample as of timestamp to_timestamp('2...
select * from sample as of timestamp to_timestamp('201306...
*
行1でエラーが発生しました。:
ORA-01466: データを読み込めません - 表定義が変更されました
SQL>
}}
と当然ながらエラーとなる。
&color(red){*};ここでの時刻は正常に使えるみたい....
ページ名:
1