lunes, 18 de junio de 2012

Migración Oracle10g2 a Oracle 11g, con expdp/impdp (Parte 1)

Hay diferentes formas de completar una migración de versión, en este ejemplo veremos como hacer el upgrade a 11g con el método Export/Import desde oracle 10g2.

Los diferentes métodos son:

- Database Upgrade Assistant (dbua): Con este método se lanza la herramienta dbua y se actualiza la base de datos interactivamente siguiendo el asistente.
- Upgrade Manual: Sobre la base de datos a actualizar se ejecutan una serie de scripts de forma manual.
- Export/Import: Se exporta la base de datos a actualizar, y estos datos se importan sobre una base de datos nueva en la nueva versión. El export de la base de datos original debe realizarse con la base de datos protegida de cambios, el backup que se genera debe ser consistente.

El método que vamos a probar es Export/Import, sobre una base de datos Oracle 11g, con soporte ASM.
Elegimos este método porque nos proporciona beneficios importantes como:

- Defragmentación de los datos, el import agrega los datos en la nueva base de datos bloque a bloque, de esta forma dejamos de tener bloques vacios.
- Reestructuración de la base de datos: Nos da la posibilidad de crear los tablespaces si queremos de otra forma diferente a la original, así podemos hacer un replanteamiento del diseño si es necesario.
- Flexibilidad en la importación, nos da la opción de importar todos los objetos, algunos en concreto...
- Cambio de plataforma, si el upgrade lo tenemos que hacer sobre otro SO, o sobre otro hardware, este método nos permite hacerlo de forma transparente.

Para mas información sobre los métodos de actualización:

http://docs.oracle.com/cd/B28359_01/server.111/b28300/preup.htm#i694345

Preparación del entorno.

Preparación de los discos para ASM.

Para que el software de Oracle Grid reconozca los discos candidatos para ASM, es necesario realizar algunas operaciones previas sobre el disco.

Modificación del primer cilindro del disco.

Es necesario forzar que el primer cilindro disponible del disco sea el cilindro 1 en lugar del 0 que es como está por defecto, ASM necesita ese primer cilindro para él. Debemos realizar esta operación por cada uno de los discos que queremos que sean candidatos para un grupo de ASM.

bash-3.00# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
       7. c4t600A0B8000474BFA000046F74FCEC873d0 < SUNdisk cyl 30718 alt 2 hd 64 sec 64>  DISK1
Specify disk (enter its number): 7
selecting c4t600A0B8000474BFA000046F74FCEC873d0: DISK1
[disk formatted]
format> partition
PARTITION MENU:
        0      - change `0' partition
        1      - change `1' partition
        2      - change `2' partition
        3      - change `3' partition
        4      - change `4' partition
        5      - change `5' partition
        6      - change `6' partition
        7      - change `7' partition
        select - select a predefined table
        modify - modify a predefined partition table
        name   - name the current table
        print  - display the current table
        label  - write partition map and label to the disk
        ! - execute , then return
        quit
partition> print
Volume:  DISK1
Current partition table (original):
Total disk cylinders available: 30718 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders         Size            Blocks
  0       root    wm       0 -    64      128.00MB    (64/0/0)       262144
  1       swap    wu      64 -   127      128.00MB    (64/0/0)       262144
  2     backup    wu       0 - 30717       60.00GB    (30718/0/0) 125820928
  3 unassigned    wm       0                0         (0/0/0)             0
  4 unassigned    wm       0                0         (0/0/0)             0
  5 unassigned    wm       0                0         (0/0/0)             0
  6        usr    wm     128 - 30717       59.75GB    (30590/0/0) 125296640
  7 unassigned    wm       0                0         (0/0/0)             0

partition> 0
Part      Tag    Flag     Cylinders         Size            Blocks
  0       root    wm       0 -    64      128.00MB    (64/0/0)       262144

Enter partition id tag[root]:
Enter partition permission flags[wm]:
Enter new starting cyl[0]: 1
Enter partition size[262144b, 64c, 64e, 128.00mb, 0.12gb]:
partition> quit
format> label
Ready to label disk, continue? yes

format> quit

Para todos los discos que queramos que sean candidatos para formar parte de un grupo ASM, deberemos cambiar el propietario del raw device.

bash-3.00# chown oracle:dba /dev/rdsk/c4t600A0B8000474BFA000046F74FCEC873d0s6

Instalación Oracle 11 Grid.

Para empezar, instalaremos el nuevo entorno Oracle11 con ASM, el primer paso para ello es instalar el Oracle 11 grid infraestructure.

-bash-3.00$ pwd
/export/home/oracle/software/grid
-bash-3.00$ export DISPLAY=10.1.1.81:0.0
-bash-3.00$ ./runInstaller
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 180 MB.   Actual 4565 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 12595 MB    Passed
Checking monitor: must be configured to display at least 256 colors.    Actual 16777216    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2012-06-15_10-15-56AM. Please wait ...

Seleccionamos en nuestro caso “Instalar en servidor autónomo”, ya que no es un cluster.

















Seleccionamos el idioma.

















Elegimos los discos candidatos, que previamente hemos preparado. El tipo de redundancia en nuestro caso es externa, porque la protección nos la está dando nuestra SAN, si necesitamos que ASM nos dé la protección elegiremos Normal o Superior, dependiendo del nivel de protección deseado.

















Configuramos las contraseñas.

















Elegimos los grupos del usuario oracle.

















Configuramos los directorios BASE y el directorio donde se almacenará el software de grid.

















Indicamos el directorio donde almacenará el inventario del software instalado.

















Si aparecen advertencias en la comprobación, debemos atenderlas y resolverlas. En nuestro caso de ejemplo la primera hace referencia a la memoria de intercambio, la omitiremos puesto que es un servidor de pruebas, y la segunda, es de un parche del SUNWstudio12 que no aplica a nuestra configuración.

















Para terminar, finalizamos la instalación.

















Cuando aparezca la ventana de ejecución de scripts, deberemos lanzarlos desde la consola con el usuario root. Para finalizar, la instalación arranca el demonio de servicios de alta disponibilidad y la base de datos de ASM.


















-bash-3.00$ su -
Password:
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
# bash
bash-3.00# /oracle/app/oracle/oraInventory/orainstRoot.sh
Cambiando permisos de /oracle/app/oracle/oraInventory.
Agregando permisos de lectura y escritura para el grupo.
Eliminando permisos de lectura, escritura y ejecución para el público.

Cambiando el nombre de grupo de /oracle/app/oracle/oraInventory a dba.
La ejecución del archivo de comandos ha terminado
bash-3.00# /oracle/app/oracle/11.2/grid/root.sh
Running Oracle 11g root.sh script...

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /oracle/app/oracle/11.2/grid

Enter the full pathname of the local bin directory: [/usr/local/bin]: /oracle/app/oracle/11.2/grid/bin
The file "dbhome" already exists in /oracle/app/oracle/11.2/grid/bin.  Overwrite it? (y/n) [n]: y
   Copying dbhome to /oracle/app/oracle/11.2/grid/bin ...
The file "oraenv" already exists in /oracle/app/oracle/11.2/grid/bin.  Overwrite it? (y/n) [n]: y
   Copying oraenv to /oracle/app/oracle/11.2/grid/bin ...
The file "coraenv" already exists in /oracle/app/oracle/11.2/grid/bin.  Overwrite it? (y/n) [n]: y
   Copying coraenv to /oracle/app/oracle/11.2/grid/bin ...


Creating /var/opt/oracle/oratab file...
Entries will be added to the /var/opt/oracle/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
2012-06-15 13:53:35: Checking for super user privileges
2012-06-15 13:53:35: User has super user privileges
2012-06-15 13:53:35: Parsing the host name
Using configuration parameter file: /oracle/app/oracle/11.2/grid/crs/install/crsconfig_params
Creating trace directory
LOCAL ADD MODE
Creating OCR keys for user 'oracle', privgrp 'dba'..
Operation successful.
CRS-4664: Node oracle11-pre-zone successfully pinned.
Adding daemon to inittab
CRS-4123: Oracle High Availability Services has been started.
ohasd is starting

oracle11-pre-zone     2012/06/15 13:54:21     /oracle/app/oracle/11.2/grid/cdata/oracle11-pre-zone/backup_20120615_135421.olr
Successfully configured Oracle Grid Infrastructure for a Standalone Server
Updating inventory properties for clusterware
Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 13058 MB    Passed
The inventory pointer is located at /var/opt/oracle/oraInst.loc
The inventory is located at /oracle/app/oracle/oraInventory
'UpdateNodeList' realizado correctamente.

bash-3.00# ps -ef|grep ora
  oracle 21804 12062   0 13:57:06 ?           0:00 asm_mmnl_+ASM
  oracle 21438 12062   0 13:55:46 ?           0:01 /oracle/app/oracle/11.2/grid/bin/oraagent.bin
  oracle 21782 12062   0 13:57:05 ?           0:00 asm_diag_+ASM
  oracle 21613 12062   0 13:56:13 ?           0:00 /oracle/app/oracle/11.2/grid/bin/orarootagent.bin
  oracle 21776 12062   0 13:57:05 ?           0:00 asm_vktm_+ASM
  oracle 20806 20788   0 13:52:49 pts/1       0:00 -bash
  oracle 12821 12062   0 11:10:49 ?           4:20 /tmp/OraInstall2012-06-15_11-10-39AM/jdk/jre/bin/sparcv9/java -Doracle.instal                    le
  oracle 21611 12062   0 13:56:13 ?           0:00 /oracle/app/oracle/11.2/grid/bin/cssdagent
  oracle 21792 12062   0 13:57:06 ?           0:00 asm_lgwr_+ASM
    root 21944 20815   0 13:58:07 pts/1       0:00 grep ora
  oracle 21788 12062   0 13:57:05 ?           0:00 asm_mman_+ASM
  oracle 21796 12062   0 13:57:06 ?           0:00 asm_smon_+ASM
  oracle 21802 12062   0 13:57:06 ?           0:00 asm_mmon_+ASM
  oracle 21784 12062   0 13:57:05 ?           0:00 asm_psp0_+ASM
  oracle 21774 12062   0 13:57:05 ?           0:00 asm_pmon_+ASM
  oracle 21641 12062   0 13:56:17 ?           0:00 /oracle/app/oracle/11.2/grid/bin/diskmon.bin -d -f
  oracle 21800 12062   0 13:57:06 ?           0:00 asm_gmon_+ASM
  oracle 21790 12062   0 13:57:05 ?           0:00 asm_dbw0_+ASM
  oracle 21780 12062   0 13:57:05 ?           0:00 asm_gen0_+ASM
  oracle 21625 12062   0 13:56:16 ?           0:01 /oracle/app/oracle/11.2/grid/bin/ocssd.bin
  oracle 21786 12062   0 13:57:05 ?           0:00 asm_dia0_+ASM
  oracle 20788 20787   0 13:52:44 ?           0:00 /usr/lib/ssh/sshd
  oracle 21794 12062   0 13:57:06 ?           0:00 asm_ckpt_+ASM
  oracle 21798 12062   0 13:57:06 ?           0:00 asm_rbal_+ASM
  oracle 21077 12062   0 13:53:56 ?           0:04 /oracle/app/oracle/11.2/grid/bin/ohasd.bin reboot
  oracle 21449 12062   0 13:55:49 ?           0:00 /oracle/app/oracle/11.2/grid/bin/tnslsnr LISTENER -inherit
    root 21806 12062   0 13:57:06 ?           0:00 ora_dism_+ASM

Para finalizar pulsamos en el botón “Cerrar”.


Sigue en la 2ª parte.

4 comentarios:

  1. Disculpa ¿Esta guía es válida para hacer una migración entre una Base de Datos en Linux y una Base de Datos en Windows?, lo que pasa es que tengo planeado hacer una migración de una base de datos Oracle 10g R2 a una base de datos en Oracle 11g R2 ¿Qué opinas?

    ResponderEliminar
  2. No especifiqué bien, pero mi base de datos 10g R2 está en Windows 2003 y quiero migrar todo a una 11g R1 en Línux Suse

    ResponderEliminar
    Respuestas
    1. No problem, esta es una de las grandes ventajas de hacerlo con expdp e impdp, que puedes hacer la migración entre diferentes plataformas.

      Eliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar