Categories: Oracle 11g, Oracle11gR2

Oracle10gr2 : Disminuyendo el LOG FILE SYNC con COMMIT NOWAIT


Para comenzar la charla , les pido disculpas por el tiempo alejado de las canchas, pero fue única y exclusivamente por la carga de trabajo que tenía en mi empresa, de hecho hoy en día me encuentro dictando dos cursos por día :

- Horario de tarde : WorkShop II Ed 3 de Oracle10g
- Horario de noche : Oracle Reports Builder 11g

Así que imagínense el tiempo que tengo, pero bueno... a lo que vinimos...



El evento de espera LOG FILE SYNC se da cuando una sesión de usuario ejecuta un final de transacción por ejemplo un COMMIT o un ROLLBACK , la información almacenada en el Log Buffer para esa transacción necesita ser envíada a disco , especificamente a los archivos de redolog, cuando está finaliza , la sesión recién comienza a generar otras actividades, en otras palabras, cuando se ejecuta un término de transacción la sesión entra en un evento de espera, que está relacionado al tiempo que demora el LGWR en escribir las entradas del log buffer (en realidad son vectores, pero es materia de otro Post) hacía los redologs, cuando eso finaliza .. la transacción se acepta como válida.


A veces , cuando la aplicación es muy transaccional , el LOG FILE SYNC , aparece como un Top 5 dentro del Statspack o dentro un AWR Rpt, cuando sucede eso, hay formas de mejorar esos tiempos de respuesta.



Observación : No se recomienda llevar a cabo estos cambios sin la visación de Oracle Support




Ejecución de commit asincrónico

Como ya vimos el proceso del commit y como se vaciaban los registros desde el Log Buffer , pasamos a señalar el como ejecutar el commit asincrónico para solucionar el evento de espera LOG FILE SYNC


El comando commit posee variaciones , las cuales se pueden apreciar en el siguiente detalle
WAIT : No se retorna el mensaje de commit exitoso hasta que las entradas del LogBuffer hayan sido escritas a los redo logs

NOWAIT : El commit puede retornar el control a la aplicación aunque aún la sentencia no este registrada a los archivos de redologs, lo cual puede resultar algo peligroso.

IMMEDIATE : El proceso LGWR escribe de forma inmediata la entrada de la transacción presente en los log buffer hacía los redo logs, en otras palabras , se fuerza un I/O

BATCH : Este modo le indica a Oracle que a pesar de haber finalizado la transacción con un commit, la bajada de los vectores desde el log buffer se produzca en el ciclo normal del log buffer , por ejemplo , cuando se llena a un tercio

Por defecto , cuando ustedes ejecutan el commit se ejecuta con WAIT IMMEDIATE , pero esto se puede modificar ejecutando la siguiente sentencia

COMMIT WRITE NOWAIT IMMEDIATE , o sea, no espera a que se escriba la información del log buffer a los redo logs, entrega el control a la aplicación y hace la bajada de la información del log buffer de forma inmediata a los redo logs

Es una opción que hay que manejar con cuidado , pues puede haber pérdida de datos , por ejemplo este comando

COMMIT WRITE NOWAIT BATCH , puede dejar mucha información en memoria , indicarles que se hizo el commit exitoso y ante una caída quedar con información inconsistente.

Todo lo anterior también se puede setear mediante el parámetro de incialización correspondiente

COMMIT_WRITE

Y analizando toda esta información , para solucionar en parte el evento de espera LOG FILE SYNC , se podría cambiar el modo del commit para los procesos batch de la siguiente forma

COMMIT WRITE NOWAIT BATCH

Espero que les haya servido

Documentación necesaria
Parámetro COMMIT_WRITE
Evento de espera LOG FILE SYNC


by Ligarius
02.12.09. 13:23:18. 632 words, 7773 views. Categories: Oracle 11g, Oracle 10g, SQL / Programación, Tuning / Performance ,

Oracle 11gr2 : Tool deinstall



Si quieres desinstalar algo en Oracle , casi siempre esta a mano el OUI , cierto?

Con su interfaz gráfica y que de verdad ayuda bastante, pero como la idea de Oracle es que te quedes obsoleto lo antes posible, en la versión Oracle11gr2 lanzo al mercado una tool para realizar las desinstalaciones de productos Oracle, esta tool simplemente se llama deinstall :P , obvio, y dentro del OUI ya no aparece el "Uninstalled Products"



La acabo de usar , y por su interfaz no gráfica, me da la idea de que es mucho más segura que el OUI, además desinstala los productos aunque se hayan instalado mal. Y un dato no menor, cuando se desinstalan productos Oracle con el deinstall, si hay ASM de por medio, también resetea la cabecera de los discos para que queden como PROVISIONED en la siguiente instalación y no tener que hacer a mano un comando dd. :)

Se baja este utilitario desde la siguiente URL
http://www.oracle.com/technology/software/products/database/oracle11g/112010_linx8664soft.html

Y se llama
Oracle De-install Utility (11.2.0.1.0) for Linux x86-64 (existe también para 32 bits)

He aquí un ejemplo para ambiente RAC

- Se baja el utilitario , se descomprime el archivo

- Se ejecuta el desinstalador, indicandole el ORACLE_HOME que deseamos remover

[oracle@oracle11gnodo1 instaladores]$ cd deinstall/
[oracle@oracle11gnodo1 deinstall]$ ls -ltr
total 216
-r-xr-xr-x 1 oracle oinstall 31544 Apr 1 01:24 sshUserSetup.sh
-r--r--r-- 1 oracle oinstall 3154 Jul 13 08:01 deinstall.xml
-r-xr-xr-x 1 oracle oinstall 20670 Jul 13 08:26 deinstall
-rw-r--r-- 1 oracle oinstall 382 Aug 4 18:16 readme.txt
drwxr-xr-x 7 oracle oinstall 4096 Aug 13 05:46 jre
drwxr-xr-x 2 oracle oinstall 4096 Aug 14 01:35 utl
drwxr-xr-x 2 oracle oinstall 4096 Aug 14 01:35 response
drwxr-xr-x 2 oracle oinstall 4096 Aug 14 01:35 logs
drwxr-xr-x 2 oracle oinstall 4096 Aug 14 01:50 mapfiles
drwxrwxr-x 4 oracle oinstall 4096 Aug 14 01:53 sysman
drwxrwxr-x 3 oracle oinstall 4096 Aug 14 01:53 srvm
drwxrwxr-x 8 oracle oinstall 4096 Aug 14 01:53 perl
drwxrwxr-x 7 oracle oinstall 4096 Aug 14 01:53 oui
drwxr-xr-x 3 oracle oinstall 4096 Aug 14 01:53 lib
drwxr-xr-x 2 oracle oinstall 4096 Aug 14 01:53 jlib
drwxrwxr-x 3 oracle oinstall 4096 Aug 14 01:53 diagnostics
drwxrwxr-x 2 oracle oinstall 4096 Aug 14 01:53 dc_ocm
drwxrwxr-x 3 oracle oinstall 4096 Aug 14 01:53 cv
drwxrwxr-x 3 oracle oinstall 4096 Aug 14 01:53 crs
drwxrwxr-x 2 oracle oinstall 4096 Aug 14 01:53 bin
drwxrwxr-x 4 oracle oinstall 4096 Aug 14 01:53 assistants

