RespaldoyRecuperacionRMAN
Transcripción
RespaldoyRecuperacionRMAN
El respaldo más correcto y más sencillo usando RMAN para hacer Backup y recovery En Oracle Database 11g Autor: Julio Cesar Gonzalez Cervantes email: [email protected] Escribo este artículo porque al buscar sobre respaldos de Oracle o son extensas explicaciones de cómo funciona RMAN, solo hablare de lo mínimo necesario para tener un respaldo Respaldo básico y funcional con RMAN: Los scripts están pensados para implementarse en Unix/linux Respaldo completo de la base de datos completa respaldando todos los datafiles Respaldo del controlfile Respaldo completo de todos los archivelogs, permitiendo la posibilidad de mover la BD a un punto en el tiempo hacia atrás (definido por el tiempo de retención) Todos los archivos de respaldos ya se encuentran compresos al nivel más eficiente El script configura un tiempo de retención de 7 días, modifica esto dependiendo del tamaño de la BD La ubicación donde guarda los archivos de respaldo no sigue las recomendaciones OFA, los guarda en /Backup/diario por conveniencia de la SAN Dominando los pasos de recuperación se puede recuperar, mover o clonar la base de datos en 15-60 min dependiendo del tamaño de la BD El siguiente script lo guardas dentro de un archivo llamado rmandisco.rman configure retention policy to recovery window of 7 days; configure backup optimization on; configure controlfile autobackup on; configure default device type to disk; configure device type disk parallelism 1 backup type to compressed backupset; configure datafile backup copies for device type disk to 1; configure maxsetsize to unlimited; configure snapshot controlfile name to '/backup/snapshot_controlfile/controlfile'; show all; host 'mkdir /backup/diario/$(date +%Y-%m-%d)'; run { allocate channel ch1 type Disk maxpiecesize = 2600M; backup full database noexclude include current controlfile format '/backup/diario/%Y-%M-%D/datafile_%s_%p.bak' tag 'datafile diario'; } run { allocate channel ch1 type Disk maxpiecesize = 2600M; backup archivelog all format '/backup/diario/%Y-%M-%D/archivelog_%s_%p.bak' tag 'archivelog diario'; } run { allocate channel ch1 type Disk maxpiecesize = 1900M; backup format '/backup/diario/%Y-%M-%D/controlfile_%s.bak' current controlfile; } crosscheck backup; list backup of database; El respaldo más correcto y más sencillo usando RMAN para hacer Backup y recovery En Oracle Database 11g Autor: Julio Cesar Gonzalez Cervantes email: [email protected] report unrecoverable; report schema; report need backup; report obsolete; #delete noprompt expired backup of database; #delete noprompt expired backup of controlfile; #delete noprompt expired backup of archivelog all; #delete noprompt obsolete recovery window of 7 days; quit EOF Si quieres que al final de la ejecución del script borre los Backup y archivelogs que excedan el periodo de recuperación, des comenta las últimas líneas (elimina el #) Una vez teniendo este script hay que generar un archivo SHELL que mande llamar el RMAN El siguiente script se encuentra dentro de un archivo llamado rmandisco.sh : $ORACLE_HOME/bin/rman target / @/export/home/oracle/backupscripts/rmandisco.rman Luego cuando tengas ambos archivos rmandisco.rman y rmandisco.sh, dale permisos de ejecución al archivo rmandisco.sh con “ chmod 776 rmandisco.sh “ Listo, ya solo manda llamar el comando ./rmandisco.sh y se creara una carpeta dentro de /Backup/diario con la fecha y dentro se guardara todo lo necesario para recuperar la base de datos de cero Nota: estos scripts no explotan todo lo que es posible de hacer con RMAN como los respaldos incrementales, respaldos auto programados, respaldo directo a cinta, etc. Pero es lo mínimamente deseado y de la forma más eficiente Para recuperar completamente la base de datos utilizando estos respaldos: En el ejemplo estoy moviendo los archivos de respaldos a un nuevo servidor que ya tiene Oracle Database instalado, esta versión de Oracle es la misma versión que el origen y tiene la misma versión de Sistema Operativo. En el ejemplo estoy dejando la BD con exactamente el mismo nombre y exactamente las mismas rutas de los datafiles (para hacer el ejercicio lo mas básico y sencillo posible) luego subiré la manera para migrarla con otro nombre de instancia y si solo le quieres cambiar el nombre busca en otro de los tutoriales de la pagina El respaldo más correcto y más sencillo usando RMAN para hacer Backup y recovery En Oracle Database 11g Autor: Julio Cesar Gonzalez Cervantes email: [email protected] En el ejemplo estoy realizando todos los movimientos de archivos con el usuario de sistema operativo “oracle” recomiendo no moverlo con root para evitar problemas Para ejemplificar el servidor origen tiene la IP 192.168.1.2 y el servidor destino tiene 192.168.1.3 Obviamente todas las rutas de Linux asi como las fechas que pongo son únicamente para ejemplificar, probablemente las rutas de los backups asi como del HOME de Oracle deben de ser diferente en tu sistema, cambia lo que sea necesario Mueve los archivos del servidor origen al servidor destino, para esto puedes usar el comando scp (secure copy) que sirve para enviar archivos entre servidores Linux a través del puerto SSH [email protected]> scp –r /backup/diario/31-12-2013 [email protected]:/backup/diario/ Después de esto confirmas con la tecla Y, y espera que la copia sea completada Luego copia el archivo de parámetros del servidor origen al servidor destino, también con sco [email protected]> scp /app/Oracle/product/11.2.0/home1/dbs/initBD1.ora [email protected]: /app/Oracle/product/11.2.0/home1/dbs/ Cierra la sesión de terminal del servidor origen para evitar accidentes En el servidor destino exporta la variable ORACLE_SID al nombre de la BD que vas a respaldar [email protected]> export ORACLE_SID=BD1 Luego entra al sqlplus e inicia la base de datos en estado “nomount” SQL> startup nomount; Luego recupera el controlfile del Backup run {allocate channel c1 device type disk; restore controlfile from '/backup/diario/2013-12-31/controlfile_2346.bak'; } despues de escribir esto te despliega algo como El respaldo más correcto y más sencillo usando RMAN para hacer Backup y recovery En Oracle Database 11g Autor: Julio Cesar Gonzalez Cervantes email: [email protected] using target database control file instead of recovery catalog allocated channel: c1 channel c1: SID=753 device type=DISK Starting restore at 23-JUN-13 channel c1: restoring control file channel c1: restore complete, elapsed time: 00:00:03 output file name=/u01/oradata/BD1/control01.ctl output file name=/u02/oradata/BD1/control02.ctl output file name=/u03/oradata/BD1/control03.ctl Finished restore at 23-JUN-13 released channel: c1 Luego que te muestre eso, montas la base de datos escribiendo RMAN> alter database mount; Te muestra: database mounted Hasta aquí vamos bien Luego tienes que decirle al RMAN donde se encuentran los respaldos que quieres recuperar, para esto agregas la carpeta de los respaldos al catalogo interno, para esto es con el comando RMAN> catalog start with '/backup/diario/2013-12-31/'; Te muestra algo como: searching for all files that match the pattern /backup/diario/2013-12-31/ List of Files Unknown to the Database ===================================== File Name: /backup/diario/2013-12-31/archivelog_2343_1.bak File Name: /backup/diario/2013-12-31/datafile_2337_1.bak File Name: /backup/diario/2013-12-31/datafile_2338_1.bak File Name: /backup/diario/2013-12-31/datafile_2341_1.bak File Name: /backup/diario/2013-12-31/datafile_2339_1.bak File Name: /backup/diario/2013-12-31/datafile_2340_1.bak File Name: /backup/diario/2013-12-31/controlfile_2346.bak File Name: /backup/diario/2013-12-31/archivelog_2344_1.bak Do you really want to catalog the above files (enter YES or NO)? yes cataloging files... cataloging done El respaldo más correcto y más sencillo usando RMAN para hacer Backup y recovery En Oracle Database 11g Autor: Julio Cesar Gonzalez Cervantes email: [email protected] List of Cataloged Files ======================= File Name: /backup/diario/2013-12-31/archivelog_2343_1.bak File Name: /backup/diario/2013-12-31/datafile_2337_1.bak File Name: /backup/diario/2013-12-31/datafile_2338_1.bak File Name: /backup/diario/2013-12-31/datafile_2341_1.bak File Name: /backup/diario/2013-12-31/datafile_2339_1.bak File Name: /backup/diario/2013-12-31/datafile_2340_1.bak File Name: /backup/diario/2013-12-31/controlfile_2346.bak File Name: /backup/diario/2013-12-31/archivelog_2344_1.bak Hasta aqui vamos excelente, ya solo el paso final, (va todo asi como esta escrito el script se ejecuta solo al recibir } ) RMAN> run { allocate channel c1 device type disk; RESTORE DATABASE; SWITCH DATAFILE ALL; RECOVER DATABASE; } Este punto va a tardar un rato, esta recreando todos los datafiles Al final debe de salir un mensaje de error como este: unable to find archived log archived log thread=1 sequence=15915 released channel: c1 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 06/23/2013 12:27:01 RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 15915 and starting SCN of 13028136591 Este mensaje es “normal” Lo que sigue por hacer es, sal de RMAN y entra al SQLPLUS y escribe: SQL> recover database using backup controlfile until cancel; Luego te va a salir una advertencia con ORA-00289 y ORA-00280, cuando esto salga tienes que escribir textualmente CANCEL El respaldo más correcto y más sencillo usando RMAN para hacer Backup y recovery En Oracle Database 11g Autor: Julio Cesar Gonzalez Cervantes email: [email protected] Luego te indicara : Media recovery cancelled. Por ultimo paso escribe SQL> alter database open resetlogs; Este paso también tomara un tiempo, ten paciencia Cuando salga Database altered. Ya la Base de datos está funcionando y arriba, de aquí solo procede configurar los tnsnames y reiniciar el listener y ya. Si te sale el error al darle recovery o restore: RMAN-06026: some targets not found - aborting restore RMAN-06023: no backup or copy of datafile 4 found to restore RMAN-06026: some targets not found - RMAN-06024: no backup or copy of the control file found Significa que la carpeta de archivelogs NO esta vacía, entra al archivo de parámetros y modifica la ruta de archive_log_dest y pon otra ruta diferente o borra los archivelogs anteriores.
Documentos relacionados
Guía rápida para RMAN - Backup de base de datos
7.1 Backup completo de la BBDD (Whole Database Backup) RMAN> backup as copy database spfile plus archivelog; 7.2 Full Backups RMAN> backup database spfile plus archivelog; 7.3. Incremental Backups
Más detalles