trucos de oracle

22
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:

Upload: da-vid

Post on 25-Jun-2015

2.699 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: trucos de oracle

Como reparar el error ORA-01595 junto al error ORA-00600 en oracle 10gHola 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 immediate11-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.

Page 2: trucos de oracle

Publicado por El pibeen 20:09 0 comentarios  

Etiquetas: Brico, Cursos Paso a Paso, Noticias, Oracle

M I É R C O L E S 1 4 D E J U L I O D E 2 0 1 0

Restaurar parcialmente archivelogs con RMANHola 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 40885Thrd Seq Low SCN Low Time Next SCN Next Time

Page 3: trucos de oracle

—- ——- ———- ——— ———- ———1 12870 132214214 31-OCT-05 132240966 31-OCT-051 12871 132240966 31-OCT-05 132291702 01-NOV-051 12872 132291702 01-NOV-05 132400078 01-NOV-051 12873 132400078 01-NOV-05 132504581 01-NOV-051 12874 132504581 01-NOV-05 132594119 01-NOV-051 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:00 0 comentarios  

Etiquetas: Cursos Paso a Paso, Noticias, Oracle

J U E V E S 2 4 D E J U N I O D E 2 0 1 0

ORA-30012: undo tablespace '' does not exist or of wrong typeHola 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 sysdbastartup mountcreate 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:

Page 4: trucos de oracle

conn sys/sys as sysdbastartup 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:52 0 comentarios  

Etiquetas: Noticias, Oracle

M A R T E S 2 D E F E B R E R O D E 2 0 1 0

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;

Page 5: trucos de oracle

SQL> DECLARECURSOR c1 ISSELECT owner, synonym_name nameFROM dba_synonymsWHERE table_owner = 'SYSMAN';BEGINFOR r1 IN c1 LOOPIF r1.owner = 'PUBLIC' THENEXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM '||r1.name;ELSEEXECUTE 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:23 1 comentarios  

Etiquetas: Brico, Cursos Paso a Paso, Noticias, Oracle

L U N E S 2 8 D E D I C I E M B R E D E 2 0 0 9

¿ 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

Page 6: trucos de oracle

SQL> conn sys/sys as sysdbaSQL> 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 /nologSQL> conn sys/sys as sysdbaSQL> 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 /nologSQL> conn sys/sys as sysdbaSQL> create spfile from pfile='c:\init.ora';SQL> shutdown immediate;SQL> conn sys/sys as sysdbaSQL> startup;

SOLUCION 2:

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

C:\> sqlplus /nologSQL> conn sys/sys as sysdbaSQL> startup mount pfile='c:\init.ora';

Comprobamos que datafile es:

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

Page 7: trucos de oracle

---------- -------1 SYSTEM2 RECOVERY3 ONLINE4 ONLINE5 ONLINE6 ONLINE7 ONLINE8 ONLINE9 ONLINE10 ONLINE11 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 SYSTEM2 OFFLINE3 ONLINE4 ONLINE5 ONLINE6 ONLINE7 ONLINE8 ONLINE9 ONLINE10 ONLINE11 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 /nologSQL> conn sys/sys as sysdbaSQL> startup pfile='c:\init.ora';

Page 8: trucos de oracle

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:45 0 comentarios  

Etiquetas: Brico, Cursos Paso a Paso, Noticias, Oracle

J U E V E S 1 7 D E D I C I E M B R E D E 2 0 0 9

¿ 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

Page 9: trucos de oracle

*ERROR en lÝnea 1:ORA-00604: se ha producido un error a nivel 1 de SQL recursivoORA-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:08 1 comentarios  

Etiquetas: Brico, Cursos Paso a Paso, Noticias, Oracle

J U E V E S 1 5 D E O C T U B R E D E 2 0 0 9

¿ 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 solose 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 oDistributed 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 enwindows:

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\10.2.0\db_1\jdk\bin

Page 10: trucos de oracle

luego ejecutamos:

C:\>opatch

Si no devuelve ningun error, nos vamos a la carpeta donde hemos descomprimido el parche, entramos al directoriodel nº del parche donde se encuentra el fichero patchmd.xml, lo recomendable es descomprimir el parche en la raizdel 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:19 0 comentarios  

Etiquetas: Brico, Cursos Paso a Paso, Oracle, Windows

V I E R N E S 1 9 D E J U N I O D E 2 0 0 9