[oracle@oracle11gnodo1 deinstall]$ ./deinstall -home /u01/app/11.2.0/grid

ORACLE_HOME = /u01/app/11.2.0/grid
Location of logs /home/oracle/oraInventory/logs/

############ ORACLE DEINSTALL & DECONFIG TOOL START ############

######################## CHECK OPERATION START ########################
Install check configuration START

Checking for existence of the Oracle home location /u01/app/11.2.0/grid
Oracle Home type selected for de-install is: CRS
Oracle Base selected for de-install is: /u01/app/oracle
Checking for existence of central inventory location /home/oracle/oraInventory
Checking for existence of the Oracle Grid Infrastructure home /u01/app/11.2.0/grid
The following nodes are part of this cluster: oracle11gnodo1,oracle11gnodo2

Install check configuration END

Traces log file: /home/oracle/oraInventory/logs//crsdc.log

- Ahora comienza la serie de preguntitas, relacionadas con las IP Virtuales, físicas y el formato de la máscara.

Enter an address or the name of the virtual IP used on node "oracle11gnodo1"[oracle11gnodo1-vip]

The following information can be collected by running ifconfig -a on node "oracle11gnodo1"
Enter the IP netmask of Virtual IP "192.168.239.131" on node "oracle11gnodo1"[255.255.255.0]
192.168.239.129

Enter the network interface name on which the virtual IP address "192.168.239.131" is active
eth0

Enter an address or the name of the virtual IP used on node "oracle11gnodo2"[oracle11gnodo2-vip]

The following information can be collected by running ifconfig -a on node "oracle11gnodo2"
Enter the IP netmask of Virtual IP "192.168.239.132" on node "oracle11gnodo2"[192.168.239.129]
192.168.239.130

Enter the network interface name on which the virtual IP address "192.168.239.132" is active[eth0]

Enter an address or the name of the virtual IP[]
192.168.239.131

The following information can be collected by running ifconfig -a on node "oracle11gnodo1"
Enter the IP netmask of the virtual IP "192.168.239.131"[]
255.255.255.0

Enter the network interface name on which the virtual IP address "192.168.239.131" is active
eth0

Enter an address or the name of the virtual IP[]
192.168.239.131

The following information can be collected by running ifconfig -a on node "oracle11gnodo1"
Enter the IP netmask of the virtual IP "192.168.239.131"[255.255.255.0]

Enter the network interface name on which the virtual IP address "192.168.239.131" is active[eth0]

Enter an address or the name of the virtual IP

- Una vez ingresados todos los datos, comienza realmente la desinstalación

Network Configuration check config START

Network de-configuration trace file location: /home/oracle/oraInventory/logs/netdc_check32554.log

Network Configuration check config END

Asm Check Configuration START

ASM de-configuration trace file location: /home/oracle/oraInventory/logs/asmcadc_check32555.log

ASM configuration was not detected in this Oracle home. Was ASM configured in this Oracle home (y|n) [n]: y
Specify the ASM Diagnostic Destination [ ]:
Specify the diskgroups that are managed by this ASM instance []: DATA1

De-configuring ASM will drop all the diskgroups at cleanup time. Do you want deconfig tool to drop the diskgroups y|n [y]:

######################### CHECK OPERATION END #########################

####################### CHECK OPERATION SUMMARY #######################
Oracle Grid Infrastructure Home is: /u01/app/11.2.0/grid
The cluster node(s) on which the Oracle home exists are: (Please input nodes seperated by ",", eg: node1,node2,...)oracle11gnodo1,oracle11gnodo2
Oracle Home selected for de-install is: /u01/app/11.2.0/grid
Inventory Location where the Oracle home registered is: /home/oracle/oraInventory
ASM instance will be de-configured from this Oracle home
Do you want to continue (y - yes, n - no)? [n]: y
A log of this session will be written to: '/home/oracle/oraInventory/logs/deinstall_deconfig2009-09-21_02-57-31-PM.out'
Any error messages from this session will be written to: '/home/oracle/oraInventory/logs/deinstall_deconfig2009-09-21_02-57-31-PM.err'

######################## CLEAN OPERATION START ########################
ASM de-configuration trace file location: /home/oracle/oraInventory/logs/asmcadc_clean32556.log
ASM Clean Configuration START
ASM Clean Configuration END

Network Configuration clean config START

Network de-configuration trace file location: /home/oracle/oraInventory/logs/netdc_clean32557.log

De-configuring Naming Methods configuration file on all nodes...
Naming Methods configuration file de-configured successfully.

De-configuring Local Net Service Names configuration file on all nodes...
Local Net Service Names configuration file de-configured successfully.

De-configuring Directory Usage configuration file on all nodes...
Directory Usage configuration file de-configured successfully.

De-configuring backup files on all nodes...
Backup files de-configured successfully.

The network configuration has been cleaned up successfully.

Network Configuration clean config END

- Una vez pasado lo anterior, indica que debemos ejecutar ciertos comandos con root en cada uno de los nodos.

---------------------------------------->

Run the following command as the root user or the administrator on node "oracle11gnodo2".

/home/oracle/instaladores/deinstall/perl/bin/perl -I/home/oracle/instaladores/deinstall/perl/lib -I/home/oracle/instaladores/deinstall/crs/install /home/oracle/instaladores/deinstall/crs/install/rootcrs.pl -force -delete -paramfile /home/oracle/instaladores/deinstall/response/deinstall_Ora11g_gridinfrahome2.rsp

Run the following command as the root user or the administrator on node "oracle11gnodo1".

/home/oracle/instaladores/deinstall/perl/bin/perl -I/home/oracle/instaladores/deinstall/perl/lib -I/home/oracle/instaladores/deinstall/crs/install /home/oracle/instaladores/deinstall/crs/install/rootcrs.pl -force -delete -paramfile /home/oracle/instaladores/deinstall/response/deinstall_Ora11g_gridinfrahome2.rsp -lastnode

