lunes, 2 de marzo de 2009

Oracle Virtual Machine (VM) Installation

See graphically how to install Oracle Virtual Machine on Linux.

miércoles, 28 de enero de 2009

Tablespace Point in Time Recovery from Cold Backup

The steps to restore a tablespace to a point in time from cold rman backup in another machine is:

1) Copy initdb.ora from production environment to auxiliary node.
Change paths to the new location for user_dump_dest ...
Include parameters:
db_file_name_convert =('old_path', '/RECOVER/')
log_file_name_convert=('old_path','/RECOVER/')
2) Startup nomount (with same SID, because we will use clone) in auxiliary node.
3) Execute rman script:
CONNECT TARGET user/pass@prod_db
CONNECT CATALOG user/pass@catalog_db
CONNECT AUXILIARY /
run{
allocate clone channel t1 type sbt_tape
parms 'ENV=(NSR_SERVER=legato,NSR_CLIENT=client,NSR_DATA_VOLUME_POOL=pool)';
allocate clone channel a1 type disk;
set until time "to_date('19-01-09 06:00:00','DD-MM-YY HH24:MI:SS')"; -- The backup is previous to this time.
set newname for datafile 1 to '/RECOVER/system.dbf';
set newname for datafile 2 to '/RECOVER/undotbs1.dbf';
set newname for datafile 3 to '/RECOVER/sysaux.dbf';
set newname for datafile 4 to '/RECOVER/data1.dbf';
set newname for datafile 5 to '/RECOVER/dat12.dbf';
restore clone datafile 1,2,3,4,5;
restore clone controlfile to clone_cf;
replicate clone controlfile from clone_cf;
sql clone 'alter database mount clone database';
switch clone datafile all;
sql clone "alter database datafile 1 online";
sql clone "alter database datafile 2 online";
sql clone "alter database datafile 3 online";
sql clone "alter database datafile 4 online";
sql clone "alter database datafile 5 online";
release channel t1;
release channel t2;
release channel a1;
}

canal asignado: t1
canal t1: sid=87 devtype=SBT_TAPE
canal t1: NMO v4.5.0.0

canal asignado: t2
canal t2: sid=86 devtype=SBT_TAPE
canal t2: NMO v4.5.0.0

canal asignado: t3
canal t3: sid=85 devtype=SBT_TAPE
canal t3: NMO v4.5.0.0

canal asignado: a1
canal a1: sid=84 devtype=DISK

ejecutando el comando: SET until clause

ejecutando el comando: SET NEWNAME

ejecutando el comando: SET NEWNAME

ejecutando el comando: SET NEWNAME

ejecutando el comando: SET NEWNAME

ejecutando el comando: SET NEWNAME

Iniciando restore en 28/01/09

canal t1: iniciando restauración del juego de copias de seguridad de archivos de datos
canal t1: especificando archivo(s) de datos para restaurar del juego de copias de seguridad
restaurando el archivo de datos 00001 en /RECOVER/system.dbf
restaurando el archivo de datos 00002 en /RECOVER/undotbs1.dbf
restaurando el archivo de datos 00003 en /RECOVER/sysaux.dbf
restaurando el archivo de datos 00004 en /RECOVERABD/data1.dbf
restaurando el archivo de datos 0005 en /RECOVERABD/data2.dbf
canal t1: leyendo desde la parte de copia de seguridad bck_offline_db_5599o_210
canal t1: restauración terminada, tiempo transcurrido: 00:40:53
restore terminado en 28/01/09

Iniciando restore en 28/01/09

canal t1: iniciando restauración del juego de copias de seguridad de archivos de datos
canal t1: restaurando archivo de control
archivo de salida=/RECOVER/controldb.ora
canal t1: leyendo desde la parte de copia de seguridad bck_offline_db_24fh6m_210
canal t1: parte 1 de la copia de seguridad restaurada
manejador de parte=bck_offline_db_24fh6m_210 etiqueta=TAG20090118T220122
canal t1: restauración terminada, tiempo transcurrido: 00:01:57
restore terminado en 28/01/09


sentencia sql: alter database mount clone database