¿ 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.

DELETEFROM tabla aWHERE rowid > ( SELECT min(rowid)FROM tabla bWHERE b.columna = a.columnaand 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:45 0 comentarios  

Etiquetas: Brico, Cursos Paso a Paso, Noticias, Oracle

M I É R C O L E S 1 4 D E E N E R O D E 2 0 0 9

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

Page 11: trucos de oracle

ninguna linea:

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

sqlplus /nologSQL>connect sys/password as sysdbaSQL> 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 droppingtablespaceo esta sentenciaDROP TABLESPACE undotbs INCLUDING CONTENTS AND DATAFILES ;*ERROR at line 1:ORA-01548: active rollback segment ‘_SYSSMU11$’ found, terminate droppingtablespace

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$','_SYSSM

Page 12: trucos de oracle

U16$','_SYSSMU17$','_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=AUTOundo_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

Page 13: trucos de oracle

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

13) Detener el servicio de base de datos:

SQL>shutdown immediate;

14) Reinicia la base de datos:

sqlplus /nologSQL>connect sys/password as sysdbaSQL> STARTUP RESTRICT MOUNT pfile=D:\oracle\oraHome\initORCL.oraORACLE instance started.Total System Global Area 1620126452 bytesFixed Size 457460 bytesVariable Size 545259520 bytesDatabase Buffers 1073741824 bytesRedo Buffers 667648 bytesDatabase 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 immediateSQL>startup 

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

Publicado por El pibeen 13:18 1 comentarios  

Etiquetas: Base de datos, Cursos Paso a Paso, Noticias, Oracle

M A R T E S 1 3 D E E N E R O D E 2 0 0 9

Como montar un DataGuard con Standby fisico en oracle 10g

Page 14: trucos de oracle

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

Page 15: trucos de oracle

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 IMMEDIATESQL> 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 IMMEDIATESQL> STARTUP MOUNTSQL> 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

Page 16: trucos de oracle

ello, identificamos primero los que hay con los siguientes comandos...

-- Redolog existentesSQL> SELECT * FROM V$LOGFILE;-- Tamaño de cada uno de ellosSQL> 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;

Page 17: trucos de oracle

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\ARCHVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=chicago'LOG_ARCHIVE_DEST_2='SERVICE=bostonVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=boston'LOG_ARCHIVE_DEST_STATE_1=ENABLELOG_ARCHIVE_DEST_STATE_2=ENABLELOG_ARCHIVE_MAX_PROCESSES=30log_archive_format='%t_%s_%r.dbf'STANDBY_FILE_MANAGEMENT=AUTOSTANDBY_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=197132288chicago.__java_pool_size=4194304chicago.__large_pool_size=4194304chicago.__shared_pool_size=83886080chicago.__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\ARCHVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=chicago'

Page 18: trucos de oracle

*.LOG_ARCHIVE_DEST_2='SERVICE=bostonVALID_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=bostoncontrol_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\ARCHVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=boston'LOG_ARCHIVE_DEST_2='SERVICE=chicago LGWR ASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=chicago'LOG_ARCHIVE_DEST_STATE_1=ENABLELOG_ARCHIVE_DEST_STATE_2=ENABLELOG_ARCHIVE_MAX_PROCESSES=30log_archive_format='%t_%s_%r.dbf'

Page 19: trucos de oracle

STANDBY_FILE_MANAGEMENT=AUTOSTANDBY_ARCHIVE_DEST='C:\oracle\product\10.2.0\ARCH'FAL_SERVER=chicagoFAL_CLIENT=bostonDB_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=197132288boston.__java_pool_size=4194304boston.__large_pool_size=4194304boston.__shared_pool_size=83886080boston.__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\ARCHVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=boston'*.LOG_ARCHIVE_DEST_2='SERVICE=chicago LGWR ASYNCVALID_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'

Page 20: trucos de oracle

*.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 MOUNTSQL> 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;

Page 21: trucos de oracle

Mas informacion aqui:http://www.undomain.es/node/163

Publicado por El pibeen 14:13 0 comentarios  

Etiquetas: Base de datos, Brico, Cursos Paso a Paso, Noticias, Oracle

Hazte DBA en dos dias, segun OracleOracle, 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:32 0 comentarios  

Etiquetas: Noticias, Oracle

M A R T E S 1 4 D E O C T U B R E D E 2 0 0 8

¿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: