0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Oracle Cloud] ユーザ管理のObject Storageバケットへ取得したRMANバックアップをBase Databaseにリストアしてみた

Last updated at Posted at 2023-01-14

はじめに

Oracle CloudのOracle Databaseサービス(Base Database/Exadata Database Service[ExaDB-D])のバックアップを東京リージョンと大阪リージョンに取得して、バックアップからデータベースを作成する場合、ユーザ管理のObject Storageバケットにバックアップを取得し、Object Storageレプリケーション機能を使って大阪リージョンにバックアップをコピーします。
今回は、大阪リージョンにリストアをやってみました。
image.png

注:Database Serviceの自動バックアップはOracle管理のObject Storageに取得され、別リージョンへコピーなどはできません。

事前準備

バックアップの取得は、Oracle Database Cloud Backup ModuleでデータベースをOCI Object Storageにバックアップする方法 などを参考に取得ください。
別リージョンでリストアする場合は、Object Storageのレプリケーション・ポリシーが有効に設定されたバケットに取得ください。

バックアップ

CONFIGURE CONTROLFILE AUTOBACKUP ON;
BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG;

注1:シードPDB(PDB$SEED)のデータファイルもバックアップに含まれていることを確認ください。
RMANの LIST BACKUP BY FILE; コマンドなどで確認できます。
注2:dbid を確認します。(リストア時に使用するためメモ)

$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Sat Jan 14 10:00:00 2023
Version 19.17.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DB (DBID=0000000000)

RMAN>

TDE ウォレットの取得

透過的データベース暗号化(TDE)が有効になっているデータベースのバックアップをリストアして利用するためには、TDEウォレットが必要になります。
バックアップしたデータベースのTDEウォレットを取得します。TDE ウォレットが格納されている場所は以下のSQLで確認できます。

SQL> select WRL_PARAMETER from  V$ENCRYPTION_WALLET;

TDE ウォレットが格納されているディレクトリから cwallet.ssoewallet.p12 を取得します。

(オプション)初期化パラメータの確認

バックアップしたデータベースの初期化パラメータ設定をファイルに取得し、リストア先のデータベースで参考にすることもできます。

create pfile='/home/oracle/work/backup/initdb.ora' from memory;
create pfile='/home/oracle/work/backup/initspfile.ora' from spfile;

Base Databaseの準備

リストア先となるBase Database を準備します。

Base Databaseの新規作成

DBシステムの作成を参考にリストア先となるBase Databaseを新規に作成します。

  • 「使用可能なデータ・ストレージ(GB)」をバックアップがリストアできるサイズに設定します。(バックアップしたデータベースと同等のサイズ)
  • 「データベース名」は、バックアップしたデータベースと同じにします。(違う名前も可能ですが、その場合 db_name の変更など追加の手順が必要になります。)

Oracle Database Cloud Backup モジュール配置

新規作成した Base Database (DBシステム)にOracle Database Cloud Backup モジュールを配置します。

Oracle Database Cloud Backup Moduleのダウンロード

このページからOracle Database Cloud Backup Moduleをダウンロードし、DBシステムのノードに転送します。

ダウンロードしたzipファイルを解凍し、java コマンドでインストールします。インストール時のパラメータについては、こちらを参考にしてください。

$ unzip opc_installer.zip
$ cd opc_installer/oci_installer/
$ java -jar oci_install.jar \
-host https://objectstorage.ap-osaka-1.oraclecloud.com \
-pvtKeyFile /key/private.pem \
-pubFingerPrint fa:56:8a:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX \
-uOCID ocid1.user.oc1..aaaaaaaa \
-tOCID ocid1.tenancy.oc1..aaaaaaaa \
-cOCID ocid1.compartment.oc1..aaaaaaaa \
-walletDir /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs \
-libDir /u01/app/oracle/product/19.0.0.0/dbhome_1/lib \
-bucket dbbackup

Oracle Database Cloud Backup Module Install Tool, build 19.3.0.0.0DBBKPCSBP_2019-10-16
Oracle Database Cloud Backup Module credentials are valid.
Backups would be sent to bucket exabackup.
Oracle Database Cloud Backup Module wallet created in directory /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs.
Oracle Database Cloud Backup Module initialization file /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/opcDB2.ora created.
Downloading Oracle Database Cloud Backup Module Software Library from Oracle Cloud Infrastructure.
Download complete.

TDE ウォレットをリストア

バックアップしたデータベースで取得したTDE ウォレットをリストア先のDBシステム上にリストアします。
リストア先は、 /opt/oracle/dcs/commonstore/wallets/<Base DBのdb_unique_name>/tde/ になります。
select WRL_PARAMETER from V$ENCRYPTION_WALLET; で確認できます。 )

$ cd /opt/oracle/dcs/commonstore/wallets/DB_kix000/tde/
$ mv cwallet.sso cwallet.sso.back
$ mv ewallet.p12 ewallet.p12.back
$ cp $HOME/backup/cwallet.sso .
$ cp $HOME/backup/ewallet.p12 .

初期作成されたデータベースの停止/削除

削除対象のファイルの確認

以下のSQLを実行し、ASMからファイルを削除するコマンドを生成します。

set heading off linesize 999 pagesize 0 feedback off trimspool on
spool /tmp/cdb_remove_files.sh
select 'asmcmd rm '||name from v$datafile
union all
select 'asmcmd rm '||name from v$tempfile
union all
select 'asmcmd rm '||member from v$logfile;
spool off

実行例

/tmp/cdb_remove_files.sh
SQL> select 'asmcmd rm '||name from v$datafile
  2  union all
  3  select 'asmcmd rm '||name from v$tempfile
  4  union all
  5  select 'asmcmd rm '||member from v$logfile;
asmcmd rm +DATA/DB_KIX000/DATAFILE/system.260.1126086617
asmcmd rm +DATA/DB_KIX000/DATAFILE/sysaux.261.1126086651
asmcmd rm +DATA/DB_KIX000/DATAFILE/undotbs1.262.1126086667
asmcmd rm +DATA/DB_KIX000/EB3A921CAD1A96F8E0538C01F40A7C7C/DATAFILE/system.264.1126086767
asmcmd rm +DATA/DB_KIX000/EB3A921CAD1A96F8E0538C01F40A7C7C/DATAFILE/sysaux.265.1126086767
asmcmd rm +DATA/DB_KIX000/EB3A921CAD1A96F8E0538C01F40A7C7C/DATAFILE/undotbs1.266.1126086767
asmcmd rm +DATA/DB_KIX000/F2376EEA6C534070E0532400000AD9BF/DATAFILE/system.273.1126087307
asmcmd rm +DATA/DB_KIX000/F2376EEA6C534070E0532400000AD9BF/DATAFILE/sysaux.270.1126087319
asmcmd rm +DATA/DB_KIX000/F2376EEA6C534070E0532400000AD9BF/DATAFILE/undotbs1.275.1126087477
asmcmd rm +DATA/DB_KIX000/DATAFILE/users.271.1126087469
asmcmd rm +DATA/DB_KIX000/F2376EEA6C534070E0532400000AD9BF/DATAFILE/users.274.1126087469
asmcmd rm +DATA/DB_KIX000/TEMPFILE/temp.263.1126086751
asmcmd rm +DATA/DB_KIX000/F23751912B4D0D30E0532400000A8412/TEMPFILE/temp.267.1126086795
asmcmd rm +DATA/DB_KIX000/F2376EEA6C534070E0532400000AD9BF/TEMPFILE/temp.272.1126087305
asmcmd rm +RECO/DB_KIX000/ONLINELOG/group_3.259.1126086707
asmcmd rm +RECO/DB_KIX000/ONLINELOG/group_2.258.1126086707
asmcmd rm +RECO/DB_KIX000/ONLINELOG/group_1.257.1126086707
SQL> spool off

/tmp/cdb_remove_files.sh ファイルから asmcdm で始まる行以外を削除します。

