Recuperar um Banco de Dados do Object Store Classic do OCI
Este artigo explica como recuperar um banco de dados usando um backup criado pelo Oracle Database Backup Module e armazenado no Oracle Cloud Infrastructure Object Storage Classic.
Os seguintes termos são usados em todo este tópico:
- Banco de dados de origem: O backup do banco de dados no Object Storage Classic.
- Banco de dados de destino: O novo banco de dados em um sistema de banco de dados no Oracle Cloud Infrastructure.
Pré-requisitos
Será necessário o seguinte:
- O nome do serviço, o nome da identidade, o contêiner, o nome do usuário e a senha do Oracle Cloud Infrastructure Object Storage Classic.
- A senha de backup se a criptografia baseada em senha for usada ao fazer backup no Object Storage Classic.
- O ID do banco de dados de origem, o nome do banco de dados, o nome exclusivo do banco de dados (necessário para configurar o armazenamento)
- Se o banco de dados de origem estiver configurado com TDE (Criptografia Transparente de Dados), você precisará de um backup da wallet e da senha da wallet.
- Tnsnames a serem configurados para qualquer link de banco de dados.
- A saída de
Opatch lsinventory
para o banco de dados de origem Oracle_home, para referência. - Uma cópia do diretório sqlpatch do home do banco de dados de origem. Isso é necessário para fazer rollback, caso o banco de dados de destino não inclua esses patches.
Tópicos Relacionados
Configurar o Armazenamento no Sistema de Banco de Dados
- Estabeleça conexão via SSH com o Sistema de Banco de Dados.
ssh -i <private_key_path> opc@<db_system_ip_address>
- Faça log-in como opc e, em seguida, sudo para o usuário raiz. Use
sudo su -
com um hífen para chamar o perfil do usuário raiz, que definirá o PATH para o diretório dbcli (/opt/oracle/dcs/bin
).login as: opc sudo su -
- Use os Comandos Dbstorage para configurar diretórios para armazenamento DATA, RECO e REDO. O exemplo a seguir cria 10 GB de armazenamento ACFS para o banco de dados tdetest.
dbcli create-dbstorage --dbname tdetest --dataSize 10 --dbstorage ACFS
Observação:
Ao migrar um banco de dados versão 11.2, o armazenamento ACFS deve ser especificado. - Use os Comandos Dbstorage para listar o ID de armazenamento. Você precisará do ID para a próxima etapa.
Saída:dbcli list-dbstorages
ID Type DBUnique Name Status ---------------------------------------- ------ -------------------- ---------- 9dcdfb8e-e589-4d5f-861a-e5ba981616ed Acfs tdetest Configured
- Use os Comandos Dbstorage com o ID de armazenamento da etapa anterior para listar os locais de DATA, RECO e REDO.
Saída:dbcli describe-dbstorage --id 9dcdfb8e-e589-4d5f-861a-e5ba981616ed
DBStorage details ---------------------------------------------------------------- ID: 9dcdfb8e-e589-4d5f-861a-e5ba981616ed DB Name: tdetest DBUnique Name: tdetest DB Resource ID: Storage Type: Acfs DATA Location: /u02/app/oracle/oradata/tdetest RECO Location: /u03/app/oracle/fast_recovery_area/ REDO Location: /u03/app/oracle/redo/ State: ResourceState(status=Configured) Created: August 24, 2016 5:25:38 PM UTC UpdatedTime: August 24, 2016 5:25:53 PM UTC
- Anote os locais de DATA, RECO e REDO. Você precisará deles mais tarde para definir os parâmetros
db_create_file_dest
,db_create_online_log_dest
edb_recovery_file_dest
para o banco de dados.
Escolher um ORACLE_HOME
Decida qual ORACLE_HOME será usado para a restauração do banco de dados e, em seguida, alterne para esse home com as definições corretas de ORACLE_BASE, ORACLE_HOME e PATH. O ORACLE_HOME ainda não deve estar associado a um banco de dados.
Para obter uma lista de ORACLE_HOMEs existente e garantir que ORACLE_HOME esteja vazio, use os comandos Dbhome e os Comandos Database, respectivamente. Para criar um novo ORACLE_HOME, use os Comandos Dbhome.
Copiar as Wallets do Banco de Dados de Origem
Ignore esta seção se o banco de dados de origem não estiver configurado com TDE.
- No sistema de banco de dados, torne-se o usuário oracle:
sudo su - oracle
- Crie o seguinte diretório se ele ainda não existir:
mkdir /opt/oracle/dcs/commonstore/wallets/tde/<db_unique_name>
- Copie o arquivo ewallet.p12 do banco de dados de origem para o diretório criado na etapa anterior.
- No host de destino, certifique-se de que
$ORACLE_HOME/network/admin/sqlnet.ora
contenha a seguinte linha:ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME)))
Adicione a linha se ela não existir no arquivo. (A linha pode não existir se este for um novo home e ainda não houver nenhum banco de dados criado neste host.)
- Crie a wallet de log-in automático usando a wallet baseada em senha para permitir a abertura automática da wallet durante operações de restauração e recuperação.
Para um banco de dados versão 12.1 ou posterior, use o comando
ADMINISTER KEY MANAGEMENT
:$cat create_autologin_12.sh #!/bin/sh if [ $# -lt 2 ]; then echo "Usage: $0 <dbuniquename><remotewalletlocation>" exit 1; fi mkdir /opt/oracle/dcs/commonstore/wallets/tde/$1 cp $2/ewallet.p12* /opt/oracle/dcs/commonstore/wallets/tde/$1 rm -f autokey.ora echo "db_name=$1" > autokey.ora autokeystoreLog="autologinKeystore_`date +%Y%m%d_%H%M%S_%N`.log" echo "Enter Keystore Password:" read -s keystorePassword echo "Creating AutoLoginKeystore -> " sqlplus "/as sysdba" <<EOF spool $autokeystoreLog set echo on startup nomount pfile=autokey.ora ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/opt/oracle/dcs/commonstore/wallets/tde/$1' -- Keystore location IDENTIFIED BY "$keystorePassword"; shutdown immediate; EOF
Ajuste as permissões
cwallet.sso
deoracle:asmadmin
paraoracle:oinstall
.
Saída:ls -ltr /opt/oracle/dcs/commonstore/wallets/tde/<db_unique_name>
total 20 -rw-r--r-- 1 oracle oinstall 5680 Jul 6 11:39 ewallet.p12 -rw-r--r-- 1 oracle asmadmin 5725 Jul 6 11:39 cwallet.sso
Para um banco de dados versão 11.2, use o comando
orapki
:orapki wallet create -wallet wallet_location -auto_login [-pwd password]
Instalar o Módulo de Backup do Oracle Database
O arquivo JAR do módulo de backup é fornecido no sistema de banco de dados, mas é preciso instalá-lo.
- Estabeleça conexão via SSH com o sistema de banco de dados, faça log-in como opc e, em seguida, torne-se o usuário oracle.
ssh -i <path to SSH key used when launching the DB System> opc@<DB System IP address or hostname> sudo su - oracle
- Passe para o diretório que contém o arquivo
opc_install.jar
do módulo de backup.cd /opt/oracle/oak/pkgrepos/orapkgs/oss/<version>/
- Para instalar o módulo de backup, consulte a sintaxe de comando descrita em Installing the Oracle Database Cloud Backup Module for OCI Classic em Using Oracle Database Backup Cloud Service.
Definir Variáveis de Ambiente
Defina as seguintes variáveis de ambiente para as sessões do RMAN e do SQL*Plus para o banco de dados:
ORACLE_HOME=<path of Oracle Home where the database is to be restored>
ORACLE_SID=<database instance name>
ORACLE_UNQNAME=<db_unique_name in lower case>
NLS_DATE_FORMAT="mm/dd/yyyy hh24:mi:ss"
Alocar um Canal SBT do RMAN
Para cada operação de restauração, aloque um canal SBT e defina o parâmetro SBT_LIBRARY para o local do arquivo libopc.so
e o parâmetro OPC_FILE para o local do arquivo opc_sbt.ora
, por exemplo:
ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/<ORACLE_HOME>/dbs/opc_sbt.ora)';
Para obter mais informações sobre esses arquivos, consulte Files Created When the Oracle Database Cloud Backup Module for OCI Classic is Installed em Using Oracle Database Backup Cloud Service.
Verificar se a Decriptografia está Ativada
Certifique-se de que a criptografia esteja ativada para todas as sessões de restauração do RMAN.
set decryption wallet open identified by <keystore password>;
Para obter mais informações, consulte Providing the Password Required to Decrypt Encrypted Backups.
Restaurar Spfile
O seguinte script de shell de amostra restaura o spfile. Defina a variável $dbID
para o dbid do banco de dados que está sendo restaurado. Por padrão, o spfile é restaurado para $ORACLE_HOME/dbs/spfile<sid>.ora
.
rman target / <<EOF
spool log to "`date +%Y%m%d_%H%M%S_%N`_dbid_${dbID}_restore_spfile.log"
startup nomount
set echo on
run {
ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
SET DBID=$dbID;
RESTORE SPFILE FROM AUTOBACKUP;
shutdown immediate;
EOF
Definir os Parâmetros do Banco de Dados
- Inicie o banco de dados no modo nomount.
startup nomount
- Atualize o spfile e modifique os parâmetros a seguir.
-
Se o tipo de armazenamento do banco de dados for ACFS, use os locais de DATA, RECO e REDO obtidos na saída do comando
dbcli describe-dbstorage
, conforme descrito em Configurar o Armazenamento no Sistema de Banco de Dados:alter system set db_create_file_dest='/u02/app/oracle/oradata/' scope = spfile; alter system set db_create_online_log_dest_1='/u03/app/oracle/redo' scope = spfile; alter system set db_recovery_file_dest='/u03/app/oracle/fast_recovery_area' scope = spfile;
-
Se o tipo de armazenamento do banco de dados for ASM:
alter system set db_create_file_dest='+DATA' scope = spfile; alter system set db_create_online_log_dest_1='+RECO' scope = spfile; alter system set db_recovery_file_dest='+RECO' scope = spfile;
-
db_recovery_file_dest_size
não foi definido ou não foi definido corretamente:alter system set db_recovery_file_dest_size=<sizeG> scope=spfile;
-
Defina
audit_file_dest
como o valor correto:alter system set audit_file_dest=/u01/app/oracle/admin/<db_unique_name in lower case>/adump
-
- Remova o parâmetro
control_files
. Os parâmetros do OMF (Oracle Managed Files) serão usados para criar o arquivo de controle.alter system reset control_files scope=spfile;
- Reinicie o banco de dados no modo nomount usando os parâmetros recém-adicionados.
shutdown immediate startup nomount
Restaurar o Arquivo de Controle
Modifique o seguinte script de shell de amostra do seu ambiente para restaurar o arquivo de controle. Defina a variável $dbID
para o dbid do banco de dados que está sendo restaurado. Defina SBT_LIBRARY como o local especificado no parâmetro -libDir
ao instalar o Módulo de Backup. Defina OPC-PFILE como o local especificado no parâmetro -configFile
, que é padrão para ORACLE_HOME/dbs/opcSID.ora
.
rman target / <<EOF
spool log to "`date +%Y%m%d_%H%M%S_%N`_dbid_${dbID}_restore_controlfile.log"
set echo on
run {
ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/<Backup Module libDir>/libopc.so ENV=(OPC_PFILE=/<Backup Module configFile>/opcSID.ora)';
SET DBID=$dbID;
RESTORE CONTROLFILE FROM AUTOBACKUP;
alter database mount;
}
exit;
EOF
Restaurar o Banco de Dados
- Visualize e valide o backup. O banco de dados agora está montado e o RMAN deve ser capaz de localizar o backup do arquivo de controle restaurado. Esta etapa ajuda a garantir que a lista de logs de arquivamento esteja presente e que os componentes de backup possam ser restaurados.
Nos exemplos a seguir, modifique SBT_LIBRARY e OPC_PFILE, conforme necessário para o seu ambiente.
rman target / <<EOF spool log to "`date +%Y%m%d_%H%M%S_%N`_restore_database_preview.log" set echo on run { ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)'; ALLOCATE CHANNEL c2 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)'; ALLOCATE CHANNEL c3 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)'; restore database validate header preview; }
Verifique a saída e se há mensagens de erro e investigue a causa do problema.
- Redirecione a restauração usando
set newname
para restaurar os arquivos de dados no formato OMF e useswitch datafile all
para permitir que o arquivo de controle seja atualizado com as novas cópias do arquivo de dados.rman target / <<EOF spool log to "`date +%Y%m%d_%H%M%S_%N`_restore_database_preview.log" set echo on run { ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)'; ALLOCATE CHANNEL c2 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)'; ALLOCATE CHANNEL c3 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)'; set newname for database to new; restore database; switch datafile all; switch tempfile all; recover database; }
Essa recuperação tentará usar o último backup de log de arquivamento disponível e, em seguida, falhará com um erro, por exemplo:
RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 07/20/2016 12:09:02 RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 22 and starting SCN of 878327
- Para concluir a recuperação incompleta, execute uma recuperação usando o número de sequência e o número do thread mostrados na mensagem RMAN-06054, por exemplo:
recover database until sequence 22 thread 1;
Preparar para Registrar o Banco de Dados
Antes de registrar o banco de dados:
- Certifique-se de que o valor do parâmetro COMPATIBLE do banco de dados seja aceitável. Se o valor for menor que o mínimo, o banco de dados não poderá ser registrado até que você faça upgrade da compatibilidade do banco de dados.
- Verifique se o banco de dados foi registrado com o listener e o nome do serviço.
lsnrctl services
- Certifique-se de que o arquivo de senha foi restaurado ou criado para o novo banco de dados.
ls -ltr $ORACLE_HOME/dbs/orapw<oracle sid>
Se o arquivo não existir, crie-o usando o utilitário orapwd.
orapwd file=<$ORACLE_HOME/dbs/orapw<$ORACLE_SID>> password=<sys password>
- Certifique-se de que o banco de dados restaurado está aberto no modo de leitura e gravação.
select open_mode from v$database;
A saída do comando deve indicar o modo de leitura/gravação. O comando
dbcli register-database
tentará executar o datapatch, que requer o modo de leitura/gravação. Se houver PDBs, eles também deverão estar no modo de leitura/gravação para garantir que o datapatch seja executado neles. - No Oracle Home do banco de dados restaurado, use o seguinte comando para verificar a conexão com o SYS:
conn sys/<password>@//<hostname>:1521/<database service name>
Esta conexão é necessária para registrar o banco de dados posteriormente. Corrija os problemas de conexão antes de continuar.
- Verifique se o banco de dados está em execução no spfile usando o comando SQL*Plus.
SHOW PARAMETERS SPFILE
- (Opcional) Se você quiser gerenciar o backup do banco de dados com a interface de linha de comandos dbcli, poderá associar uma configuração de backup nova ou existente ao banco de dados migrado ao registrá-lo ou depois de registrá-lo. Uma configuração de backup define o destino do backup e a janela de recuperação do banco de dados. Use os Comandos Backupconfig para criar, listar e exibir configurações de backup.
- Copie a pasta
$ORACLE_HOME/sqlpatch
do banco de dados de origem para o banco de dados de destino. Isso permitirá que o comandodbcli register-database
faça rollback dos patches em conflito.Observação:
Se você estiver migrando um banco de dados versão 11.2, será necessário executar etapas adicionais após o registro do banco de dados. Para obter mais informações, consulte Fazer Rollback de Patches em um Banco de Dados Versão 11.2.
Registrar o Banco de Dados no Sistema de Banco de Dados
Os Comandos Database registram o banco de dados restaurado para o dcs-agent para que ele possa ser gerenciado pela pilha do dcs-agent.
Observação:
O comandodbcli register-database
não está disponível nos sistemas de banco de dados RAC de 2 nós.
Como o usuário raiz, use o comando dbcli register-database
para registrar o banco de dados no sistema de banco de dados, por exemplo:
dbcli register-database --dbclass OLTP --dbshape odb1 --servicename tdetest --syspassword
Saída:
Password for SYS:
{
"jobId" : "317b430f-ad5f-42ae-bb07-13f053d266e2",
"status" : "Created",
"message" : null,
"reports" : [ ],
"createTimestamp" : "August 08, 2016 05:55:49 AM EDT",
"description" : "Database service registration with db service name: tdetest",
"updatedTime" : "August 08, 2016 05:55:49 AM EDT"
}
Atualizar o tnsnames.ora
Verifique o tnsnames.ora
no local do backup, verifique os links de banco de dados usados no banco de dados clonado e, em seguida, adicione quaisquer strings de conexão relevantes ao arquivo do banco de dados clonado em $ORACLE_HOME/network/admin/tnsnames.ora
.
Fazer Rollback de Patches em um Banco de Dados Versão 11.2
Para bancos de dados versão 11.2, o aplicativo sqlpatch não é automatizado. Portanto, é necessário fazer rollback manualmente no banco de dados de destino de quaisquer patches provisórios (anteriormente conhecidos como patches "one-off") aplicados ao banco de dados de origem que não façam parte da PSU instalada. Depois de registrar o banco de dados, execute o script catbundle.sql
e depois o script postinstall.sql
com o patch da PSU correspondente (ou o patch de sobreposição na parte superior do patch da PSU), conforme descrito a seguir.
Dica:
Alguns patches provisórios podem incluir arquivos gravados no diretório $ORACLE_HOME/rdbms/admin, bem como no diretório $ORACLE_HOME/sqlpatch. A Oracle recomenda que você faça rollback desses patches no banco de dados de origem usando as instruções no arquivo leia-me do patch antes de migrar o banco de dados para o ambiente OCI. Entre em contato com o Suporte Técnico da Oracle se precisar de ajuda para fazer rollback desses patches.- No Sistema de Banco de Dados, use o comando
dbcli list-dbhomes
para localizar o número de patch da PSU para o home do banco de dados versão 11.2. Na saída do seguinte comando de amostra, o número de patch da PSU é o segundo número na coluna Versão do Banco de Dados:
Saída:dbcli list-dbhomes
ID Name DB Version Home Location Status ------------------------------------ ----------------- ------------------------------------- ----------------------------------------- ---------- 59d9bc6f-3880-4d4f-b5a6-c140f16f8c64 OraDB11204_home1 11.2.0.4.160719 (23054319, 23054359) /u01/app/oracle/product/11.2.0.4/dbhome_1 Configured
(O primeiro número de patch, 23054319 no exemplo acima, é para o componente OCW no home do banco de dados.)
- Localize o patch de sobreposição, se houver, usando o comando
lsinventory
. No exemplo a seguir, o patch número 24460960 está sobreposto na parte superior do patch da PSU 23054359.
Saída:$ORACLE_HOME/OPatch/opatch lsinventory
... Installed Top-level Products (1): Oracle Database 11g 11.2.0.4.0 There are 1 products installed in this Oracle Home. Interim patches (5) : Patch 24460960 : applied on Fri Sep 02 15:28:17 UTC 2016 Unique Patch ID: 20539912 Created on 31 Aug 2016, 02:46:31 hrs PST8PDT Bugs fixed: 23513711, 23065323, 21281607, 24006821, 23315889, 22551446, 21174504 This patch overlays patches: 23054359 This patch needs patches: 23054359 as prerequisites
- Inicie o SQL*Plus e execute o script
catbundle.sql
, por exemplo:startup connect / as sysdba @$ORACLE_HOME/rdbms/admin/catbundle.sql psu apply exit
- Aplique o sqlpatch utilizando o número de patch de sobreposição da etapa anterior, por exemplo:
connect / as sysdba @$ORACLE_HOME/sqlpatch/24460960/postinstall.sql exit
Observação:
Se o banco de dados de origem tiver patches únicos instalados e esses patches não fizerem parte da PSU instalada no ambiente de nuvem, as alterações de SQL correspondentes a esses patches únicos deverão ser submetidas a rollback. Para fazer rollback das alterações SQL, copie o script$ORACLE_HOME/sqlpatch/<patch#>/postdeinstall.sql
do ambiente de origem para o ambiente de nuvem e execute o script postdeinstall.sql
.
Lista de Verificação Pós-restauração
Depois que o banco de dados for restaurado e registrado no sistema de banco de dados, use a lista de verificação a seguir para verificar os resultados e executar qualquer personalização pós-restauração.
- Verifique se os arquivos do banco de dados foram restaurados no formato OMF.
- Certifique-se de que o banco de dados esteja listado na saída de Comandos Database.
- Verifique as seguintes referências externas no banco de dados e atualize-as, se necessário:
- Tabelas externas: Se o banco de dados de origem usar tabelas externas, faça backup desses dados e migre-os para o host de destino.
- Diretórios: Personalize os diretórios padrão, conforme necessário, para o banco de dados restaurado.
- Links de banco de dados: Certifique-se de que todas as entradas TNS necessárias estejam atualizadas no arquivo
tnsnames.ora
no ORACLE_HOME. - E-mail e URLs: Verifique se os endereços de e-mail e URLs usados no banco de dados ainda estão acessíveis no sistema de banco de dados.
- Jobs programados: Verifique os jobs programados no banco de dados de origem e programe jobs semelhantes, conforme necessário, no banco de dados restaurado.
- Se você associar uma configuração de backup ao registrar o banco de dados, execute um teste de backup usando os Comandos Backup.
- Se o banco de dados restaurado contiver um CDB e PDBs, verifique se os patches foram aplicados a todos os PDBs.