6章 CDBでのバックアップリカバリ
本章ではCDBのバックアップリカバリについてご紹介していきます。しっかりと理解して行きましょう。
CDBでのバックアップリカバリ概要
本章ではPDBでのバックアップリカバリについてご紹介していきます。
CDBではCDB,PDB全体の取得や、CDBのみ、PDBのみの取得が可能です。
バックアップを取得し障害に備えて行きましょう。
CDBのバックアップ
バックアップの取得方法は通常データベースと変わりはありません。
RMANでの取得ももちろん可能です。そのほかにユーザ管理のバックアップはCDB上で使用が可能です。
CDBのリカバリ
CDB,PDBの完全リカバリは各DB単位で実行できますが、不完全リカバリはDB全体(CDB,すべてのPDB)でのリカバリとなります。
それではPDB1のUSERS表領域のデータファイルを削除し、PDB1の復旧を行ってみます。
直前リカバリが実施できていることを確認する為に、TESTテーブルを作成し、TESTテーブルが復旧できるかまで確認します。
SQL> conn ora/ora@pdb1
SQL> show con_name
CON_NAME
------------------------------
PDB1
SQL> create table test (id number(10),name varchar2(10));
Table created.
SQL> insert into test values (10,'TEST1');
1 row created.
SQL> insert into test values (20,'TEST2');
1 row created.
SQL> insert into test values (30,'TEST3');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test;
ID NAME
---------- ----------
10 TEST1
20 TEST2
30 TEST3
SQL> exit
$ cd $ORACLE_BASE/oradata/ORCL/pdb1
$ ls -l
合計 1617756
-rw-r----- 1 oracle dba 559947776 2月 14 15:00 2017 pdbseed_temp01.dbf
-rw-r----- 1 oracle dba 734011392 2月 14 20:05 2017 sysaux01.dbf
-rw-r----- 1 oracle dba 293609472 2月 14 20:09 2017 system01.dbf
-rw-r----- 1 oracle dba 104865792 2月 14 17:06 2017 user01.dbf
$ rm -f user01.dbf
PDB1のUSERS表領域のデータファイルを削除したので、PDB1はメディア障害の状態となりました。
SQL> alter session set container = pdb1;
Session altered.
SQL> alter system flush buffer_cache;
System altered.
SQL> select * from ora.test;
select * from ora.test
*
ERROR at line 1:
ORA-01116: error in opening database file 25
ORA-01110: data file 25: '/u01/app/oracle/oradata/ORCL/pdb1/user01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
「alter system flush buffer_cache」はDBキャッシュをクリアするコマンドです。
一度キャッシュをクリアした為、TSETテーブルへのSELECTはディスクアクセスとなります。
既にUSERS表領域のデータファイルを削除しているので、エラーとなります。
ちなみにUSERS表領域以外のデータはどうでしょうか。
SQL> select username from dba_users;
USERNAME
------------------------------------
ORACLE_OCM
OJVMSYS
SYSKM
XS$NULL
・・・
データを取得できています。PDBの場合、メディア障害時はDBは停止しないようです。
アラートログには「Checker run found 1 new persistent data failures」のメッセージが
でています。
では次にPDB1をクローズしてみましょう。
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> alter pluggable database pdb1 close;
alter pluggable database pdb1 close
*
ERROR at line 1:
ORA-01116: error in opening database file 25
ORA-01110: data file 25: '/u01/app/oracle/oradata/ORCL/pdb1/user01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
停止処理はエラーとなりました。PDBのリカバリはDB停止は不要で対象のデータファイルのみオフラインにします。
SQL> alter database datafile
2 '/u01/app/oracle/oradata/ORCL/pdb1/user01.dbf' offline;
Database altered.
それではPDB1のUSERS表領域をリカバリしていきます。
リカバリのコマンドは以下のとおりです。
では実行してみます。
$ rman target /
RMAN> RESTORE TABLESPACE pdb1:USERS;
Starting restore at 14-FEB-17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=518 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=511 device type=DISK
・・・
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:08
Finished restore at 14-FEB-17
RMAN> RECOVER TABLESPACE pdb1:USERS;
Starting recover at 14-FEB-17
using channel ORA_DISK_1
using channel ORA_DISK_2
starting media recovery
archived log for thread 1 with sequence 552 is already on disk
as file /u01/app/oracle/oradata/flash_recovery_area/ORCL/archivelog/2017_02_10/
o1_mf_1_552_d9v68tlg_.arc
archived log for thread 1 with sequence 553 is already on disk
as file /u01/app/oracle/oradata/flash_recovery_area/ORCL/archivelog/2017_02_10/
o1_mf_1_553_d9vgfrqy_.arc
・・・
media recovery complete, elapsed time: 00:00:51
Finished recover at 14-FEB-17
RMAN> exit
これでリカバリは完了です。最後にUSERS表領域のデータファイルをオンラインにしてみましょう。
SQL> show con_name
CON_NAME
------------------------------
PDB1
SQL> SELECT file_name,online_status FROM dba_data_files
2 WHERE tablespace_name = 'USERS';
FILE_NAME ONLINE_
-------------------------------------------- -------
/u01/app/oracle/oradata/ORCL/pdb1/user01.dbf OFFLINE
SQL> ALTER DATABASE DATAFILE
2 '/u01/app/oracle/oradata/ORCL/pdb1/user01.dbf' ONLINE;
Database altered.
SQL> SELECT file_name,online_status FROM dba_data_files
2 WHERE tablespace_name = 'USERS';
FILE_NAME ONLINE_
-------------------------------------------- -------
/u01/app/oracle/oradata/ORCL/pdb1/user01.dbf ONLINE
SQL> SELECT * FROM ora.test;
ID NAME
---------- ----------
10 TEST1
20 TEST2
30 TEST3
TESTテーブルが復旧されていることを確認しました。
PDBのリカバリの場合はデータファイルのOFFLINEでリカバリを実施する点のみで
大きくリカバリの方法は変わりません。
CDBに関してはいつもどおりのリカバリですので、こちらは省略します。
以上がリカバリの方法についてのご紹介となります。