/tmp/cdb_remove_files.sh
asmcmd rm +DATA/DB_KIX000/DATAFILE/system.260.1126086617
asmcmd rm +DATA/DB_KIX000/DATAFILE/sysaux.261.1126086651
asmcmd rm +DATA/DB_KIX000/DATAFILE/undotbs1.262.1126086667
asmcmd rm +DATA/DB_KIX000/EB3A921CAD1A96F8E0538C01F40A7C7C/DATAFILE/system.264.1126086767
asmcmd rm +DATA/DB_KIX000/EB3A921CAD1A96F8E0538C01F40A7C7C/DATAFILE/sysaux.265.1126086767
asmcmd rm +DATA/DB_KIX000/EB3A921CAD1A96F8E0538C01F40A7C7C/DATAFILE/undotbs1.266.1126086767
asmcmd rm +DATA/DB_KIX000/F2376EEA6C534070E0532400000AD9BF/DATAFILE/system.273.1126087307
asmcmd rm +DATA/DB_KIX000/F2376EEA6C534070E0532400000AD9BF/DATAFILE/sysaux.270.1126087319
asmcmd rm +DATA/DB_KIX000/F2376EEA6C534070E0532400000AD9BF/DATAFILE/undotbs1.275.1126087477
asmcmd rm +DATA/DB_KIX000/DATAFILE/users.271.1126087469
asmcmd rm +DATA/DB_KIX000/F2376EEA6C534070E0532400000AD9BF/DATAFILE/users.274.1126087469
asmcmd rm +DATA/DB_KIX000/TEMPFILE/temp.263.1126086751
asmcmd rm +DATA/DB_KIX000/F23751912B4D0D30E0532400000A8412/TEMPFILE/temp.267.1126086795
asmcmd rm +DATA/DB_KIX000/F2376EEA6C534070E0532400000AD9BF/TEMPFILE/temp.272.1126087305
asmcmd rm +RECO/DB_KIX000/ONLINELOG/group_3.259.1126086707
asmcmd rm +RECO/DB_KIX000/ONLINELOG/group_2.258.1126086707
asmcmd rm +RECO/DB_KIX000/ONLINELOG/group_1.257.1126086707

データベースの停止

初期作成されたデータベースを停止します。(-db パラメータには db_unique_name を指定します。)

$ srvctl stop database -db DB_KIX000 -stopoption immediate

ASMファイルの削除

生成した asmcmd コマンドを実行しASMファイルを削除します。

$ chmod 777 /tmp/cdb_remove_files.sh
$ sh /tmp/cdb_remove_files.sh

(必要に応じて)初期化パラメータを変更します。

リカバリの準備

制御ファイルのリストア

バックアップから制御ファイルをリストアします。

nomount でデータベースを起動

$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jan 14 10:00:00 2023
Version 19.17.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup nomount

ORACLE instance started.

Total System Global Area 6979317824 bytes
Fixed Size                  9150528 bytes
Variable Size            1191182336 bytes
Database Buffers         5637144576 bytes
Redo Buffers              141840384 bytes
SQL> quit
Disconnected from Oracle Database 19c EE High Perf Release 19.0.0.0.0 – Production

制御ファイルのリストア

rman で restore controlfile from autobackup コマンドでバックアップから制御ファイルをリストアします。
set dbid でバックアップした際に確認したバックアップしたデータベースの dbid を指定します。

$ rman target /
set dbid 0000000000
SET ENCRYPTION ON;
set controlfile autobackup format for device type sbt to '%F';
run {
set dbid 0000000000
allocate channel t1 type 'sbt_tape' parms 'SBT_LIBRARY=/u01/app/oracle/product/19.0.0.0/dbhome_1/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/opcDB.ora)';
restore controlfile from autobackup;
}

実行例

$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Sat Jan 14 10:00:00 2023
Version 19.17.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DB2 (not mounted)

RMAN> set dbid 0000000000

executing command: SET DBID

RMAN> SET ENCRYPTION ON;

executing command: SET encryption
using target database control file instead of recovery catalog

RMAN> set controlfile autobackup format for device type sbt to '%F';

executing command: SET CONTROLFILE AUTOBACKUP FORMAT

RMAN> run {
2> set dbid 0000000000
3> allocate channel t1 type 'sbt_tape' parms 'SBT_LIBRARY=/u01/app/oracle/product/19.0.0.0/dbhome_1/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/opcDB.ora)';
4> restore controlfile from autobackup;
5>
6> }

restore controlfile from autobackup コマンドは7日前までのバックアップから制御ファイルをリストア可能です。
それより前のバックアップの場合 until time 句を追加します。

run {
set dbid 0000000000
allocate channel t1 type 'sbt_tape' parms 'SBT_LIBRARY=/u01/app/oracle/product/19.0.0.0/dbhome_1/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/opcDB.ora)';
restore controlfile from autobackup until time "TO_DATE('20230114:00:00','YYYYMMDD:HH24:MI')";
}

データベースのマウント

alter database mount; 文でデータベースをマウントします。

