viernes, 30 de octubre de 2015

Cómo restaurar base de datos de Oracle 11g con el mismo nombre en otra máquina con RMAN

Restaurar base de datos de Oracle con el mismo nombre en otra máquina con RMAN


Es una tarea común tener que restaurar una base de datos de Oracle 11g con el mismo nombre con RMAN en una máquina local de desarrollo para hacer pruebas o tener un respaldo reciente disponible de la información.

Algunas consideraciones antes de continuar leyendo este post es que este procedimiento fue realizado con las siguientes condiciones:
  1. Base de datos de Oracle 11g orígen en modo archivelog
  2. Base de datos de Oracle 11g destino en modo archivelog
  3. Backup completo desde RMAN (backup database plus archivelog)
  4. La base de datos destino es una instalación reciente
  5. El nombre de ambas bases de datos es el mismo, tanto de la máquina de donde se tomó el backup como el de la máquina donde se va a restaurar.
He querido mencionar esto de manera rápida ya que cada ambiente tiene sus propias características y es probable que quien lea este post cuente con algunas variaciones de estas condiciones.
Además por lo que vi estoy muy seguro de que este procedimiento funciona también para una base de datos destino que no esté en modo archivelog.

En este ejemplo mi base de datos orígen se encuentra en la unidad D mientras que la base de datos destino se encuentra en la unidad C.

Acerca del backup:

1. Desde la máquina orígen realizar un backup de la base de datos completa incluyendo los archivelogs

RMAN>BACKUP DATABASE PLUS ARCHIVELOG;

Esta instruccion te generará archivos con la fecha actual sobre las carpetas flash_recovery_area/[instancia]/BACKUPSET y flash_recovery_area/[instancia]/AUTOBACKUP

Ejemplo:

D:\app\instancia\flash_recovery_area\INSTANCIA\AUTOBACKUP\2015_10_17
D:\app\instancia\flash_recovery_area\INSTANCIA\BACKUPSET\2015_10_17

2. Crear un pfile en la maquina orígen desde sqlplus:

SQL>CREATE PFILE='C:\TEMP\pfileINSTANCIA.ora' FROM SPFILE;

3. Copiar las carpetas anteriores en el recovery area de tu base de datos destino la cual puede ser una ruta diferente de unidad o directorio.

Ejemplo:

C:\app\administrator\flash_recovery_area\INSTANCIA

4. Copiar el PFILE a cualquier dirección temporal en tu máquina destino y modificar las rutas necesarias de acuerdo a las rutas en la máquina destino.

C:\TEMP\pfileINSTANCIA.ora

instancia.__db_cache_size=285212672
instancia.__java_pool_size=16777216
instancia.__large_pool_size=16777216
instancia.__oracle_base='C:\app\administrator'#ORACLE_BASE set from environment 
instancia.__pga_aggregate_target=587202560 
instancia.__sga_target=1090519040
instancia.__shared_io_pool_size=0
instancia.__shared_pool_size=738197504
instancia.__streams_pool_size=16777216
*.audit_file_dest='C:\app\administrator\admin\INSTANCIA\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='C:\app\administrator\oradata\INSTANCIA\CONTROL01.CTL'
*.db_block_size=8192
*.db_domain=''
*.db_flashback_retention_target=60
*.db_name='INSTANCIA'
*.db_recovery_file_dest='C:\app\administrator\flash_recovery_area'
*.db_recovery_file_dest_size=53687091200
*.diagnostic_dest='C:\app\administrator'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=INSTANCIAXDB)'
*.memory_target=1674575872
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'


Procedimiento restaurar base de datos de Oracle 11g en otra máquina con RMAN en la máquina destino:

*Recomiendo siempre abrir RMAN con la consola de windows como administrador para evitar otros problemas con los que me he topado.

Una cosa importante a mencionar es que tengo inicialmente el enterprise manager configurado en la base de datos destino pero al momento de restaurar este se corrompe y ya no puedo accederlo.
Estoy tratando de averiguar como levantarlo después de restaurar la base de datos pero eso será digno de otro post.

Van a necesitar el dbid de la base de datos orígen, esto lo consiguen con una consulta:

SQL>SELECT DBID FROM V$DATABASE;

Aquí los comandos RMAN y SQL con letras chicas para que puedan leerlo por líneas.

Desde RMAN:

