Step by Step Upgrading Oracle 10gR2 to Oracle 11gR2 | Oracle Migrations

oracle_2
oracle_2 (Photo credit: ratzo)

Upgrading existing databases to the New Oracle 11gR2 (11.2.0.2.0) version using dbua

Hoy voy a compartirles la experencia de migrar de version una base en RAC .

(Tan sencillo como realizar la migracion de una Single Instance)

Lo primero que vamos hacer es instalar los binarios de 11gR2 (11.2.0.2.0) que es la version a la cual estare migrando desde 10gR2 (10.2.0.4.0).

Bajamos el software desde una de las paginas de oracle aqui y procedemos a instalarlo en los paths que ya designamos.

Finalizado esto vamos a proceder al paso mas importante que lo remarco abajo:

Tomamos un Backup, No Olvidarnos !

Una vez hecha esta tarea, me voy al $ORACLE_HOME/rdbms/admin de la base 11gR2 (11.2.0.2.0) :

$ cd /u01/app/oracle/product/11.2.0/db_oesm1n/rdbms/admin 

Ahora vamos a copiar el archivo utlu112i.sql en /tmp o en el $ORACLE_HOME/dbs 10gR2 (10.2.0.4.0)

$ cp utlu112i.sql /u01/app/oracle/product/10.2.0/db_oesm1n/dbs 

Una vez realizada esta tarea vamos a loguearnos con privilegios a nuestra base que migraremos y ejecutaremos el archivo copiado.

$ cd /u01/app/oracle/product/10.2.0/db_oesm1n/dbs
$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Mar 30 12:12:54 2012

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

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

SQL> !pwd
/u01/app/oracle/product/10.2.0/db_oesm1n/dbs

Antes de ejecutar el script, recomiendo loguear la salida.

SQL> spool upgrade_info.log
SQL> @utlu112i.sql
Oracle Database 11.2 Pre-Upgrade Information Tool 03-30-2012 12:15:57
Script Version: 11.2.0.2.0 Build: 001
.
**********************************************************************
Database:
**********************************************************************
--> name:       OT2V1N
--> version:       10.2.0.4.0
--> compatible:    10.2.0.4.0
--> blocksize:       8192
--> platform:       Linux x86 64-bit
--> timezone file: V4
.
**********************************************************************
Tablespaces: [make adjustments in the current environment]
**********************************************************************
--> SYSTEM tablespace is adequate for the upgrade.
.... minimum required size: 3312 MB
--> UNDOTBS1 tablespace is adequate for the upgrade.
.... minimum required size: 142 MB
--> SYSAUX tablespace is adequate for the upgrade.
.... minimum required size: 66727 MB
--> TEMP tablespace is adequate for the upgrade.
.... minimum required size: 61 MB
.
**********************************************************************
Flashback: OFF
**********************************************************************
**********************************************************************
Update Parameters: [Update Oracle Database 11.2 init.ora or spfile]
Note: Pre-upgrade tool was run on a lower version 64-bit database.
**********************************************************************
--> If Target Oracle is 32-Bit, refer here for Update Parameters:
-- No update parameter changes are required.
.

