Day 6: Tip Log_Archive_Dest_1 Set To Default in Oracle Database 11.1

Posted by Paola Pullas | Posted in Base de Datos, Oracle, Tips | Posted on 03-10-2010

Tags: , , , ,

0

In this post I want to share with you the information about the Bug 6373164 present in Oracle Database 11.1. This bug was fixed in release 11.1.0.7.0.

Symptoms

I configured Archivelog Mode in my database and set the flash recovery area like the default location to store achivelog files. I configured the next parameters in order to set the flash recovery area:

  • DB_RECOVERY_FILE_DEST
  • DB_RECOVERY_FILE_DEST_SIZE

Other parameters related to Archivelog Mode aren’t configured in my linux box, for example:

  • LOG_ARCHIVE_DEST is not set
  • LOG_ARCHIVE_DEST_n is not set

In the next screen I show you my actual configuration:

When the database starts to generate archivelog files, these was send to flash recovery area location but additionally to $ORACLE_HOME/dbs causing higher disk space utilization in my server, like I show you in the next screen:

How to solve the problem

In order to solve this problem you should change the configuration of LOG_ARCHIVE_DEST_1 parameter with the next command:

  • alter system set LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=both;

Author: Paola Pullas
Do you need to buy support?: Contact me at pp@refundation.com

If you think that this tutorial helped you. Make a donation to this initiative. We appreciate your support. Also your donation can help me to buy more coffee or Red Bull.


Oracle 9i en Windows 64 bits – AMD64/EM64T

Posted by Paola Pullas | Posted in Base de Datos, Oracle, Software Libre, Tips, Unix/Linux | Posted on 31-01-2009

Tags: , , , , , ,

1

microsoftlinux

Para los que no sabían les dejo un dato de la certificación de Oracle sobre Windows de 64 bits para procesadores AMD64 y EM64T:

Oracle Database 11g (11.1) Release 1 Supported Windows Operating Systems
32-bit Database Server and Client 32-bit Windows
32-bit Client 64-bit Windows x64
64-bit Database Server and Client 64-bit Windows x64
Oracle Database 10g (10.2) Release 2 Supported Windows Operating Systems
32-bit Database Server and Client 32-bit Windows
32-bit Client 64-bit Windows x64
64-bit Database Server and Client 64-bit Windows x64
Oracle Database 10g (10.1) Release 1 Supported Windows Operating Systems
32-bit Database Server and Client 32-bit Windows
32-bit Database Client 64-bit Windows x64
Oracle Database 9i (9.2) Release 2 Supported Windows Operating Systems
32-bit Database Server and Client 32-bit Windows
32-bit Database Client 64-bit Windows x64

Como pueden observar en la tabla no existe una versión de Oracle 9i o 10g Release 1 que pueda ser instalada en Microsoft Windows de 64 bits para procesadores AMD64/EM64T, Oracle recién certificó este tipo de instalación a partir de 10g Release 2 y por supuesto la nueva versión Oracle 11g Release 1 está completamente certificada.

A pesar de estas malas noticias Oracle fue el primer proveedor de base de datos en certificar su solución para Microsoft Windows de 64 bits con Oracle 9i Release 2, pero para plataformas Itanium en Diciembre del 2000.

Para los que estén en este dilema al momento pues los invito a probar Oracle 9i Release 2 para 64 bits en procesadores AMD64/EM64T utilizando Linux, en este caso, no existe el problema que se presenta en Microsoft Windows y es posible instalar Oracle en: Asianux 2.0, Oracle Enterprise Linux 4, Red Hat Enterprise Linux AS/ES 3 y 4 y Suse Linux 8 y 9.

Vía: Oracle Technology Network
Autor: Paola Pullas

Enviar correos con PL/SQL en Oracle

Posted by Paola Pullas | Posted in Oracle, Tips | Posted on 03-06-2008

4

A continuación les dejo un pequeño procedure hecho en PL/SQL, que les permitirá enviar correos electrónicos:

 
 
PROCEDURE AU_GN_SEND_MAIL(
sender IN VARCHAR2,
recipient IN VARCHAR2,
ccrecipient IN VARCHAR2,
subject IN VARCHAR2,
message IN VARCHAR2,
blnResultado IN OUT BOOLEAN)

