Recuperación de una base de datos desde OCI Object Store Classic
En este artículo se explica cómo recuperar una base de datos mediante una copia de seguridad creada por el módulo de copia de seguridad de Oracle Database y almacenada en Oracle Cloud Infrastructure Object Storage Classic.
En este tema se utilizan los siguientes términos:
- Base de datos de origen: copia de seguridad de la base de datos en Object Storage Classic.
- Base de datos de destino: nueva base de datos de un sistema de base de datos en Oracle Cloud Infrastructure.
Requisitos
Necesitará lo siguiente:
- El nombre de servicio, el nombre de identidad, el contenedor, el nombre de usuario y la contraseña de Oracle Cloud Infrastructure Object Storage Classic.
- La contraseña de copia de seguridad, si se ha utilizado el cifrado basado en contraseña al realizar una copia de seguridad en Object Storage Classic.
- El identificador de la base de datos de origen, el nombre de la base de datos y el nombre único de la base de datos (necesario para configurar el almacenamiento).
- Si la base de datos origen está configurada con cifrado de datos transparente (TDE), necesitará una copia de seguridad de la cartera y la contraseña de la cartera.
- Tnsnames que configurar cualquier enlace de base de datos.
- La salida de
Opatch lsinventory
para la base de datos de origen Oracle_home, como referencia. - Una copia del directorio sqlpatch del directorio raíz de la base de datos de origen. Esto es necesario para el rollback en el caso de que la base de datos de destino no incluya estos parches.
Configuración del almacenamiento en el sistema de base de datos
- SSH en el sistema de base de datos.
ssh -i <private_key_path> opc@<db_system_ip_address>
- Conéctese como opc y, a continuación, utilice sudo para el usuario root. Utilice
sudo su -
con un guion para llamar al perfil del usuario root, lo cual definirá PATH en el directorio dbcli (/opt/oracle/dcs/bin
).login as: opc sudo su -
- Use los Comandos de dbstorage para configurar directorios para almacenamiento DATA, RECO y REDO. En el siguiente ejemplo se crean 10 GB de almacenamiento de ACFS para la base de datos tdetest.
dbcli create-dbstorage --dbname tdetest --dataSize 10 --dbstorage ACFS
Note:
Al migrar una base de datos versión 11.2, se debe especificar el almacenamiento ACFS. - Use los Comandos de dbstorage para mostrar el identificador de almacenamiento. Necesitará el identificador para el siguiente paso.
Salida:dbcli list-dbstorages
ID Type DBUnique Name Status ---------------------------------------- ------ -------------------- ---------- 9dcdfb8e-e589-4d5f-861a-e5ba981616ed Acfs tdetest Configured
- Utilice los Comandos de dbstorage con el identificador de almacenamiento del paso anterior para mostrar las ubicaciones de DATA, RECO y REDO.
Salida: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
- Tome nota de las ubicaciones de DATA, RECO y REDO. Las necesitará más adelante para definir los parámetros
db_create_file_dest
,db_create_online_log_dest
ydb_recovery_file_dest
de la base de datos.
Selección de un ORACLE_HOME
Decida qué ORACLE_HOME utilizará para la restauración de la base de datos y, a continuación, cambie a ese directorio raíz con los parámetros correctos de ORACLE_BASE, ORACLE_HOME y PATH. ORACLE_HOME ya no debe estar asociado a una base de datos.
Para obtener una lista de ORACLE_HOME existentes y asegurarse de que ORACLE_HOME está vacío, utilice los Comandos de dbhome y los Comandos de base de datos, respectivamente. Para crear un nuevo ORACLE_HOME, utilice los Comandos de dbhome.
Copia de las carteras de la base de datos de origen
Omita esta sección si la base de datos de origen no está configurada con TDE.
- En el sistema de base de datos, conviértase en el usuario oracle:
sudo su - oracle
- Cree el siguiente directorio, si aún no existe:
mkdir /opt/oracle/dcs/commonstore/wallets/tde/<db_unique_name>
- Copie el archivo ewallet.p12 de la base de datos de origen al directorio creado en el paso anterior.
- Asegúrese de que
$ORACLE_HOME/network/admin/sqlnet.ora
contiene la siguiente línea en el host de destino:ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME)))
Agregue la línea si no existe en el archivo. (Es posible que la línea no aparezca si se trata de un nuevo directorio raíz y aún no se ha creado ninguna base de datos en este host).
- Cree la cartera de conexión automática desde la cartera basada en contraseña para permitir la apertura automática de la cartera durante las operaciones de restauración y recuperación.
Para una base de datos versión 12.1 o posterior, utilice el 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 los permisos
cwallet.sso
desdeoracle:asmadmin
hastaoracle:oinstall
.
Salida: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 una base de datos versión 11.2, utilice el comando
orapki
:orapki wallet create -wallet wallet_location -auto_login [-pwd password]
Instalación del módulo de copia de seguridad de Oracle Database
El archivo JAR del módulo de copia de seguridad está incluido en el sistema de base de datos, pero tiene que instalarlo.
- Utilice SSH para acceder al sistema de base de datos, conéctese como opc y, a continuación, conviértase en el usuario oracle.
ssh -i <path to SSH key used when launching the DB System> opc@<DB System IP address or hostname> sudo su - oracle
- Cambie al directorio que contiene el archivo
opc_install.jar
del módulo de copia de seguridad.cd /opt/oracle/oak/pkgrepos/orapkgs/oss/<version>/
- Para instalar el módulo de copia de seguridad, consulte la sintaxis de comandos que se describe en la sección sobre instalación del módulo Oracle Database Cloud Backup para OCI Classic en Uso de Oracle Database Backup Cloud Service.
Configuración de variables de entorno
Defina las siguientes variables de entorno para las sesiones de RMAN y SQL*Plus de la base de datos:
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"
Asignación de un canal SBT de RMAN
Para cada operación de restauración, asigne un canal SBT y defina el parámetro SBT_LIBRARY en la ubicación del archivo libopc.so
y el parámetro OPC_FILE en la ubicación del archivo opc_sbt.ora
, por ejemplo:
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 obtener más información sobre estos archivos, consulte la sección sobre archivos creados cuando se instala el módulo Oracle Database Cloud Backup para OCI Classic en Uso de Oracle Database Backup Cloud Service.
Asegurarse de que el descifrado está activado
Asegúrese de que el descifrado está activado para todas las sesiones de restauración de RMAN.
set decryption wallet open identified by <keystore password>;
Para obtener más información, consulte la sección sobre aprovisionamiento de la contraseña necesaria para descifrar copias de seguridad cifradas.
Restauración de Spfile
El siguiente script de shell de ejemplo restablece el spfile. Defina la variable $dbID
en el dbid de la base de datos que desea restaurar. Por defecto, spfile se restaura en $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
Definición de los parámetros de base de datos
- Inicie la base de datos en el modo nomount.
startup nomount
- Actualice spfile y modifique los siguientes parámetros.
-
Si el tipo de almacenamiento de base de datos es ACFS, utilice las ubicaciones de DATA, RECO y REDO obtenidas de la salida del comando
dbcli describe-dbstorage
, como se describe en Configuración del almacenamiento en el sistema de base de datos: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;
-
Si el tipo del almacenamiento de base de datos es 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;
-
No se ha definido
db_recovery_file_dest_size
o no se ha definido correctamente:alter system set db_recovery_file_dest_size=<sizeG> scope=spfile;
-
Defina
audit_file_dest
en el valor correcto:alter system set audit_file_dest=/u01/app/oracle/admin/<db_unique_name in lower case>/adump
-
- Elimine el parámetro
control_files
Los parámetros de Oracle Managed Files (OMF) se utilizarán para crear el archivo de control.alter system reset control_files scope=spfile;
- Reinicie la base de datos en el modo nomount utilizando los parámetros recién agregados.
shutdown immediate startup nomount
Restauración del archivo de control
Modifique el siguiente script de shell de ejemplo para que el entorno restaure el archivo de control. Defina la variable $dbID
en el dbid de la base de datos que desea restaurar. Defina SBT_LIBRARY en la ubicación especificada en el parámetro -libDir
cuando instaló el módulo de copia de seguridad. Defina OPC-PFILE en la ubicación especificada en el parámetro -configFile
, que por defecto es 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
Restauración de la base de datos
- Previsualice y valide la copia de seguridad. La base de datos está ahora montada y RMAN debería poder localizar la copia de seguridad desde el archivo de control restaurado. Este paso ayuda a garantizar que hay una lista de archive logs y que se pueden restaurar los componentes de copia de seguridad.
En los ejemplos siguientes, modifique SBT_LIBRARY y OPC_PFILE según sea necesario para su entorno.
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; }
Revise la salida y, si hay mensajes de error, investigue la causa del problema.
- Redireccione la restauración utilizando
set newname
para restaurar los archivos de datos en formato OMF y utiliceswitch datafile all
para permitir que el archivo de control se actualice con las nuevas copias del archivo de datos.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; }
Esta recuperación intentará utilizar la copia de seguridad de archive log más reciente disponible y, a continuación, fallará mostrando un error, por ejemplo:
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 completar la recuperación incompleta, ejecute una recuperación utilizando el número de secuencia y el número de thread que se muestran en el mensaje RMAN-06054, por ejemplo:
recover database until sequence 22 thread 1;
Preparación para registrar la base de datos
Antes de registrar la base de datos:
- Asegúrese de que el valor del parámetro COMPATIBLE de base de datos es aceptable. Si el valor es menor que el mínimo, no se podrá registrar la base de datos hasta que actualice la compatibilidad de la base de datos.
- Verifique que la base de datos se ha registrado con el listener y el nombre de servicio.
lsnrctl services
- Asegúrese de que se ha restaurado o creado el archivo de contraseña de la nueva base de datos.
ls -ltr $ORACLE_HOME/dbs/orapw<oracle sid>
Si el archivo no existe, créelo mediante la utilidad orapwd.
orapwd file=<$ORACLE_HOME/dbs/orapw<$ORACLE_SID>> password=<sys password>
- Asegúrese de que la base de datos restaurada está abierta en modo de lectura/escritura.
select open_mode from v$database;
La salida del comando debe indicar el modo de lectura/escritura. El comando
dbcli register-database
intentará ejecutar datapatch, que requiere el modo de lectura/escritura. Si hay alguna PDB, también deben estar en modo de lectura/escritura para asegurarse de que el parche de datos se ejecute en ellas. - En el directorio raíz de oracle de la base de datos restaurada, utilice el siguiente comando para verificar la conexión a SYS:
conn sys/<password>@//<hostname>:1521/<database service name>
Esta conexión será necesaria para registrar la base de datos más adelante. Solucione cualquier incidencia de conexión antes de continuar.
- Asegúrese de que la base de datos se está ejecutando en spfile utilizando el comando de SQL*Plus.
SHOW PARAMETERS SPFILE
- (Opcional) Si desea gestionar la copia de seguridad de la base de datos con la interfaz de la línea de comandos dbcli, puede asociar una configuración de copia de seguridad nueva o existente a la base de datos migrada cuando la registre o después de registrarla. La configuración de copia de seguridad define el destino de copia de seguridad y la ventana de recuperación de la base de datos. Utilice los Comandos de backupconfigs para crear, mostrar y visualizar configuraciones de copia de seguridad.
- Copie la carpeta
$ORACLE_HOME/sqlpatch
de la base de datos de origen en la base de datos de destino. Esto activará el comandodbcli register-database
para realizar un rollback de los parches en conflicto.Note:
Si va a migrar una base de datos de la versión 11.2, se necesitarán pasos adicionales después de registrar la base de datos. Para obtener más información, consulte Rollback de parches en una base de datos versión 11.2.
Registro de la base de datos en el sistema de base de datos
Los Comandos de base de datos registran la base de datos restaurada en dcs-agent para que se pueda gestionar en la pila dcs-agent.
Note:
El comandodbcli register-database
no está disponible en los sistemas de base de datos RAC de 2 nodos.
Como usuario root, utilice el comando dbcli register-database
para registrar la base de datos en el sistema de base de datos, por ejemplo:
dbcli register-database --dbclass OLTP --dbshape odb1 --servicename tdetest --syspassword
Salida:
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"
}
Actualización de tnsnames.ora
Compruebe tnsnames.ora
en la ubicación de copia de seguridad, compruebe los enlaces de base de datos utilizados en la base de datos clonada y, a continuación, agregue las cadenas de conexión relevantes para el archivo de base de datos clonado en $ORACLE_HOME/network/admin/tnsnames.ora
.
Rollback de parches en una base de datos versión 11.2
Para las bases de datos de la versión 11.2, la aplicación sqlpatch no está automatizada, por lo que a todos los parches temporales (anteriormente conocidos como parches "puntuales") aplicados a la base de datos de origen que no formen parte de la actualización del juego de parches instalada se les debe realizar un rollback de forma manual en la base de datos de destino. Después de registrar la base de datos, ejecute el script catbundle.sql
y, a continuación, el script postinstall.sql
con el parche de PSU correspondiente (o el parche de superposición sobre el parche de PSU), como se describe a continuación.
Sugerencia:
Algunos parches temporales pueden incluir archivos escritos en el directorio $ORACLE_HOME/rdbms/admin y en el directorio $ORACLE_HOME/sqlpatch. Oracle recomienda realizar un rollback de estos parches en la base de datos de origen usando las instrucciones del archivo "readme" de parches antes de migrar la base de datos al entorno OCI. Póngase en contacto con los Servicios de Soporte Oracle si necesita ayuda para realizar el rollback de estos parches.- En el sistema de base de datos, utilice el comando
dbcli list-dbhomes
para buscar el número de parche PSU para el directorio raíz de base de datos versión 11.2. En la siguiente salida de comando de ejemplo, el número de parche PSU es el segundo número de la columna Versión de la base de datos:
Salida: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
(El primer número de parche, 23054319 en el ejemplo anterior, es para el componente OCW del directorio raíz de base de datos).
- Busque el parche de superposición, si lo hay, mediante el comando
lsinventory
. En el siguiente ejemplo, el número de parche 24460960 es el parche de superposición sobre el parche de PSU 23054359.
Salida:$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 SQL*Plus y ejecute el script
catbundle.sql
, por ejemplo:startup connect / as sysdba @$ORACLE_HOME/rdbms/admin/catbundle.sql psu apply exit
- Aplique sqlpatch utilizando el número de parche de superposición del paso anterior, por ejemplo:
connect / as sysdba @$ORACLE_HOME/sqlpatch/24460960/postinstall.sql exit
Note:
Si la base de datos origen tiene parches puntuales instalados y esos parches no forman parte de la PSU instalada en el entorno de nube, se realizará un rollback de los cambios de SQL correspondientes a esos parches puntuales. Para realizar un rollback de los cambios SQL, copie el script$ORACLE_HOME/sqlpatch/<patch#>/postdeinstall.sql
del entorno de origen en el entorno de nube y ejecute el script postdeinstall.sql
.
Lista de control posterior a la restauración
Una vez que la base de datos se haya restaurado y registrado en el sistema de base de datos, utilice la siguiente lista de comprobación para verificar los resultados y realizar personalizaciones después de la restauración.
- Asegúrese de que los archivos de base de datos se han restaurado en el formato OMF.
- Asegúrese de que la base de datos aparece en la salida de Comandos de base de datos.
- Compruebe las siguientes referencias externas en la base de datos y actualícelas si es necesario:
- Tablas externas: si la base de datos de origen utiliza tablas externas, realice una copia de seguridad de esos datos y mígrelos al host de destino.
- Directorios: personalice los directorios por defecto de la base de datos restaurada según sea necesario.
- Enlaces de base de datos: asegúrese de que todas las entradas de TNS necesarias están actualizadas en el archivo
tnsnames.ora
de ORACLE_HOME. - Correo electrónico y URL: asegúrese de que las direcciones de correo electrónico y las URL que se utilizan en la base de datos siguen siendo accesibles desde el sistema de base de datos.
- Trabajos programados: revise los trabajos programados en la base de datos de origen y programe trabajos similares según sea necesario en la base de datos restaurada.
- Si ha asociado una configuración de copia de seguridad al registrar la base de datos, ejecute una copia de seguridad de prueba mediante los Comandos de copia de seguridad.
- Si la base de datos restaurada contiene una CDB y PDB, verifique que lo parches se han aplicado a todas las PDB.