Está en la página 1de 21

Como reparar el error ORA-01595 junto al error ORA-00600 en

oracle 10g
Hola Amig@s,

Si les ocurre que en el alert de oracle ven el error ORA-01595 es por que el tablespace UNDO
tiene segmentos de rollback rotos y no puede recuperarlos, la base de datos entra en un
modo estilo bucle que arranca intenta recuperar el segmento y falla y se cierra nuevamente.

Lo que hay que hacer:

1-Arrancamos la base de datos con el comando startup.


2-Creamos un fichero pfile de configuracion con el comando create pfile="c:\init.ora" from
spfile;
3-Editamos el fichero con un editor de textos y buscamos la linea que pone:

*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'

Hay que cambiar el AUTO por MANUAL y debe quedar asi: *.undo_management='MANUAL'
4-Arrancamos la base de datos por que seguro que se ha parado sola y la iniciamos con el
comando startup mount pfile='c:\init.ora'.
5-Una vez que la base de datos se monta correctamente hay que abrirla con el comando alter
database open;
6-Una vez que la base de datos se abre hay que crear un nuevo UNDO tablespace con este
comando: create undo tablespace undotbs2 datafile
‘c:\...rutadelosDBFdeoracle\undotbs2_01.dbf’ size 1024m autoextend on next 256m ;
7-Una vez que se ha creado el nuevo fichero UNDO, hay que ejecutar parar la base de datos
con el comando shutdown immediate.
8-Arrancamos la base de datos de modo normal sin utilizar el fichero init.ora con el comando
startup.
9-Durante el/los minutos que esta arrancada, hay que ejecutar el siguiente comando:

alter system set undo_tablespace= UNDOTBS2 scope=both;

Con este comando le estamos diciendo a Oracle que el nuevo UNDO sera el que hemos creado
nosotros y ya no dependera del anterior.
10-Paramos la base de datos nuevamente con el comando shutdown immediate
11-Arrancamos la base de datos nuevamente con el comando startup y comprobamos en el
alert.log que ya no muestre ningun error del tipo ORA-01595 o ORA-00600.

Siempre hay que conectarse como usuario SYS SYSDBA por ejemplo con la cadena:

C:\>sqlplus sys/sys as sysdba (no hay que utilizar el SID en la cadena de conexion).

Espero que les resulte util.


Publicado por El pibeen 20:090 comentarios
Etiquetas: Brico, Cursos Paso a Paso, Noticias, Oracle

MIÉRCOLES 14 DE JULIO DE 2010


Restaurar parcialmente archivelogs con RMAN
Hola Amig@s,

Para poder restaurar parcialmente los archivelogs de una base de datos tras haber realizado
un full backup para volver más consistente y actualizada la base de datos, debemos hacer lo
siguiente:

1-Crearemos un script de RMAN solo para realizar las copias de los archivelogs a una carpeta
determinada:

run {
allocate channel c1 type disk;
sql 'alter system archive log current';
set archivelog destination to 'D:\BACKUP\archivesolo';
backup archivelog all format 'D:\BACKUP\archivesolo\arc_t%t_s%s_p%p';
release channel c1;
}

Con el script anterior haremos una copia de seguridad solo de los archivelogs (obviamente
deberemos tener un full backup echo anteriormente).

1-Desde el rman lanzamos el comando:

RMAN> startup mount (para comenzar a restaurar)

Lanzamos el script de backup de archivelogs:

run {
allocate channel c1 type disk;
sql 'alter system archive log current';
set archivelog destination to 'D:\BACKUP\archivesolo';
backup archivelog all format 'D:\BACKUP\archivesolo\arc_t%t_s%s_p%p';
release channel c1;
}

Luego con el comando list backupset buscaremos una copia de seguridad que comience con
ARCxxxxxxxxxxx.xx donde X se completa con los datos del día, hora, scn, etc.

RMAN> list backupset;

Esto nos devolverá todas las copias de seguridad que tenemos de nuestra bbdd y archivelogs:

List of Archived Logs in backup set 40885


Thrd Seq Low SCN Low Time Next SCN Next Time
—- ——- ———- ——— ———- ———
1 12870 132214214 31-OCT-05 132240966 31-OCT-05
1 12871 132240966 31-OCT-05 132291702 01-NOV-05
1 12872 132291702 01-NOV-05 132400078 01-NOV-05
1 12873 132400078 01-NOV-05 132504581 01-NOV-05
1 12874 132504581 01-NOV-05 132594119 01-NOV-05
1 12875 132594119 01-NOV-05 132683505 01-NOV-05
Si queremos restaurar los archivelogs más nuevos debemos hacer lo siguiente, creamos un
script para RMAN con las siguientes líneas:

RMAN> run {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
restore archivelog sequence 12872;
restore archivelog sequence 12873;
restore archivelog sequence 12874;
}

Con el script anterior le decimos a RMAN que restaure y aplique los archivelogs de las
secuencias desde la 12872 a la 12874.