archivo de datos 1 cambiado a la copia del archivo de datos
recid de copia del archivo de datos de entrada=72 marca=6771 archivo=/RECOVER/system.dbf
archivo de datos 2 cambiado a la copia del archivo de datos
recid de copia del archivo de datos de entrada=73 marca=6771 archivo=/RECOVER/undotbs1.dbf
archivo de datos 3 cambiado a la copia del archivo de datos
recid de copia del archivo de datos de entrada=74 marca=6771 archivo=/RECOVER/sysaux.dbf
archivo de datos 4 cambiado a la copia del archivo de datos
recid de copia del archivo de datos de entrada=75 marca=6771 archivo=/RECOVER/data1.dbf
archivo de datos 5 cambiado a la copia del archivo de datos
recid de copia del archivo de datos de entrada=76 marca=6771 archivo=/RECOVER/data2.dbf

sentencia sql: alter database datafile 1 online

sentencia sql: alter database datafile 2 online

sentencia sql: alter database datafile 3 online

sentencia sql: alter database datafile 4 online

sentencia sql: alter database datafile 5 online


4) At this moment we have our db restore to a exactly point of our previous backup.
5) Open the database with resetlogs:

alter database open resetlogs; -- This will create our redo logs in /RECOVER

6) Our database is correctly opened.

7) You could export the tables you need at this point. Maybe need to drop other database datafiles not restored and table indexes, but not much more to do :-))

viernes, 26 de diciembre de 2008

Mandatory Oracle Sites to visit

In English:

  • http://otn.oracle.com: Free Oracle Software, documentation ... You should create a free account to access.

In Spanish:

martes, 23 de diciembre de 2008

Prepare your Oracle Interview: Questions and Answers

Really interesting and interactive site to practice:

GeekInterview.

Free Oracle Tools

These are my favourites free oracle tools (inexpensive) :

Do you have other free tool? Please, let me know.

lunes, 22 de diciembre de 2008

DBMS_SPACE Package: Estimate Table and Index Size

We could estimate table size with this script:

SET SERVEROUTPUT ON
DECLARE
v_used_bytes NUMBER(10);
v_Allocated_Bytes NUMBER(10);
v_type sys.create_table_cost_columns;
BEGIN
v_Type := sys.create_table_cost_columns
(
sys.create_table_cost_colinfo('DATE',NULL),
sys.create_table_cost_colinfo('VARCHAR2',2),
sys.create_table_cost_colinfo('VARCHAR2',3),
sys.create_table_cost_colinfo('VARCHAR2',13),
sys.create_table_cost_colinfo('NUMBER',6),
sys.create_table_cost_colinfo('NUMBER',38),
sys.create_table_cost_colinfo('NUMBER',6),
sys.create_table_cost_colinfo('NUMBER',16),
sys.create_table_cost_colinfo('NUMBER',16),
sys.create_table_cost_colinfo('NUMBER',16),
sys.create_table_cost_colinfo('NUMBER',16),
sys.create_table_cost_colinfo('NUMBER',16),
sys.create_table_cost_colinfo('NUMBER',16),
sys.create_table_cost_colinfo('NUMBER',16),
sys.create_table_cost_colinfo('NUMBER',4),
sys.create_table_cost_colinfo('NUMBER',4),
sys.create_table_cost_colinfo('NUMBER',4),
sys.create_table_cost_colinfo('VARCHAR2',1),
sys.create_table_cost_colinfo('DATE',NULL),
sys.create_table_cost_colinfo('DATE',NULL),
sys.create_table_cost_colinfo('NUMBER',6),
sys.create_table_cost_colinfo('NUMBER',4),
sys.create_table_cost_colinfo('NUMBER',2),
sys.create_table_cost_colinfo('VARCHAR2',1),
sys.create_table_cost_colinfo('NUMBER',16),
sys.create_table_cost_colinfo('NUMBER',16)
);
DBMS_SPACE.CREATE_TABLE_COST('USERS',v_Type,150000,10,v_used_Bytes,v_Allocated_Bytes);
DBMS_OUTPUT.PUT_LINE('Used Bytes: ' || TO_CHAR(v_used_Bytes));
DBMS_OUTPUT.PUT_LINE('Allocated Bytes: ' || TO_CHAR(v_Allocated_Bytes));
END;
/

In this example, 150000 is the estimate number of rows for this table and 10 is pct_used.

And we could estimate index size:

set serveroutput on
DECLARE
ub NUMBER;
ab NUMBER;
BEGIN
dbms_space.create_index_cost('CREATE INDEX index_name ON table(column1,column2)', ub, ab);
dbms_output.put_line('Used Bytes: ' || TO_CHAR(ub));
dbms_output.put_line('Alloc Bytes: ' || TO_CHAR(ab));
END;
/

