Realice una copia de seguridad en frío administrada por el usuario copiando archivos después de que la base de datos se haya cerrado. Este tipo de copia de seguridad también se conoce como copia de seguridad sin conexión. Su Oracle database 12C puede estar en modo noarchivelog o en modo archivelog cuando realiza una copia de seguridad en frío.
Los DBA tienden a pensar en una copia de seguridad en frío como sinónimo de una copia de seguridad de una base de datos en modo noarchivelog. Eso no es correcto. Puede hacer una copia de seguridad en frío de una base de datos en modo registro de archivos, y esa es una estrategia de copia de seguridad que muchas tiendas emplean. Las diferencias entre una copia de seguridad en frío con la base de datos en modo noarchivelog y en modo archivelog se detallan en las siguientes secciones.
Hacer una copia de seguridad en frío de una base de datos en modo Noarchivelog
Una razón principal para hacer una copia de seguridad en frío de una base de datos Oracle 12C en modo noarchivelog es darle una forma de restaurar una base de datos a un punto en el tiempo en el pasado. Debe usar este tipo de copia de seguridad solo si no necesita recuperar las transacciones que se produjeron después de la copia de seguridad. Este tipo de estrategia de copia de seguridad y recuperación solo es aceptable si los requisitos de su negocio permiten la pérdida de datos y el tiempo de inactividad. Rara vez implementaría este tipo de solución de copia de seguridad y recuperación para una base de datos de producción empresarial.
Dicho esto, hay algunas buenas razones para implementar este tipo de copia de seguridad. Un uso común es hacer una copia de seguridad en frío de una base de datos de desarrollo/prueba/capacitación y restablecer periódicamente la base de datos a la línea de base. Esto le permite reiniciar una prueba de rendimiento o una sesión de entrenamiento con la misma instantánea de punto en el tiempo de la base de datos.
Sugerencia Considere usar la función de base de datos Flashback para establecer su base de datos en un punto en el tiempo pasado.
El ejemplo de esta sección le muestra cómo hacer una copia de seguridad de todos los archivos críticos de su base de datos: todos los archivos de control, archivos de datos, archivos de datos temporales y archivos de registro de rehacer en línea. Con este tipo de copia de seguridad, puede restaurar fácilmente su base de datos hasta el momento en que se realizó la copia de seguridad. Las principales ventajas de este enfoque son que es conceptualmente simple y fácil de implementar. Estos son los pasos necesarios para realizar una copia de seguridad en frío de una base de datos en modo noarchivelog:
- Determine dónde copiar los archivos de copia de seguridad y cuánto espacio se requiere.
- Identifique las ubicaciones y los nombres de los archivos de base de datos a copiar.
- Apague la base de datos con la cláusula INMEDIATA, TRANSACCIONAL o NORMAL.
- Copie los archivos (identificados en el paso 2) a la ubicación de copia de seguridad (determinada en el paso 1).
- Reinicie su base de datos Oracle 12C.
En las secciones siguientes se detallan estos pasos.
Paso 1. Determine Dónde Copiar los Archivos de Copia de Seguridad y Cuánto Espacio Se Requiere
Idealmente, la ubicación de la copia de seguridad debe estar en un conjunto de discos separados de la ubicación de los archivos de datos en vivo. Sin embargo, en muchas tiendas, es posible que no tenga elección y que se le diga qué puntos de montaje debe usar la base de datos. Para este ejemplo, la ubicación de la copia de seguridad es el directorio / u01/cbackup / O12C. Para tener una idea aproximada de cuánto espacio necesita para almacenar una copia de las copias de seguridad, puede ejecutar esta consulta:
select sum(sum_bytes)/1024/1024 m_bytesfrom(select sum(bytes) sum_bytes from v$datafileunionselect sum(bytes) sum_bytes from v$tempfileunionselect (sum(bytes) * members) sum_bytes from v$loggroup by members);
Puede verificar cuánto espacio de disco operativo está disponible con el comando Linux/Unix df (disk free). Asegúrese de que la cantidad de espacio en disco disponible en el sistema operativo sea mayor que la suma devuelta de la consulta anterior:
$ df -h
Paso 2. Identifique las Ubicaciones y los Nombres de los Archivos de base de datos a Copiar
Ejecute esta consulta para enumerar los nombres (y las rutas) de los archivos que se incluyen en una copia de seguridad en frío de una base de datos en modo noarchivelog:
select name from v$datafileunionselect name from v$controlfileunionselect name from v$tempfileunionselect member from v$logfile;
COPIA DE SEGURIDAD DE REGISTROS DE REHACER EN LÍNEA (O NO)
¿Necesita hacer una copia de seguridad de los registros de rehacer en línea? No; nunca necesita hacer una copia de seguridad de los registros de rehecho en línea como parte de ningún tipo de copia de seguridad. Entonces, ¿por qué los DBA hacen una copia de seguridad de los registros de rehecho en línea como parte de una copia de seguridad en frío? Una de las razones es que hace que el proceso de restauración para el escenario de modo noarchivelog sea un poco más fácil. Los registros de rehacer en línea son necesarios para abrir la base de datos de manera normal.
Si realiza una copia de seguridad de todos los archivos (incluidos los registros de rehacer en línea), para que Oracle database 12C vuelva al estado en el que se encontraba en el momento de la copia de seguridad, restaure todos los archivos (incluidos los registros de rehacer en línea) e inicie la base de datos.
Paso 3. Apagar la base de datos
Conéctese a su base de datos como el SYS (o como un usuario con privilegios SYSDBA) y apague su base de datos, usando INMEDIATO, TRANSACCIONAL o NORMAL. En casi todas las situaciones, el método preferido es el INMEDIATO. Este modo desconecta a los usuarios, revierte las transacciones incompletas y apaga la base de datos:
$ sqlplus / as sysdbaSQL> shutdown immediate;
Paso 4. Crear copias de seguridad de los archivos
Para cada archivo identificado en el paso 2, utilice una utilidad del sistema operativo para copiar los archivos en un directorio de copia de seguridad (identificado en el paso 1). En este sencillo ejemplo, todos los archivos de datos, archivos de control, archivos de base de datos temporales y registros de rehacer en línea están en el mismo directorio. En entornos de producción, lo más probable es que tenga archivos distribuidos en varios directorios diferentes. Este ejemplo utiliza el comando Linux / Unix cp para copiar los archivos de base de datos de/u01 / dbfile / O12C al directorio / u01 / cbackup / O12C:
$ cp /u01/dbfile/O12C/*.* /u01/cbackup/O12C
Paso 5. Reinicie su base de datos
Después de copiar todos los archivos, puede iniciar su base de datos:
$ sqlplus / as sysdbaSQL> startup;
Restauración de una Copia de seguridad en frío en Modo Noarchivelog con Registros de Rehacer en línea
El siguiente ejemplo explica cómo restaurar desde una copia de seguridad en frío de una base de datos en modo noarchivelog. Si incluyó los registros de rehacer en línea como parte de la copia de seguridad en frío, puede incluirlos cuando restaure los archivos. Estos son los pasos involucrados en este procedimiento:
- Apaga la instancia.
- Copie los archivos de datos, los registros de rehacer en línea, los archivos temporales y los archivos de control de la copia de seguridad a las ubicaciones de archivos de datos de la base de datos en vivo.
- Inicie su base de datos.
Estos pasos se detallan en las siguientes secciones.
Paso 1. Apagar la instancia
Apagar la instancia, si se está ejecutando. En este escenario, no importa cómo apague Oracle database 12C, porque está restaurando a un punto en el tiempo (sin recuperación de transacciones). Cualquier archivo en las ubicaciones de directorio de base de datos en vivo se sobrescribe cuando se copian los archivos de copia de seguridad. Si su instancia se está ejecutando, puede abortarla abruptamente. Como usuario con privilegios SYSDBA, haga lo siguiente:
$ sqlplus / as sysdbaSQL> shutdown abort;
Paso 2. Copiar los archivos de la copia de seguridad
Este paso hace lo contrario de la copia de seguridad: está copiando archivos de la ubicación de la copia de seguridad a las ubicaciones de archivos de la base de datos en vivo. En este ejemplo, todos los archivos de copia de seguridad se encuentran en el directorio / u01 / cbackup / O12C, y todos los archivos se copian en el directorio/u01 / dbfile / O12C:
$ cp /u01/cbackup/O12C/*.* /u01/dbfile/O12C
Paso 3. Inicie la base de datos
Conéctese a su base de datos como SYS (o un usuario que tenga privilegios SYSDBA) e inicie su base de datos:
$ sqlplus / as sysdbaSQL> startup;
Después de terminar estos pasos, debe tener una copia exacta de su base de datos tal y como estaba cuando hizo la copia de seguridad en frío. Es como si configurara su base de datos al punto en el que hizo la copia de seguridad.
Restauración de una Copia de seguridad en frío en Modo Noarchivelog Sin Registros de Rehacer en línea
Como se mencionó anteriormente, nunca necesitará los registros de rehacer en línea cuando restaure desde una copia de seguridad en frío. Si realizó una copia de seguridad en frío de su base de datos en modo noarchivelog y no incluyó los registros de rehecho en línea como parte de la copia de seguridad, los pasos a restaurar son casi idénticos a los pasos de la sección anterior. La principal diferencia es que el último paso requiere que abra su base de datos, utilizando la cláusula OPEN RESETLOGS. Estos son los pasos:
- Apaga la instancia.
- Copie los archivos de control y los archivos de datos de la copia de seguridad.
- Inicie la base de datos en modo de montaje.
- Abra la base de datos con la cláusula OPEN RESETLOGS.
Paso 1. Apagar la instancia
Apagar la instancia, si se está ejecutando. En este escenario, no importa cómo apague la base de datos Oracle 12C, porque está restaurando a un punto en el tiempo. Cualquier archivo en las ubicaciones de directorio de base de datos en vivo se sobrescribe cuando se copian las copias de seguridad. Si su instancia se está ejecutando, puede abortarla abruptamente. Como usuario con privilegios SYSDBA, haga lo siguiente:
$ sqlplus / as sysdbaSQL> shutdown abort;
Paso 2. Copie los archivos de la copia de seguridad
Copie los archivos de control y los archivos de datos de la ubicación de la copia de seguridad a las ubicaciones de archivos de datos en vivo:
$ cp <backup directory>/*.* <live database file directory>
Paso 3. Inicie la base de datos en Modo de montaje
Conéctese a su base de datos como SYS o un usuario con privilegios SYSDBA e inicie la base de datos en modo de montaje:
$ sqlplus / as sysdbaSQL> startup mount
Paso 4. Abra la base de datos con la cláusula OPEN RESETLOGS
Abra su base de datos para usarla con la cláusula OPEN RESETLOGS:
SQL> alter database open resetlogs;
Si ve el mensaje alterado de la base de datos, el comando se ejecutó correctamente. Sin embargo, es posible que vea este error:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery
En este caso, ejecute el siguiente comando:
SQL> recover database until cancel;
Deberías ver este mensaje:
Media recovery complete.
Ahora, intente abrir su base de datos con la cláusula OPEN RESETLOGS:
SQL> alter database open resetlogs;
Esta instrucción indica a Oracle que vuelva a crear los registros de rehecho en línea. Oracle utiliza la información del archivo de control para la ubicación, el nombre y el tamaño de los registros de rehacer. Si hay archivos de registro de rehacer en línea antiguos en esas ubicaciones, se sobrescriben.
Si estás monitoreando tu alerta.a lo largo de este proceso, puede ver ORA-00312 y ORA-00313. Esto significa que Oracle no puede encontrar los archivos de registro de rehacer en línea; esto está bien, porque estos archivos no están físicamente disponibles hasta que se recrean con el comando ABRIR REGISTROS DE restablecimiento.
Creación de scripts para una copia de seguridad y restauración en frío
Es instructivo ver cómo crear scripts para una copia de seguridad en frío. La idea básica es consultar dinámicamente el diccionario de datos para determinar las ubicaciones y los nombres de los archivos a respaldar. Esto es preferible a codificar las ubicaciones de los directorios y los nombres de los archivos en un script. La generación dinámica de un script es menos propensa a errores y sorpresas (por ejemplo, la adición de nuevos archivos de datos a una base de datos, pero no a un script de copia de seguridad antiguo y codificado).
Tenga en cuenta que los scripts de esta sección no están destinados a ser scripts de copia de seguridad y recuperación de alta producción. Más bien, ilustran los conceptos básicos de crear scripts para una copia de seguridad en frío y una restauración posterior.
El primer script de esta sección hace una copia de seguridad en frío de una base de datos. Antes de usar el script de copia de seguridad en frío, debe modificar estas variables en el script para que coincidan con el entorno de la base de datos:
- ORACLE_SID
- ORACLE_HOME
- cbdir
La variable cbdir especifica el nombre de la ubicación del directorio de copia de seguridad. El script crea un archivo llamado coldback.sql, que se ejecuta desde SQL*Plus para iniciar una copia de seguridad en frío de la base de datos:
#!/bin/bashORACLE_SID=O12CORACLE_HOME=/u01/app/oracle/product/12.1.0.1/db_1PATH=$PATH:$ORACLE_HOME/bin#sqlplus -s <<EOF/ as sysdbaset head off pages0 lines 132 verify off feed off trimsp ondefine cbdir=/u01/cbackup/O12Cspo coldback.sqlselect 'shutdown immediate;' from dual;select '!cp ' || name || ' ' || '&&cbdir' from v$datafile;select '!cp ' || name || ' ' || '&&cbdir' from v$tempfile;select '!cp ' || member || ' ' || '&&cbdir' from v$logfile;select '!cp ' || name || ' ' || '&&cbdir' from v$controlfile;select 'startup;' from dual;spo off;@@coldback.sqlEOFexit 0
Este archivo genera comandos que se van a ejecutar desde un script SQL * Plus para hacer una copia de seguridad en frío de una base de datos Oracle. Pones un signo de exclamación (!) delante del comando cp de Unix para indicar a SQL * Plus que se aloje en el sistema operativo para ejecutar el comando cp. También se coloca una barra diagonal hacia atrás ( \ ) delante de cada signo de dólar ( $ ) al hacer referencia a las vistas del diccionario de datos v data; esto es necesario en un script de shell de Linux/Unix. El \ escapa del script y le dice al script de shell que no trate el shell como un carácter especial (el normally normalmente significa una variable de shell).
Después de ejecutar este script, aquí hay una muestra de los comandos de copia escritos en coldback.script sql:
shutdown immediate;!cp /u01/dbfile/O12C/system01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/sysaux01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/undotbs01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/users01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/tools01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/temp01.dbf /u01/cbackup/O12C!cp /u01/oraredo/O12C/redo02a.rdo /u01/cbackup/O12C!cp /u02/oraredo/O12C/redo02b.rdo /u01/cbackup/O12C!cp /u01/oraredo/O12C/redo01a.rdo /u01/cbackup/O12C!cp /u02/oraredo/O12C/redo01b.rdo /u01/cbackup/O12C!cp /u01/oraredo/O12C/redo03a.rdo /u01/cbackup/O12C!cp /u02/oraredo/O12C/redo03b.rdo /u01/cbackup/O12C!cp /u01/dbfile/O12C/control01.ctl /u01/cbackup/O12C!cp /u01/dbfile/O12C/control02.ctl /u01/cbackup/O12Cstartup;
Mientras realiza una copia de seguridad en frío, también debe generar un script que proporcione los comandos para copiar archivos de datos, archivos temporales, archivos de registro y archivos de control a sus ubicaciones originales. Puede usar este script para restaurar desde la copia de seguridad en frío. El siguiente script de esta sección crea dinámicamente un coldrest.script sql que copia archivos de la ubicación de copia de seguridad a las ubicaciones de archivos de datos originales. Necesita modificar este script de la misma manera que modificó el script de copia de seguridad en frío (es decir, cambiar las variables ORACLE_SID, ORACLE_HOME y cbdir para que coincidan con su entorno):
#!/bin/bashORACLE_SID=O12CORACLE_HOME=/u01/app/oracle/product/12.1.0.1/db_1PATH=$PATH:$ORACLE_HOME/bin#sqlplus -s <<EOF/ as sysdbaset head off pages0 lines 132 verify off feed off trimsp ondefine cbdir=/u01/cbackup/O12Cdefine dbname=$ORACLE_SIDspo coldrest.sqlselect 'shutdown abort;' from dual;select '!cp ' || '&&cbdir/' || substr(name, instr(name,'/',-1,1)+1) || ' ' || name from v$datafile;select '!cp ' || '&&cbdir/' || substr(name, instr(name,'/',-1,1)+1) || ' ' || name from v$tempfile;select '!cp ' || '&&cbdir/' || substr(member, instr(member,'/',-1,1)+1) || ' ' || member from v$logfile;select '!cp ' || '&&cbdir/' || substr(name, instr(name,'/',-1,1)+1) || ' ' || name from v$controlfile;select 'startup;' from dual;spo off;EOFexit 0
Este script crea un script, llamado coldrest.sql, que genera los comandos de copia para restaurar sus archivos de datos, archivos temporales, archivos de registro y archivos de control a sus ubicaciones originales. Después de ejecutar este script de shell, aquí hay un fragmento del código en coldrest.archivo sql:
shutdown abort;!cp /u01/cbackup/O12C/system01.dbf /u01/dbfile/O12C/system01.dbf!cp /u01/cbackup/O12C/sysaux01.dbf /u01/dbfile/O12C/sysaux01.dbf!cp /u01/cbackup/O12C/undotbs01.dbf /u01/dbfile/O12C/undotbs01.dbf!cp /u01/cbackup/O12C/users01.dbf /u01/dbfile/O12C/users01.dbf!cp /u01/cbackup/O12C/tools01.dbf /u01/dbfile/O12C/tools01.dbf...!cp /u01/cbackup/O12C/redo03b.rdo /u02/oraredo/O12C/redo03b.rdo!cp /u01/cbackup/O12C/control01.ctl /u01/dbfile/O12C/control01.ctl!cp /u01/cbackup/O12C/control02.ctl /u01/dbfile/O12C/control02.ctlstartup;
Si necesita restaurar desde una copia de seguridad en frío con este script, inicie sesión en SQL * Plus como SYS y ejecute el script:
$ sqlplus / as sysdbaSQL> @coldrest.sql