--> If Target Oracle is 64-Bit, refer here for Update Parameters:
-- No update parameter changes are required.
.
**********************************************************************
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     11.1        DEPRECATED     replaced by  "diagnostic_dest"
--> user_dump_dest         11.1        DEPRECATED     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
--> JServer JAVA Virtual Machine [upgrade]  VALID
--> Oracle XDK for Java      [upgrade]  VALID
--> Real Application Clusters     [upgrade]  VALID
--> Oracle Workspace Manager     [upgrade]  VALID
--> OLAP Analytic Workspace     [upgrade]  VALID
--> OLAP Catalog         [upgrade]  VALID
--> EM Repository         [upgrade]  VALID
--> Oracle Text          [upgrade]  VALID
--> Oracle XML Database      [upgrade]  VALID
--> Oracle Java Packages     [upgrade]  VALID
--> Oracle interMedia         [upgrade]  VALID
--> Spatial             [upgrade]  VALID
--> Data Mining          [upgrade]  VALID
--> Expression Filter         [upgrade]  VALID
--> Rule Manager         [upgrade]  VALID
--> Oracle OLAP API         [upgrade]  VALID
.
**********************************************************************
Miscellaneous Warnings
**********************************************************************
WARNING: --> The "cluster_database" parameter is currently "TRUE"
.... and must be set to "FALSE" prior to running a manual upgrade.
WARNING: --> Database is using a timezone file older than version 14.
.... After the release migration, it is recommended that DBMS_DST package
.... be used to upgrade the 10.2.0.4.0 database timezone version
.... to the latest version which comes with the new release.
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 4 INVALID objects.
.... USER ROS has 1 INVALID objects.
WARNING: --> EM Database Control Repository exists in the database.
.... Direct downgrade of EM Database Control is not supported. Refer to the
.... Upgrade Guide for instructions to save the EM data prior to upgrade.
WARNING: --> Your recycle bin contains 34 object(s).
.... It is REQUIRED that the recycle bin is empty prior to upgrading
.... your database.  The command:
PURGE DBA_RECYCLEBIN
.... must be executed immediately prior to executing your upgrade.
.
**********************************************************************
Recommendations
**********************************************************************
Oracle recommends gathering dictionary statistics prior to
upgrading the database.
To gather dictionary statistics execute the following command
while connected as SYSDBA:

EXECUTE dbms_stats.gather_dictionary_stats;

**********************************************************************
Oracle recommends reviewing any defined events prior to upgrading.

To view existing non-default events execute the following commands
while connected AS SYSDBA:
Events:
SELECT (translate(value,chr(13)||chr(10),' ')) FROM sys.v$parameter2
WHERE  UPPER(name) ='EVENT' AND  isdefault='FALSE'

Trace Events:
SELECT (translate(value,chr(13)||chr(10),' ')) from sys.v$parameter2
WHERE UPPER(name) = '_TRACE_EVENTS' AND isdefault='FALSE'

Changes will need to be made in the init.ora or spfile.

**********************************************************************
SQL>
SQL> spool off
SQL> quit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
$

Como podemos observar la salida del spool nos deja un reporte de algunos tarea que deberiamos ejecutar o controlar o tener en cuenta en caso de comenzar con la migracion de la base.

De esa Salida yo comence por compilar los objetos descompilados.

En el caso de no hacerlo puede aparecernos este carte de Warning donde se nos advierte que comenzara el upgrade con abjetos sin compilar.

Entocences me logueo como admin.

$ sqlplus / as sysdba

Ejecuto un metascript que tengo armado y sobre el cual hay un articulo en el BLOG.