viernes, 19 de diciembre de 2008

Steps to migrate from File System to ASM

For me, this is the easiest way for migrate our Oracle database from File System to ASM:

1)In open state:
- Indicanew control file path: ALTER SYSTEM SET control_files='+MIGAS' scope=spfile;
- Indicate new file creation path: ALTER SYSTEM SET db_create_file_dest='+MIGAS' scope=spfile;
- Indicate FRA path: ALTER SYSTEM SET db_recovery_file_dest='+FRAMIG' scope=spfile;

2)Startup in nomount mode:
- SQL> SHUTDOWN IMMEDIATE
- STARTUP NOMOUNT
Instancia ORACLE iniciada.

Total System Global Area 536870912 bytes
Fixed Size 2030264 bytes
Variable Size 150996296 bytes
Database Buffers 377487360 bytes
Redo Buffers 6356992 bytes
SQL> exit
Desconectado de Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
angel>:/u01/app/oracle/product/10.2.0/dbs> rman

Recovery Manager : Release 10.2.0.2.0 - Production on Lun Ene 28 12:31:06 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.

3)From recovery manager

- RMAN> connect target /

conectado a la base de datos destino: MIGAS (no montada)

- Restore controlfile:

RMAN> RESTORE CONTROLFILE FROM '/migrate_asm/MIGAS/control01';

Iniciando restore en 28/01/08
se utiliza el archivo de control de la base de datos destino en lugar del catálogo de recuperación
canal asignado: ORA_DISK_1
canal ORA_DISK_1: sid=159 devtype=DISK

canal ORA_DISK_1: copia del archivo de control copiada
archivo de salida=+MIGAS/migas/controlfile/backup.264.645194003
restore terminado en 28/01/08

- Mount the database

RMAN> ALTER DATABASE MOUNT;

base de datos montada
canal liberado: ORA_DISK_1

- Begin copying file to ASM storage.

RMAN> BACKUP AS COPY DATABASE FORMAT '+MIGAS';

Iniciando backup en 28/01/08
canal asignado: ORA_DISK_1
canal ORA_DISK_1: sid=159 devtype=DISK
canal ORA_DISK_1: iniciando copia de archivo de datos
archivo de datos de entrada fno=00004 nombre=/migrate_asm/MIGAS/angel.dbf
nombre de archivo de salida=+MIGAS/migas/datafile/angel.263.645194147 etiqueta=TAG20080128T123546 recid=1 marca=645194224
canal ORA_DISK_1: copia de archivo de datos terminada, tiempo transcurrido: 00:01:25
canal ORA_DISK_1: iniciando copia de archivo de datos
archivo de datos de entrada fno=00001 nombre=/migrate_asm/MIGAS/system.dbf
nombre de archivo de salida=+MIGAS/migas/datafile/system.262.645194231 etiqueta=TAG20080128T123546 recid=2 marca=645194247
canal ORA_DISK_1: copia de archivo de datos terminada, tiempo transcurrido: 00:00:25
canal ORA_DISK_1: iniciando copia de archivo de datos
archivo de datos de entrada fno=00003 nombre=/migrate_asm/MIGAS/sysaux.dbf
nombre de archivo de salida=+MIGAS/migas/datafile/sysaux.261.645194257 etiqueta=TAG20080128T123546 recid=3 marca=645194272
canal ORA_DISK_1: copia de archivo de datos terminada, tiempo transcurrido: 00:00:25
canal ORA_DISK_1: iniciando copia de archivo de datos
archivo de datos de entrada fno=00002 nombre=/migrate_asm/MIGAS/undo.dbf
nombre de archivo de salida=+MIGAS/migas/datafile/undotbs1.266.645194283 etiqueta=TAG20080128T123546 recid=4 marca=645194290
canal ORA_DISK_1: copia de archivo de datos terminada, tiempo transcurrido: 00:00:15
canal ORA_DISK_1: iniciando copia de archivo de datos
copiando archivo de control actual
nombre de archivo de salida=+MIGAS/migas/controlfile/backup.259.645194297 etiqueta=TAG20080128T123546 recid=5 marca=645194299
canal ORA_DISK_1: copia de archivo de datos terminada, tiempo transcurrido: 00:00:03
canal ORA_DISK_1: iniciando juego de copias de seguridad de archivo de datos completo
canal ORA_DISK_1: especificando archivo(s) de datos en el juego de copias de seguridad
incluyendo SPFILE actual en el juego de copias de seguridad
canal ORA_DISK_1: iniciando parte 1 en 28/01/08
canal ORA_DISK_1: parte terminada 1 en 28/01/08
manejador de parte=+MIGAS/migas/backupset/2008_01_28/nnsnf0_tag20080128t123546_0.256.645194301 etiqueta=TAG20080128T123546 comentario=NONE
canal ORA_DISK_1: juego de copias de seguridad terminado, tiempo transcurrido: 00:00:02
backup terminado en 28/01/08

