Archive for March, 2009

Script que genera Script de reubicación de datafiles y redolog files

Sunday, March 29th, 2009

Frecuentemente el dba oracle debe cambiar la ubicación de la base de datos, ya sea por mantención, o por una migración a una nueva plataforma. La técnica para realizar esto es montar la base de datos con el archivo de control ya ubicado en su posición final, e informarle al archivo de control sobre la nueva ubicación que tienen los datafiles (V$DATAFILE) y redolog files (V$LOGFILE). Se debe recordar que el archivo de control es el que guarda la metadata de estructura física de la base de datos. Esto se hace con el siguiente comando:

SQL> ALTER DATABASE RENAME FILE ‘/u01/app/oracle/oradata/sirio/system01.dbf’ TO ‘/u02/oradata/sirio/system01.dbf’ ;

Donde ‘/u01/app/oracle/oradata/sirio/system01.dbf’ es el nombre original del archivo y ‘/u02/oradata/sirio/system01.dbf’ es el nuevo nombre y ubicación del archivo.

Lo anterior se debe hacer para cada uno de los datafiles y redolog files que existan en la base de datos. Si son muchos la tarea de generar el script puede ser titánica, y la posibilidad de errores aumenta.

Añadir Columnas con Valores Por Defecto Oracle 11g v/s Predecedores.

Wednesday, March 4th, 2009

En versiones anteriores a Oracle 11g, al añadir columnas con propiedad not null con valor default a una tabla con muchos registros suele ser costoso para la base de datos ya que al realizar esta acción se producen ciertos eventos que afectan a la performance de esta, como por ejemplo la generación de redologs switch, undo, aumento excesivo del SCN de la bd.

He aquí una demostración realizada en una base de datos versión 10gR2, sobre una tabla con una cantidad de registros más o menos considerable.

SQL> select count(1) from datos_prueba;

COUNT(1)

———-

2000000

Transcurrido: 00:00:00.07

  • · Verificando la secuencia de redolog switch de la instancia.

SQL> archive log list

Modo log de la base de datos Modo de Archivado

Archivado automático Activado

Destino del archivo USE_DB_RECOVERY_FILE_DEST

Secuencia de log en línea más antigua 139

Full Table Scan en Oracle. ¿Aburrido de lecturas innecesarias?

Tuesday, March 3rd, 2009

Es muy común que los DBAs traten dentro de los ambientes OLTP evitar este tipo de accesos a los datos. Sabemos que este acceso es lento para tablas grandes, pero también sabemos que es muy usado en tablas pequeñas. Veamos como podemos sacar provecho de la eliminación o uso del no muy bien ponderado full table scan.

Vamos a empezar a ver algún ejemplo práctico: Vamos a crear una tabla mas o menos masiva a partir de otra ya existente:

[oracle@antares ~]$ sqlplus “/as sysdba”

SQL*Plus: Release 9.2.0.8.0 – Production on Tue Mar 3 17:06:31 2009

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to:
Oracle9i Release 9.2.0.8.0 – Production
JServer Release 9.2.0.8.0 – Production

SQL> create table tabla_test as select *  from obj$;

Table created.

SQL> select count(*) from tabla_test;

COUNT(*)
———-
66084

SQL>