RMAN> alter database mount;

Statement processed

RMAN> quit


Recovery Manager complete.

REDOログファイル/データファイルファイルの位置の修正

リストアした制御ファイルに記載されているREDOログファイル/データファイルの位置を確認します。
リストア先のディスクグループ、db_unique_nameと違う場合、位置を変更します。

REDOログファイルの確認

set lines 200 pages 200
col member for a100
select member from v$logfile;

実行例 (2ノードRAC データベースのバックアップの場合)

SQL> set lines 200 pages 200
SQL> col member for a100
SQL> select member from v$logfile;

MEMBER
-------------------------------------------
+DATAC1/DB/ONLINELOG/group_4.310.1123434047
+DATAC1/DB/ONLINELOG/group_3.311.1123434047
+DATAC1/DB/ONLINELOG/group_2.309.1123434047
+DATAC1/DB/ONLINELOG/group_1.308.1123434047
+DATAC1/DB/ONLINELOG/group_5.306.1123434575
+DATAC1/DB/ONLINELOG/group_6.319.1123434577
+DATAC1/DB/ONLINELOG/group_7.320.1123434579
+DATAC1/DB/ONLINELOG/group_8.321.1123434581

8 rows selected.
  • REDOログ名をバックアップ(+DATAC1/DB)からリストア先のDB名(DB_kix000)に変更するためのSQLを生成し実行します。
    (以下のSQLは 環境にあわせて修正ください)
set lines 200 pages 200
select 'alter database rename file '||chr(39)||member||chr(39)||' to '||chr(39)||replace(member, 'DATAC1/DB/', 'RECO/DB_kix000/')||chr(39)||';' from v$logfile;

実行例

SQL> set lines 200 pages 200
SQL> select 'alter database rename file '||chr(39)||member||chr(39)||' to '||chr(39)||replace(member, 'DATAC1/DB/', 'RECO/DB_kix000/')||chr(39)||';' from v$logfile;

'ALTERDATABASERENAMEFILE'||CHR(39)||MEMBER||CHR(39)||'TO'||CHR(39)||REPLACE(MEMBER,'DATAC1/DB/','RECO/DB_kix000/')||CHR(39)||';'
-----------------------------------------------------------------------------------------------------------------------------------
alter database rename file '+DATAC1/DB/ONLINELOG/group_4.310.1123434047' to '+RECO/DB_kix000/ONLINELOG/group_4.310.1123434047';
alter database rename file '+DATAC1/DB/ONLINELOG/group_3.311.1123434047' to '+RECO/DB_kix000/ONLINELOG/group_3.311.1123434047';
alter database rename file '+DATAC1/DB/ONLINELOG/group_2.309.1123434047' to '+RECO/DB_kix000/ONLINELOG/group_2.309.1123434047';
alter database rename file '+DATAC1/DB/ONLINELOG/group_1.308.1123434047' to '+RECO/DB_kix000/ONLINELOG/group_1.308.1123434047';
alter database rename file '+DATAC1/DB/ONLINELOG/group_5.306.1123434575' to '+RECO/DB_kix000/ONLINELOG/group_5.306.1123434575';
alter database rename file '+DATAC1/DB/ONLINELOG/group_6.319.1123434577' to '+RECO/DB_kix000/ONLINELOG/group_6.319.1123434577';
alter database rename file '+DATAC1/DB/ONLINELOG/group_7.320.1123434579' to '+RECO/DB_kix000/ONLINELOG/group_7.320.1123434579';
alter database rename file '+DATAC1/DB/ONLINELOG/group_8.321.1123434581' to '+RECO/DB_kix000/ONLINELOG/group_8.321.1123434581';

8 rows selected.

生成された alter database 文を実行します。

SQL> alter database rename file '+DATAC1/DB/ONLINELOG/group_4.310.1123434047' to '+RECO/DB_kix000/ONLINELOG/group_4.310.1123434047';

Database altered.

SQL> alter database rename file '+DATAC1/DB/ONLINELOG/group_3.311.1123434047' to '+RECO/DB_kix000/ONLINELOG/group_3.311.1123434047';

Database altered.

SQL> alter database rename file '+DATAC1/DB/ONLINELOG/group_2.309.1123434047' to '+RECO/DB_kix000/ONLINELOG/group_2.309.1123434047';

Database altered.