RMAN TARGET /
SHUTDOWN IMMEDIATE;
SET DBID 4042975402; --dbid de la base de datos orígen
STARTUP NOMOUNT PFILE='C:\TEMP\pfileINSTANCIA.ORA'; --PFILE creado en la máquina orígen y colocado en la máquina destino
RESTORE CONTROLFILE FROM 'C:\app\administrator\flash_recovery_area\INSTANCIA\AUTOBACKUP\2015_10_17\O1_MF_S_893351462_C25KVQ6D_.BKP'; --el controlfile se encuentra en el backup en la carpeta AUTOBACKUP copiada anteriormente
ALTER DATABASE MOUNT;
CROSSCHECK BACKUP; --Identificar el backup disponible en el directorio de flash recovery area
DELETE NOPROMPT EXPIRED BACKUP;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
LIST BACKUP OF DATABASE; --consulta de backups disponibles y su contenido
LIST ARCHIVELOG ALL;
LIST BACKUP; --obtener el ultimo sequence number de los archivelog en el backup. *Sumar uno para la instrucción SET UNTIL abajo
RUN
{
SET NEWNAME FOR DATAFILE 'D:\APP\INSTANCIA\ORADATA\
INSTANCIA\SYSTEM01.DBF' TO 'C:\app\administrator\oradata\INSTANCIA\SYSTEM01.DBF';
SET NEWNAME FOR DATAFILE 'D:\APP\
INSTANCIA\ORADATA\INSTANCIA\SYSAUX01.DBF' TO 'C:\app\administrator\oradata\INSTANCIA\SYSAUX01.DBF';
SET NEWNAME FOR DATAFILE 'D:\APP\
INSTANCIA\ORADATA\INSTANCIA\UNDOTBS01.DBF' TO 'C:\app\administrator\oradata\INSTANCIA\UNDOTBS01.DBF';
SET NEWNAME FOR DATAFILE 'D:\APP\
INSTANCIA\ORADATA\INSTANCIA\USERS01.DBF' TO 'C:\app\administrator\oradata\INSTANCIA\USERS01.DBF';
SET NEWNAME FOR DATAFILE 'D:\APP\
INSTANCIA\ORADATA\INSTANCIA\INSTANCIA_IDX01.DBF' TO 'C:\app\administrator\oradata\INSTANCIA\INSTANCIA_IDX01.DBF';
SET NEWNAME FOR DATAFILE 'D:\APP\
INSTANCIA\ORADATA\INSTANCIA\INSTANCIA_IDX02.DBF' TO 'C:\app\administrator\oradata\INSTANCIA\INSTANCIA_IDX02.DBF';
SET NEWNAME FOR DATAFILE 'D:\APP\
INSTANCIA\ORADATA\INSTANCIA\INSTANCIA_DAT01.DBF' TO 'C:\app\administrator\oradata\INSTANCIA\INSTANCIA_DAT01.DBF';
SET NEWNAME FOR DATAFILE 'D:\APP\
INSTANCIA\ORADATA\INSTANCIA\INSTANCIA_DAT02.DBF' TO 'C:\app\administrator\oradata\INSTANCIA\INSTANCIA_DAT02.DBF';
SET UNTIL SEQUENCE 6921 THREAD 1;
RESTORE DATABASE;
SWITCH DATAFILE ALL;
RECOVER DATABASE;
}
SQL "ALTER DATABASE RENAME FILE ''D:\app\instancia\oradata\
INSTANCIA\REDO03.LOG'' TO ''C:\app\administrator\oradata\INSTANCIA\REDO03.LOG''";
SQL "ALTER DATABASE RENAME FILE ''D:\app\
instancia\oradata\INSTANCIA\REDO02.LOG'' TO ''C:\app\administrator\oradata\INSTANCIA\REDO02.LOG''";
SQL "ALTER DATABASE RENAME FILE ''D:\app\
instancia\oradata\INSTANCIA\REDO01.LOG'' TO ''C:\app\administrator\oradata\INSTANCIA\REDO01.LOG''";
ALTER DATABASE OPEN RESETLOGS;


Ahora desde SQLPLUS: Crear un SPFILE desde el PFILE y reemplazar el tablespace temporal.

SQL> CREATE SPFILE FROM PFILE='C:\TEMP\pfileINSTANCIA.ORA';
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
SQL> CREATE TEMPORARY TABLESPACE TEMP01 TEMPFILE 'C:\app\administrator\oradata\INSTANCIA\TEMP0101.dbf' SIZE 200M AUTOEXTEND ON;

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP01;
SQL> DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE OPEN;


Espero les sirva.