2-Una vez restaurados debemos abrir la base de datos con el comando: ALTER DATABASE
OPEN RESETLOGS;

Y listo!.
Publicado por El pibeen 21:000 comentarios
Etiquetas: Cursos Paso a Paso, Noticias, Oracle

JUEVES 24 DE JUNIO DE 2010


ORA-30012: undo tablespace '' does not exist or of wrong type
Hola amig@s,

Para solucionar el error ORA-30012: undo tablespace '' does not exist or of wrong type hay que
modificar el init.ora y cambiar el parametro *.undo_management='AUTO' a
*.undo_management='MANUAL'. Para ello, primero montamos la base de datos sin abrirla:

PASO Nº 1

conn sys/sys as sysdba


startup mount
create pfile='c:\init.ora' from spfile;
shutdown immediate

PASO Nº 2

Modificamos el init.ora con los parametros antes detallados y montamos la base de datos
utilizando el init.ora modificado:

conn sys/sys as sysdba


startup mount pfile='c:\init.ora'
create spfile from pfile='c:\init.ora';
alter database open;

Una vez que la base de datos ha abierto correctamente, eliminamos el undotbs que este mal
y creamos otro.

Por ultimo volvemos a cambiar el parametro a *.undo_management='AUTO' y repetimos los


pasos del punto nº 2.

Un saludo.
Publicado por El pibeen 08:520 comentarios
Etiquetas: Noticias, Oracle

MARTES 2 DE FEBRERO DE 2010


Solucionar problemas de acceso al Oracle Enterprise Manager Web.
Si tenemos problemas para acceder al Oracle Enterprise Manager, ya sean errores de acceso o
problemas con javascript debemos realizar la siguiente operacion:

1. Quitamos la siguiente cadena del registro :


HKEY_LOCAL_MACHINE/SYSTEM/CURRENTCONTROLSET/SERVICES/ORACLEDBCONSOLE

1.1 Una vez quitada la cadena, reiniciamos el ordenador.

1.2 Comprobamos que el listener esta funcionando correctamente.

2. Desde la consola, entramos al SQLPLUS como usuario sysdba y ejecutamos las siguientes
operaciones:

2.1 Iniciar la sesion con sqlplus asi:

>sqlplus sysman/sys

Luego ejecutamos la siguiente cadena:

exec DBMS_AQADM.DROP_QUEUE_TABLE(queue_table=>'MGMT_NOTIFY_QTABLE',force
=>TRUE);

2.2: Iniciar sesion como SYS as SYSBDA y ejecutar los siguientes comandos:

SQL> SHUTDOWN IMMEDIATE;


SQL> STARTUP RESTRICT;
SQL> EXEC sysman.emd_maintenance.remove_em_dbms_jobs;
SQL> EXEC sysman.setEMUserContext('',5);
SQL> REVOKE dba FROM sysman;
SQL> DECLARE
CURSOR c1 ISSELECT owner, synonym_name name
FROM dba_synonyms
WHERE table_owner = 'SYSMAN';
BEGIN
FOR r1 IN c1 LOOP
IF r1.owner = 'PUBLIC' THENEXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM '||r1.name;
ELSE
EXECUTE IMMEDIATE 'DROP SYNONYM '||r1.owner||'.'||r1.name;
END IF;
END LOOP;
END;
/
SQL> DROP USER mgmt_view CASCADE;
SQL> DROP ROLE mgmt_user;
SQL> DROP USER sysman CASCADE;
SQL> ALTER SYSTEM DISABLE RESTRICTED SESSION;

a. drop user sysman cascade;


b. drop role MGMT_USER;
c. drop user MGMT_VIEW cascade;
d. drop public synonym MGMT_TARGET_BLACKOUTS;
e. drop public synonym SETEMVIEWUSERCONTEXT;

3. Quitamos manualmente las siguientes carpetas en caso de que existan::


ORACLE_HOME/host_sid
ORACLE_HOME\oc4j\j2ee\OC4J_DBConsole_host_sid

4.Configuramos desde la consola el ORACLE_HOME y el ORACLE_SID. Ahora desde el


ORACLE_HOME/bin ejecutamos el siguiente comando.
emca -config dbcontrol db -repos create

Espero que les sea util.


Publicado por El pibeen 09:231 comentarios
Etiquetas: Brico, Cursos Paso a Paso, Noticias, Oracle

LUNES 28 DE DICIEMBRE DE 2009


¿ Como recuperar el UNDOTBS de oracle ?
Pues eso amig@s, ya ha pasado antes, pero les dejo varias soluciones para recuperar el
tablespace de UNDO en oracle 10g (puede que en la 11g) tambien.

SOLUCION 1:

1-Buscamos la copia del init.ora que tengamos, si no lo tenemos podemos crearlo de la


siguiente manera:

1.1 Nos conectamos al SQLPLUS:

C:\> sqlplus /nolog


SQL> conn sys/sys as sysdba
SQL> startup nomount;
SQL> create pfile='c:\init.ora' from spfile;
SQL> exit

(nota: si el fichero esta corrupto, es decir el UNNDOTBS.DBF lo eliminamos).

1.2 Con esto hemos creado una copia del archivo de arranque de nuestra base de datos, nos
vamos a la unidad C:\ y editamos el fichero init.ora y agregamos la siguiente linea:

rollbacksegment=(SYSTEM)

1.3 Guardamos el fichero y ahova volvemos a ejecutar el SQLPLUS:


C:\> sqlplus /nolog
SQL> conn sys/sys as sysdba
SQL> startup mount pfile='c:\init.ora';
SQL> recover database using backup controlfile until cancel;

1.4 Una vez que la base de datos este abierta, vamos a recrear el UNDOTBS con el siguiente
comando:

CREATE UNDO TABLESPACE UNDOTBS01 DATAFILE


'C:\oracle\product\10.2.0\oradata\orcl\UNDOTBS01.DBF' SIZE 2M REUSE AUTOEXTEND ON;

1.5 Una vez que hemos creado el undo tablespace, editamos el init.ora y eliminamos la linea
rollbacksegment=(SYSTEM) del init.ora.

1.6 Ahora debemos hacer los cambios permanentes para ello, ejecutamos la siguiente
sentencia:

C:\> sqlplus /nolog


SQL> conn sys/sys as sysdba
SQL> create spfile from pfile='c:\init.ora';
SQL> shutdown immediate;
SQL> conn sys/sys as sysdba
SQL> startup;

SOLUCION 2:

Primero nos conectamos con sys y arrancamos la bbdd con el init.ora, asi:

C:\> sqlplus /nolog


SQL> conn sys/sys as sysdba
SQL> startup mount pfile='c:\init.ora';

Comprobamos que datafile es:

SQL> select file#, status from v$datafile;


FILE# STATUS
---------- -------
1 SYSTEM
2 RECOVERY
3 ONLINE
4 ONLINE
5 ONLINE
6 ONLINE
7 ONLINE
8 ONLINE
9 ONLINE
10 ONLINE
11 ONLINE

Como podemos ver nuestro undo es el nº 2 asi que lo vamos a poner offline:
SQL> alter database datafile 2 offline;
SQL> select file#, status from v$datafile;
FILE# STATUS
---------- -------
1 SYSTEM
2 OFFLINE
3 ONLINE
4 ONLINE
5 ONLINE
6 ONLINE
7 ONLINE
8 ONLINE
9 ONLINE
10 ONLINE
11 ONLINE

Ahora paramos la base de datos y editamos el fichero init.ora:

SQL> shutdown immediate;


SQL> exit;

Editamos el init.ora y buscamos las siguientes lineas:

*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS_01'

Y la cambiamos a:

*.undo_management='MANUAL'
#*.undo_tablespace='UNDOTBS_01'

Volvemos a arrancar la bbdd y ya se abrira por arte de magia:

C:\> sqlplus /nolog


SQL> conn sys/sys as sysdba
SQL> startup pfile='c:\init.ora';

Ahora debemos crear otro tablespace de undo con el siguiente comando:

SQL> CREATE UNDO TABLESPACE undotbs_02 DATAFILE


'C:\oracle\product\10.2.0\oradata\orcl\UNDOTBS02.DBF' SIZE 2M AUTOEXTEND ON;

SQL> select file#, name, status from v$datafile;

C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS02.DBF

FILE#
----------
NAME
-------------------------------------------------------------------------
STATUS
-------
ONLINE

Ya tenemos nuestro UNDOTBS recuperado....

Por ultimo debemos modificar el init.ora, y cambiar las lineas que hemos modificado antes:

*.undo_management='MANUAL'
#*.undo_tablespace='UNDOTBS_01'

Lo cambiamos a:

*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS_02'

Hacemos un shutdown immediate y luego un startup:

SQL> shutdown immediate;


SQL> startup pfile='c:\init.ora';

Con estos pasos ya hemos recupedo el bendito undotbs.

Espero que les sirva...


Publicado por El pibeen 18:450 comentarios
Etiquetas: Brico, Cursos Paso a Paso, Noticias, Oracle

JUEVES 17 DE DICIEMBRE DE 2009


¿ Como solucionar el error ORA-00604 y ORA-04043 ?
Si al intentar eliminar un usuario en nuestra bbdd Oracle 10.2.0.1 nos da el siguiente error:

SQL> drop user prueba cascade;


drop user prueba cascade
*
ERROR en lÝnea 1:
ORA-00604: se ha producido un error a nivel 1 de SQL recursivo
ORA-04043: el objeto SYS_PLSQL_75898_9_1 no existe (este es un nombre de ejemplo, todos
comienzan con SYS_PLSQL)

Este problema es por que el usuario esta referenciado a un objeto posiblemente de otro
usuario, para poder solucionar este problema, debemos irnos a la tabla de OBJ$ con
privilegios de sysdba y cambiar el nombre del objeto por cualquier otro. Hacemos un commit
y por ultimo intentamos eliminar nuevamente el usuario:

SQL> drop user prueba cascade;

Usuario borrado.

Espero que les sirva.


Chau.
Publicado por El pibeen 13:081 comentarios
Etiquetas: Brico, Cursos Paso a Paso, Noticias, Oracle

JUEVES 15 DE OCTUBRE DE 2009


¿ Como aplicar los parches de actualizaciones de Oracle 10g
10.2.0.1 ?
Aqui les dejo la guia paso a paso:

Para instalar los parches de Oracle 10g 10.2.0.1 debemos respetar el orden de los mismos, no
podemos saltarnos una
actualizacion es decir que debemos comenzar a actualizar Oracle desde el parche1 hasta el
parche9, los parches solo
se pueden descargar desde el metalink de oracle, para el que lo tenga que lo aproveche.

Primero debemos parar todos los servicios Oracle, y uno llamado Coodinador de Transacciones
Distribuidas o
Distributed Transaction Coodinator, luego para aplicar el partche primero debemos definir el
Oracle_Home,
asi que desde un cmd lanzamos:

C:\>SET ORACLE_HOME=C:\oracle\product\10.2.0\db_1

Debemos comprobar que en nuestro Path tenemos las siguientes entradas tambien en las
variables de entorno en
windows:

c:\oracle\product\10.2.0\db_1\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot
%\System32\Wbem;
C:\oracle\product\10.2.0\db_1\OPatch;C:\oracle\product\10.2.0\db_1\jdk;C:\oracle\product\1
0.2.0\db_1\jdk\bin

luego ejecutamos:

C:\>opatch

Si no devuelve ningun error, nos vamos a la carpeta donde hemos descomprimido el parche,
entramos al directorio
del nº del parche donde se encuentra el fichero patchmd.xml, lo recomendable es
descomprimir el parche en la raiz
del C no en el escritorio de Windows. Asi que por ejemplo nos tiene que quedar la ruta de
esta manera:

C:\nºdeparche>

Lanzamos lo siguiente para aplicar el parche y confirmamos con Y.

C:\>opatch apply
Una vez finalizada la actualizacion procedemos a arrancar la bbdd y los servicios que hemos
parados.

Saludos...
Publicado por El pibeen 11:190 comentarios
Etiquetas: Brico, Cursos Paso a Paso, Oracle, Windows

VIERNES 19 DE JUNIO DE 2009


¿ Como eliminar elementos duplicados de una tabla en SQL ?
Pues eso amig@s les paso el codigo para eliminar los elementos duplicados que a veces al
hacer un import de datos se duplican.

DELETE
FROM tabla a
WHERE rowid > ( SELECT min(rowid)
FROM tabla b
WHERE b.columna = a.columna
and b.columna = a.columna );

Donde el nombre “columna” es la columna que quieres filtrar y comparar para eliminar los
elementos duplicados de dicha columna.

Espero que les resulte util.


Publicado por El pibeen 13:450 comentarios
Etiquetas: Brico, Cursos Paso a Paso, Noticias, Oracle

MIÉRCOLES 14 DE ENERO DE 2009


Reparar una base de datos oracle por el error UNDOTBS01.
Este procedimiento es para recuperar la base de datos que tengamos montada si nos aparece
el error UNDOTBS01, sigue los pasos atentamente y no te saltes ninguna linea:

1) Asegúrate que la base de datos se detenga:

sqlplus /nolog
SQL>connect sys/password as sysdba
SQL> shutdown immediate

2) Montar la BD en modo RESTRICT con pfile:

SQL> STARTUP RESTRICT MOUNT pfile=D:\oracle\oraHome\initORCL.ora

3) Si intentas eliminar un datafile del UNDTBS probablemente aparezcan errores:

SQL> ALTER DATABASE DATAFILE 'D:\ORADATA\ORCL\UNDOTBS01.DBF' OFFLINE DROP;


*
ERROR at line 1:
ORA-01548: active rollback segment ‘_SYSSMU11$’ found, terminate dropping
tablespace
o esta sentencia
DROP TABLESPACE undotbs INCLUDING CONTENTS AND DATAFILES ;
*
ERROR at line 1:
ORA-01548: active rollback segment ‘_SYSSMU11$’ found, terminate dropping
tablespace

4) Puedes usar este query para determinar que "Rollback Segments" estan corruptos:

SQL>select segment_name,status,tablespace_name from dba_rollback_segs where


status='NEEDS RECOVERY';

SEGMENT_NAME STATUS TABLESPACE_NAME


—————————— —————- —————–
_SYSSMU11$ NEEDS RECOVERY UNDOTBS
_SYSSMU12$ NEEDS RECOVERY UNDOTBS
_SYSSMU13$ NEEDS RECOVERY UNDOTBS
_SYSSMU14$ NEEDS RECOVERY UNDOTBS
_SYSSMU15$ NEEDS RECOVERY UNDOTBS
_SYSSMU16$ NEEDS RECOVERY UNDOTBS
_SYSSMU17$ NEEDS RECOVERY UNDOTBS
_SYSSMU18$ NEEDS RECOVERY UNDOTBS
_SYSSMU19$ NEEDS RECOVERY UNDOTBS
_SYSSMU20$ NEEDS RECOVERY UNDOTBS

5) Agrega la siguiente linea en el pfile con el nombre los rollback segments que aparecen en
el punto 4:

_corrupted_rollback_segments
=('_SYSSMU11$','_SYSSMU12$','_SYSSMU13$','_SYSSMU14$','_SYSSMU15$','_SYSSMU16$','_SYSSMU1
7$','_SYSSMU18$','_SYSSMU19$','_SYSSMU20$')
Asegurate de comentar el parametros undo_management o poner el valo en MANUAL y agrega
un nuevo nombre de UNDO TABLESPACE
#undo_management=AUTO
undo_tablespace=UNDOTBS1

6) Inicia nuevamente la base de datos con pfile:

SQL> STARTUP RESTRICT MOUNT pfile=D:\oracle\oraHome\initORCL.ora

7) Elimina los Rollback Segments corrupts del punto 4:

SQL> drop rollback segment "_SYSSMU11$";


Rollback segment dropped.

SQL> drop rollback segment "_SYSSMU20$";
Rollback segment dropped.

8) Verifica nuevamente:

SQL> select segment_name,status,tablespace_name from dba_rollback_segs;


SEGMENT_NAME STATUS TABLESPACE_NAME
—————————— —————- —————
SYSTEM ONLINE SYSTEM
_SYSSMU2$ ONLINE UNDOTBS1
_SYSSMU3$ ONLINE UNDOTBS1
_SYSSMU4$ ONLINE UNDOTBS1
_SYSSMU5$ ONLINE UNDOTBS1
_SYSSMU6$ ONLINE UNDOTBS1
_SYSSMU7$ ONLINE UNDOTBS1
_SYSSMU8$ ONLINE UNDOTBS1
_SYSSMU9$ ONLINE UNDOTBS1
_SYSSMU10$ ONLINE UNDOTBS1
_SYSSMU21$ ONLINE UNDOTBS1

9) Ahora si elimina el UNDO TABLESPACE malogrado, en nuestro ejemplo UNDOTBS:

SQL> drop TABLESPACE UNDOTBS;

10) Recrea el nuevo tablespace UNDOTBS1:

SQL>CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE 'D:\oradata\ORCL\UNDOTBS01.DBF' SIZE


2000M reuse AUTOEXTEND ON;

11) Altera la configuracion para usar el nuevo UNDO tablespace:

ALTER SYSTEM SET undo_tablespace = UNDOTBS1;

12) Remueve y edita las siguientes lineas del pfile:

_corrupted_rollback_segments
=('_SYSSMU11$','_SYSSMU12$','_SYSSMU13$','_SYSSMU14$','_SYSSMU15$','_SYSSMU16
$','_SYSSMU17$','_SYSSMU18$','_SYSSMU19$','_SYSSMU20$')
y habilita la utilizacion de undo_mangement=AUTO
undo_management=AUTO
undo_retention=10800
undo_tablespace=UNDOTBS1

13) Detener el servicio de base de datos:

SQL>shutdown immediate;

14) Reinicia la base de datos:

sqlplus /nolog
SQL>connect sys/password as sysdba
SQL> STARTUP RESTRICT MOUNT pfile=D:\oracle\oraHome\initORCL.ora
ORACLE instance started.
Total System Global Area 1620126452 bytes
Fixed Size 457460 bytes
Variable Size 545259520 bytes
Database Buffers 1073741824 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.

15) En este punto podrias sincronizar los cambios de pfile con spfile:

SQL>create spfile from pfile=D:\oracle\oraHome\initORCL.ora;

16) Reiniciar la base de datos de forma normal usando SPFILE:

SQL>shutdown immediate
SQL>startup

Y listo, si te funciona ya has devuelto a la vida tu base de datos.


Publicado por El pibeen 13:181 comentarios
Etiquetas: Base de datos, Cursos Paso a Paso, Noticias, Oracle

MARTES 13 DE ENERO DE 2009


Como montar un DataGuard con Standby fisico en oracle 10g

Estos pasos se encuentran en el manual de oracle online que se puede buscar en su web o
atravez de esta direccion:

http://download.oracle.com/docs/cd/B19306_01/server.102/b14239/toc.htm

Requisitos:

2 maquinas virtuales montadas con VirtualBOX o VMWARE con Windows 2003 Standar Edition.
(aunque si tienen la enterprise es mejor por el cluster).
Oracle 10.2.0.4 Enterprise Edition.

La SID primaria será: BOSTON


La SID en Standby será: CHICAGO

Atencion: Todos los comandos que se muestran aqui son con privilegios SYSDBA.

Explicaciones y significados:
SPFILE: Fichero de inicio en binario (NO se puede modificar mediante un editor de texto). Su
nombre suele ser SPFILE.ORA (P.E.: SPFILEboston.ORA)

PFILE: Fichero de inicio en texto (se ha de modificar mediante un editor de texto). Su nombre
suele ser INIT.ORA (P.E.: INITboston.ORA)

La creación de las BDD se efectua mediante la instalación por defecto, no es necesario


modificar los parámetros ni rutas.

Estos pasos sirven tanto para crear un DataGuard con una BDD nueva como con una existente.
En el caso de hacerlo sobre una BDD con información útil es muy importante que antes hagas
una copia de seguridad de todos los objetos importantes (DataFile, SPFile/PFile, Logs, Arc,
etc...).

Partiremo con que están las dos BDD creadas. La BDD StandBy tendría que ser una instalación
completamente limpia, ya que eliminaremos el fichero de configuración, los DataFiles y los
Control files.

Lo primero que tendríamos que asegurarnos es que existe visibilidad entre la PRIMARY y la
STANDBY.

Para eso tenemos que configurar el TNSNAMES de cada servidor añadiendo la entrada que
corresponda (es decir, añadir la PRIMARY en el TNSNAMES de la STANDBY y viceversa).

Verifica que se ven mutuamente haciendo un TNSPING a las dos BDD desde cada uno de los
servidores.

Personalmente, prefiero realizar la primera configuración (sobre la PRIMARY) mediante


SPFILE. Esto nos permite asegurarnos que las modificaciones de los parámetros de inicio se ha
hecho correctamente sin necesidad de reiniciar la BDD (aunque requiera reiniciar la BDD para
que se apliquen las modificaciones), o como mínimo que el parámetro que hemos modificado
es correcto.

En el caso de que la PRIMARY se inicie mediante PFILE, lo configuraremos temporalmente


para que inicie mediante SPFILE.

Para crear el SPFILE lanzamos la siguiente instrucción:

SQL> CREATE SPFILE FROM PFILE;

Después, renombramos el PFILE (nos servirá de backup por si algo sale mal) y reiniciaremos la
PRIMARY:

SQL> SHUTDOWN IMMEDIATE


SQL> STARTUP

Ya tenemos la PRIMARY arrancada con el SPFILE. Ahora, todas las modificaciones de


parámetros se han de hacer mediante ALTER.

Para empezar, necesitamos que la PRIMARY tenga activado el modo ARCHIVELOG. Para ello,
lanzamos los siguientes comandos:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=C:\oracle\product\10.2.0\ARCH'
SCOPE=SPFILE;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.dbf' SCOPE=SPFILE;
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP MOUNT
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;

Es recomendable que tener activado el modo FORCE LOGGING. No es imprescindible, pero si


recomendado, al menos que esté el máximo tiempo posible activado.

Para ello, lanzamos el siguiente comando:

SQL> ALTER DATABASE FORCE LOGGING;

Ahora tenemos que crear en la PRIMARY los redolog que usará la STANDBY. Para ello,
identificamos primero los que hay con los siguientes comandos...

-- Redolog existentes
SQL> SELECT * FROM V$LOGFILE;
-- Tamaño de cada uno de ellos
SQL> SELECT BYTES/1024/1024 MB FROM V$LOG;

...y creamos nuevos ficheros de standby del mismo tamaño y con un número de grupo
secuencial (por defecto, Oracle crea 3 ficheros de 50MB) :

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('c:\oracle\product\10.2.0


\oradata\chicago\redosb01.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5
('c:\oracle\product\10.2.0\oradata\chicago\redosb02.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6
('c:\oracle\product\10.2.0\oradata\chicago\redosb03.log') SIZE 50M;

Ya tenemos la PRIMARY pre-configurada.

Para continuar, tenemos que para la PRIMARY (y la STANDBY, si la teníamos arrancada):

SQL> SHUTDOWN IMMEDIATE

Con las dos BD paradas hacemos un backup de los DataFiles, Redolog Online y Standby logs de
la PRIMARY y los restauramos sobre la STANDBY.
Oracle recomienda utilizar el RMAN, pero yo he realizado una copia normal y corriente de los
ficheros a través de la red.

IMPORTANTE: NO INICIAREMOS NINGUNA BDD. ¡ESPECIALMENTE LA STANDBY!

Ahora, desde la PRIMARY generaremos un fichero de control para la STANDBY con la siguiente
secuencia de comandos:

SQL> STARTUP MOUNT;


SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'c:\stdby.ctl';
SQL> ALTER DATABASE OPEN;

Copiamos este fichero de control en el servidor de la STANDBY (en nuestro caso:


C:\oracle\product\10.2.0\oradata\boston).

Copiamos también el fichero de password de la PRIMARY en la STANDBY en la misma ruta


donde se encuentra en la PRIMARY (en nuestro caso: C:\oracle\product\10.2.0\db_1
\database\PWDchicago.ora).

Ahora generamos un PFILE con todas las modificaciones que hemos hecho en la PRIMARY con
el siguiente comando (este fichero lo podremos modificar posteriormente mas cómodamente
que el SPFILE):

SQL> CREATE PFILE FROM SPFILE;

Una vez que tenemos el PFILE, renombraremos el SPFILE para que no lo use en el arranque y
lo guardaremos como backup.

Modificaremos los siguientes campos del PFILE (si hay alguno que no existe, lo creamos):

db_name='chicago'
db_unique_name='chicago'
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
LOG_ARCHIVE_DEST_1='LOCATION=C:\oracle\product\10.2.0\ARCH
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_2='SERVICE=boston
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_MAX_PROCESSES=30
log_archive_format='%t_%s_%r.dbf'
STANDBY_FILE_MANAGEMENT=AUTO
STANDBY_ARCHIVE_DEST='C:\oracle\product\10.2.0\ARCH'
FAL_SERVER='boston'
FAL_CLIENT='chicago'

El PFILE quedará de la siguiente manera (la cantidad de campos y sus valores varían en
función de la configuración previa de la BDD):

chicago.__db_cache_size=197132288
chicago.__java_pool_size=4194304
chicago.__large_pool_size=4194304
chicago.__shared_pool_size=83886080
chicago.__streams_pool_size=0
*.audit_file_dest='C:\oracle\product\10.2.0\admin\chicago\adump'
*.background_dump_dest='C:\oracle\product\10.2.0\admin\chicago\bdump'
*.compatible='10.2.0.3.0'
*.control_files='C:\oracle\product\10.2.0\oradata\chicago\control01.ctl','C:\oracle\product\10.
2.0\oradata\chicago\control02.ctl','C:\oracle\product\10.2.0\oradata\chicago\control03.ctl'
*.core_dump_dest='C:\oracle\product\10.2.0\admin\chicago\cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='chicago'
*.db_unique_name='chicago'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=chicagoXDB)'
*.job_queue_processes=10
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
*.LOG_ARCHIVE_DEST_1='LOCATION=C:\oracle\product\10.2.0\ARCH
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=chicago'
*.LOG_ARCHIVE_DEST_2='SERVICE=boston
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=boston'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.log_archive_format='%t_%s_%r.dbf'
*.LOG_ARCHIVE_MAX_PROCESSES=30
*.STANDBY_FILE_MANAGEMENT=AUTO
*.STANDBY_ARCHIVE_DEST='C:\oracle\product\10.2.0\ARCH'
*.open_cursors=300
*.pga_aggregate_target=96468992
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=290455552
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='C:\oracle\product\10.2.0\admin\chicago\udump'
*.FAL_SERVER='boston'
*.FAL_CLIENT='chicago'

Ese mismo fichero lo usaremos para la STANDBY. La idea es copiar el fichero PFILE a la
STANDBY y posteriormente modificar los campos necesarios.

Ahora iniciamos la PRIMARY confirmando que todos los datos están bien (si hay alguno mal,
nos mostrará un error al arrancar).

IMPORTANTE: TODAVIA NO INICIAREMOS LA STANDBY!!!!

SQL> STARTUP

Ya tenemos la PRIMARY completamente configurada y preparada. Ha llegado la hora de


dedicarnos a la STANBY.

Partiendo del PFILE de la PRIMARY, modificamos (o creamos desde el principio) el PFILE de la


STANDBY modificando los datos correspondientes. En este caso, los datos serán los siguientes:

db_name='chicago'
db_unique_name=boston
control_files='C:\oracle\product\10.2.0\oradata\boston\stdby.ctl'
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
LOG_ARCHIVE_DEST_1='LOCATION=C:\oracle\product\10.2.0\ARCH
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_2='SERVICE=chicago LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_MAX_PROCESSES=30
log_archive_format='%t_%s_%r.dbf'
STANDBY_FILE_MANAGEMENT=AUTO
STANDBY_ARCHIVE_DEST='C:\oracle\product\10.2.0\ARCH'
FAL_SERVER=chicago
FAL_CLIENT=boston
DB_FILE_NAME_CONVERT='chicago','boston'
LOG_FILE_NAME_CONVERT='C:\oracle\product\10.2.0\oradata\chicago\','C:\oracle\product\10.
2.0\oradata\boston\'

IMPORTANTE: SI PARTES DEL PFILE DE LA PRIMARY RECIERDA MODIFICAR EL NOMBRE DE LA


BDD EN TODAS LAS LINEAS O NO FUNCIONARÁ CORRECTAMENTE.

El fichero PFILE de la STANDBY quedará de la siguiente manera:

boston.__db_cache_size=197132288
boston.__java_pool_size=4194304
boston.__large_pool_size=4194304
boston.__shared_pool_size=83886080
boston.__streams_pool_size=0
*.audit_file_dest='C:\oracle\product\10.2.0\admin\boston\adump'
*.background_dump_dest='C:\oracle\product\10.2.0\admin\boston\bdump'
*.compatible='10.2.0.3.0'
*.control_files='C:\oracle\product\10.2.0\oradata\boston\stdby.ctl'
*.core_dump_dest='C:\oracle\product\10.2.0\admin\boston\cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='chicago'
*.db_unique_name='boston'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=bostonXDB)'
*.job_queue_processes=10
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
*.LOG_ARCHIVE_DEST_1='LOCATION=C:\oracle\product\10.2.0\ARCH
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=boston'
*.LOG_ARCHIVE_DEST_2='SERVICE=chicago LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=chicago'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.log_archive_format='%t_%s_%r.dbf'
*.LOG_ARCHIVE_MAX_PROCESSES=30
*.STANDBY_FILE_MANAGEMENT=AUTO
*.STANDBY_ARCHIVE_DEST='C:\oracle\product\10.2.0\ARCH'
*.open_cursors=300
*.pga_aggregate_target=96468992
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=290455552
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='C:\oracle\product\10.2.0\admin\boston\udump'
*.FAL_SERVER='chicago'
*.FAL_CLIENT='boston'
*.DB_FILE_NAME_CONVERT='chicago','boston'
*.LOG_FILE_NAME_CONVERT='C:\oracle\product\10.2.0\oradata\chicago\','C:\oracle\product\10
.2.0\oradata\boston\'

Es hora de iniciar la STANDBY. Para ello, utilizaremos los siguientes comandos:

SQL> STARTUP MOUNT


SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

Ya tenemos el DataGuard montado, pero ¿como sabemos que realmente se están replicando
los logs?

Pues bien, para verificar la transferencia de los LOGS, seguiremos los siguientes pasos:

1.- Listamos los LOGS existentes en la STANDBY:

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY


SEQUENCE#;

2.- Forzamos el cambio de LOG en la PRIMARY:

SQL> ALTER SYSTEM SWITCH LOGFILE;

3.- Verificamos que se han replicado y aplicado los LOGS en la STANDBY (la columna
APP tiene que mostrar YES):

SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

Si aparecen la misma cantidad de registros en la PRIMARY que en la STANDBY, y la columna


APP tiene YES en todos los registros, significa que nuestro DataGuard esta completamente
operativo.

Has de tener en cuenta que la transferencia de los LOGS y su aplicación no es instantánea,


depende la velocidad de red y de disco (si los LOG son muy grandes). Si no te salen los logs, o
te salen con la columna APP a NO, tomate antes unos minutos de descanso y luego verifícalo
de nuevo.
En el caso de que no se transfieran los LOGS o no se apliquen, revisa todos los valores de los
PFILE.

Por último, si queremos que nuestras BDD inicien con SPFILE solo tenemos que lanzar el
siguiente comando en cada una de ellas:

SQL> CREATE SPFILE FROM PFILE;

Mas informacion aqui:


http://www.undomain.es/node/163
Publicado por El pibeen 14:130 comentarios
Etiquetas: Base de datos, Brico, Cursos Paso a Paso, Noticias, Oracle
Hazte DBA en dos dias, segun Oracle
Oracle, la empresa mas importante en ofrecer soluciones en base de datos ofrece un manual
gratuito en pdf, de los pasos que se deben tomar para convertirse en DBA de oracle es decir
Database Administrator, muy solicitado estos dias.

Mas informacion aqui:


http://download.oracle.com/docs/cd/B19306_01/server.102/b14196.pdf
Publicado por El pibeen 12:320 comentarios
Etiquetas: Noticias, Oracle

MARTES 14 DE OCTUBRE DE 2008


¿Que es Oracle RAC ?

Oracle RAC permite que múltiples ordenadores ejecuten el software de SGBD de Oracle
simultaneamente mientras acceden a una base de datos individual. Esto se llama una base de
datos en cluster(clustered).

En una base de datos de Oracle no-RAC, una base de datos individual es accedida por una
instancia individual. La base de datos se considera la colección de ficheros de datos, ficheros
de control, y ficheros redo log localizados en disco. La instancia se considera la colección de
procesos del sistema operativo y memoria relacionada de Oracle que están ejecutándose en
el ordenador.

En Oracle RAC, dos o más ordenadores (cada una con una instancia) acceden
concurrentemente a una base de datos individual. Esto permite que una aplicación o usuario
se conecte a alguno de los ordenadores y tenga aceso a los mismos datos.

Captura de explicacion:
Mas informacion aqui:

http://www.oracle.com