SQL> alter database rename file '+DATAC1/DB/ONLINELOG/group_1.308.1123434047' to '+RECO/DB_kix000/ONLINELOG/group_1.308.1123434047';

Database altered.

SQL> alter database rename file '+DATAC1/DB/ONLINELOG/group_5.306.1123434575' to '+RECO/DB_kix000/ONLINELOG/group_5.306.1123434575';

Database altered.

SQL> alter database rename file '+DATAC1/DB/ONLINELOG/group_6.319.1123434577' to '+RECO/DB_kix000/ONLINELOG/group_6.319.1123434577';

Database altered.

SQL> alter database rename file '+DATAC1/DB/ONLINELOG/group_7.320.1123434579' to '+RECO/DB_kix000/ONLINELOG/group_7.320.1123434579';

Database altered.

SQL> alter database rename file '+DATAC1/DB/ONLINELOG/group_8.321.1123434581' to '+RECO/DB_kix000/ONLINELOG/group_8.321.1123434581';

Database altered.

SQL>

データファイルの確認

col name for a100
select file#, name from v$datafile order by file#;

実行例(バックアップにはSeed PDBと2つのPDBがあった)

SQL> col name for a100
SQL> select file#, name from v$datafile order by file#;

     FILE# NAME
---------- ----------------------------------------------------------------------------------------------------
         1 +DATAC1/DB/DATAFILE/system.304.1123434355
         2 +DATAC1/DB/EB390E92B92D64A7E053915446647C45/DATAFILE/system.313.1123434107
         3 +DATAC1/DB/DATAFILE/sysaux.318.1123434341
         4 +DATAC1/DB/EB390E92B92D64A7E053915446647C45/DATAFILE/sysaux.314.1123434107
         5 +DATAC1/DB/DATAFILE/undotbs1.303.1123434369
         6 +DATAC1/DB/EB390E92B92D64A7E053915446647C45/DATAFILE/undotbs1.315.1123434107
         7 +DATAC1/DB/DATAFILE/users.305.1123434383
         8 +DATAC1/DB/DATAFILE/undotbs2.317.1123434341
         9 +DATAC1/DB/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/system.329.1123434727
        10 +DATAC1/DB/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/sysaux.323.1123434735
        11 +DATAC1/DB/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/undotbs1.324.1123434741
        12 +DATAC1/DB/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/undo_2.325.1123434747
        13 +DATAC1/DB/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/users.328.1123434727
        14 +DATAC1/DB/EFD2343FB5691E64E0537F00000A804A/DATAFILE/system.331.1123485889
        15 +DATAC1/DB/EFD2343FB5691E64E0537F00000A804A/DATAFILE/sysaux.332.1123485889
        16 +DATAC1/DB/EFD2343FB5691E64E0537F00000A804A/DATAFILE/undotbs1.333.1123485889
        17 +DATAC1/DB/EFD2343FB5691E64E0537F00000A804A/DATAFILE/undo_2.334.1123485889
        18 +DATAC1/DB/EFD2343FB5691E64E0537F00000A804A/DATAFILE/users.335.1123485889

18 rows selected.
  • データファイル名をバックアップ(+DATA/DB)からリストア先のDB名(DB_kix000)に変更するrmanコマンドを生成します。
    (以下のSQLは 環境にあわせて修正ください)
select 'set newname for datafile '||file#||' to '||chr(39)||replace(name, 'DATAC1/DB', 'DATA/DB_kix000')||chr(39)||';' from v$datafile;

実行例

SQL>  select 'set newname for datafile '||file#||' to '||chr(39)||replace(name, 'DATAC1/DB', 'DATA/DB_kix000')||chr(39)||';' from v$datafile;

'SETNEWNAMEFORDATAFILE'||FILE#||'TO'||CHR(39)||REPLACE(NAME,'DATAC1/DB','DATA/DB_kix000')||CHR(39)||';'
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
set newname for datafile 1 to '+DATA/DB_kix000/DATAFILE/system.304.1123434355';
set newname for datafile 2 to '+DATA/DB_kix000/EB390E92B92D64A7E053915446647C45/DATAFILE/system.313.1123434107';
set newname for datafile 3 to '+DATA/DB_kix000/DATAFILE/sysaux.318.1123434341';
set newname for datafile 4 to '+DATA/DB_kix000/EB390E92B92D64A7E053915446647C45/DATAFILE/sysaux.314.1123434107';
set newname for datafile 5 to '+DATA/DB_kix000/DATAFILE/undotbs1.303.1123434369';
set newname for datafile 6 to '+DATA/DB_kix000/EB390E92B92D64A7E053915446647C45/DATAFILE/undotbs1.315.1123434107';
set newname for datafile 7 to '+DATA/DB_kix000/DATAFILE/users.305.1123434383';
set newname for datafile 8 to '+DATA/DB_kix000/DATAFILE/undotbs2.317.1123434341';
set newname for datafile 9 to '+DATA/DB_kix000/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/system.329.1123434727';
set newname for datafile 10 to '+DATA/DB_kix000/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/sysaux.323.1123434735';
set newname for datafile 11 to '+DATA/DB_kix000/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/undotbs1.324.1123434741';
set newname for datafile 12 to '+DATA/DB_kix000/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/undo_2.325.1123434747';
set newname for datafile 13 to '+DATA/DB_kix000/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/users.328.1123434727';
set newname for datafile 14 to '+DATA/DB_kix000/EFD2343FB5691E64E0537F00000A804A/DATAFILE/system.331.1123485889';
set newname for datafile 15 to '+DATA/DB_kix000/EFD2343FB5691E64E0537F00000A804A/DATAFILE/sysaux.332.1123485889';
set newname for datafile 16 to '+DATA/DB_kix000/EFD2343FB5691E64E0537F00000A804A/DATAFILE/undotbs1.333.1123485889';
set newname for datafile 17 to '+DATA/DB_kix000/EFD2343FB5691E64E0537F00000A804A/DATAFILE/undo_2.334.1123485889';
set newname for datafile 18 to '+DATA/DB_kix000/EFD2343FB5691E64E0537F00000A804A/DATAFILE/users.335.1123485889';

18 rows selected.
SQL> quit
Disconnected from Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.17.0.0.0

リストアとリカバリ

バックアップのリストア

生成した set newname 文を利用してバックアップをリストアします。

$ rman target /

RMAN> 
SET ENCRYPTION ON;

run {
allocate channel t1 type 'sbt_tape' parms 'SBT_LIBRARY=/u01/app/oracle/product/19.0.0.0/dbhome_1/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/opcDB.ora)';
set newname for datafile 1 to '+DATA/DB_kix000/DATAFILE/system.304.1123434355';
set newname for datafile 2 to '+DATA/DB_kix000/EB390E92B92D64A7E053915446647C45/DATAFILE/system.313.1123434107';
set newname for datafile 3 to '+DATA/DB_kix000/DATAFILE/sysaux.318.1123434341';
set newname for datafile 4 to '+DATA/DB_kix000/EB390E92B92D64A7E053915446647C45/DATAFILE/sysaux.314.1123434107';
set newname for datafile 5 to '+DATA/DB_kix000/DATAFILE/undotbs1.303.1123434369';
set newname for datafile 6 to '+DATA/DB_kix000/EB390E92B92D64A7E053915446647C45/DATAFILE/undotbs1.315.1123434107';
set newname for datafile 7 to '+DATA/DB_kix000/DATAFILE/users.305.1123434383';
set newname for datafile 8 to '+DATA/DB_kix000/DATAFILE/undotbs2.317.1123434341';
set newname for datafile 9 to '+DATA/DB_kix000/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/system.329.1123434727';
set newname for datafile 10 to '+DATA/DB_kix000/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/sysaux.323.1123434735';
set newname for datafile 11 to '+DATA/DB_kix000/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/undotbs1.324.1123434741';
set newname for datafile 12 to '+DATA/DB_kix000/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/undo_2.325.1123434747';
set newname for datafile 13 to '+DATA/DB_kix000/EFC648AED3D47FF5E0537F00000ACF7D/DATAFILE/users.328.1123434727';
set newname for datafile 14 to '+DATA/DB_kix000/EFD2343FB5691E64E0537F00000A804A/DATAFILE/system.331.1123485889';
set newname for datafile 15 to '+DATA/DB_kix000/EFD2343FB5691E64E0537F00000A804A/DATAFILE/sysaux.332.1123485889';
set newname for datafile 16 to '+DATA/DB_kix000/EFD2343FB5691E64E0537F00000A804A/DATAFILE/undotbs1.333.1123485889';
set newname for datafile 17 to '+DATA/DB_kix000/EFD2343FB5691E64E0537F00000A804A/DATAFILE/undo_2.334.1123485889';
set newname for datafile 18 to '+DATA/DB_kix000/EFD2343FB5691E64E0537F00000A804A/DATAFILE/users.335.1123485889';
restore database;
switch datafile all;
recover database until available redo;
release channel t1;
}