Recientemente he escrito un nuevo artículo más completo sobre cómo restaurar backup de RMAN en otro servidor windows con las mismas rutas.




Cómo activar o desactivar el modo archivelog en Oracle 11g

Activar o desactivar modo archivelog en Oracle 11g


Aquí les dejo las instrucciones comunes que van a necesitar para cambiar el archivelog mode en Oracle.
Para saber en qué archivelog mode se encuentra la base de datos, utilicen el comando archive log list desde sqlplus entrando como sysdba.

Ejemplo:

C:\Users\administrator>sqlplus / as sysdba

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     4
Current log sequence           6


Para activar el modo archivelog.

Apagar, iniciar en estado mount, poner en archivelog y abrir la base de datos.

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.

Para desactivar el modo archivelog.

Apagar, iniciar en estado mount, desaactivar archivelog y abrir la base de datos.

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database noarchivelog;
Database altered.
SQL> alter database open;
Database altered.

Abajo les dejo el script completo en la línea de comandos:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\administrator>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Oct 30 10:31:58 2015

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     4
Current log sequence           6
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 4960579584 bytes
Fixed Size                  2184232 bytes
Variable Size            2617248728 bytes
Database Buffers         2332033024 bytes
Redo Buffers                9113600 bytes
Database mounted.
SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 4960579584 bytes
Fixed Size                  2184232 bytes
Variable Size            2617248728 bytes
Database Buffers         2332033024 bytes
Redo Buffers                9113600 bytes
Database mounted.
SQL> alter database noarchivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL>


Espero les sirva.

jueves, 29 de octubre de 2015

Cómo desinstalar Oracle 11g en windows

Desinstalar oracle 11g en windows


He estado haciendo algunas pruebas de recuperación de base de datos oracle 11g y en el proceso he dejado la base de datos corrupta en múltiples ocasiones. Es por esto que en algunos casos no me queda de otra mas que desinstalar Oracle 11g completamente.

Les dejo aquí los pasos para desinstalar Oracle 11g en windows.

1. Abrir una consola de windows en modo de aministrador y moverse hacia el siguiente directorio con el comando cd:

cd C:\app\administrator\product\11.2.0\dbhome_3\deinstall

 *Si no se abre en modo de administrator puede arrojar errores al hacer escrituras o tratar de remover directorios

2. Abrir el archivo deinstall.bat

C:\app\administrator\product\11.2.0\dbhome_3\deinstall>deinstall.bat

Esto va a iniciar la herramienta ORACLE DEINSTALL & DECONFIG

Las siguientes son las preguntas a responder. Las respuestas varian dependiendo de cada instalación.

Entre corchetes está la opción default que es la que más uso así que sólo doy ENTER en los casos que así corresponda.

En este caso la instalación tiene almacenamiento tipo File System (FS) y he reemplazado el nombre de mi instancia por INSTANCIA.

Specify all Single Instance listeners that are to be de-configured [LISTENER]: ENTER

Specify the list of database names that are configured in this Oracle home [INSTANCIA]: ENTER

Specify the type of this database (1.Single Instance Database|2.Oracle Restart Enabled Database) [1]: ENTER

Specify the diagnostic destination location of the database [C:\app\administrator\diag\rdbms\INSTANCIA]: ENTER

Specify the storage type used by the Database ASM|FS []: FS

Specify the list of directories if any database files exist on a shared file system. If 'INSTANCIA' sub
directory is found, then it will be deleted. Otherwise, the specified directory will be deleted. Alt
ernatively, you can specify list of database files with full path [ ]: ENTER


Specify the flash recovery area location, if it is configured on the file system. If 'INSTANCIA' subdir
ectory is found, then it will be deleted. []: C:\app\administrator\flash_recovery_area


Specify the database spfile location [ ]: C:\app\administrator\product\11.2.0\dbhome_3\database

Do you want to continue (y - yes, n - no)? [n]: y

Esto iniciara el proceso de desinstalación de Oracle 11g

Los siguientes son los elementos que va a remover la herramienta ORACLE DEINSTALL & DECONFIG:
  • Instancia de Base de datos especificada.
  • Listener especificado.
  • Servicio de base de datos y agente.
  • Directorio home de oracle.
3. Si es necesario verificar que los directorios hayan sido eliminados.

No todos los archivos son eliminados en la desinstalación por lo que tal vez requieras eliminarlos manualmente. De cualquier manera estos archivos ya no tienen ninguna funcionalidad.

Espero les sirva.