IS
crlf VARCHAR2(2):= UTL_TCP.CRLF;
connection utl_smtp.connection;
mailhost VARCHAR2(30) := ‘aqui ip de server;
header VARCHAR2(1000);
arrayRECIPIENTS AU_GN_GENERAL.array_VARCHAR2;
arrayCCRECIPIENTS AU_GN_GENERAL.array_VARCHAR2;
i NUMBER:=0;
j NUMBER:=0;
v_recipient VARCHAR2(100) := ”;
v_ccrecipient VARCHAR2(100) := ”;
hd_recipient VARCHAR2(1000) := ”;
hd_ccrecipient VARCHAR2(1000) := ”;

BEGIN
– Start the connection
connection := utl_smtp.open_connection(mailhost,25);
hd_recipient := REPLACE(recipient, ‘|’, ‘,’);
hd_ccrecipient := REPLACE(ccrecipient, ‘|’, ‘,’);
header:= ‘Date: ‘||TO_CHAR(SYSDATE,’dd Mon yy hh24:mi:ss’)||crlf||
‘From: ‘||sender||”||crlf||
‘Subject: ‘||subject||crlf||
‘To: ‘||hd_recipient||crlf||
‘CC: ‘||hd_ccrecipient;

– Handshake with the SMTP server
utl_smtp.helo(connection, mailhost);
utl_smtp.mail(connection, sender);

IF recipient IS NOT NULL THEN
   arrayRECIPIENTS := AU_GN_GENERAL.AU_GN_OBTENER_ARRAY_CHAR(recipient, ‘|’);
   FOR i IN arrayRECIPIENTS.FIRST..arrayRECIPIENTS.LAST LOOP
    v_recipient := arrayRECIPIENTS(i);
    IF (v_recipient IS NOT NULL OR v_recipient != ”) THEN
    utl_smtp.rcpt(connection, v_recipient);
       END IF;
   END LOOP;
END IF;

IF ccrecipient IS NOT NULL THEN
   arrayCCRECIPIENTS := AU_GN_GENERAL.AU_GN_OBTENER_ARRAY_CHAR(ccrecipient, ‘|’);
   FOR j IN arrayCCRECIPIENTS.FIRST..arrayCCRECIPIENTS.LAST LOOP
    v_ccrecipient := arrayCCRECIPIENTS(j);
    IF (v_ccrecipient IS NOT NULL OR v_ccrecipient != ”) THEN
    utl_smtp.rcpt(connection, v_ccrecipient);
    END IF;
   END LOOP;
END IF;

IF recipient IS NULL AND ccrecipient IS NULL THEN
   dbms_output.put_line(‘ Mail NO sent.’);
   blnResultado := false;
ELSE
   utl_smtp.open_data(connection);

   — Write the header
   utl_smtp.write_data(connection, header);
   utl_smtp.write_data(connection, crlf ||message);
   utl_smtp.close_data(connection);
   dbms_output.put_line(‘ Mail sent.’);  
   blnResultado := true;
END IF;

utl_smtp.quit(connection);

EXCEPTION

WHEN UTL_SMTP.INVALID_OPERATION THEN
dbms_output.put_line(‘ Invalid Operation in SMTP transaction.’);
blnResultado := false;
WHEN UTL_SMTP.TRANSIENT_ERROR THEN
dbms_output.put_line(‘ Temporary problems with sending email – try again
later.’);
blnResultado := false;
WHEN UTL_SMTP.PERMANENT_ERROR THEN
dbms_output.put_line(‘ Errors in code for SMTP transaction.’);
blnResultado := false;

END;

Autor: Gary Vergara

Mover / Multiplexar Controlfile de Filesystem a ASM

Posted by Paola Pullas | Posted in Base de Datos, Oracle, Refundation, Tips | Posted on 27-05-2008

1

En algunas ocasiones por diferentes circunstancias nos encontramos con que nuestra base de datos Oracle que está trabajando con ASM (Automatic Storage Management) tiene direccionado su(s) control file(s) a una ubicación fuera de ASM. Esto suele ocurrir por ejemplo cuando la base en cuestión ha sido restaurada a partir de un backup utilizando RMAN.

A continuación se citan los pasos a seguir para mover el controlfile desde el filesystem a ASM y que la base vea este nuevo control file:

1.- Primero modificamos el parámetro control_files para que apunte al o los control files que vamos a crear dentro de ASM.

SQL> ALTER SYSTEM SET CONTROL_FILES=’+GRUPO1′ SCOPE=SPFILE;

2.- Luego nos conectamos a RMAN y ponemos a la base en estado NOMOUNT.

$ rman target /
RMAN> shutdown immediate;
RMAN> startup nomount;

3.- Desde RMAN hacemos un restore del controlfile en la ubicación actual de ASM , lo que finalmente creará la copia del controlfile.

RMAN> RESTORE CONTROLFILE FROM ‘ubicacion_actual/control01.ctl’;

4.- Finalmente se abre la base de datos y se confirma que el parámetro ha sido cambiado.

SQL> ALTER DATABASE MOUNT:
SQL> ALTER DATABASE OPEN;
SQL> SHOW PARAMETER control_files;

Nota: Si se quiere además de movel el control_file, multiplexarlo solo se debe cambiar la sentencia utilizada en el paso 1 y añadir los control files deseados.

SQL> ALTER SYSTEM SET CONTROL_FILES=’+GRUPO1′, ‘+GRUPO1′, ‘+GRUPO1′ SCOPE=SPFILE;

Creado por: Ing. Paola Izquierdo M.

Cómo recrear un tablespace con datos

Posted by Paola Pullas | Posted in Base de Datos, Oracle, Refundation, Tips | Posted on 20-05-2008

4

En algunas oportunidades nos podemos encontrar con la necesidad de recrear un talespace que ya contiene datos, como por ejemplo cuando queremos cambiar una opción del tablespace que la sentencia “alter tablespace” no nos permite modificar. En estos casos podemos seguir los siguientes pasos para re-crear el tablespace sin perder los datos que contiene el mismo, de una forma sencilla:

1.- Primero confirmamos el espacio ocupado por el tablespace actualmente:

sql>select sum(bytes)/1024/1024 MB from user_segments where tablespace_name = ‘tbsname’;

2.- Exportar los datos existentes en el tablespace que se desea recrear:

# exp system/psswd tablespaces=tbsname compress=n direct=y file=nombre.dmp log=nombre.log;

3.- Borrar el tablespace, desde el Enterprise Manager o via comandos:

sql> drop tablesapce tbsname including contents and datafiles;

4.- Recrear el tablespace. En este caso, por ejemplo, se quería cambiar la clausula de “segment space management” de manual a auto. De igual forma se puede re-crear el TBS vía EM o por linea de comandos:

sql> create tablespace tbsname datafile ‘/…./…dbf’ size 10M autoextend on next 1024K maxsize 50M logging extent management local segment space management auto;

5.- Importar el tablespace:

# imp system/psswd full=y file=nombre.dmp log=nombre.log tablespaces=tbsname rows=y indexes=y constraints=y commit=y ignore=y grants=n buffer=500000

Y con eso ya tendríamos los datos.

6.- Finalmente deberíamos comprobar que existe la misma cantidad de información el TBS luego de realizar el import:

sql>select sum(bytes)/1024/1024 MB from user_segments where tablespace_name = ‘tbsname’;

Realizado por: Ing. Paola Izquierdo

Método para desparticionar una tabla rápidamente

Posted by Paola Pullas | Posted in Base de Datos, Oracle, Refundation, Tips | Posted on 14-05-2008

0

Si se quiere desparticionar una tabla muy grande, en donde sacar un export y volverlo a subir con la estructura de la tabla sin particiones se vuelve un método demasiado lento, podemos utilizar los siguientes pasos para que el proceso se haga mucho más rápido:

1.- Primero se debe hacer un merge de las particiones existentes en una sola, esto se logra con la siguiente sentencia:

sql> ALTER TABLE tabla_particionada MERGE PARTITIONS part1, (part2,part3) INTO ultima_particion;

Para saber el nombre de las particiones puede utilizar la sentencia que se detalla a continuación:

sql> SELECT PARTITION_NAME FROM USER_TAB_PARTITIONS WHERE TABLE_NAME=tabla_particionada;

Consultar el número de registros existentes actualmente en la tabla para una posterior comprobación. (select count(*) from tabla_particionada)

2.- Crear la tabla con un nombre temporal (tabla_desparticionada) y sin particiones.

3.- Pasar los datos de la tabla particionada a la nueva tabla creada sin particiones:

sql> ALTER TABLE tabla_particionada EXCHANGE PARTITION ultima_particion WITH TABLE tabla_desparticionada INCLUDING INDEXES WITHOUT VALIDATION;

4.- Comprobar que la tabla creada sin particiones (tabla_desparticionada) tiene ahora el mismo número de registros que tenía antes la tabla particionada. Esta última debería tener ahora 0 registros como consecuencia de la migración. Si se migraron correctamente los registros, se deberá finalmente borrar la tabla particionada (verificar antes dependencias con otros objetos) y renombrar a la tabla sin particiones con el nombre original.

5.- Renombrar la tabla:

sql> ALTER TABLE tabla_desparticionada RENAME TO nuevo_nombre;

Por: Izquierdo Paola

Vmware Server Console – Error

Posted by Paola Pullas | Posted in Refundation, Software Libre, Tips, Unix/Linux, VMware | Posted on 07-05-2008

0

Estoy instalando el Vmware Server Console en Ubuntu 8.04 y me arroja el siguiente error:

/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4′ not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0′ not found (required by /usr/lib/libstdc++.so.6)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4′ not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0′ not found (required by /usr/lib/libstdc++.so.6)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4′ not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0′ not found (required by /usr/lib/libstdc++.so.6)

¿La solución?
Esto típicamente ocurre cuando encuentra en el sistema operativo una librería de versión superior, por lo tanto hacemos lo siguiente:

mv /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1 /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1.bck

Y listo si ahora intentamos levantar vmware server cosole debería funcionar.

Autor: Paola Pullas

Simulación de carga en Oracle desde Windows :-(

Posted by Paola Pullas | Posted in Base de Datos, Microsoft, Tips | Posted on 19-04-2008

0

Primero cabe aclarar que yo trabajo en Linux pero por esas cosas de la vida me ha tocado simular carga de trabajo en Oracle y solo tenía los scripts shell para hacerlo pero rápidamente he ubicado una forma de llamar con un for a mi script que inserta datos en una tabla de mi base de datos Oracle, en este caso de ejemplo el script es llamado tres veces y el for hace incrementos de 1.

A continuación les dejo el script el cual debe ser guardado en un archivo .bat para ser ejecutado:

@echo off
for /L %%X in (1,1,3) do sqlplus scott/tiger @script.sql

Tomen en cuenta que en el script.sql al final tengo colocado el comando exit; para que sqlplus no se quede experando una respuesta por parte del operador.

Autor: Paola Pullas

Configurando el máximo tamaño de las piezas de backup

Posted by Paola Pullas | Posted in Base de Datos, Entrenamiento, Oracle, Tips | Posted on 20-03-2008

0

El tamaño de una pieza de backup es un problema en situaciones donde se excede el máximo tamaño que puede tener un archivo debido a restricciones del sistema de archivos o file system o cuando el software de media management para realizar los backups a tape presenta restricciones.

A continuación les coloco un mecanismo para siempre restringir el máximo tamaño de la pieza de backup a 3G o menos configurandolo anivel del canal a disco en este caso:

rman target /
CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 3G;

Una vez hecho esto queda registrado el cambio en la configuración de RMAN lo que pueden verificar con el siguiente comando:

show channel;

Con esto estamos listos para nuestros respaldos.

Si deseas profundizar en este tema puedes inscribirte en nuestros cursos Oracle en Ecuador.

Autor: Paola Pullas

Espacio consumido por tipo de archivo en la Flash Recovery Area

Posted by Paola Pullas | Posted in Base de Datos, Oracle, Tips | Posted on 19-03-2008

1

Les dejo una consulta para determinar el espacio consumido por tipo de archivo dentro de la Flash Recovery Area:

select file_type,
space_used*percent_space_used/100/1024/1024 Usado,
space_reclaimable*percent_space_reclaimable/100/1024/1024 Reclamable,
frau.number_of_files
from v$recovery_file_dest rfd, v$flash_recovery_area_usage frau;

Para los que deseen utilizar esta consulta deben tomar en cuenta que la vista V$FLASH_RECOVERY_AREA_USAGE es una característica nueva del Release 2 de la base de datos.


Autor:
Paola Pullas