コマンド結果

allocated channel: t1
channel t1: SID=185 device type=SBT_TAPE
channel t1: Oracle Database Backup Service Library VER=21.0.0.1

executing command: SET NEWNAME

<< 中略 >>

channel t1: restored backup piece 1
channel t1: restore complete, elapsed time: 00:00:07
Finished restore at 14-JAN-23

datafile 1 switched to datafile copy
input datafile copy RECID=39 STAMP=1-00000000 file name=+DATA/DB_KIX000/DATAFILE/DATAFILE/system.289.1126089443

<< 中略 >>

starting media recovery

<< 中略 >>

Finished recover at 14-JAN-23

released channel: t1

block change trackingの修正

バックアップしたデータベースでブロック変更トラッキングが有効になっている場合、ブロック変更トラッキング・ファイルのディレクトリが作成したBase Databaseと違う場合があります。
今回は作成したBase Databaseのディレクトリを使用するように修正します。

alter database disable BLOCK CHANGE TRACKING;
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+DATA';

実行例

RMAN> alter database disable BLOCK CHANGE TRACKING;

Statement processed

RMAN> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+DATA';

Statement processed

Databaseのオープン

resetlogs付でデータベースをオープンします。

alter database open resetlogs ;

実行例

RMAN> alter database open resetlogs ;

Statement processed

RMAN> quit


Recovery Manager complete.

後処理

各PDBのオープン

リストア直後は、PDBがオープンしていない場合があります。
それぞれのPDBをオープンします。
また、次回起動時は自動オープンするように状態を保存します。

$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jan 14 10:00:00 2023
Version 19.17.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.17.0.0.0

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           MOUNTED
         4 PDB2                           MOUNTED
SQL> alter pluggable database pdb1 open;

Pluggable database altered.

SQL> alter pluggable database pdb2 open;

Pluggable database altered.

SQL> alter pluggable database all save state;

Pluggable database altered.

SQL> quit
Disconnected from Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.17.0.0.0

再起動後の自動起動の確認

ノードを再起動し、データベースの起動、PDBのオープンを確認します。
あわせて、各クライアントから接続できることを確認します。
接続できない場合、リスナーの状態、クライアントのtnsnames.oraの設定を確認します。

(オプション) REDOログファイルの最適化

今回は、2ノードRAC構成のデータベースバックアップをシングルインスタンスのデータベースにリストアしました。
Thread 2 のREDOロググループは利用しないので削除することが可能です。
v$log ビューを確認し削除可能なREDOロググループを確認し、削除します。

SQL> select * from V$LOG;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- ---------- --- ----------
         1          1          5 4194304000        512          1 NO  CURRENT
         2          1          2 4194304000        512          1 YES ACTIVE
         3          1          3 4194304000        512          1 YES ACTIVE
         4          1          4 4194304000        512          1 YES ACTIVE
         5          2          1 4194304000        512          1 YES INACTIVE
         6          2          0 4194304000        512          1 YES UNUSED
         7          2          0 4194304000        512          1 YES UNUSED
         8          2          0 4194304000        512          1 YES UNUSED

8 rows selected.

SQL> alter database disable thread 2;

Database altered.

SQL> alter database drop logfile group 5;

Database altered.

SQL> alter database drop logfile group 6;

Database altered.

SQL> alter database drop logfile group 7;

Database altered.

SQL> alter database drop logfile group 8;

Database altered.

(オプション) データベースのクローン

リストアしたデータベースでは、プラガブル・データベースの状態がWebコンソールに反映されていません。
image.png
(実際はPDB1/PDB2の2つのPDBがあるにもかかわらずWebコンソール上は1つのみ)

DBシステムをクローンすることで、クローン先のデータベースのPDBはWebコンソールに反映されます。
image.png

image.png
image.png
image.png
image.png

クローンされたDBシステムのデータベースを確認
image.png
実際と同様にPDB1/PDB2の2つが表示されました。

おわりに

RMANバックアップを使用したObject Storageからのデータベースのリカバリができました。

参考情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?