SQL> SELECT 'EXECUTE DBMS_UTILITY.COMPILE_SCHEMA(''' || owner || ''',FALSE) ;' FROM   dba_objects WHERE  status = 'INVALID';  2    3

'EXECUTEDBMS_UTILITY.COMPILE_SCHEMA('''||OWNER||''',FALSE);'
-----------------------------------------------------------------------------
EXECUTE DBMS_UTILITY.COMPILE_SCHEMA('PUBLIC',FALSE) ;
EXECUTE DBMS_UTILITY.COMPILE_SCHEMA('PUBLIC',FALSE) ;
EXECUTE DBMS_UTILITY.COMPILE_SCHEMA('PUBLIC',FALSE) ;
EXECUTE DBMS_UTILITY.COMPILE_SCHEMA('PUBLIC',FALSE) ;
EXECUTE DBMS_UTILITY.COMPILE_SCHEMA('ROS',FALSE) ;

SQL>

Ejecuto la misma salida

SQL> EXECUTE DBMS_UTILITY.COMPILE_SCHEMA('PUBLIC',FALSE) ;

PL/SQL procedure successfully completed.

SQL> EXECUTE DBMS_UTILITY.COMPILE_SCHEMA('ROS',FALSE) ;

PL/SQL procedure successfully completed.

Tenemos que controlar la version de TIME ZONE de nuestra Base. En el caso que el resultado del query sea menor que 4 entonces debemos aplicar el patch time zone patch  5632264 de forma manual.

SQL> select * from v$timezone_file;

FILENAME    VERSION
------------ ----------
timezlrg.dat          4

Ahora me voy a ver cuantos objetos tengo en la RECYCLEBIN

SQL> PURGE DBA_RECYCLEBIN ;

DBA Recyclebin purged.

Ejecutamos las estadisticas.

SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;

PL/SQL procedure successfully completed.

Chequeo los tablespaces y sus espacios que tengo antes de comenzar la tarea.

SQL> SELECT tablespace_name, 
round(sum(BYTES/1024/1024),0) FROM dba_data_files b 
WHERE tablespace_name NOT LIKE 'TEMP%' GROUP BY b.tablespace_name; 

De la salida general que no voy a mostrar, solo me interesa el tamaño del tablespace SYSTEM

TABLESPACE_NAME            ROUND(SUM(BYTES/1024/1024),0)
------------------------------ -----------------------------
SYSTEM                            3070

20 rows selected.

SQL>

Consulto cual es el datafile asociado a ese tablespace , por que debo agrandarlo segun la recomendacion.

SQL> set line 150
SQL> col name format a80
SQL> set pages 200
SQL> select FILE#, NAME, BYTES/1024/1024 , TS# from v$datafile where NAME LIKE '%system%'; 
FILE# NAME                                         BYTES/1024/1024       TS#
---------- -------------------------------------------------------------------------------- --------------- ----------
1 +DATA/ot2v1n/datafile/system.488.779216239                               3070         0

1 row selected.

SQL> ALTER DATABASE DATAFILE '+DATA/ot2v1n/datafile/system.488.779216239' RESIZE 4000M;

Database altered.

SQL>

Ahora voy a desactivar el modo ARCHIVE de la base & el FLASHBACK.

Entonces vamos a bajar el RAC y solo voy a montar una de la instancias.

SQL> alter database mount ;

Database altered.

SQL> select flashback_on from v$database;

FLASHBACK_ON
------------------
NO

SQL> alter database noarchivelog;

Database altered.

SQL> alter database open ;

Database altered.

SQL> quit 

Otro punto a tener en cuenta es la deregistracion del servicio de RAC antiguo , de lo contrario lo detectara al querer crear uno nuevo y nos arrojara el siguiente mensaje:

CRS-2671 : Error processing attributte ‘CARDINALITY’  Value 0 …

Ahora , por una de las recomendaciones del advisor, me dice que desactive el cluster, pero esto arrojara un error en la migracion.

Asi que luego de desactivarlo y ver que el DBUA no puede avanzar , volvi al punto original y funciono.

  • Cluster Inactivo: No me funciona el DBUA y me obliga a terminar el proceso de migracion sin haber tocado la base.
SQL> sho parameter cluster

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
cluster_database             boolean     FALSE
cluster_database_instances         integer     1
cluster_interconnects             string

Este es error que aparece en el Instalador.

  • Cluster Activo: El DBUA funciona y migra la base.
SQL> sho parameter cluster

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
cluster_database             boolean     TRUE
cluster_database_instances         integer     2
cluster_interconnects             string
SQL> quit

Finalizada la implementacion de Cambios, en otra terminal me logueo y seteo las variables de 11g y voy a proceder a crear el listener que utilizara el nuevo ambiente en 11g.

$ . ot2v1n.sh.11g$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0/db_oesm1n
$ echo $ORACLE_SID
OT2V1N1$ cd $ORACLE_HOME
$ cd bin/
$ ./netcaOracle Net Services Configuration:
Configuring Listener:OT2V1N
sdat2101lx...
sdat2103lx...
Listener configuration complete.
Oracle Net Listener Startup:
Listener started successfully.
Oracle Net Services configuration successful. The exit code is 0
$

Bien, una vez que pasamos estos pasos procedemos a migrar.

Primer Paso

Tener un Backup, No Olvidarnos !

Ahora vamos a Ejecutar Con la variables de ambiente de 11GR2.

Verificar que esten bien seteadas el ORACLE_HOME & ORACLE_BASE .

$ORACLE_HOME/bin/dbua

Ahora voy a poner las capturas de pantalla de lo que se hizo.

1) Comienza el Instalador.

2) Elejimos los discos de ASM.

3) Aca tenemos la posibilidad de elejir cantidad de procesos parallelos para poder tener una migracion optima. Yo tenia una base de 500GB y use los cuatro nucleos de mi CPU.

4) En este paso ponemos el path donde ira guardando logs de diagnostico.

5) Yo elijo esta opcion por que teniamos grid control y quiero que se configure con agente del host..

6) Aca elejimos el listener que configuramos previamente.

7) Nos muestra un resumen de la migracion en un formato HTML.

8) Aca les dejo un LOG de progreso.

9) Progreso 100 % Finalizado.

10) Como paso final nos muestra un HTML con los resultados de la migracion.

Ya con este ultimo paso se termino nuestra migracion.

Despues de finalizada la migracion, modifico el parametro compatible.

Esto se hace para que active las nuevas features de Oracle 11gR2.

Veamos como esta ahora:

SQL> sho parameter compatible

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
compatible                 string     10.2.0.4.0

Los pasos serian:

SQL> alter system set compatible='11.2.0' scope=spfile sid='*'; 

Ahora subo y bajo la base y revisamos nuevamente para ver si introducimos el cambio correctamente.

SQL> sho parameter compatible

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
compatible                 string     11.2.0

No olvidarnos de activar el FLASHBACK & ARCHIVELOG MODE.

Ahora subo el servicio con comandos srvctl & ya podemos decir que finalizamos exitosamente nuestra tarea.

Pero como inquieto que soy , verifico el status de los componentes de la base:

SQL> set line 150
SQL> col COMP_NAME format a70
SQL> select comp_name,version, status from dba_registry;

COMP_NAME							       VERSION			      STATUS
---------------------------------------------------------------------- ------------------------------ -----------
Oracle Enterprise Manager					       11.2.0.2.0		      VALID
OLAP Catalog							       11.2.0.2.0		      VALID
Spatial 							       11.2.0.2.0		      VALID
Oracle Multimedia						       11.2.0.2.0		      VALID
Oracle XML Database						       11.2.0.2.0		      VALID
Oracle Text							       11.2.0.2.0		      VALID
Oracle Data Mining						       11.2.0.2.0		      VALID
Oracle Expression Filter					       11.2.0.2.0		      VALID
Oracle Rule Manager						       11.2.0.2.0		      VALID
Oracle Workspace Manager					       11.2.0.2.0		      VALID
Oracle Database Catalog Views					       11.2.0.2.0		      VALID
Oracle Database Packages and Types				       11.2.0.2.0		      VALID
JServer JAVA Virtual Machine					       11.2.0.2.0		      VALID
Oracle XDK							       11.2.0.2.0		      VALID
Oracle Database Java Packages					       11.2.0.2.0		      VALID
OLAP Analytic Workspace 					       11.2.0.2.0		      VALID
Oracle OLAP API 						       11.2.0.2.0		      VALID
Oracle Real Application Clusters				       11.2.0.2.0		      VALID
18 rows selected.

SQL>

Copio los siguientes componentes del ORACLE_HOME 10gR2 en el ORACLE_HOME 11gR2.

  1. tnsnames.ora
  2. listener.ora (Merge)
  3. sqlnet.ora
  4. init$ORACLE_SID.ora (En RAC puede apuntar al ASM.)

Y finalmente tomo un backup inicial de la base de Datos ya migrada.

Ahora puedo finalmente decir que concluyo la tarea exitosamente.

Saludos Amigos !