- Ejecutamos esos comandos en cada uno de los nodos del RAC con usuario root, y el desinstalador simplemente remueve y aquellos procesos que no puede eliminar, los deja para el reboteo.

[oracle@oracle11gnodo2 ~]$ su - root
Password:
[root@oracle11gnodo2 ~]# /home/oracle/instaladores/deinstall/perl/bin/perl -I/home/oracle/instaladores/deinstall/perl/lib -I/home/oracle/instaladores/deinstall/crs/install /home/oracle/instaladores/deinstall/crs/install/rootcrs.pl -force -delete -paramfile /home/oracle/instaladores/deinstall/response/deinstall_Ora11g_gridinfrahome2.rsp
2009-09-21 15:05:48: Parsing the host name
2009-09-21 15:05:48: Checking for super user privileges
2009-09-21 15:05:48: User has super user privileges
Using configuration parameter file: /home/oracle/instaladores/deinstall/response/deinstall_Ora11g_gridinfrahome2.rsp
PRCR-1035 : Failed to look up CRS resource ora.cluster_vip.type for 1
PRCR-1068 : Failed to query resources
Cannot communicate with crsd
PRCR-1070 : Failed to check if resource ora.gsd is registered
Cannot communicate with crsd
PRCR-1070 : Failed to check if resource ora.ons is registered
Cannot communicate with crsd
PRCR-1070 : Failed to check if resource ora.eons is registered
Cannot communicate with crsd

ADVM/ACFS is not supported on Redhat 4
ACFS-9201: Not Supported
CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'oracle11gnodo2'
CRS-2673: Attempting to stop 'ora.crsd' on 'oracle11gnodo2'
CRS-4548: Unable to connect to CRSD
CRS-2675: Stop of 'ora.crsd' on 'oracle11gnodo2' failed
CRS-2679: Attempting to clean 'ora.crsd' on 'oracle11gnodo2'
CRS-4548: Unable to connect to CRSD
CRS-2678: 'ora.crsd' on 'oracle11gnodo2' has experienced an unrecoverable failure
CRS-0267: Human intervention required to resume its availability.
CRS-2795: Shutdown of Oracle High Availability Services-managed resources on 'oracle11gnodo2' has failed
CRS-4687: Shutdown command has completed with error(s).
CRS-4000: Command Stop failed, or completed with errors.
You must kill crs processes or reboot the system to properly
cleanup the processes started by Oracle clusterware
error: package cvuqdisk is not installed
Successfully deconfigured Oracle clusterware stack on this node

[oracle@oracle11gnodo1 ~]$ su - root
Password:
[root@oracle11gnodo1 ~]# /home/oracle/instaladores/deinstall/perl/bin/perl -I/home/oracle/instaladores/deinstall/perl/lib -I/home/oracle/instaladores/deinstall/crs/install /home/oracle/instaladores/deinstall/crs/install/rootcrs.pl -force -delete -paramfile /home/oracle/instaladores/deinstall/response/deinstall_Ora11g_gridinfrahome2.rsp -lastnode
2009-09-21 15:07:52: Parsing the host name
2009-09-21 15:07:52: Checking for super user privileges
2009-09-21 15:07:52: User has super user privileges
Using configuration parameter file: /home/oracle/instaladores/deinstall/response/deinstall_Ora11g_gridinfrahome2.rsp

CRS-2672: Attempting to start 'ora.cssd' on 'oracle11gnodo1'
CRS-2676: Start of 'ora.cssd' on 'oracle11gnodo1' succeeded
CRS-2672: Attempting to start 'ora.ctssd' on 'oracle11gnodo1'
CRS-2676: Start of 'ora.ctssd' on 'oracle11gnodo1' succeeded
CRS-2679: Attempting to clean 'ora.asm' on 'oracle11gnodo1'
CRS-5011: Check of resource "+ASM" failed: details at "(:CLSN00006:)" in "/u01/app/11.2.0/grid/log/oracle11gnodo1/agent/ohasd/oraagent_oracle/oraagent_oracle.log"
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0
CRS-5011: Check of resource "+ASM" failed: details at "(:CLSN00006:)" in "/u01/app/11.2.0/grid/log/oracle11gnodo1/agent/ohasd/oraagent_oracle/oraagent_oracle.log"
CRS-2681: Clean of 'ora.asm' on 'oracle11gnodo1' succeeded
CRS-2672: Attempting to start 'ora.asm' on 'oracle11gnodo1'
CRS-2676: Start of 'ora.asm' on 'oracle11gnodo1' succeeded
CRS-2673: Attempting to stop 'ora.cssdmonitor' on 'oracle11gnodo1'
CRS-2677: Stop of 'ora.cssdmonitor' on 'oracle11gnodo1' succeeded
CRS-2529: Unable to act on 'ora.cssd' because that would require stopping or relocating 'ora.asm', but the force option was not specified
CRS-4000: Command Stop failed, or completed with errors.
Command return code of 1 (256) from command: /u01/app/11.2.0/grid/bin/crsctl stop resource ora.cssd -init
PRCR-1068 : Failed to query resources
Cannot communicate with crsd
PRCR-1068 : Failed to query resources
Cannot communicate with crsd
PRCR-1068 : Failed to query resources
Cannot communicate with crsd
PRCR-1068 : Failed to query resources
Cannot communicate with crsd
PRCR-1035 : Failed to look up CRS resource ora.cluster_vip.type for 1
PRCR-1068 : Failed to query resources
Cannot communicate with crsd
PRCR-1070 : Failed to check if resource ora.gsd is registered
Cannot communicate with crsd
PRCR-1070 : Failed to check if resource ora.ons is registered
Cannot communicate with crsd
PRCR-1070 : Failed to check if resource ora.eons is registered
Cannot communicate with crsd

ADVM/ACFS is not supported on Redhat 4
ACFS-9201: Not Supported

CRS-2673: Attempting to stop 'ora.ctssd' on 'oracle11gnodo1'
CRS-2673: Attempting to stop 'ora.evmd' on 'oracle11gnodo1'
CRS-2673: Attempting to stop 'ora.asm' on 'oracle11gnodo1'
CRS-2677: Stop of 'ora.evmd' on 'oracle11gnodo1' succeeded
CRS-2677: Stop of 'ora.ctssd' on 'oracle11gnodo1' succeeded
CRS-2677: Stop of 'ora.asm' on 'oracle11gnodo1' succeeded
CRS-2673: Attempting to stop 'ora.cssd' on 'oracle11gnodo1'
CRS-2677: Stop of 'ora.cssd' on 'oracle11gnodo1' succeeded
CRS-2673: Attempting to stop 'ora.diskmon' on 'oracle11gnodo1'
CRS-2677: Stop of 'ora.diskmon' on 'oracle11gnodo1' succeeded
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'oracle11gnodo1'
CRS-2676: Start of 'ora.cssdmonitor' on 'oracle11gnodo1' succeeded
CRS-2672: Attempting to start 'ora.cssd' on 'oracle11gnodo1'
CRS-2672: Attempting to start 'ora.diskmon' on 'oracle11gnodo1'
CRS-2676: Start of 'ora.diskmon' on 'oracle11gnodo1' succeeded
CRS-2676: Start of 'ora.cssd' on 'oracle11gnodo1' succeeded
This ASM diskgroup does not contain voting disks to be deleted
CRS-2672: Attempting to start 'ora.ctssd' on 'oracle11gnodo1'
CRS-2676: Start of 'ora.ctssd' on 'oracle11gnodo1' succeeded
CRS-2672: Attempting to start 'ora.asm' on 'oracle11gnodo1'
CRS-2676: Start of 'ora.asm' on 'oracle11gnodo1' succeeded
ASM de-configuration trace file location: /home/oracle/oraInventory/logs/asmcadc_clean2043844166297175867.log
ASM Clean Configuration START
ASM Clean Configuration END

ASM with SID +ASM1 deleted successfully. Check /home/oracle/oraInventory/logs/asmcadc_clean2043844166297175867.log for details.

CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'oracle11gnodo1'
CRS-2673: Attempting to stop 'ora.gpnpd' on 'oracle11gnodo1'
CRS-2673: Attempting to stop 'ora.cssdmonitor' on 'oracle11gnodo1'
CRS-2673: Attempting to stop 'ora.ctssd' on 'oracle11gnodo1'
CRS-2673: Attempting to stop 'ora.mdnsd' on 'oracle11gnodo1'
CRS-2677: Stop of 'ora.cssdmonitor' on 'oracle11gnodo1' succeeded
CRS-2677: Stop of 'ora.gpnpd' on 'oracle11gnodo1' succeeded
CRS-2677: Stop of 'ora.mdnsd' on 'oracle11gnodo1' succeeded
CRS-2677: Stop of 'ora.ctssd' on 'oracle11gnodo1' succeeded
CRS-2673: Attempting to stop 'ora.cssd' on 'oracle11gnodo1'
CRS-2677: Stop of 'ora.cssd' on 'oracle11gnodo1' succeeded
CRS-2673: Attempting to stop 'ora.diskmon' on 'oracle11gnodo1'
CRS-2673: Attempting to stop 'ora.gipcd' on 'oracle11gnodo1'
CRS-2677: Stop of 'ora.gipcd' on 'oracle11gnodo1' succeeded
CRS-2677: Stop of 'ora.diskmon' on 'oracle11gnodo1' succeeded
CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'oracle11gnodo1' has completed
CRS-4133: Oracle High Availability Services has been stopped.

error: package cvuqdisk is not installed
Successfully deconfigured Oracle clusterware stack on this node

- Una vez terminado lo anterior , procedemos a dar ENTER

Press Enter after you finish running the above commands

<----------------------------------------
Oracle Universal Installer clean START

Detach Oracle home '/u01/app/11.2.0/grid' from the central inventory on the local node : Done

Delete directory '/u01/app/11.2.0/grid' on the local node : Done

Delete directory '/u01/app/oracle' on the local node : Done

Detach Oracle home '/u01/app/11.2.0/grid' from the central inventory on the remote nodes 'oracle11gnodo2' : Done

Delete directory '/u01/app/11.2.0/grid' on the remote nodes 'oracle11gnodo2' : Done

Delete directory '/u01/app/oracle' on the remote nodes 'oracle11gnodo2' : Done

Oracle Universal Installer cleanup was successful.

Oracle Universal Installer clean END

Oracle install clean START

Clean install operation removing temporary directory '/tmp/install' on node 'oracle11gnodo1'
Clean install operation removing temporary directory '/tmp/install' on node 'oracle11gnodo2'

Oracle install clean END

Moved default properties file /home/oracle/instaladores/deinstall/response/deinstall_Ora11g_gridinfrahome2.rsp as /home/oracle/instaladores/deinstall/response/deinstall_Ora11g_gridinfrahome2.rsp3

######################### CLEAN OPERATION END #########################

- Y muestra en esta sección lo más importante, el resumen :>>

####################### CLEAN OPERATION SUMMARY #######################
ASM instance was de-configured successfully from the Oracle home
Oracle Clusterware is stopped and successfully de-configured on node "oracle11gnodo2"
Oracle Clusterware is stopped and successfully de-configured on node "oracle11gnodo1"
Oracle Clusterware is stopped and de-configured successfully.
Successfully detached Oracle home '/u01/app/11.2.0/grid' from the central inventory on the local node.
Successfully deleted directory '/u01/app/11.2.0/grid' on the local node.
Successfully deleted directory '/u01/app/oracle' on the local node.
Successfully detached Oracle home '/u01/app/11.2.0/grid' from the central inventory on the remote nodes 'oracle11gnodo2'.
Successfully deleted directory '/u01/app/11.2.0/grid' on the remote nodes 'oracle11gnodo2'.
Successfully deleted directory '/u01/app/oracle' on the remote nodes 'oracle11gnodo2'.
Oracle Universal Installer cleanup was successful.

Oracle install successfully cleaned up the temporary directories.
#######################################################################

############# ORACLE DEINSTALL & DECONFIG TOOL END #############

La herramienta desinstala absolutamente todo, es bastante poderosa, no se cae, pero... en las pruebas efectuadas, se demora bastante.

Más información del deinstall AQUÍ

Espero les sirva

by Ligarius
22.09.09. 14:31:06. 2537 words, 52044 views. Categories: Base de datos, Instalación, Oracle11gR2 ,

Oracle11gr1 : DUPLICATE ACTIVE DATABASE de RMAN



En este pequeño y sencillo paso a paso , se describirá como crear una copia de una base de datos, sin necesidad de tener un respaldo de RMAN de por medio.

En Oracle 11gr1 , podemos generar una copia de BBDD Oracle mediante el comando DUPLICATE, lo que lo diferencia de Oracle 10g, es que en 11gr1 no necesitamos respaldo previo , que bien :P



Pues bien, lo que nos convoca.


1.- Crear Listener
Se debe generar un listener, el cual contenga las entradas de la instancia nueva y claro, el origen de donde sacaremos los datos.

LISTER11G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle11g.inmotion.cl)(PORT = 1521))
)

SID_LIST_LISTER11G =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.1.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = copia)
(ORACLE_HOME = /u01/app/oracle/product/11.1.0/db_1)
(SID_NAME = copia)
)
)



2.- Verificar servicios
Al momento de levantar el listener, debe estar proporcionando disponibilidad a ambos servicios

[oracle@oracle11g admin]$ lsnrctl start LISTER11G

LSNRCTL for Linux: Version 11.1.0.6.0 - Production on 21-AUG-2009 12:00:03

Copyright (c) 1991, 2007, Oracle. All rights reserved.

Starting /u01/app/oracle/product/11.1.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.1.0.6.0 - Production
System parameter file is /u01/app/oracle/product/11.1.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/oracle11g/lister11g/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g.inmotion.cl)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle11g.inmotion.cl)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTER11G
Version TNSLSNR for Linux: Version 11.1.0.6.0 - Production
Start Date 21-AUG-2009 12:00:03
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.1.0/db_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/oracle11g/lister11g/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g.inmotion.cl)(PORT=1521)))
Services Summary...
Service "copia" has 1 instance(s).
Instance "copia", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@oracle11g admin]$

3.- Modificación TNSNAMES.ORA
Se debe añadir la siguiente entrada al archivo tnsnames.ora

copia =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle11g.inmotion.cl)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = copia)

)
)


4.- Crear archivo de inicialziación
Necesitamos generar un archivo de inicialización pfile, el cual contenga sólo un parámetro, el db_name, el resto de los parámetros serán seteados con el DUPLICATE ACTIVE DATABASE

[oracle@oracle11g dbs]$ ls -ltr initcopia.ora
-rw-r--r-- 1 oracle oinstall 14 Aug 21 12:02 initcopia.ora
[oracle@oracle11g dbs]$ more initcopia.ora
db_name=copia


5. - Crear archivo de password
Se debe generar un archivo de password, dado que el DUPLICATE ACTIVE DATABASE se conecta mediante SYSDBA a la instancia remota. Como observación , la password debe ser exactamente la misma , entre la instancia de origen y la de destino.

[oracle@oracle11g dbs]$ orapwd file=orapwcopia password=oracle entries=5
[oracle@oracle11g dbs]$ ls -ltr *copia*
-rw-r--r-- 1 oracle oinstall 14 Aug 21 12:02 initcopia.ora
-rw-r----- 1 oracle oinstall 2048 Aug 21 12:06 orapwcopia
[oracle@oracle11g dbs]$


6.- Iniciar instancia auxiliar
Se debe iniciar la instancia auxiliar en estado NOMOUNT , en esta instancia es donde quedarán los datos de la primaria

[oracle@oracle11g dbs]$ export ORACLE_SID=copia
[oracle@oracle11g dbs]$ sqlplus /nolog

SQL*Plus: Release 11.1.0.6.0 - Production on Fri Aug 21 12:07:52 2009

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

SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.

Total System Global Area 146472960 bytes
Fixed Size 1298472 bytes
Variable Size 92278744 bytes
Database Buffers 50331648 bytes
Redo Buffers 2564096 bytes
SQL>


7.- Conexión con RMAN a la primaria
Nos conectamos a RMAN , con la instancia primaria , la base de datos debe estar abierta

[oracle@oracle11g dbs]$ rman target sys/oracle@orcl

Recovery Manager: Release 11.1.0.6.0 - Production on Fri Aug 21 12:09:22 2009

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

connected to target database: ORCL (DBID=1218194307)

RMAN>


8.- Conexión con RMAN a la auxiliar
Nos conectamos a través de RMAN a la instancia auxiliar

RMAN> connect auxiliary sys/oracle@copia

connected to auxiliary database: COPIA (not mounted)

RMAN>

Se debe recordar que esta entrada (@copia) fue creada en el punto 3

9.- Creación de directorios
Se deben generar todos los directorios nuevos que vamos a utilizar en nuestra nueva instancia

10.- Construcción del comando DUPLICATE DATABASE
Ahora podemos ejecutar nuestro comando DUPLICATE DATABASE mediante RMAN , de la siguiente forma

run {
set newname for datafile '/u01/app/oracle/oradata/orcl/users01.dbf' to '/u01/app/oracle/oradata/copia1/users01.dbf';
set newname for datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf' to '/u01/app/oracle/oradata/copia2/undotbs01.dbf';
set newname for datafile '/u01/app/oracle/oradata/orcl/sysaux01.dbf' to '/u01/app/oracle/oradata/copia3/sysaux01.dbf';
set newname for datafile '/u01/app/oracle/oradata/orcl/system01.dbf' to '/u01/app/oracle/oradata/copia4/system01.dbf';

duplicate target database to copia
from active database
db_file_name_convert '/u01/app/oracle/oradata/orcl' , '/u01/app/oracle/oradata/copia'
spfile parameter_value_convert = '/u01/app/oracle/admin/orcl' , '/u01/app/oracle/admin/copia'
set log_file_name_convert = '/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/copia'
set audit_file_dest='/u01/app/oracle/admin/copia/adump'
set log_archive_dest_1=''
set memory_target='183001600'
set dispatchers='(PROTOCOL=TCP) (SERVICE=copiaXDB)'
set control_files='/u01/app/oracle/oradata/copia1/control01.ctl','/u01/app/oracle/oradata/copia2/control02.ctl','/u01/app/oracle/oradata/copia3/control03.ctl'
set db_recovery_file_dest_size = '2294967296';
}


11.- Ejecución del comando DUPLICATE ACTIVE
Mediante el anterior script, se comienza a generar la copia de la base de datos.

executing command: SET NEWNAME
using target database control file instead of recovery catalog

executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME

Starting Duplicate Db at 22-AUG-09
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=97 device type=DISK

contents of Memory Script:
{
backup as copy reuse
file '/u01/app/oracle/product/11.1.0/db_1/dbs/spfileorcl.ora' auxiliary format '/u01/app/oracle/product/11.1.0/db_1/dbs/spfilecopia.ora' ;
sql clone "alter system set spfile= ''/u01/app/oracle/product/11.1.0/db_1/dbs/spfilecopia.ora''";
}
executing Memory Script

Starting backup at 22-AUG-09
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=154 device type=DISK
Finished backup at 22-AUG-09

sql statement: alter system set spfile= ''/u01/app/oracle/product/11.1.0/db_1/dbs/spfilecopia.ora''

contents of Memory Script:
{
sql clone "alter system set db_name = ''COPIA'' comment= ''duplicate'' scope=spfile";
sql clone "alter system set log_file_name_convert = ''/u01/app/oracle/oradata/orcl'', ''/u01/app/oracle/oradata/copia'' comment= '''' scope=spfile";
sql clone "alter system set audit_file_dest = ''/u01/app/oracle/admin/copia/adump'' comment= '''' scope=spfile";
sql clone "alter system set log_archive_dest_1 = '''' comment= '''' scope=spfile";
sql clone "alter system set memory_target = 183001600 comment= '''' scope=spfile";
sql clone "alter system set dispatchers = ''(PROTOCOL=TCP) (SERVICE=copiaXDB)'' comment= '''' scope=spfile";
sql clone "alter system set control_files = ''/u01/app/oracle/oradata/copia1/control01.ctl'', ''/u01/app/oracle/oradata/copia2/control02.ctl'', ''/u01/app/oracle/oradata/copia3/control03.ctl'' comment= '''' scope=spfile";
sql clone "alter system set db_recovery_file_dest_size = 2294967296 comment= '''' scope=spfile";
shutdown clone immediate;
startup clone nomount ;
}
executing Memory Script

sql statement: alter system set db_name = ''COPIA'' comment= ''duplicate'' scope=spfile
sql statement: alter system set log_file_name_convert = ''/u01/app/oracle/oradata/orcl'', ''/u01/app/oracle/oradata/copia'' comment= '''' scope=spfile
sql statement: alter system set audit_file_dest = ''/u01/app/oracle/admin/copia/adump'' comment= '''' scope=spfile
sql statement: alter system set log_archive_dest_1 = '''' comment= '''' scope=spfile
sql statement: alter system set memory_target = 183001600 comment= '''' scope=spfile
sql statement: alter system set dispatchers = ''(PROTOCOL=TCP) (SERVICE=copiaXDB)'' comment= '''' scope=spfile
sql statement: alter system set control_files = ''/u01/app/oracle/oradata/copia1/control01.ctl'', ''/u01/app/oracle/oradata/copia2/control02.ctl'', ''/u01/app/oracle/oradata/copia3/control03.ctl'' comment= '''' scope=spfile
sql statement: alter system set db_recovery_file_dest_size = 2294967296 comment= '''' scope=spfile

Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area 184127488 bytes

Fixed Size 1298752 bytes
Variable Size 142610112 bytes
Database Buffers 37748736 bytes
Redo Buffers 2469888 bytes

contents of Memory Script:
{
set newname for datafile 1 to "/u01/app/oracle/oradata/copia4/system01.dbf";
set newname for datafile 2 to "/u01/app/oracle/oradata/copia3/sysaux01.dbf";
set newname for datafile 3 to "/u01/app/oracle/oradata/copia2/undotbs01.dbf";
set newname for datafile 4 to "/u01/app/oracle/oradata/copia1/users01.dbf";
backup as copy reuse
datafile 1 auxiliary format
"/u01/app/oracle/oradata/copia4/system01.dbf" datafile auxiliary format
"/u01/app/oracle/oradata/copia3/sysaux01.dbf" datafile auxiliary format
"/u01/app/oracle/oradata/copia2/undotbs01.dbf" datafile auxiliary format
"/u01/app/oracle/oradata/copia1/users01.dbf" ;
sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME

Starting backup at 22-AUG-09
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
output file name=/u01/app/oracle/oradata/copia4/system01.dbf tag=TAG20090822T205622 RECID=0 STAMP=0
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:07
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
output file name=/u01/app/oracle/oradata/copia3/sysaux01.dbf tag=TAG20090822T205622 RECID=0 STAMP=0
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:56
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf
output file name=/u01/app/oracle/oradata/copia1/users01.dbf tag=TAG20090822T205622 RECID=0 STAMP=0
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
output file name=/u01/app/oracle/oradata/copia2/undotbs01.dbf tag=TAG20090822T205622 RECID=0 STAMP=0
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07
Finished backup at 22-AUG-09

sql statement: alter system archive log current
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "COPIA" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ( '/u01/app/oracle/oradata/copia/redo01.log' ) SIZE 50 M REUSE,
GROUP 2 ( '/u01/app/oracle/oradata/copia/redo02.log' ) SIZE 50 M REUSE,
GROUP 3 ( '/u01/app/oracle/oradata/copia/redo03.log' ) SIZE 50 M REUSE
DATAFILE
'/u01/app/oracle/oradata/copia4/system01.dbf'
CHARACTER SET WE8MSWIN1252


contents of Memory Script:
{
backup as copy reuse
archivelog like "/u01/app/oracle/product/11.1.0/db_1/dbs/arch1_25_690413581.dbf" auxiliary format
"/u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_25_%u_.arc" archivelog like
"/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2009_08_22/o1_mf_1_25_59154osg_.arc" auxiliary format
"/u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_25_%u_.arc" ;
catalog clone recovery area;
switch clone datafile all;
}
executing Memory Script

Starting backup at 22-AUG-09
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log copy
input archived log thread=1 sequence=25 RECID=19 STAMP=695595606
output file name=/u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_25_0lknbsj5_.arc RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting archived log copy
input archived log thread=1 sequence=25 RECID=20 STAMP=695595606
output file name=/u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_25_0mknbsjs_.arc RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:02
Finished backup at 22-AUG-09

searching for all files in the recovery area

List of Files Unknown to the Database
=====================================
File Name: /u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_25_0lknbsj5_.arc
File Name: /u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_25_0mknbsjs_.arc
File Name: /u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_23_0fkn9m61_.arc
File Name: /u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_23_0gkn9m6i_.arc
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_25_0lknbsj5_.arc
File Name: /u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_25_0mknbsjs_.arc
File Name: /u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_23_0fkn9m61_.arc
File Name: /u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_23_0gkn9m6i_.arc

datafile 4 switched to datafile copy
input datafile copy RECID=1 STAMP=695595667 file name=/u01/app/oracle/oradata/copia1/users01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=695595668 file name=/u01/app/oracle/oradata/copia2/undotbs01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=3 STAMP=695595668 file name=/u01/app/oracle/oradata/copia3/sysaux01.dbf

contents of Memory Script:
{
set until scn 1066933;
recover clone database delete archivelog ;
}
executing Memory Script

executing command: SET until clause

Starting recover at 22-AUG-09
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=153 device type=DISK

starting media recovery

archived log for thread 1 with sequence 25 is already on disk as file /u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_25_0mknbsjs_.arc
archived log file name=/u01/app/oracle/flash_recovery_area/COPIA/archivelog/2009_08_22/o1_mf_1_25_0mknbsjs_.arc thread=1 sequence=25
media recovery complete, elapsed time: 00:00:02
Finished recover at 22-AUG-09

contents of Memory Script:
{
shutdown clone immediate;
startup clone nomount ;
}
executing Memory Script

database dismounted
Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area 184127488 bytes

Fixed Size 1298752 bytes
Variable Size 146804416 bytes
Database Buffers 33554432 bytes
Redo Buffers 2469888 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "COPIA" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ( '/u01/app/oracle/oradata/copia/redo01.log' ) SIZE 50 M REUSE,
GROUP 2 ( '/u01/app/oracle/oradata/copia/redo02.log' ) SIZE 50 M REUSE,
GROUP 3 ( '/u01/app/oracle/oradata/copia/redo03.log' ) SIZE 50 M REUSE
DATAFILE
'/u01/app/oracle/oradata/copia4/system01.dbf'
CHARACTER SET WE8MSWIN1252


contents of Memory Script:
{
set newname for tempfile 1 to "/u01/app/oracle/oradata/copia/temp01.dbf";
switch clone tempfile all;
catalog clone datafilecopy "/u01/app/oracle/oradata/copia3/sysaux01.dbf";
catalog clone datafilecopy "/u01/app/oracle/oradata/copia2/undotbs01.dbf";
catalog clone datafilecopy "/u01/app/oracle/oradata/copia1/users01.dbf";
switch clone datafile all;
}
executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to /u01/app/oracle/oradata/copia/temp01.dbf in control file

cataloged datafile copy
datafile copy file name=/u01/app/oracle/oradata/copia3/sysaux01.dbf RECID=1 STAMP=695595722

cataloged datafile copy
datafile copy file name=/u01/app/oracle/oradata/copia2/undotbs01.dbf RECID=2 STAMP=695595723

cataloged datafile copy
datafile copy file name=/u01/app/oracle/oradata/copia1/users01.dbf RECID=3 STAMP=695595724

datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=695595724 file name=/u01/app/oracle/oradata/copia1/users01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=695595723 file name=/u01/app/oracle/oradata/copia2/undotbs01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=1 STAMP=695595722 file name=/u01/app/oracle/oradata/copia3/sysaux01.dbf

contents of Memory Script:
{
Alter clone database open resetlogs;
}
executing Memory Script


database opened
Finished Duplicate Db at 22-AUG-09



RMAN>


Documentación sobre DUPLICATE ACTIVE DATABASE

Espero les sirva

by Ligarius
13.09.09. 07:17:34. 2585 words, 12562 views. Categories: Base de datos, Oracle 11g ,

Oracle 11gr2 : Claúsula PREPROCESSOR para tablas externas



En Oracle11gr2 existen las tablas externas al igual que en anteriores versiones de Oracle.

Pero en la última versión de Oracle vienen con una pequeña claúsula, la cual las hace más novedoss y poderosas..



Imaginense este escenario.

a) Hay un archivo plano y necesito poder calcular la cantidad total de dinero que trae una columna X en ese archivo (tiene 400 mil filas).
Para solucionar lo anterior simplemente creo una tabla externo y ocupo las funciones por todos sabidas (SUM).

