viernes, 30 de julio de 2010

Como realizar un Upgrade Manual desde versión 10g a 11g (Procedimiento Paso a Paso)


Para actualizar (upgrade) una la versión de una base Oracle existen principalmente cuatro métodos:

  1. Usar el Asistente Grafico (DBUA). Es el metodo sugerido en los manuales.
  2. Usar scripting o forma manual (la que yo siempre tiendo a usar)
  3. Export/Import
  4. CTAS (para mi gusto la mas complicada, hay que crear dblink, armar los scripts para el traspaso de los objetos, etc)

En esta nota voy a escribir un procedimiento paso a paso para actualizar usando el método manual (el 2 en la lista de arriba):



Pre-Upgrade

1. Si el upgrade es sobre el mismo equipo habria que instalar el software (el motor) 11g en un nuevo home. Se puede usar el mismo user oracle de la instalación 10g corriente y setear las variables de entorno para 11g o se podria usar un nuevo usuario oracle (ej: oracle11g).

2. Una vez instalado el software conectarse con el usuario oracle de la instalación 11g
y copiar el archivo $ORACLE_HOME/rdbms/admin/utlu112i.sql a un directorio compartido (ej: /tmp).

3. Conectarse con el usuario 10g (ej: oracle) o si se esta usando el mismo usuario setear las variables de ambiente para usar el motor 10g, para ejecutar el script copiado en el paso 2. Este script brinda información previa al upgrade que se usará para preparar la versión actual para que no haya problemas durante el upgrade

4. Conectarse con sqlplus:

$ sqlplus / as sysdba

5. Setear el spool para que no quede registro de la ejecución del script

sqlplus> spool upg_info.log

6. Ejecutar el script:

sqlplus> @/tmp/utlu112i.sql;

7. Desactivar el spool:

sqlplus> spool off

Ejemplo de Salida del Reporte de información pre-upgrade

A continuación se muestra una salida típica del script utlu112i.sql sobre una base llamada ROP10g sobre un equipo Solaris 10.


Oracle Database 11.2 Pre-Upgrade Information Tool 07-26-2010 15:14:36
**********************************************************************
Database:
**********************************************************************

--> name: ROP10G

--> version: 10.2.0.4.0

--> compatible: 10.2.0.1.0

--> blocksize: 8192

--> platform: Solaris[tm] OE (64-bit)

--> timezone file: V4

**********************************************************************
Tablespaces: [make adjustments in the current environment]

**********************************************************************

--> SYSTEM tablespace is adequate for the upgrade.

.... minimum required size: 313 MB

.... AUTOEXTEND additional space required: 83 MB

--> UNDO tablespace is adequate for the upgrade.

.... minimum required size: 121 MB

--> SYSAUX tablespace is adequate for the upgrade.

.... minimum required size: 73 MB

.... AUTOEXTEND additional space required: 23 MB

--> TEMP tablespace is adequate for the upgrade.

.... minimum required size: 61 MB

**********************************************************************

Update Parameters: [Update Oracle Database 11.2 init.ora or spfile]

**********************************************************************

WARNING: --> "sga_target" needs to be increased to at least 672 MB

**********************************************************************

Renamed Parameters: [Update Oracle Database 11.2 init.ora or spfile]

**********************************************************************

-- No renamed parameters found. No changes are required.

**********************************************************************

Obsolete/Deprecated Parameters: [Update Oracle Database 11.2 init.ora or spfile]

**********************************************************************

--> "background_dump_dest" replaced by "diagnostic_dest"

--> "user_dump_dest" replaced by "diagnostic_dest"

--> "core_dump_dest" replaced by "diagnostic_dest"

**********************************************************************

Components: [The following database components will be upgraded or installed]

**********************************************************************

--> Oracle Catalog Views [upgrade] VALID

--> Oracle Packages and Types [upgrade] VALID

**********************************************************************

Miscellaneous Warnings

**********************************************************************

WARNING: --> Database contains stale optimizer statistics.

.... Refer to the 11g Upgrade Guide for instructions to update

.... statistics prior to upgrading the database.

.... Component Schemas with stale statistics:

.... SYS

WARNING: --> Database contains INVALID objects prior to upgrade.

.... The list of invalid SYS/SYSTEM objects was written to

.... registry$sys_inv_objs.

.... The list of non-SYS/SYSTEM objects was written to

.... registry$nonsys_inv_objs.

.... Use utluiobj.sql after the upgrade to identify any new invalid

.... objects due to the upgrade.

.... USER PUBLIC has 1 INVALID objects.

.... USER SYS has 2 INVALID objects.
....
....
SQL>

Controles que se realizan con la herramienta de pre-upgrade

