jueves, 11 de junio de 2009

ORA-12541

El error completo: ORA-12541: TNS:no listener (DBD ERROR: OCIServerAttach).
Con ésto nos podemos encontrar en la pantalla de inicio del EM de nuestra BD. En mi caso, me daba problemas cuando la instancia se quería conectar con el agente para realizar tareas de respaldo, entre otras.
La solución... recrear el repositorio del EM desde línea de comandos:

emca -config dbcontrol db -repos recreate

martes, 9 de junio de 2009

Cambiar CHARACTER SET

Aquí van los pasos para cambiar el character set de una base de datos.

Desde la consola de SQLPLUS:

1) shutdown immediate;
2) startup mount;
3) alter system enable restricted session;
4) alter system set job_queue_processes=0;
5) alter database open;
6) alter database character set WE8ISO8859P1; (en esta línea, va el juego de caracteres al que queremos pasar nuestra BD)
7) shutdown immediate;
8) startup;

Y con eso es todo!

miércoles, 3 de junio de 2009

Cuándo y cómo reconstruir un índice?

A veces nos preguntamos... en qué basarnos para justificar (o no) la reconstrucción de algún índice de nuestro motor?

Muchas veces (al menos por mi parte) reconstruimos el índice solamente si nuestra aplicación nos dice "Ups! index or partition of such index is in unusuable state (ORA-01502)"... pero sino, no nos acordamos de su existencia!

He aquí una sugerencia...
select index_name, blevel from dba_indexes where table_owner='Propietario'

Si esta sentencia nos devuelve en blevel un valor > 4, es recomendable recontruir el índice en cuestión. Blevel (branch level) indica el número de veces que Oracle ha tenido que reducir la búsqueda en ese índice.

Para reconstruirlo...
alter index Nombre_índice rebuild;

ORA-19734

Me encontré con este amigable error en una instancia en la que estaba intentando hacer un transporte de tablespace... y resulta que por la mitad del procedimiento me canceló (todavía no me explico por qué!!!)

ORA-19734: wrong creation SCN - control file expects converted plugged-in datafile

Haciendo referencia a un datafile involucrado en el transporte, en mi caso era TEST.DBF...

Qué hacer?!

Sospeché que el problema podría estar dado por el lado del controlfile, y que en caso de recrearlo sin la referencia a ese datafile, iba a poder repetir el procedmiento.

En principio no tenía respaldo del controlfile... así que procedí a crear un backup del mismo...
Inicié la instancia en modo MOUNT:
STARTUP MOUNT;

Luego ejecuté el backup:
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/tmp/ctrlfile.bak';

Edité el trace generado con las sentencias para recrear mi controlfile, eliminando la referencia al datafile TEST.DBF, quedó algo de este estilo...

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORA10CCU" RESETLOGS NOARCHIVELOG MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 2336
LOGFILE
GROUP 1 '/home/oracle/oracle/product/10.2.0/oradata/ora10ccu/redo01.log' SIZE 100M, GROUP 2 '/home/oracle/oracle/product/10.2.0/oradata/ora10ccu/redo02.log' SIZE 100M, GROUP 3 '/home/oracle/oracle/product/10.2.0/oradata/ora10ccu/redo03.log' SIZE 100M-- STANDBY LOGFILE
DATAFILE
'/home/oracle/oracle/product/10.2.0/oradata/ora10/system01.dbf', '/home/oracle/oracle/product/10.2.0/oradata/ora10/undotbs01.dbf', '/home/oracle/oracle/product/10.2.0/oradata/ora10/sysaux01.dbf', '/home/oracle/oracle/product/10.2.0/oradata/ora10/users01.dbf', '/home/oracle/oracle/product/10.2.0/oradata/ora10/example01.dbf', '/home/oracle/oracle/product/10.2.0/oradata/ora10/TEST.DBF', (eliminando esta línea)
CHARACTER SET WE8MSWIN1252;

Copié y pegué en la consola de SQLPlus y listo! Nuevo CONTROLFILE generado!

Luego desde la consola:
RECOVER DATABASE;

ALTER DATABASE OPEN;

En mi caso, había omitido la creación del TEMPORARY TABLESPACE, así que lo generé nuevamente:
ALTER TABLESPACE TEMP ADD TEMPFILE '/home/oracle/oracle/product/10.2.0/oradata/ora10/temp01.dbf' REUSE;

Ahora sí!!! Repetí el transporte del tablespace y quedó solucionado... (por suerte!!!)