viernes, 8 de agosto de 2008

Estadísticas usando DBMS_STATS

alter session set sort_area_size = 67108864;

BEGINSYS.DBMS_STATS.GATHER_SCHEMA_STATS (
OwnName => 'OWNER',
Granularity => 'ALL',
Options => 'GATHER',
Gather_Temp => TRUE,
Estimate_Percent => 53,
Block_sample => TRUE,
Degree => 6,
Cascade => TRUE,
No_Invalidate => TRUE);
END;
/

viernes, 1 de agosto de 2008

RESTORE desde CONTRILFILE

* Restore de una base backup en frío.
* Renombrado de una base.
* Reubicación de todos sus datafiles (la reubicación se puede hacer de dos o tres formas aquí ensayamos la del control file)
* Recovery desde redologs.

Lo que hay que hacer es lo siguiente:

1) - Copia el archivo de parámetros (pfile o spfile) del servidor destino al origen.

Los parámetros a cambiar son:

db_name = NUEVO_NOMBRE_DE_BASE
control_files = ( "/path/logs1/ctrlORCL_SID01.ctl",
"/path/logs2/ctrlORCL_SID02.ctl")

background_dump_dest = /path/adm/ORCL_SID/bdump
user_dump_dest = /path/adm/ORCL_SID/bdump
core_dump_dest = /path/adm/ORCL_SID/cdump



2) - Crea un archivo de password en el destino.

orapwd file=ORACLE_HOME/dbs/orapwORACLE_SID password= entries=10

3) - Copiar los datafiles del origen al destino.
Para esto la base debe esta baja.

Originales:

scp '/path/ORACLE_SID/data01/system_01.dbf' usuario@servidor:'/path/ORACLE_SID/data01/system_01.dbf'
scp '/path/ORACLE_SID/data01/undotbs_01.dbf' usuario@servidor:'/path/ORACLE_SID/data01/undotbs_01.dbf'
scp '/path/ORACLE_SID/data01/tools_01.dbf' usuario@servidor:'/path/ORACLE_SID/data01/tools_01.dbf'
scp '/path/ORACLE_SID/data01/users_01.dbf' usuario@servidor:'/path/ORACLE_SID/data01/users_01.dbf'
scp '/path/ORACLE_SID/data01/rman_01.dbf' usuario@servidor:'/path/ORACLE_SID/data01/rman_01.dbf'
scp '/path/ORACLE_SID/data01/oemrep_01.dbf' usuario@servidor:'/path/ORACLE_SID/data01/oemrep_01.dbf'

scp '/path/ORACLE_SID/logs1/ctrlORACLE_SID01.ctl' usuario@servidor:'/path/ORACLE_SID/logs1/ctrlORACLE_SID01.ctl'
scp '/path/ORACLE_SID/logs2/ctrORACLE_SID02.ctl' usuario@servidor:'/path/ORACLE_SID/logs2/ctrORACLE_SID02.ctl'


4) - Para crear el nuevo control file se debe ejecutar el comando.

$ sqlplus /nolog

SQL*Plus: Release 9.2.0.8.0 - Production on Fri Aug 1 15:36:01 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> conn sys as sysdba
Enter password:
Connected to an idle instance.
SQL> alter database backup controlfile to trace;

una vez generado el controlfile, se copia al otro servidor y se modifican datos
para que quede como el ejemplo de abajo.


desde un sqlplus conectado como sys ejecuta lo siguiente en el
nuevo servidor con el nuevo motor instalado.

----------------------------------------------------------------------------
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE set DATABASE "ORACLE_SID" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 2
MAXDATAFILES 30
MAXINSTANCES 1
MAXLOGHISTORY 226
LOGFILE
GROUP 1 (
'/path/ORACLE_SID/logs1/grp1rdo01.log',
'/path/ORACLE_SID/logs2/grp1rdo02.log'
) SIZE 10M,
GROUP 2 (
'/path/ORACLE_SID/logs1/grp2rdo01.log',
'/path/ORACLE_SID/logs2/grp2rdo02.log'
) SIZE 10M,
GROUP 3 (
'/path/ORACLE_SID/logs1/grp3rdo01.log',
'/path/ORACLE_SID/logs2/grp3rdo02.log'
) SIZE 10M
-- STANDBY LOGFILE
DATAFILE
'/path/ORACLE_SID/data01/system_01.dbf',
'/path/ORACLE_SID/data01/undotbs_01.dbf',
'/path/ORACLE_SID/data01/tools_01.dbf',
'/path/ORACLE_SID/data01/users_01.dbf',
'/path/ORACLE_SID/data01/rman_01.dbf',
'/path/ORACLE_SID/data01/oemrep_01.dbf'
CHARACTER SET US7ASCII;
----------------------------------------------------------------------------------------------------------

Si esta ejecución da error, NO se puede seguir sin resolverlo previamente.

5) - Si todo OK entonces, desde la misma sesión del sqlplus se ejecuta:

'alter database open resetlogs;'

Si hay un error de media recovery, es porque la base original se bajo en forma dudosa (no NORMAL),
por lo que se puede intentar un recovery ejecutando:

'recover database using backup controlfile until cancel;'

Si OK, listo ir a punto 6

Si no OK, se intenta lo siguiente, ejecuta el select:

'select group#, seq#, status from v$log;'

se ve uno con status CURRENT se saca el 'GROUP#' y ejecutar:

select member from v$logfile where GROUP# = ;

En este punto la base debiera poder abrirse, ejecutar:

'alter database open resetlogs;'

Caso contrario go to METALINK!!!! y resar si ud es creyente.

6) - Si todo funciona OK, solo resta crear el tablespace TEMP, para lo cual se ejecuta
la creación que estaba en el controlfile antes editado:

ALTER TABLESPACE TEMP ADD TEMPFILE '/path/ORACLE_SID/data01/temp_01.dbf' SIZE 209715200 REUSE AUTOEXTEND OFF;

7) - Luego:

'alter database rename global_name to ORACLE_SID' el nuevo ORACLE_SID con el cual se
reemplazó el anteriao en el INIT y el el CONTROLFILE.

8) - Verificación:

Bajar y abrir la base (Revisar el alert para ver que este todo OK)
Forzar un switch, ejecutar:

'alter system switch logfile;'

(Revisar el alert para ver que este todo OK)

9) - Fin