El script “utlu112i.sql” realiza el chequeo de los siguientes puntos:

  • Chequea si las estadísticas de diccionario están actualizadas.
  • Chequea si existen objetos invalidos.
  • Chequea si la configuración de SGA cumple con los requerimientos minimos en 11g.
  • Chequea si hay database links con passwords (11g encripta las passwords).
  • Se asegura que no haya archivos que necesiten recovery.
  • Se asegura que no haya archivos en modo backup.
  • Si el recyclebin esta activado chequea si esta vacio (si esta totalmente purgado).
  • Chequea si los archivos de timezone son de tipo 4 (los archivos que estan en $ORACLE_HOME/oracore/zoneinfo).
  • Revisa si hay refrescos de Vistas Materializadas pendientes.
  • Revisa si hay transacciones distribuidas pendientes.

Una vez que se corrigieron los warnings reportados por el script anterior se puede proceder a realizar el upgrade



Upgrade

1. Conectarse con el owner (usuario oracle) de la instancia 10g.

1.1 Verificar que no haya procesos oracle con el mismo nombre de la instancia

$ps -ef | grep -i ora | grep -v grep

1.2 Verificar que las variables de ambiente esten bien configuradas

$env | grep -i ora

2. Crear archivo pfile desde el spfile y copiarlo a $ORACLE_HOME/dbs en el nuevo equipo

3. Editar el pfile en el equipo nuevo y modificar los parametros que sea necesario (deprecated).

4. Bajar la base 10g en modo normal, si no hubiera conexiones sino se podria bajar en modo transactional, para que deje que termine las transacciones, no deje que se abran nuevas conexiones y baje la base en modo consistente y que no requiere revover. Como caso extremo tambien se podria considerar bajar la base en modo immediate.

sqlplus> shutdown transactional

5. Si la base 11g esta en otro equipo hay que transferir los archivos de base de datos (datafiles,redologs,controlfiles) al nuevo equipo en el mismo directorio y con los mismos permisos (usar comando unix scp, ftp, algun mecanismo de copiado de logical groups, etc). Si se realizará el upgrade sobre el mismo equipo y sobre los mismos archivos de base de datos no hace falta hacer nada en este punto.

6. Conectarse a la instancia 11g con sysdba

$ sqlplus / as sysdba


7. Levantar la base 11g en modo upgrade

SQPLUS> STARTUP UPGRADE


8. Setear el spool

SQLPLUS> spool upgrade11g.log


9. Ejecutar el script para obtener la información pre-upgrade

SQLPLUS> @?/rdbms/admin/catupgrd.sql;


10. Desactivar el spooling

SQLPLUS> spool off


11. Ejecutar el script utlu112s.sql para ver el resultado del upgrade.

SQLPLUS>@?/rdbms/admin/utlu112s.sql


12. Ejecutar el script utlrp.sql para recompilar stored procedures y clases java.

i) SQLPLUS>@?/rdbms/admin/utlrp.sql

ii) SQLPLUS>exec UTL_RECOMP.RECOMP_SERIAL ();


13. Verificar que todos las paquetes y clases java quedaron compiladas

SQLPLUS> select count(1) from dba_invalid_objects.


14. Crear spfile desde el pfile original.

SQLPLUS>create spfile from pfile;


15. Reiniciar la instancia en forma normal.



Ejemplo de Salida del Reporte de información post-upgrade

A continuación se muestra una salida típica del script utlu112i.sql sobre una base llamada ROP10g sobre un equipo Solaris 10

SQL> @?/rdbms/admin/utlu112s.sql;


Oracle Database 11.2 Post-Upgrade Status Tool 07-26-2010 14:32:12

Component Status Version HH:MM:SS

Oracle Server
VALID 11.2.0.1.0 00:24:02

Gathering Statistics
. 00:01:32
Total Upgrade Time: 00:25:36

PL/SQL procedure successfully completed.




Post-Upgade

1. Analizar password case-sensitive

SQLPLUS>alter system set sec_case_sensitive_logon = false scope=both;

Lo ideal seria dejar este parametro en true (default) , ya que fortalece la seguridad, pero habría que analizar como afecta algunas aplicaciones (por ejemplo algunas versiones de TOAD no se podrán conectar)

2. Setear el parametro COMPATIBLE a 11.2.0

SQLPLUS>alter system set compatible = '11.2.0' scope=spfile;

3. Habilitar los umbrales para alertas sobre tablespaces.

4. Reiniciar la instancia

5. Verificar conexión a través del listener

6. Dependiendo del tipo de backup y la herramienta que se use a veces es necesario cambiar la identificación interna de la base para que se tome como una nueva base

Como Cambiar el dbid:

SQLPLUS>shutdown immediate
SQLPLUS>startup mount
$ nid TARGET=SYS
SQLPLUS>startup mount
SQLPLUS>alter database open resetlogs

6 Backup full de la base de datos.






2 comentarios:

  1. hola excelente tu articulo y si fuera con exp/imp????

    ResponderEliminar
  2. Te podría resultar mas apropiado usar exp/imp si la base no fuera grande y ademas necesitaras realocar espacio. El procedimiento es sencillo, yo suelo exportar por owner y usar algo de scripting para crear tablespaces, users y grants.

    ResponderEliminar