ノート:
- このチュートリアルではOracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructure資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了する場合は、これらの値をクラウド環境に固有の値に置き換えてください。
同じDBCSサーバー上の補助インスタンスを使用して、削除されたマルチテナントPDBをリストアします。
イントロダクション
マルチテナント・コンテナ・データベース(CDB)では、データ・ディクショナリ表およびビュー定義のメタデータはルートにのみ格納されます。ただし、各プラガブル・データベース(PDB)には、PDBに含まれるデータベース・オブジェクト用の独自のデータ・ディクショナリ表とビューのセットがあります。
そのため、プラガブル・データベース(PDB)はデータベースとしてリストアできません。補助インスタンスを使用してデータベース・オブジェクトとしてリストアする必要があります。プラガブル・データベース(PDB)/データファイルが誤って削除されて破損した場合、PDBのリポジトリ/メタデータは引き続き存在し、リストアおよびリカバリが可能です。
DROP PLUGGABLE DATABASE <PDBNAME>
コマンドを使用してPDBが誤って/意図的に削除された場合、PDBが削除され、メタデータがリポジトリから削除されます。したがって、PDBのリストア(削除された時間の前のPDB PITRを含む)は、RMAN-06813: could not translate pluggable database PDBxx
などのエラーで失敗します。
目的
データファイルを含む削除されたPDBをリストアおよびリカバリします。同じCDBにリストアできないため、補助インスタンスを作成し、同じインスタンス上およびソース内の補助CDBにPDBをリストアします。
前提条件
-
Oracle Database Cloud Service (DBCS)データベース構成の完了
-
CDBの全体バックアップの作成
タスク1: 新しいプラガブル・データベースの作成
-
プラガブル・データベースを作成するには、次のコマンドを実行します。
SQL> create pluggable database <PDBNAME3> admin user <USERNAME> identified by <PASSWORD>; COLUMN PDB_NAME FORMAT A15 SQL> SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID; PDB_ID PDB_NAME STATUS ---------- --------------- --------- 2 <PDBNAME$SEED> NORMAL 3 <PDBNAME1> NORMAL 4 <PDBNAME2> NORMAL 5 <PDBNAME3> NORMAL
タスク2: コンテナ・データベース(CDB)のバックアップ
-
sysdbaまたはsysbackupユーザーを使用してRMANに接続し、プラガブル・データベース
を含むCDBデータベースのバックアップを作成します。 RMAN>BACKUP DATABASE PLUS ARCHIVELOG ALL;
タスク3: タスク1で作成したプラガブル・データベースの削除
-
このケースをシミュレートするには、プラガブル・データベース
を削除します。 SQL> drop pluggable database <PDBNAME3> INCLUDING DATAFILES ;
タスク4: 同じソース・データベース内の削除されたプラガブル・データベースのリストア
-
同じコンテナ内のデータベースとしてPDBをリストアしようとすると、RMAN-06813エラーで失敗します。
RMAN> restore pluggable database <PDBNAME3>; Starting restore at <MM/DD/YYYY> using channel ORA_DISK_1 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of restore command at <MM/DD/YYYY HH:MI:SS> RMAN-06813: could not translate pluggable database <PDBNAME3>
タスク5: 一時補助インスタンスの作成
-
同じソース(本番サーバー)または別のサーバー(補助サーバー)に一時補助インスタンスを作成して、コンテナ・データベース(CDB)および必要なプラガブル・データベース(PDB)をリストアします。
-
この例では、同じソース・サーバーに補助インスタンスが作成されます。
-
補助インスタンスのinitファイルを作成します。
-- create init<DBNAME AUX>.ora -- verify compatible parameter matches the version of your source db (init<DBCDBNAME>.ora) *.sga_target=10G *.control_files=+DATA/CDBAUX02/CONTROLFILE/control.ctl *.compatible=19.0.0.0.0 *.db_files=65534 *.db_create_file_dest=+DATA *.db_create_online_log_dest_1=+RECO *.undo_tablespace= UNDOTBS1 *.remote_login_passwordfile=EXCLUSIVE *.global_names=FALSE *.instance_name=CDBAUX02 *.audit_trail=DB *.db_name=CDB01 *.db_unique_name=CDBAUX02 *.enable_pluggable_database= TRUE *.db_recovery_file_dest=+RECO *.db_recovery_file_dest_size=40G *.wallet_root=/opt/oracle/dcs/commonstore/wallets/CDBAUX02 *.one_step_plugin_for_pdb_with_tde=FALSE *.tde_configuration='keystore_configuration=FILE' *.DB_FILE_NAME_CONVERT='CDB01_IAD1ZD','CDBAUX02' *.log_file_name_convert='+RECO/CDB01_IAD1ZD/ONLINELOG/','+RECO/CDBAUX02/ONLINELOG/'
タスク6: 非マウント状態の補助インスタンスの起動
-
次のコマンドを使用して、Nomount状態で補助インスタンスを起動します。
[oracle@sud ~]$ mkdir -p /home/oracle/CDBAUX02
[oracle@sud ~]$ cd /home/oracle/CDBAUX02
[oracle@sud CDBAUX02]$ export ORACLE_SID=CDBAUX02
タスク7: IdPインスタンスのバックアップからの制御ファイルのリストアおよびデータベースのマウント
-
次のコマンドを使用して、補助インスタンスのバックアップから制御ファイルをリストアし、データベースをマウントします。
run { set dbid=1672349321; set until time "to_date('2023-05-02 17:03:27','YYYY-MM-DD HH24:MI:SS')"; allocate channel ch1 device type sbt parms 'SBT_LIBRARY=/opt/oracle/dcs/commonstore/oss/CDB01_iad1zd/libopc.so ENV=(OPC_PFILE=/opt/oracle/dcs/commonstore/oss/CDB01_iad1zd/97164268-b09e-4c4d-8295-e3d3337b07e0/opc_CDB01_iad1zd.ora)'; restore controlfile from 'c-1672349321-20230502-13' ; alter database mount; }
タスク8: 補助インスタンスの削除されたPDBデータベースのリストアおよびリカバリ
-
次のコマンドを使用して、削除したPDBデータベースを補助インスタンスでリストアおよびリカバリします。
select status from V$BLOCK_CHANGE_TRACKING; alter database disable block change tracking; select status from V$BLOCK_CHANGE_TRACKING; ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE; alter database flashback off; Changing the State of (DISABLE RECOVERY) other PDB: set lines 300 pages 300 select 'alter session set container='||name||'; '|| CHR(13) || CHR(10) ||'alter pluggable database disable recovery; ' from v$pdbs where name not in ('PDB03');
-
ソース・データベースに複数のPDBがあり、1つのPDBのみでCDBをリストアする場合は、前述のようにAuxデータベース内の他のすべてのPDBのリカバリを無効にし、削除したPDBのみをルート・コンテナ・データベースとともにリストアします。
run { set until time "to_date('2023-05-02 17:03:27','YYYY-MM-DD HH24:MI:SS')"; allocate channel ch1 device type sbt parms 'SBT_LIBRARY=/opt/oracle/dcs/commonstore/oss/CDB01_iad1zd/libopc.so ENV=(OPC_PFILE=/opt/oracle/dcs/commonstore/oss/CDB01_iad1zd/97164268-b09e-4c4d-8295-e3d3337b07e0/opc_CDB01_iad1zd.ora)'; set newname for database to '+DATA/'; restore pluggable database PDB03,root; switch datafile all; recover pluggable database PDB03,root; }
-
RMANがバックアップの最後のアーカイブREDOログを適用し、それ以上ログが見つからない場合、次のようなメッセージが表示されます: アーカイブ・ログが見つかりません。
-
次のコマンドを使用してデータベースをリカバリします。
SQL> recover database using backup controlfile until cancel;
タスク9: ソース・データベースでのオンラインREDOログ・ファイルの追加および削除
-
ソース・サーバーで(4,5,6)を追加および削除する(1,2,3)オンラインREDOログ・グループ。
-
現在のログのサイズを参照してください。
select GROUP#,THREAD#,MEMBERS,STATUS,BYTES/1024/1024 from v$log;
-
3つの新しいログ・グループを作成し、それぞれ2048MBのサイズで4、5および6のグループに名前を付けます。
alter database add logfile group 6 size 2048m
alter system switch logfile
-
ログ・グループ4に入るまで切り替えるため、ログ・グループ1、2および3を削除できます。
alter database drop logfile group 3
-
グループのすべてのログ・メンバー名を取得します。
select member from v$logfile;
タスク10: 補助インスタンスのリセットログでデータベースをオープン
-
次のコマンドを使用して、補助インスタンスのリセットログでデータベースをオープンします。
SQL> alter database open resetlogs;
タスク11: 補助インスタンスでのプラガブル・データベースの変更
-
補助インスタンスでプラガブル・データベースを読取り/書込みモードに変更します。
SQL> alter pluggable database <PDBNAME3> open read write;
タスク12: ユーザーの作成とdblinkの権限の付与
-
ユーザーを作成し、補助インスタンスおよびソースでdblinkの権限を付与します。
CREATE USER C##PDBCLONEDBA IDENTIFIED BY "XXXXXXX"; GRANT CREATE SESSION TO C##PDBCLONEDBA CONTAINER=ALL; GRANT CREATE PLUGGABLE DATABASE TO C##PDBCLONEDBA CONTAINER=ALL; GRANT CREATE DATABASE LINK TO C##PDBCLONEDBA CONTAINER=ALL; GRANT SELECT ANY DICTIONARY TO C##PDBCLONEDBA CONTAINER=ALL; GRANT CREATE JOB TO C##PDBCLONEDBA CONTAINER=ALL; GRANT EXECUTE ON DBMS_SCHEDULER TO C##PDBCLONEDBA CONTAINER=ALL;
-
ソースにデータベース・リンクを作成します。
CREATE DATABASE LINK "CDBAUX02" CONNECT TO C##PDBCLONEDBA IDENTIFIED BY "XXXXXXX" USING '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.174)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = CDBAUX02)))'; 2 SQL> alter session set global_names=FALSE; Session altered. SQL> select * from dual@CDBAUX02; D -- x
タスク13: ソースでのプラガブル・データベースPDB03のクローニング
-
ソースのプラガブル・データベースPDB03をクローニングします。
CREATE PLUGGABLE DATABASE PDB03 FROM PDB03@CDBAUX02 NO REKEY KEYSTORE IDENTIFIED BY "XXXXXXX";
-
CDB内のPDBの状態の変更: 例: 現在のコンテナがルートであるとします。次の文は、オープン・モードREAD WRITEでCDB内のPDBをオープンします。
alter pluggable database PDB03 open read write;
謝辞
- 作成者 - Aditya Srivastawa(プリンシパル・クラウド・アーキテクト)
その他の学習リソース
docs.oracle.com/learnで他のラボをご覧いただくか、Oracle Learning YouTubeチャネルでより無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Restore a dropped multitenant PDB using auxiliary instance on the same DBCS server
F81982-01
May 2023
Copyright © 2023, Oracle and/or its affiliates.