
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.
- tnsnames.ora
- listener.ora (Merge)
- sqlnet.ora
- 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 !