- Point to controlfile and dictionary to new copy in ASM:

RMAN> SWITCH DATABASE TO COPY;

el archivo de datos 1 se cambiado a la copia de archivo de datos "+MIGAS/migas/datafile/system.262.645194231"
el archivo de datos 2 se cambiado a la copia de archivo de datos "+MIGAS/migas/datafile/undotbs1.266.645194283"
el archivo de datos 3 se cambiado a la copia de archivo de datos "+MIGAS/migas/datafile/sysaux.261.645194257"
el archivo de datos 4 se cambiado a la copia de archivo de datos "+MIGAS/migas/datafile/angel.263.645194147"


- Open SQL Plus session to recover and open with resetlogs resetlogs:

SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
ORA-00279: el cambio 161306 generado en 01/28/2008 12:30:11 es necesario para
el thread 1
ORA-00289: sugerencia: +FRAMIG
ORA-00280: el cambio 161306 para el thread 1 está en la secuencia número 5


Especificar log: {=sugerido | nombre_archivo | AUTO | CANCEL}
CANCEL
Recuperación del medio físico cancelada.
SQL> ALTER DATABASE OPEN RESETLOGS;

Base de datos modificada.

-Move temporary files to ASM storage:

SQL> select tablespace_name, file_name, bytes from dba_temp_files;

TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
BYTES
----------
TEMP
/migrate_asm/MIGAS/temp.dbf
536870912

SQL> alter database tempfile '/migrate_asm/MIGAS/temp.dbf' drop including datafiles;

Base de datos modificada.

SQL> alter tablespace temp add tempfile size 512m;

Tablespace modificado.

SQL> select tablespace_name, file_name, bytes from dba_temp_files;

TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
BYTES
----------
TEMP
+MIGAS/migas/tempfile/temp.260.645194743
536870912

- Recreate redo log files:

SQL> select a.group#, a.member, b.bytes
2 from v$logfile a, v$log b where a.group# = b.group#;

GROUP#
----------
MEMBER
--------------------------------------------------------------------------------
BYTES
----------
1
/migrate_asm/MIGAS/redo1.dbf
104857600

2
/migrate_asm/MIGAS/redo2.dbf
104857600

GROUP#
----------
MEMBER
--------------------------------------------------------------------------------
BYTES
----------

3
/migrate_asm/MIGAS/redo3.dbf
104857600

SQL> select group#, status from v$log;

GROUP# STATUS
---------- ----------------
1 UNUSED
2 CURRENT
3 UNUSED

SQL> alter system switch logfile;

Sistema modificado.

SQL> select group#, status from v$log;

GROUP# STATUS
---------- ----------------
1 INACTIVE
2 INACTIVE
3 CURRENT

SQL> alter database drop logfile group 2;

Base de datos modificada.

SQL> alter database add logfile '+MIGAS' size 100m;

Base de datos modificada.

SQL> alter database drop logfile group 2;

Base de datos modificada.

SQL> alter database add logfile '+MIGAS' size 100m;

Base de datos modificada.

SQL> alter system switch logfile;

Sistema modificado.

SQL> alter system checkpoint;

Sistema modificado.

SQL> alter database drop logfile group 3;

Base de datos modificada.

SQL> alter database add logfile '+MIGAS' size 100m;

Base de datos modificada.


- Recreate spfile in ASM storage:

SQL> CREATE PFILE='$ORACLE_HOME/dbs/initMIGAS.ora' from spfile='$ORACLE_HOME/dbs/spfileMIGAS.ora';

Archivo creado.


SQL> create spfile='+MIGAS' from pfile='$ORACLE_HOME/dbs/initMIGAS.ora';

Archivo creado.

- Shutdown database and create pointer to new spfile:

SQL> SHUTDOWN IMMEDIATE
Base de datos cerrada.
Base de datos desmontada.
Instancia ORACLE cerrada.
SQL> exit

echo "SPFILE='+migas/migas/parameterfile/spfile.267.645195221'" > $ORACLE_HOME/dbs/initMIGAS.ora

mv $ORACLE_HOME/dbs/spfileMIGAS.ora $ORACLE_HOME/dbs/spfileMIGAS.ora.old

- Startup:

SQL> startup
Instancia ORACLE iniciada.

Total System Global Area 536870912 bytes
Fixed Size 2030264 bytes
Variable Size 150996296 bytes
Database Buffers 377487360 bytes
Redo Buffers 6356992 bytes
Base de datos montada.
Base de datos abierta.

Tablespace Name / File Class Filename File Size Auto Next Max
----------------------------- ---------------------------------------------------------------- --------------- ---- --------------- ---------------
[ CONTROL FILE ] +MIGAS/migas/controlfile/backup.264.645194003
[ ONLINE REDO LOG ] +MIGAS/migas/onlinelog/group_1.257.645195039 104,857,600
[ ONLINE REDO LOG ] +MIGAS/migas/onlinelog/group_2.258.645195047 104,857,600
[ ONLINE REDO LOG ] +MIGAS/migas/onlinelog/group_3.265.645195069 104,857,600
ANGEL +MIGAS/migas/datafile/angel.263.645194147 5,368,709,120 NO 0 0
SYSAUX +MIGAS/migas/datafile/sysaux.261.645194257 1,073,741,824 YES 10,485,760 34,359,721,984
SYSTEM +MIGAS/migas/datafile/system.262.645194231 1,073,741,824 YES 10,485,760 34,359,721,984
TEMP +MIGAS/migas/tempfile/temp.260.645194743 536,870,912 NO 0 0
UNDOTBS1 +MIGAS/migas/datafile/undotbs1.266.645194283 536,870,912 NO 0 0
---------------
sum 8,904,507,392

-At this point you are done. You should maintain old files some time …

RMAN> DELETE NOPROMPT FORCE COPY;

se utiliza el archivo de control de la base de datos destino en lugar del catálogo de recuperación
canal asignado: ORA_DISK_1
canal ORA_DISK_1: sid=144 devtype=DISK
la especificación no coincide con ningún archive log del catálogo de recuperación

Lista de Copias del Archivo de Datos
Clave Archivo S Hora de Finalización SCN Pto. Ctrl. Hora de Punto de Control Nombre
------- ---- - -------------------- ---------- -------------------- ----
6 1 A 28/01/08 161306 28/01/08 /migrate_asm/MIGAS/system.dbf
7 2 A 28/01/08 161306 28/01/08 /migrate_asm/MIGAS/undo.dbf
8 3 A 28/01/08 161306 28/01/08 /migrate_asm/MIGAS/sysaux.dbf
9 4 A 28/01/08 161306 28/01/08 /migrate_asm/MIGAS/angel.dbf

Lista de Copias de Archivos de Control
Clave S Hora de Finalización SCN Pto. Ctrl. Hora de Punto de Control Nombre
------- - -------------------- ---------- -------------------- ----
5 A 28/01/08 161306 28/01/08 +MIGAS/migas/controlfile/backup.259.645194297
copia del archivo de datos suprimida
copia del archivo de datos nombre=/migrate_asm/MIGAS/system.dbf recid=6 marca=645194377
copia del archivo de datos suprimida
copia del archivo de datos nombre=/migrate_asm/MIGAS/undo.dbf recid=7 marca=645194377
copia del archivo de datos suprimida
copia del archivo de datos nombre=/migrate_asm/MIGAS/sysaux.dbf recid=8 marca=645194377
copia del archivo de datos suprimida
copia del archivo de datos nombre=/migrate_asm/MIGAS/angel.dbf recid=9 marca=645194377
copia del archivo de control suprimida
copia del archivo de control nombre=+MIGAS/migas/controlfile/backup.259.645194297 recid=5 marca=645194299
5 objetos suprimidos

Delete old redo log files:

solpro05:/migrate_asm/MIGAS> ls
control01 redo1.dbf redo2.dbf redo3.dbf
solpro05:/migrate_asm/MIGAS> rm *
solpro05:/migrate_asm/MIGAS> ls
solpro05:/migrate_asm/MIGAS>

Oracle Magazine - Most Recent

Mundo Blog

My BlogCatalog BlogRank Technology blogs

Apture