b) Hay un archivo plano , y necesito calcular el mismo valor sobre una columna de cantidad , pero ... el gran detalle es que ese archivo plano comprimido pesa 800MB, descomprimido, puede llegar sin problemas a las 250GB, ¿qué hago? , ¿lo descomprimo y hago split? |-|

Pues para lo anterior en Oracle11gr2 , nace una nueva claúsula en las tablas externas, está claúsula llamada PREPROCESSOR permite ejecutar un comando sobre el archivo y el resultado poder ser manipulado con la tabla externa, en otras palabras, puedo DESCOMPRIMIR EL ARCHIVO ANTES DE UTILIZARLO con la tabla externa :>>

He aquí un ejemplo :

1) Creo un directorio de trabajo

SQL> CREATE OR REPLACE DIRECTORY dir_externos as '/home/oracle/externo';


2) Otorgo grant de lectura y escritura (el caso sólo es pedagógico, nunca debiesen darle privilegios a PUBLIC)

SQL> grant read , write on directory dir_externos to public;

Grant succeeded.


3) Creo una tabla externa común y silvestre

SQL> create table externos1 (
2 campo1 number(10) ,
3 campo2 varchar2(10)
4 )
5 organization external
6 (
7 type oracle_loader
8 default directory dir_externos
9 ACCESS PARAMETERS
10 (
11 records delimited by newline
12 badfile dir_externos:'externos.bad'
13 logfile dir_externos:'externos.log'
14 fields terminated by ','
15 (campo1,campo2)
16 )
17 LOCATION ('archivo_sin_comprimir.txt')
18 )
19 PARALLEL
20 REJECT LIMIT UNLIMITED;

Table created.


4) Consulto el archivo plano mediante sistema operativo

[oracle@oracle11g externo]$ more archivo_sin_comprimir.txt
1,A
2,3
10000,AAAAA
1202020,HHH1111


5) Consulto el archivo plano mediante la tabla externa

SQL> select * from externos1;

CAMPO1 CAMPO2
---------- ----------
1 A
2 3
10000 AAAAA
1202020 HHH1111


6) Comprimo el archivo plano que está en disco

[oracle@oracle11g externo]$ gzip archivo_sin_comprimir.txt
[oracle@oracle11g externo]$ ls -ltr
total 16
-rw-r--r-- 1 oracle oinstall 76 Sep 10 15:27 archivo_sin_comprimir.txt.gz


7) Creo otra tabla externa, pero esta vez apuntando al archivo plano comprimido

SQL> create table externos2 (
2 campo1 number(10) ,
3 campo2 varchar2(10)
)
4 5 organization external
6 (
type oracle_loader
7 8 default directory dir_externos
9 ACCESS PARAMETERS
10 (
11 records delimited by newline
12 badfile dir_externos:'externos2.bad'
13 logfile dir_externos:'externos2.log'
14 fields terminated by ','
15 (campo1,campo2)
16 )
17 LOCATION ('archivo_sin_comprimir.txt.gz')
18 )
19 PARALLEL
20 REJECT LIMIT UNLIMITED;


8) Y cuando consulto la tabla, no aparecen registros ¿por qué?

SQL> select * from externos2;

no rows selected

SQL>


9) Si busco el contenido del archivo de BAD del archivo plano, nos daremos cuenta que trato de leer un registro desde el archivo comprimido, pero no pudo pues no era el formato que se le había declarado al momento de crear la tabla externa

[oracle@oracle11g externo]$ more externos2.bad
#S©J
[oracle@oracle11g externo]$



10) Si vemos el log del proceso, claramente veremos el problema que hubo

[oracle@oracle11g externo]$ more externos2.log
LOG file opened at 09/10/09 15:28:29

Field Definitions for table EXTERNOS2
Record format DELIMITED BY NEWLINE
Data in file has same endianness as the platform
Rows with all null fields are accepted

Fields in Data Source:

CAMPO1 CHAR (255)
Terminated by ","
Trim whitespace same as SQL Loader
CAMPO2 CHAR (255)
Terminated by ","
Trim whitespace same as SQL Loader

LOG file opened at 09/10/09 15:28:30

Field Definitions for table EXTERNOS2
Record format DELIMITED BY NEWLINE
Data in file has same endianness as the platform
Rows with all null fields are accepted

Fields in Data Source:

CAMPO1 CHAR (255)
Terminated by ","
Trim whitespace same as SQL Loader
CAMPO2 CHAR (255)
Terminated by ","
Trim whitespace same as SQL Loader
error processing column CAMPO1 in row 1 for datafile /home/oracle/externo/archivo_sin_comprimir.txt.gz
ORA-01722: invalid number


11) Procedemos a crear otro directorio, este directorio es la ruta donde se encuentra el utilitario para descomprimir, que para nuestro caso es gunzip

SQL> CREATE OR REPLACE DIRECTORY exec_dir_externos as '/usr/bin/';
SQL> grant read , write on directory exec_dir_externos to public;


12)Procedemos a generar una tabla externa, pero con la claúsula PREPROCESSES , para que el archivo con extensión .gz sea descomprimido

create table externos_comprimidos (
campo1 number(10) ,
campo2 varchar2(10)
)
organization external
(
type oracle_loader
default directory dir_externos
ACCESS PARAMETERS
(
records delimited by newline
PREPROCESSOR exec_dir_externos:'gunzip'
badfile dir_externos:'externos2.bad'
logfile dir_externos:'externos2.log'
fields terminated by ','
(campo1,campo2)
)
LOCATION ('archivo_sin_comprimir.txt.gz')
)
PARALLEL
REJECT LIMIT UNLIMITED;


13) Consultamos la tabla externa recientemente creada y vemos como tenemos acceso al archivo plano aunque este comprimido

SQL> select * from externos_comprimidos;

CAMPO1 CAMPO2
---------- ----------
1 A
2 3
10000 AAAAA
1202020 HHH1111


14)No disponible para bases de datos con Oracle Database Vault instalado

SQL> r
1* select * from v$option where upper(parameter) like '%VAUL%' order by 1

PARAMETER VALUE
--------------------- ---------
Oracle Database Vault TRUE

SQL>



Referencias
Tablas externas en Oracle11gr2

Espero les sirva


by Ligarius
10.09.09. 18:50:47. 843 words, 17505 views. Categories: Base de datos, Oracle11gR2 ,

Oracle11gr2 : Claúsula IGNORE_ROW_ON_DUPKEY_INDEX , para evitar los errores ORA-0001



Si tenemos una tablaA la cual contiene datos y una tablaB con la misma estructura pero con otros datos , y queremos fusionarla, ¿Cómo lo hacemos sin que haya registros repetidos? , o mejor dicho, ¿Cómo lo hacemos para que no se gatille la Primary Key?



Pues bien , lo podríamos hacer con un Pl/Sql de la siguiente forma :

declare
cursor c1 is select ...
begin
open c1
loop
exit when c1 not found
fetch c1 into variable
end loop;
end;

O podría ser con un FOR ... LOOP , pero en el fondo , debemos generar código sí o sí :-/

Pues bien , Oracle11gr2 , nos soluciona ese inconveniente , ¿cómo?

Ha creado una gran claúsula llamada IGNORE_ROW_ON_DUPKEY_INDEX , que no es nada más que in hint :>> , acá viene su uso...

1.- Creamos la tabla que contiene los datos originales y que contiene la PK

SQL> create table tabla1 (col1 number not null ,
2 col2 number not null ,
3 col3 date ,
4 constraint tabla1_pk primary key (col1));

2.- Insertamos datos sencillos dentro de la tabla, sin violar la PK

SQL> insert into tabla1 values (1,1,sysdate);

1 row created.

SQL> insert into tabla1 values (2,1,sysdate);

1 row created.

SQL> insert into tabla1 values (3,1,sysdate);

1 row created.

3. - Insertamos un valor con el format INSERT VALUES y veremos como se gatilla la Primary Key

SQL> insert into tabla1 values (1,0,sysdate);
insert into tabla1 values (1,0,sysdate)
*
ERROR at line 1:
ORA-00001: unique constraint (SYS.TABLA1_PK) violated

4.- Procedemos a insertar la misma fila, pero con el hint IGNORE_ROW_ON_DUPKEY_INDEX , y vemos el resultado , que no inserta la fila y no arroja error :)

SQL> insert /*+ ignore_row_on_dupkey_index (tabla1 (col1) ) */
2 into tabla1 values (1,0,sysdate);

0 rows created.

¿Qué sucede con el formato de inserción INSERT SELECT? , pues bien acá un ejemplo

5.- Vemos la tabla secundaria y los datos que contiene, los cuales no pueden ser insertados en su totalidad pues violan la PK

SQL> select * from valores_tmp;

CAMPO1 CAMPO2
---------- ----------
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8

6 .- Procedemos a insertar sin ocupar el nuevo HINT y aparece el típico error de violación de PK

SQL> insert into tabla1 (select campo1 , campo2 , sysdate from valores_tmp);
insert into tabla1 (select campo1 , campo2 , sysdate from valores_tmp)
*
ERROR at line 1:
ORA-00001: unique constraint (SYS.TABLA1_PK) violated

7.- Y si consultamos los datos de nuestra tabla original, vemos que no han sido afectados

SQL> select * from tabla1;

COL1 COL2 COL3
---------- ---------- ---------
1 1 05-SEP-09
2 1 05-SEP-09
3 1 05-SEP-09

SQL>

8.- Ahora si insertamos los mismos datos, pero con la nueva claúsula , vemos como ocurre la magia, simplemente selecciona cuales insertar ... que bien :>>

SQL> insert /*+ ignore_row_on_dupkey_index (tabla1 (col1) ) */
2 into tabla1 (select campo1 , campo2 , sysdate from valores_tmp);

5 rows created.

SQL>

9.- Validamos nuevamente nuestra tabla original y están los datos correctos, de ambas tablas

SQL> select * from tabla1;

COL1 COL2 COL3
---------- ---------- ---------
1 1 05-SEP-09
2 1 05-SEP-09
3 1 05-SEP-09
4 4 05-SEP-09
5 5 05-SEP-09
6 6 05-SEP-09
7 7 05-SEP-09
8 8 05-SEP-09

8 rows selected.

SQL>

Espero les sirva

by Ligarius
06.09.09. 14:48:21. 500 words, 5948 views. Categories: Base de datos, Tuning / Performance, Oracle11gR2 ,

<< 1 2 3 4 5 6 7 8 9 10 >>