Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever e obter uma conta gratuita, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Restaurar o PDB multitenant eliminado usando uma instância auxiliar no mesmo servidor DBCS
Introdução
Em um banco de dados contêiner (CDB) multitenant, os metadados das tabelas do dicionário de dados e as definições de view só são armazenados na raiz. No entanto, cada banco de dados plugável (PDB) tem seu próprio conjunto de tabelas e views do dicionário de dados para os objetos de banco de dados contidos no PDB.
Portanto, um banco de dados plugável (PDB) não pode ser restaurado como um banco de dados. Ele deve ser restaurado como um objeto de banco de dados usando uma instância auxiliar. Se um banco de dados plugável (PDB)/arquivos de dados forem excluídos acidentalmente, corrompidos etc., o repositório/metadados do PDB ainda existirá e poderá ser restaurado e recuperado
Se um PDB for acidentalmente/intencionalmente eliminado usando o comando DROP PLUGGABLE DATABASE <PDBNAME>, isso eliminará o PDB e removerá os metadados do repositório. Portanto, uma restauração do PDB (incluindo o PDB PITR antes do tempo eliminado) falhará com um erro como RMAN-06813: could not translate pluggable database PDBxx.


Objetivos
Restaure e recupere um PDB que foi eliminado, incluindo os arquivos de dados. Como não pode ser restaurado no mesmo CDB, criamos uma instância auxiliar e restauramos o PDB no CDB auxiliar na mesma instância e também na origem.
Pré-requisitos
-
Conclua a configuração do banco de dados do Oracle Database Cloud Service (DBCS)
-
Fazer um backup completo do CDB
Tarefa 1: Criar um novo banco de dados plugável
-
Execute os comandos a seguir para a criação de banco de dados plugável.
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
Tarefa 2: Fazer Backup do Banco de Dados Contêiner (CDB)
-
Conecte-se ao RMAN usando sysdba ou usuário sysbackup e faça um backup do banco de dados CDB que inclui o banco de dados plugável
. RMAN>BACKUP DATABASE PLUS ARCHIVELOG ALL;
Tarefa 3: Eliminar o banco de dados plugável criado na Tarefa 1
-
Para simular o caso, eliminamos o banco de dados plugável
. SQL> drop pluggable database <PDBNAME3> INCLUDING DATAFILES ;
Tarefa 4: Restaurar o banco de dados plugável eliminado no mesmo banco de dados de origem
-
A tentativa de restaurar o PDB como um banco de dados, no mesmo contêiner, falha com o erro 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>
Tarefa 5: Criar uma instância auxiliar temporária
-
Crie uma instância auxiliar temporária na mesma origem (Servidor de Produção) ou em outro servidor (Servidor Auxiliar) para restaurar o banco de dados contêiner (CDB) e o banco de dados plugável (PDB) necessário.
-
Neste exemplo, a instância auxiliar é criada no mesmo servidor de origem.
-
Criar arquivo de inicialização para instância auxiliar.
-- 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/'
Tarefa 6: Iniciar a instância auxiliar no estado nomount
-
Inicie a instância auxiliar no estado nomount usando os comandos a seguir.
[oracle@sud ~]$ mkdir -p /home/oracle/CDBAUX02[oracle@sud ~]$ cd /home/oracle/CDBAUX02[oracle@sud CDBAUX02]$ export ORACLE_SID=CDBAUX02
Tarefa 7: Restaurar o arquivo de controle do backup na instância IdP e montar o banco de dados
-
Restaure o arquivo de controle com base no backup em instância auxiliar e monte o banco de dados usando os comandos a seguir.
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; }
Tarefa 8: Restaurar e recuperar o banco de dados do PDB eliminado na instância auxiliar
-
Restaure e recupere o banco de dados PDB eliminado na instância auxiliar usando os comandos a seguir.
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'); -
Se o banco de dados de origem tiver vários PDBs e quisermos restaurar o CDB SOMENTE UM PDB, desative a recuperação de todos os outros PDBs no banco de dados Aux como acima e restaure apenas o PDB eliminado junto com o banco de dados contêiner raiz.
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; } -
Quando o RMAN tiver aplicado o último redo log arquivado no backup e não puder encontrar mais logs, uma mensagem semelhante à seguinte será exibida: Não é possível localizar o log arquivado..
-
Recupere o banco de dados usando o comando a seguir.
SQL> recover database using backup controlfile until cancel;
Tarefa 9: Adicionar e eliminar o arquivo de redo log on-line no banco de dados de origem
-
Grupos de Redo logs on-line adicionando (4,5,6) e excluindo (1,2,3) no servidor de Origem.

-
Veja o tamanho dos logs atuais.
select GROUP#,THREAD#,MEMBERS,STATUS,BYTES/1024/1024 from v$log; -
Vamos criar 3 novos grupos de logs e nomeá-los como grupos 4, 5 e 6, cada um com tamanho de 2048 MB.
alter database add logfile group 6 size 2048malter system switch logfile -
Alterne até que estejamos no grupo de logs 4; portanto, podemos eliminar os grupos de logs 1, 2 e 3.
alter database drop logfile group 3 -
Recupere todos os nomes de membros de log dos grupos.
select member from v$logfile;
Tarefa 10: Abrir banco de dados em resetlogs na instância auxiliar
-
Abra o banco de dados em resetlogs em instância auxiliar usando o comando a seguir.
SQL> alter database open resetlogs;
Tarefa 11: Alterar o banco de dados plugável na instância auxiliar
-
Altere o banco de dados plugável para ler o modo de gravação na instância auxiliar.
SQL> alter pluggable database <PDBNAME3> open read write;
Tarefa 12: Criar usuário e conceder permissão para dblink
-
Crie usuários e conceda permissão para dblink em instância auxiliar e Origem.
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; -
Criar vínculo do banco de dados na Origem.
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
Tarefa 13: Clonar o banco de dados plugável PDB03 na origem
-
Clone o banco de dados plugável PDB03 na Origem.
CREATE PLUGGABLE DATABASE PDB03 FROM PDB03@CDBAUX02 NO REKEY KEYSTORE IDENTIFIED BY "XXXXXXX"; -
Altere o Estado de PDBs em um CDB: Exemplo: Suponha que o contêiner atual seja a raiz. A instrução a seguir abre PDBs no CDB com o modo aberto READ WRITE.
alter pluggable database PDB03 open read write;
Confirmações
- Autor - Aditya Srivastawa (Arquiteto de Nuvem Principal)
Mais Recursos de Aprendizagem
Explore outros laboratórios no site docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o 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.