viernes, 20 de noviembre de 2015

Verificar y limitar el valor de ZFS buffer cache en Solaris

Modificar el siguiente parámetro en el /etc/system 

Este ejemplo setea el valor del buffer de ZFS en 1GB (el valor es exadecimal).

set zfs:zfs_arc_max=0x3B9ACA00

root@t52srv02:~# echo ::memstat | mdb -k

root@USBLDDB1010:~# echo ::memstat | mdb -k
Page Summary                 Pages             Bytes  %Tot
----------------- ----------------  ----------------  ----
Kernel                     1681062             12.8G    6%
Guest                            0                 0    0%
ZFS Metadata                445216              3.3G    2%
ZFS File Data             16733771            127.6G   61%
Anon                       5755643             43.9G   21%
Exec and libs                65620            512.6M    0%
Page cache                   28895            225.7M    0%
Free (cachelist)             31067            242.7M    0%
Free (freelist)            2521702             19.2G    9%
Total                     27262976              208G

jueves, 19 de noviembre de 2015

Step By Step Guide On Creating Physical Standby Using RMAN(ASM)

Step By Step Guide On Creating Physical Standby Using RMAN(ASM)

This article explains steps to create physical standby database using Oracle Database 11g RMAN  FROM ACTIVE DATABASE capability to the DUPLICATE FOR STANDBY command.
Primary database Name:primdv1
Standby database Name:stbydv1
Step1)Make sure primary database is running in archive log mode.
2)Determine if FORCE LOGGING is enabled. If it is not enabled, enable FORCE LOGGING mode.
SQL> SELECT force_logging FROM v$database;
FOR

NO
SQL> ALTER DATABASE FORCE LOGGING;
Database altered.
SQL> SELECT force_logging FROM v$database;
FOR

YES
3)Configure the primary database to receive redo data, by adding the standby logfiles to the primary
It is highly recommended that you have one more standby redo log group than you have online redo log groups as the primary database.
The files must be the same size or larger than the primary database’s online redo logs.
ALTER DATABASE ADD STANDBY LOGFILE
‘+DATA1/primdv1/srl01.log’
SIZE 52428800
/
ALTER DATABASE ADD STANDBY LOGFILE
‘+DATA1/primdv1/srl02.log’
SIZE 52428800
/
ALTER DATABASE ADD STANDBY LOGFILE
‘+DATA1/primdv1/srl03.log’
SIZE 52428800
/
ALTER DATABASE ADD STANDBY LOGFILE
‘+DATA1/primdv1/srl04.log’
SIZE 52428800
/
4)Set primary database initialization parameters
ALTER SYSTEM SET log_archive_config = ‘dg_config=(primdv1,stbydv1)’;
ALTER SYSTEM SET log_archive_dest_2 =
‘service=stbydv1 async valid_for=(online_logfile,primary_role) db_unique_name=stbydv1′;
show parameter log_archive_config
show parameter log_archive_dest_2
If you get following error
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16019: cannot use LOG_ARCHIVE_DEST_1 with LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST
Solution :
1. Reset the LOG_ARCHIVE_DEST to NULL value :
SQL> ALTER SYSTEM set log_archive_dest=”;
2. Set the LOG_ARCHIVE_DEST_1 to the value set to LOG_ARCHIVE_DEST before
SQL> ALTER SYSTEM set log_archive_dest_1=’LOCATION=/…’;
if you use this code, you dont need to restart database:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1=’LOCATION=h:\oradata\archive’ SCOPE=BOTH;
To check archival destination issue is ok:
show parameter LOG_ARCHIVE_DEST;
select DEST_ID, DEST_NAME,DESTINATION from v$archive_dest;
update tnsnames.ora file with the following entries on both hosts:
PRIMDV1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dgprim0001.ukatru.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = primdv1.ukatru.com)
)
)
STBYDV1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dgstby0001.ukatru.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = stbydv1.ukatru.com)
)
)
update the listner.ora with the following values on standby database:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = standby1.example.com)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = standby1)
)
)
copy the remote login password file (orapwprimdv1) from the primary database system to the $ORACLE_HOME/dbs directory on the
standby database system, renaming it to orapwstbydv1.
In the $ORACLE_HOME/dbs directory of the standby system, create an initialization parameter file named initstbydv1.ora
containing a single parameter: DB_NAME=stbydv1(i.e. stbydv1)
On the standby system, change to the /u01/app/oracle/admin directory. Create a directory with a name that matches your physical standby SID (i.e. stbydv1).
Change to the newly created directory (i.e. stbydv1) and create an adump directory.
now on the standby system log into database
export ORACLE_SID=stbydv1
dgstby0001:/u01/app/oracle/admin/stbydv1>export ORACLE_SID=stbydv1
dgstby0001:/u01/app/oracle/admin/stbydv1>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Sat Apr 14 22:57:24 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL>
SQL> startup nomount pfile=$ORACLE_HOME/dbs/initstbydv1.ora
ORACLE instance started.
Total System Global Area 238034944 bytes
Fixed Size 2227136 bytes
Variable Size 180356160 bytes
Database Buffers 50331648 bytes
Redo Buffers 5120000 bytes
RMAN> connect target sys
target database Password:
connected to target database: PRIMDV1 (DBID=1462743077)
RMAN> connect auxiliary sys@stbydv1
auxiliary database Password:
connected to auxiliary database: STBYDV1 (not mounted)
Below is the rman script to create standby database:
run {
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate channel prmy3 type disk;
allocate channel prmy4 type disk;
allocate auxiliary channel stby type disk;
duplicate target database for standby from active database
spfile
parameter_value_convert ‘primdv1′,’stbydv1′
set db_unique_name=’stbydv1′
set db_file_name_convert=’/primdv1/’,’/stbydv1/’
set log_file_name_convert=’/primdv1/’,’/stbydv1/’
set control_files=’+DATA1′
set log_archive_max_processes=’5′
set fal_client=’stbydv1′
set fal_server=’primdv1′
set standby_file_management=’AUTO’
set log_archive_config=’dg_config=(primdv1,stbydv1)’
set log_archive_dest_2=’service=primdv1 ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=primdv1′
;
}
channel prmy3: SID=55 device type=DISK
allocated channel: prmy4
channel prmy4: SID=56 device type=DISK
allocated channel: stby
channel stby: SID=19 device type=DISK
Starting Duplicate Db at 14-APR-12
contents of Memory Script:
{
backup as copy reuse
targetfile ‘/u01/app/oracle/product/11.2.0.3/db_1/dbs/orapwprimdv1’ auxiliary format
‘/u01/app/oracle/product/11.2.0.3/db_1/dbs/orapwstbydv1’ targetfile
‘+DATA1/primdv1/spfileprimdv1.ora’ auxiliary format
‘/u01/app/oracle/product/11.2.0.3/db_1/dbs/spfilestbydv1.ora’ ;
sql clone “alter system set spfile= ”/u01/app/oracle/product/11.2.0.3/db_1/dbs/spfilestbydv1.ora””;
}
executing Memory Script
Starting backup at 14-APR-12
Finished backup at 14-APR-12
sql statement: alter system set spfile= ”/u01/app/oracle/product/11.2.0.3/db_1/dbs/spfilestbydv1.ora”
contents of Memory Script:
{
sql clone “alter system set audit_file_dest =
”/u01/app/oracle/admin/stbydv1/adump” comment=
”” scope=spfile”;
sql clone “alter system set dispatchers =
”(PROTOCOL=TCP) (SERVICE=stbydv1XDB)” comment=
”” scope=spfile”;
sql clone “alter system set log_archive_dest_1 =
”LOCATION=+DATA1/stbydv1” comment=
”” scope=spfile”;
sql clone “alter system set db_unique_name =
”stbydv1” comment=
”” scope=spfile”;
sql clone “alter system set db_file_name_convert =
”/primdv1/”, ”/stbydv1/” comment=
”” scope=spfile”;
sql clone “alter system set log_file_name_convert =
”/primdv1/”, ”/stbydv1/” comment=
”” scope=spfile”;
sql clone “alter system set control_files =
”+DATA1” comment=
”” scope=spfile”;
sql clone “alter system set log_archive_max_processes =
5 comment=
”” scope=spfile”;
sql clone “alter system set fal_client =
”stbydv1” comment=
”” scope=spfile”;
sql clone “alter system set fal_server =
”primdv1” comment=
”” scope=spfile”;
sql clone “alter system set standby_file_management =
”AUTO” comment=
”” scope=spfile”;
sql clone “alter system set log_archive_config =
”dg_config=(primdv1,stbydv1)” comment=
”” scope=spfile”;
sql clone “alter system set log_archive_dest_2 =
”service=primdv1 ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=primdv1” comment=
”” scope=spfile”;
shutdown clone immediate;
startup clone nomount;
}
executing Memory Script
sql statement: alter system set audit_file_dest = ”/u01/app/oracle/admin/stbydv1/adump” comment= ”” scope=spfile
sql statement: alter system set dispatchers = ”(PROTOCOL=TCP) (SERVICE=stbydv1XDB)” comment= ”” scope=spfile
sql statement: alter system set log_archive_dest_1 = ”LOCATION=+DATA1/stbydv1” comment= ”” scope=spfile
sql statement: alter system set db_unique_name = ”stbydv1” comment= ”” scope=spfile
sql statement: alter system set db_file_name_convert = ”/primdv1/”, ”/stbydv1/” comment= ”” scope=spfile
sql statement: alter system set log_file_name_convert = ”/primdv1/”, ”/stbydv1/” comment= ”” scope=spfile
sql statement: alter system set control_files = ”+DATA1” comment= ”” scope=spfile
sql statement: alter system set log_archive_max_processes = 5 comment= ”” scope=spfile
sql statement: alter system set fal_client = ”stbydv1” comment= ”” scope=spfile
sql statement: alter system set fal_server = ”primdv1” comment= ”” scope=spfile
sql statement: alter system set standby_file_management = ”AUTO” comment= ”” scope=spfile
sql statement: alter system set log_archive_config = ”dg_config=(primdv1,stbydv1)” comment= ”” scope=spfile
sql statement: alter system set log_archive_dest_2 = ”service=primdv1 ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=primdv1” comment= ”” scope=spfile
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area 1068937216 bytes
Fixed Size 2235208 bytes
Variable Size 616563896 bytes
Database Buffers 444596224 bytes
Redo Buffers 5541888 bytes
allocated channel: stby
channel stby: SID=21 device type=DISK
contents of Memory Script:
{
sql clone “alter system set control_files =
”+DATA1/stbydv1/controlfile/current.256.780620989” comment=
”Set by RMAN” scope=spfile”;
backup as copy current controlfile for standby auxiliary format ‘+DATA1/stbydv1/controlfile/current.257.780620989’;
sql clone “alter system set control_files =
”+DATA1/stbydv1/controlfile/current.257.780620989” comment=
”Set by RMAN” scope=spfile”;
shutdown clone immediate;
startup clone nomount;
}
executing Memory Script
sql statement: alter system set control_files = ”+DATA1/stbydv1/controlfile/current.256.780620989” comment= ”Set by RMAN” scope=spfile
Starting backup at 14-APR-12
channel prmy1: starting datafile copy
copying standby control file
output file name=/u01/app/oracle/product/11.2.0.3/db_1/dbs/snapcf_primdv1.f tag=TAG20120414T230949 RECID=1 STAMP=780620989
channel prmy1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 14-APR-12
sql statement: alter system set control_files = ”+DATA1/stbydv1/controlfile/current.257.780620989” comment= ”Set by RMAN” scope=spfile
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area 1068937216 bytes
Fixed Size 2235208 bytes
Variable Size 616563896 bytes
Database Buffers 444596224 bytes
Redo Buffers 5541888 bytes
allocated channel: stby
channel stby: SID=23 device type=DISK
contents of Memory Script:
{
sql clone ‘alter database mount standby database’;
}
executing Memory Script
sql statement: alter database mount standby database
RMAN-05529: WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to disk group only.
contents of Memory Script:
{
set newname for tempfile 1 to
“+data1”;
switch clone tempfile all;
set newname for datafile 1 to
“+data1”;
set newname for datafile 2 to
“+data1”;
set newname for datafile 3 to
“+data1”;
set newname for datafile 4 to
“+data1”;
backup as copy reuse
datafile 1 auxiliary format
“+data1” datafile
2 auxiliary format
“+data1” datafile
3 auxiliary format
“+data1” datafile
4 auxiliary format
“+data1” ;
sql ‘alter system archive log current’;
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to +data1 in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 14-APR-12
channel prmy1: starting datafile copy
input datafile file number=00001 name=+DATA1/primdv1/datafile/system.261.780607599
channel prmy2: starting datafile copy
input datafile file number=00002 name=+DATA1/primdv1/datafile/sysaux.262.780607621
channel prmy3: starting datafile copy
input datafile file number=00003 name=+DATA1/primdv1/datafile/undotbs1.263.780607639
channel prmy4: starting datafile copy
input datafile file number=00004 name=+DATA1/primdv1/datafile/users.265.780607653
output file name=+DATA1/stbydv1/datafile/users.260.780621011 tag=TAG20120414T231009
channel prmy4: datafile copy complete, elapsed time: 00:00:08
output file name=+DATA1/stbydv1/datafile/undotbs1.261.780621011 tag=TAG20120414T231009
channel prmy3: datafile copy complete, elapsed time: 00:01:47
output file name=+DATA1/stbydv1/datafile/system.258.780621011 tag=TAG20120414T231009
channel prmy1: datafile copy complete, elapsed time: 00:02:28
output file name=+DATA1/stbydv1/datafile/sysaux.259.780621011 tag=TAG20120414T231009
channel prmy2: datafile copy complete, elapsed time: 00:02:27
Finished backup at 14-APR-12
sql statement: alter system archive log current
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy RECID=1 STAMP=780621158 file name=+DATA1/stbydv1/datafile/system.258.780621011
datafile 2 switched to datafile copy
input datafile copy RECID=2 STAMP=780621158 file name=+DATA1/stbydv1/datafile/sysaux.259.780621011
datafile 3 switched to datafile copy
input datafile copy RECID=3 STAMP=780621158 file name=+DATA1/stbydv1/datafile/undotbs1.261.780621011
datafile 4 switched to datafile copy
input datafile copy RECID=4 STAMP=780621158 file name=+DATA1/stbydv1/datafile/users.260.780621011
Finished Duplicate Db at 14-APR-12
released channel: prmy1
released channel: prmy2
released channel: prmy3
released channel: prmy4
released channel: stby
RMAN> **end-of-file**
Perform a log switch on the primary database and redo will start being sent to the standby.
dgprim0001:/u01/app/oracle/wkdir>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Sat Apr 14 23:14:57 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SQL> alter system switch logfile;
System altered.
dgstby0001:/u01/app/oracle/product/11.2.0.3/db_1/network/admin>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Sat Apr 14 23:15:50 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SQL> alter database recover managed standby database
2 using current logfile disconnect;
Database altered.
Now Verify that the Physical Standby Database is Performing Correctly
SELECT sequence#, first_time, next_time, applied
FROM v$archived_log
ORDER BY sequence#
/
SQL> SELECT sequence#, first_time, next_time, applied
FROM v$archived_log
ORDER BY sequence#
/
2 3 4
SEQUENCE# FIRST_TIM NEXT_TIME APPLIED
———- ——— ——— ———
31 14-APR-12 14-APR-12 YES
32 14-APR-12 14-APR-12 YES
33 14-APR-12 14-APR-12 YES
34 14-APR-12 14-APR-12 YES
35 14-APR-12 14-APR-12 YES
36 14-APR-12 14-APR-12 IN-MEMORY
6 rows selected.

viernes, 13 de noviembre de 2015

Deshabilitar en Oracle Database 11g Enterprise Edition, Opciones licenciables después de instalar la BD

Deshabilitar en Oracle Database 11g Enterprise Edition, Opciones licenciables después de instalar la BD

Por Ronald Vargas Quesada
Publicado en julio 2013
Tip Oracle Database 11gR2, opciones configurables para la base de datos versión Enterprise Edition
Una de las cosas -entre tantas- de cuales tenemos que tener mucho cuidado, es escoger de manera correcta y adecuada, la versión y opciones de la base de datos, que hemos adquirido con nuestro licenciamiento con Oracle.
Recuerde que cuando usted compra un producto de Oracle, firma un contrato OLSA, que transfiere a Oracle, la potestad de realizar revisiones periódicas, tantas cuantas sea necesarias, de los productos y opciones utilizadas con dichos productos.
Generalmente, este tipo de procesos son conocidos como LMS y causan por lo general, un verdadero dolor de cabeza a las empresas, cuando por error humano, muchas veces inducido por el desconocimiento, se instalan opciones del motor de la base de datos, sin que lo hallamos claramente indicado, como producto de una instalación de facto - NEXT NEXT.
La versión Enterprise Edition del producto Oracle Database, es uno de los productos del portafolio de Oracle, que más opciones licenciables por separado tiene.
Entre ellas sobresalen, las opciones de:
  • Particionamiento
  • Olap
  • Seguridad
  • Minería de datos
  • Real Application Cluster
  • Dataguard
  • RAC
Ahora bien, tenemos el inconveniente, que cuando creamos una instancia de la base de datos en la versión E.E., con el procedimiento "WINDOWS", o sea, NEXT NEXT, podríamos instalar opciones que no son gratuitas en la base de datos. Estas opciones una vez instaladas, en algunos casos, no pueden ser desinstaladas desde la interfaz gráfica del runInstaller.
En la versión 11g, aparece un utilitario llamado "CHOPT", el cual permite de manera rápida y fácil, crear un script, que puede ser utilizado, para "APAGAR", estas opciones en una instancia, ya creada.
A continuación, podrá encontrar el procedimiento para realizar el apagado, de la opción de "Particionamiento" en una instancia de la base de datos, que se ha instalado con la metodología de "DOS gráfico" y que puede ser utilizada, para las distintas opciones que permite este utilitario.
Para que funcione adecuadamente, es necesario que siga al pie de la letra el procedimiento.
Nota: Antes de ejecutar este procedimiento, asegúrese de contar con los respaldos actualizados de su base de datos, en caso de que sea necesario acudir a ellos, por algún error que se genere en el proceso de ejecución del procedimiento.
[oracle@rac3 ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Wed Oct 19 06:18:18 2011

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

SQL> connect / as sysdba
Connected.
SQL> set pagesize 40
SQL> column comp_name format a37
SQL> /

COMP_NAME                             VERSION        STATUS
------------------------------------- -------------- -----------
OWB                                   11.2.0.1.0     VALID
Oracle Application Express            3.2.1.00.10    VALID
Oracle Enterprise Manager             11.2.0.1.0     VALID
OLAP Catalog                          11.2.0.1.0     VALID
Spatial                               11.2.0.1.0     VALID
Oracle Multimedia                     11.2.0.1.0     VALID
Oracle XML Database                   11.2.0.1.0     VALID
Oracle Text                           11.2.0.1.0     VALID
Oracle Expression Filter              11.2.0.1.0     VALID
Oracle Rules Manager                  11.2.0.1.0     VALID
Oracle Workspace Manager              11.2.0.1.0     VALID
Oracle Database Catalog Views         11.2.0.1.0     VALID
Oracle Database Packages and Types    11.2.0.1.0     VALID
JServer JAVA Virtual Machine          11.2.0.1.0     VALID
Oracle XDK                            11.2.0.1.0     VALID
Oracle Database Java Packages         11.2.0.1.0     VALID
OLAP Analytic Workspace               11.2.0.1.0     VALID
Oracle OLAP API                       11.2.0.1.0     VALID

18 rows selected.

SQL>

[oracle@rac3 ~]$ chopt

usage:

chopt  
La ejecución del comando podría brindarle la siguiente salida. No se preocupe, hasta este punto, no se ha ejecutado nada. Sin embargo, por si las dudas y por medida de precaución, antes de ejecutar el comando, proceda primero a bajar las instancias de base de datos disponibles.
Writing to /opt/oracle/product/11gR2/install/disable_partitioning.log...
%s_unixOSDMakePath% -f /opt/oracle/product/11gR2/rdbms/lib/ins_rdbms.mk part_off
%s_unixOSDMakePath% -f /opt/oracle/product/11gR2/rdbms/lib/ins_rdbms.mk ioracle

[oracle@rac3 ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Wed Oct 19 06:22:10 2011

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

SQL> connect / as sysdba
Connected.
SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

SQL> desc v$option
 Name                  Null?    Type
 --------------------- -------- ----------------------------
 PARAMETER                      VARCHAR2(64)
 VALUE                          VARCHAR2(64)

Verique que el parámetro de la opción correspondiente a ser modificada, tiene el valor de "TRUE" indicando que está instalada.
SQL> select parameter, value from v$option where parameter like 'Part%';

SQL> column PARAMETER format a20
SQL> column VALUE format a10
SQL> /

PARAMETER            VALUE
-------------------- ----------
Partitioning         TRUE

Proceda a bajar las instancias de la base de datos.
SQL>
[oracle@rac3 ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Wed Oct 19 06:36:36 2011
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
[oracle@rac3 ~]$ lsnrctl stop

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 19-OCT-2011 06:36:59

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac3.lab.com)(PORT=1521)))
The command completed successfully

Antes de correr este procedimiento, asegúrese que la instancia o instancias de la base de datos, han sido bajadas.
Vaya al directorio que indicó el comando CHOPT, dónde este ha dejado un archivo .log con las instrucciones a ser ejecutadas ('chopt disable partitioning') y proceda a cambiar el valor de la variable en el archivo log, por la ubicación del comando "MAKE" y cambie los permisos del archivo, para que pueda ser ejecutado.
[oracle@rac3 ~]$ pwd
/home/oracle
[oracle@rac3 ~]$ cd /opt/oracle/product/11gR2/install
[oracle@rac3 install]$ vi disable_partitioning.log
[oracle@rac3 install]$ more disable_partitioning.log
/usr/bin/make -f /opt/oracle/product/11gR2/rdbms/lib/ins_rdbms.mk part_off
/usr/bin/make -f /opt/oracle/product/11gR2/rdbms/lib/ins_rdbms.mk ioracle
[oracle@rac3 install]$ chmod 711 disable_partitioning.log

Una vez cambiado los permisos del archivo, ejecute el mismo de la siguiente manera. El proceso puede durar de unos 5 a 10 minutos.
[oracle@rac3 install]$ ./disable_partitioning.log

/usr/bin/ar d /opt/oracle/product/11gR2/rdbms/lib/libknlopt.a kkpoban.o
/usr/bin/ar cr /opt/oracle/product/11gR2/rdbms/lib/libknlopt.a 
/opt/oracle/product/11gR2/rdbms/lib/ksnkkpo.o
chmod 755 /opt/oracle/product/11gR2/bin

 - Linking Oracle
rm -f /opt/oracle/product/11gR2/rdbms/lib/oracle
gcc  -o /opt/oracle/product/11gR2/rdbms/lib/oracle -m32 
-L/opt/oracle/product/11gR2/rdbms/lib/ -L/opt/oracle/product/11gR2/lib/ 
-L/opt/oracle/product/11gR2/lib/stubs/ -L/opt/oracle/product/11gR2/lib/ -lirc 
-lipgo    -Wl,-E /opt/oracle/product/11gR2/rdbms/lib/opimai.o 
/opt/oracle/product/11gR2/rdbms/lib/ssoraed.o 
/opt/oracle/product/11gR2/rdbms/lib/ttcsoi.o  -Wl,--whole-archive -lperfsrv11 
-Wl,--no-whole-archive /opt/oracle/product/11gR2/lib/nautab.o 
/opt/oracle/product/11gR2/lib/naeet.o /opt/oracle/product/11gR2/lib/naect.o 
/opt/oracle/product/11gR2/lib/naedhs.o /opt/oracle/product/11gR2/rdbms/lib/config.o
  -lserver11 -lodm11 -lcell11 -lnnet11 -lskgxp11 -lsnls11 -lnls11  -lcore11 
 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 
-lnls11 -lcore11 -lnls11 -lclient11  -lvsn11 -lcommon11 -lgeneric11 -lknlopt `if 
/usr/bin/ar tv /opt/oracle/product/11gR2/rdbms/lib/libknlopt.a | grep xsyeolap.o > 
/dev/null 2>&1 ; then echo "-loraolap11" ; fi` -lslax11 -lpls11  -lrt -lplp11 
-lserver11 -lclient11  -lvsn11 -lcommon11 -lgeneric11 `if [ -f 
/opt/oracle/product/11gR2/lib/libavserver11.a ] ; then echo "-lavserver11" ; else 
echo "-lavstub11"; fi` `if [ -f /opt/oracle/product/11gR2/lib/libavclient11.a ] ; 
then echo "-lavclient11" ; fi` -lknlopt -lslax11 -lpls11  -lrt -lplp11 -ljavavm11 
-lserver11  -lwwg  `cat /opt/oracle/product/11gR2/lib/ldflags`    -lncrypt11 
-lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /opt/oracle/product/11gR2/lib/ldflags`
    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11 -lmm -lsnls11 -lnls11
-lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 
-lsnls11 -lnls11 -lcore11 -lnls11 -lztkg11 `cat 
/opt/oracle/product/11gR2/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11
 -lnro11 `cat /opt/oracle/product/11gR2/lib/ldflags`    -lncrypt11 -lnsgr11 
-lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11   -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 
-lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 
-lnls11 `if /usr/bin/ar tv /opt/oracle/product/11gR2/rdbms/lib/libknlopt.a | grep 
"kxmnsd.o" > /dev/null 2>&1 ; then echo " " ; else echo "-lordsdo11"; fi` 
-L/opt/oracle/product/11gR2/ctx/lib/ -lctxc11 -lctx11 -lzx11 -lgx11 -lctx11 -lzx11 
-lgx11 -lordimt11 -lclsra11 -ldbcfg11 -lhasgen11 -lskgxn2 -lnnz11 -lzt11 -lxml11 
-locr11 -locrb11 -locrutl11 -lhasgen11 -lskgxn2 -lnnz11 -lzt11 -lxml11 -lasmclnt11 
-lcommon11 -lcell11 -lskgxp11 -lgeneric11  -lcommon11 -lgeneric11  -loraz -llzopro 
-lorabz2 -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 
-lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lsnls11 -lunls11  
-lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 
-lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lasmclnt11 -laio    `cat 
/opt/oracle/product/11gR2/lib/sysliblist` -Wl,-rpath,/opt/oracle/product/11gR2/lib 
-lm    `cat /opt/oracle/product/11gR2/lib/sysliblist` -ldl -lm   
-L/opt/oracle/product/11gR2/lib
test ! -f /opt/oracle/product/11gR2/bin/oracle ||\
           mv -f /opt/oracle/product/11gR2/bin/oracle /opt/oracle/product/11gR2/bin/oracleO
mv /opt/oracle/product/11gR2/rdbms/lib/oracle /opt/oracle/product/11gR2/bin/oracle
chmod 6751 /opt/oracle/product/11gR2/bin/oracle
[oracle@rac3 install]$

Terminada la ejecución del procedimiento, arranque todos los servicios
[oracle@rac3 install]$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 19-OCT-2011 06:47:31
Copyright (c) 1991, 2009, Oracle.  All rights reserved.
Starting /opt/oracle/product/11gR2/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /opt/oracle/product/11gR2/network/admin/listener.ora
Log messages written to /opt/oracle/product/diag/tnslsnr/rac3/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac3.lab.com)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac3.lab.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                19-OCT-2011 06:47:31
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/11gR2/network/admin/listener.ora
Listener Log File         /opt/oracle/product/diag/tnslsnr/rac3/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac3.lab.com)(PORT=1521)))
The listener supports no services
The command completed successfully
[oracle@rac3 install]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Wed Oct 19 06:47:35 2011

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

SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.

Total System Global Area  318046208 bytes
Fixed Size                  1336260 bytes
Variable Size             239078460 bytes
Database Buffers           71303168 bytes
Redo Buffers                6328320 bytes
Database mounted.
Database opened.


SQL> column parameter format a20
SQL> column value format a10
SQL> select parameter, value from v$option where parameter like 'Parti%';

PARAMETER            VALUE
-------------------- ----------
Partitioning         FALSE

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Oracle Label Security, OLAP, Data Mining, Oracle Database Vault
and Real Application Testing options
[oracle@rac3 install]$

Como puede observar, efectivamente a la hora de salir de la base de datos, ya no muestra que la opción de "Particionamiento", se encuentra instalada y el valor del parámetro dentro de la configuración del diccionario de la base de datos es "FALSE".

Procedimiento para cambiar IPs de servidores en RAC11gR2

Procedimiento para cambiar IPs de servidores en RAC11gR2

Por Joel Pérez , Ajith Narayanan y Jorge Zorrilla (OCP)
Publicado en Abril 2015
Reciban estimados tecnólogos Oracle un cordial saludo. A través del presente artículo tendremos la oportunidad de visualizar y adentrarnos un poco en algunas de las tantas tareas posibles de realizar entorno a la administración de la solución Oracle denominada RAC ( Real Application Cluster ).
Ahora, ¿en qué escenario es necesario cambiar la(s) IP(s) de los servidores de base de datos?
Existen muchos escenarios que pueden conllevar un cambio de este tIPo. Ilustremos uno:
A nivel empresarial normalmente los requerimientos de auditoría indican que las bases de datos que manejen información crítica en general deben de estar en una red aislada, separada a través de un Firewall especial o varios de ellos.  Para el caso de cuando ya se tiene instalada toda la infraestructura ( Servidores, software, etc.. ), y se deseen aplicar las mejores practicas mencionadas, es cuando nos encontramos con la necesidad de cambiar direcciones IP no solo para los servidores sino para la configuración del software que se encuentra trabajando internamente en este.
En este artículo deseamos explicar paso a paso el procedimiento para cambiar las IPs de una configuración en RAC.
En una configuración RAC cada servidor tiene 3 direcciones IPs asignadas.
  • IP Publica: resuelve al nombre . Ejm  MyServer1. Se define en el DNS y en el archivo /etc/hosts.
  • IP Virtual(VIP): resuelve al nombre -vIP. Ejm MyServer1-vIP.  Se define en el DNS y en el archivo /etc/hosts.
  • IP Privada(Interconnect): resuelve al nombre -priv. Ejm MyServer1-priv.
Solo las IPs públicas y Virtuales serán modificas ya que las IPs Privadas no se encentran en la red LAN y ningún otro sistema o servidor acceden a ellas.
La siguiente tabla muestra las direcciones IPs originales y las nuevas direcciones IPs que se desean definir:
(NOTA: Para el ejemplo utilizamos direcciones IPs dentro de una red doméstica, sin embargo, el procedimiento es el mismo para IPs en diferentes tipos de redes)
NombreIPs OriginalesNuevas IPs
MyServer1.lab.com169.254.234.10169.254.234.70
MyServer2.lab.com169.254.234.20169.254.234.80
MyServer3.lab.com169.254.234.30169.254.234.90

NombreIPs OriginalesNuevas IPs
MyServer1-vIP.lab.com169.254.234.11169.254.234.71
MyServer2-vIP.lab.com169.254.234.12169.254.234.81
MyServer3-vIP.lab.com169.254.234.13169.254.234.91

Guardar la configuración Actual
Guardar el detalle de la configuración actual puede ser muy útil al momento de resolver problemas que puedan presentarse.
Para obtener la configuración actual debemos de ejecutar la siguiente secuencia de comandos
Configuración de nodeapps
[oracle@MyServer1 ~]# srvctl config nodeapps -n $HOSTNAME -a   


Interfaces de red almacenadas en el OCR
[root@MyServer1 ~]# $ORA_CRS_HOME/bin/oifcfg getif   


Configuración de red a nivel del Sistema Operativo.
[root@MyServer1 ~]# /sbin/ifconfig


Los siguientes pasos son requeridos para poder hacer el cambio de direcciones IPs en una arquitectura de base de datos RAC.
  1. Detener la base de datos y deshabilitar el inicio automático de los servicios de RAC.
  2. Utilizar el procedimiento estándar para bajar las instancias de base de datos.  Bajar todas las instancias de base de datos.
    Luego de bajar las instancias de base de datos es necesario>
    • Detener las instancias ASM
    • Detener nodeapps

  3. Detener la instancia ASM y deshabilitar el inicio automático.
  4. Es recomendable también deshabilitar la instancia ASM ya que en una situación de problema, es más sencillo poder hacer revisiones.
    Los comandos que utilizamos son los siguientes:
    [oracle@MyServer1 ~]#srvctl stop  database –d 
    [oracle@MyServer1 ~]#srvctl disable  instance -d  -i 
    [oracle@MyServer1 ~]#srvctl disable asm  -n $HOSTNAME 
    

    El siguiente paso es detener el nodeapps y verificar que las IPs Virtuales ya no se encuentran activas. Para eso ejecutamos el comando 'ifconfig -a'
    [oracle@MyServer1 ~]#ifconfig -a

    SI las interfaces aún se encuentran activas, puede que existan recursos dependiente de las IPs Virtuales, aun activos.  El comando crs_stat nos puede ayudar a revisar cuales son los recursos activos.
  5. Detener el servicio de cluster del nodo donde se va a cambiar la IP
  6. Detenemos el servicio de cluster CRS con el usuario root.  Si no se detiene el CRS, el servicio puede entrar en un estado inestable y provocar reinicios inesperados de los servidores.
    El comando para detener el servicio de cluster es:
    [root@MyServer1 ~]#/etc/init.d/init.crs  stop

  7. Desmontar los filesystems NFS
  8. Consultar el archivo /etc/fstab y desmontar todos los filesystems NFS que comparten información.  Es necesario desmontar dichos filesystem antes de hacer el cambio de IP pública debido a que puede causar inestabilidad en los filesystems locales. Esto puede provocar que el acceso del usuario oracle, mediante ssh, no funcione correctamente.
  9. Actualizar el archivo /etc/hosts en todos los nodos de base de datos.
  10. Conectarse con el usuario root a todos los nodos de la arquitectura RAC y actualizar el archivo /etc/hosts.  Los valores a cambiar serán las IPs públicas y virtuales.
    ​[root@MyServer1 ~]# vi /etc/hosts
    169.254.234.70   MyServer1 MyServer1.lab.com
    169.254.234.71   MyServer1-vIP MyServer1-vIP.lab.com
    172.16.100.51    MyServer1-priv MyServer1-priv.lab.com
    169.254.234.80   MyServer2 MyServer2.lab.com
    169.254.234.81   MyServer2-vIP MyServer2-vIP.lab.com
    172.16.100.52    MyServer2-priv MyServer2-priv.lab.com 
    169.254.234.90   MyServer2 MyServer2.lab.com
    169.254.234.91   MyServer2-vIP MyServer2-vIP.lab.com
    172.16.100.53    MyServer2-priv MyServer2-priv.lab.com
    169.254.234.250  MyServer-scan MyServer-scan.lab.com
    169.254.234.251  MyServer-gns MyServer-gns.lab.com
    ::1              localhost6.localdomain6  localhost6
    127.0.0.1        localhost.localdomain localhost 


  11. Actualizar el archivo ifcfg-eth0 con la nueva IP.
  12. Actualizar el archivo ifcfg-eth0 en la ruta /etc/sysconfig/network-scrIPts/ con la nueva IP. También se puede realizar mediante la interfaz gráfica del sistema operativo.
    [root@MyServer1 ~]# ls -l /etc/sysconfig/network-scrIPts/ 
    total 392
    -rw-r--r-- 3 root root   116  Oct 10 12:40 ifcfg-eth0
    -rw-r--r-- 3 root root   187  Oct 10 12:40 ifcfg-eth1
    -rw-r--r-- 3 root root   127  Oct 21 16:46 ifcfg-eth2
    -rw-r--r-- 1 root root   254  Mar  3   2008 ifcfg-lo
    [...]
    [root@MyServer1 ~]# cat /etc/sysconfig/network-scrIPts/ifcfg-eth0
    # 
    DEVICE=eth0
    BOOTPROTO=static
    HWADDR=00:14:4F:29:00:1D
    IPADDR=169.254.234.70
    NETMASK=255.255.255.0
    ONBOOT=no 


  13. Reiniciar el servicio de red.
  14. [root@MyServer1 ~]# service network stop
    [root@MyServer1 ~]# service network  start 


  15. Realizar una prueba con el comando ping
  16. [root@MyServer1 ~]# ping 169.254.234.70
    [root@MyServer1 ~]# ping 169.254.234.80
    [root@MyServer1 ~]# ping 169.254.234.90 


  17. Modificar el archivo listener.ora
  18. Si los listener están definidos con IPs y no con nombre del servidor, es necesario modificar la dirección IP en el listener.ora.
  19. Iniciar el servicio de cluster
  20. Con el usuario root, iniciar el servicio de cluster en todos los nodos.
    [root@MyServer1 ~]#/etc/init.d/init.crs  start
    [root@MyServer2 ~]#/etc/init.d/init.crs  start
    [root@MyServer3 ~]#/etc/init.d/init.crs  start 


  21. Volver a detener el servicio de nodeapps en todos los nodos.
  22. [oracle@MyServer1 ~]# srvctl stop  nodeapps -n $HOSTNAME
    [oracle@MyServer2 ~]# srvctl stop  nodeapps -n $HOSTNAME
    [oracle@MyServer3 ~]# srvctl stop  nodeapps -n $HOSTNAME 

    Revisar que el nodeapps se encuentre detenido en todos los nodos.  Cuando se detuvo el servicio de cluster las IPs Virtuales se relocalizaron en otro nodo y se mantuvieron en dicho nodo incluso después de volver a iniciar el servicio de cluster.
    [oracle@MyServer1 ~]# srvctl status  nodeapps -n $HOSTNAME 
     
  23. Cambiar las direcciones IPs públicas en el OCR
  24. Se realiza con el usuario root.  La sub-red es 10.12.20.0
    [root@MyServer1 ~]#  $ORA_CRS_HOME/bin/oifcfg delif -global eth0
    [root@MyServer1 ~]#  $ORA_CRS_HOME/bin/oifcfg setif -global eth0/169.254.234.70:public
    
    [root@MyServer2 ~]#  $ORA_CRS_HOME/bin/oifcfg delif -global eth0
    [root@MyServer2 ~]#  $ORA_CRS_HOME/bin/oifcfg setif -global eth0/169.254.234.80:public
    
    [root@MyServer3 ~]#  $ORA_CRS_HOME/bin/oifcfg delif -global eth0
    [root@MyServer3 ~]#  $ORA_CRS_HOME/bin/oifcfg setif -global eth0/169.254.234.90:public 


  25. Revisar nuevamente el archivo /etc/hosts. 
  26. El comando setif puede haber agregado registros en el archivo /etc/hosts, apuntando a las IP privadas.  Si se ha agregado algún registro, es necesario removerlo.  Además es necesario revisar que el registro de las IPs públicas de cada servidor se definan con el nombre del servidor y dominio (FDQN), así como también, con solo el nombre del servidor.
  27. Cambiar las direcciones IPs Virtuales
  28. Con el usuario root modificar las IPs virtuales con el comando srvctl (corregir el nombre del servidor, la dirección IP y la máscara de red si fuera necesario)
    [root@MyServer1 ~]# srvctl modify nodeapps -n MyServer1 -A 169.254.234.71/255.255.255.0/eth0 
    [root@MyServer2 ~]# srvctl modify nodeapps -n MyServer1 -A  169.254.234.81/255.255.255.0/eth0 
    [root@MyServer3 ~]# srvctl modify nodeapps -n MyServer1 -A  169.254.234.91/255.255.255.0/eth0 


  29. Reiniciar el nodeapps en cada nodo.
  30. [root@MyServer3 ~]# $ORA_CRS_HOME/bin/srvctl start nodeapps -n  $HOSTNAME 


  31. Volver a montar los filesystems NFS listados en el archivo /etc/fstab. 
  32. Si existe algún problema de permisos, trabajar con el equipo de Storage para limpiar la cache del DNS en el servidor NAS.  También es importante revisar que no haya direcciones IPs fijas definidas en el archivo /etc/hosts del servidor NAS.
  33. Verificar e iniciar las instancias de base de datos.
  34. De manera opcional se puede correr el utilitario runcluvfy.sh para verificar la configuración de red.
    Validar que el nodeapps y el listener inicien de manera exitosa en todos los nodos.
    Finalmente proceder a levantar las instancias de base de datos.

Emulando una Super DLT a Disco flash_recovery_area

Emulando una Super DLT a Disco

Por Alberto Silva
Publicado en noviembre 2009


Descubriendo Oracle Test Disk API


En mi búsqueda para encontrar ambientes que puedan emular tecnología muy costosa, me encontré con un problema cuando respalde el Flash Recovery Area. El error ORA-6747 indica que no es posible respaldar a disco la (FRA) y debe ser asignado una canal SBT. La verdad que si no tengo cintas estoy "frito" y no puedo respaldar en caso de alguna catástrofe.
Respaldando Flash Recovery Area con RMAN
Al configurar el (FRA) con RMAN, sera posible mantener los respaldos realizados sin tener que ser llevados a cinta. Esto aumenta la disponibilidad de respaldos en caso de alguna falla y disminuye el MTTR.
 MTTR 'Mean Time to Recover'
Este término significa el tiempo promedio que
se demora al recuperar un sistema. En este caso,
es tiempo que demora recuperar la base de
datos.
 
Para revisar el espacio disponible en el (FRA), se puede consultar la siguiente vista:

SQL> select SPACE_RECLAIMABLE from
V$RECOVERY_FILE_DEST; SPACE_RECLAIMABLE ----------------- 43008

El valor de esta columna se incrementa cada vez que se realiza un respaldo, si esta definido en el flash recovery area.
API oracle.disksbt
El oracle.disksbt es un API que nos provee Oracle para poder testear procedimientos de respaldo que utilizan dispositivos SBT. En este caso se define como un pseudo dispositivo de cinta que en definitiva esta configurado contra un filesystem ó directorio definido para almacenar ahí los respaldos realizados con esta API. Finalmente, RMAN asume que tiene una cinta y que el dispositivo SBT esta disponible cada vez que necesita consultar, respaldar o recuperar. Es importante generar una configuración persistente mediante la definición del parámetro con el comando CONFIGURE.
1. Crear un directorio donde el usuario dueño del motor Oracle pueda escribir.
    ejemplo : mkdir /oracle/tape_backup

2. Llamando a la API desde RMAN
    Ej: run {     allocate channel DR1 device type 'SBT_TAPE'
    PARMS="SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/oracle/type_backup)"
;
    backup as compressed backupset database plus archivelog;
    backup current controlfile;
    backup spfile tag=FULL_DB
    }

allocated channel: DR1
channel DR1: sid=134 devtype=SBT_TAPE
channel DR1: WARNING: Oracle Test Disk API

Starting backup at 27-AUG-09
current log archived
channel DR1: starting compressed archive log backupset
channel DR1: specifying archive log(s) in backup set
input archive log thread=1 sequence=17 recid=17 stamp=695996692
input archive log thread=1 sequence=18 recid=18 stamp=695996761
input archive log thread=1 sequence=19 recid=19 stamp=695997028
channel DR1: starting piece 1 at 27-AUG-09
channel DR1: finished piece 1 at 27-AUG-09
piece handle=2skno4j5_1_1 tag=TAG20090827T123029 comment=API Version 2.0,MMS Version 8.1.3.0
channel DR1: backup set complete, elapsed time: 00:00:02
Finished backup at 27-AUG-09

Starting backup at 27-AUG-09
channel DR1: starting compressed full datafile backupset
channel DR1: specifying datafile(s) in backupset
input datafile fno=00001 name=/oracle/product/10.2.0/oradata/BIZPR1/BIZPR1/system01.dbf
input datafile fno=00003 name=/oracle/product/10.2.0/oradata/BIZPR1/BIZPR1/sysaux01.dbf
input datafile fno=00002 name=/oracle/product/10.2.0/oradata/BIZPR1/BIZPR1/undotbs01.dbf
input datafile fno=00004 name=/oracle/product/10.2.0/oradata/BIZPR1/BIZPR1/users01.dbf
channel DR1: starting piece 1 at 27-AUG-09
channel DR1: finished piece 1 at 27-AUG-09
piece handle=2tkno4j8_1_1 tag=TAG20090827T123031 comment=API Version 2.0,MMS Version 8.1.3.0
channel DR1: backup set complete, elapsed time: 00:01:25
Finished backup at 27-AUG-09

Starting backup at 27-AUG-09
current log archived
channel DR1: starting compressed archive log backupset
channel DR1: specifying archive log(s) in backup set
input archive log thread=1 sequence=20 recid=20 stamp=695997117
channel DR1: starting piece 1 at 27-AUG-09
channel DR1: finished piece 1 at 27-AUG-09
piece handle=2ukno4lv_1_1 tag=TAG20090827T123159 comment=API Version 2.0,MMS Version 8.1.3.0
channel DR1: backup set complete, elapsed time: 00:00:02
Finished backup at 27-AUG-09

Starting backup at 27-AUG-09
channel DR1: starting full datafile backupset
channel DR1: specifying datafile(s) in backupset
including current control file in backupset
channel DR1: starting piece 1 at 27-AUG-09
channel DR1: finished piece 1 at 27-AUG-09
piece handle=2vkno4m2_1_1 tag=TAG20090827T123202 comment=API Version 2.0,MMS Version 8.1.3.0
channel DR1: backup set complete, elapsed time: 00:00:02
Finished backup at 27-AUG-09

Starting backup at 27-AUG-09
channel DR1: starting full datafile backupset
channel DR1: specifying datafile(s) in backupset
including current SPFILE in backupset
channel DR1: starting piece 1 at 27-AUG-09
channel DR1: finished piece 1 at 27-AUG-09
piece handle=30kno4m5_1_1 tag=FULL_DB comment=API Version 2.0,MMS Version 8.1.3.0
channel DR1: backup set complete, elapsed time: 00:00:02
Finished backup at 27-AUG-09

Starting Control File and SPFILE Autobackup at 27-AUG-09
piece handle=c-3301411538-20090827-09 comment=API Version 2.0,MMS Version 8.1.3.0
Finished Control File and SPFILE Autobackup at 27-AUG-09
released channel: DR1 RMAN> list backup;

List of Backup Sets
===================

BS Key   Size Device  Type Elapsed Time  Completion  Time
----------  -----------------  ---------------------------  ----------------  --------
4452 256.00K SBT_TAPE 00:00:01 27-AUG-09
BP Key: 4454 Status: AVAILABLE Compressed: YES Tag: TAG20090827T123029
Handle: 2skno4j5_1_1 Media:

List of Archived Logs in backup set 4452
Thrd  Seq Low  SCN Low  Time  Next  SCN Next Time
------- ------- ---------- --------- ---------- -------------
1 17 490207 27-AUG-09 490569 27-AUG-09
1 18 490569 27-AUG-09 490612 27-AUG-09
1 19 490612 27-AUG-09 490799 27-AUG-09

BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
4453 Full 95.00M SBT_TAPE 00:01:22 27-AUG-09
BP Key: 4455 Status: AVAILABLE Compressed: YES Tag: TAG20090827T123031
Handle: 2tkno4j8_1_1 Media:

List of Datafiles in backup set 4453 File LV Type Ckp SCN Ckp Time Name
-------------------- --------------- ----------------- ------------------ --------------- -------------
1 Full 490809 27-AUG-09 /oracle/product/10.2.0/oradata/BIZPR1/BIZPR1/system01.dbf
2 Full 490809 27-AUG-09 /oracle/product/10.2.0/oradata/BIZPR1/BIZPR1/undotbs01.dbf
3 Full 490809 27-AUG-09 /oracle/product/10.2.0/oradata/BIZPR1/BIZPR1/sysaux01.dbf
4 Full 490809 27-AUG-09 /oracle/product/10.2.0/oradata/BIZPR1/BIZPR1/users01.dbf

BS Key Size Device Type Elapsed Time Completion Time
-------- ------------------- ------------ --------------- ----------------------
4468 256.00K SBT_TAPE 00:00:01 27-AUG-09
BP Key: 4473 Status: AVAILABLE Compressed: YES Tag: TAG20090827T123159
Handle: 2ukno4lv_1_1 Media:

List of Archived Logs in backup set 4468
Thrd Seq Low SCN Low Time Next SCN Next Time
---------- ------------ ---------- ------------ ------------ ---------
1 20 490799 27-AUG-09 490843 27-AUG-09

BS Key Type LV Size Device Type Elapsed Time Completion Time
---------- --------- ------ -------------- --------------- --------------- -----------------
4481 Full 7.00M SBT_TAPE 00:00:01 27-AUG-09
BP Key: 4483 Status: AVAILABLE Compressed: NO Tag: TAG20090827T123202
Handle: 2vkno4m2_1_1 Media:
Control File Included: Ckp SCN: 490863 Ckp time: 27-AUG-09

BS Key Type LV Size Device Type Elapsed Time Completion Time
----------- -------- ------- -------------- --------------- ---------------- ------------------
4493 Full 256.00K SBT_TAPE 00:00:01 27-AUG-09
BP Key: 4495 Status: AVAILABLE Compressed: NO Tag: FULL_DB
Handle: 30kno4m5_1_1 Media:
SPFILE Included: Modification time: 27-AUG-09

BS Key Type LV Size Device Type Elapsed Time Completion Time
----------- --------- ---- ------------- -------------- --------------- --------------------
4505 Full 7.25M SBT_TAPE 00:00:01 27-AUG-09
BP Key: 4507 Status: AVAILABLE Compressed: NO Tag: TAG20090827T123209
Handle: c-3301411538-20090827-09 Media:
Control File Included: Ckp SCN: 490886 Ckp time: 27-AUG-09
SPFILE Included: Modification time: 27-AUG-09

Y ahora podemos respaldar el Flash Recovery Area:

RMAN> backup recovery area;

Starting backup at 27-AUG-09
allocated channel: ORA_SBT_TAPE_1
channel ORA_SBT_TAPE_1: sid=134 devtype=SBT_TAPE
channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API
specification does not match any datafile copy in the repository
specification does not match any backupset in the repository
skipping archive log file /oracle/product/10.2.0/db_1/flash_recovery_area/BIZPR1/ archivelog/2009_08_27/o1_ mf_1_17_59fdtmw0_.arc; already backed up 1 time(s) skipping archive log file /oracle/product/10.2.0/db_1/flash_recovery_area/BIZPR1/ archivelog/2009_08_27/o1_ mf_1_18_59fdws7p_.arc; already backed up 1 time(s) skipping archive log file /oracle/product/10.2.0/db_1/flash_recovery_area/BIZPR1/archivelog/2009_08_27/o1_ mf_1_19_59ff54nn_.arc; already backed up 1 time(s) skipping archive log file /oracle/product/10.2.0/db_1/flash_recovery_area/BIZPR1/archivelog/2009_08_27/o1_ mf_1_20_59ff7xl3_.arc; already backed up 1 time(s) Finished backup at 27-AUG-09

CONSOLA 12C DB EXPRESS

The DB Express runs entirely with pl/sql code within the XDB schema. It’s XDB that leverages its features to enable a web-based console, and it’s embedded by default in the database.
To enable it, it’s necessary to check that the parameter dispatchers is enabled for XDB:


and then set an https port unique on the server:
  

If you’ve already done it but you don’t remember the port number you can get it with this query:
  

martes, 10 de noviembre de 2015

create a trigger to open the PDBs.

CREATE OR REPLACE TRIGGER ABRIR_TODOS_PDBS 
  AFTER STARTUP ON DATABASE 
BEGIN 
   EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN'; 
END;

TEST ORACLE RAC

ssh 10.1.1.10 date
ssh USBLDDB1010  date
ssh USBLDDB1010.usb.com date
ssh 10.1.1.11  date
ssh USBLDDB2011  date
ssh USBLDDB2011.usb.com date

ssh 192.168.2.10  date
ssh USBLDDB1010-priv  date
ssh USBLDDB1010-priv.usb.com date
ssh 192.168.2.11 date
ssh USBLDDB2011-priv  date
ssh USBLDDB2011-priv.usb.com date
#IP's Virtuales
#ssh 10.1.1.40  date
#ssh USBLDDB1010-vip date
#ssh USBLDDB1010-vip.usb.com date
#ssh 10.1.1.41  date
#ssh USBLDDB1011-vip date

ssh 10.1.1.10 date
ssh USBLDDB1010  date
ssh USBLDDB1010.usb.com date
ssh 10.1.1.11  date
ssh USBLDDB2011  date
ssh USBLDDB2011.usb.com date

ssh 192.168.2.10  date
ssh USBLDDB1010-priv  date
ssh USBLDDB1010-priv.usb.com date
ssh 192.168.2.11 date
ssh USBLDDB2011-priv  date
ssh USBLDDB2011-priv.usb.com date
#IP's Virtuales
#ssh 10.1.1.40  date
#ssh USBLDDB1010-vip date
#ssh USBLDDB1010-vip.usb.com date
#ssh 10.1.1.41  date
#ssh USBLDDB1011-vip date
#ssh USBLDDB1011-vip.usb.com date
#ssh USBLDDB1011-vip.usb.com date

lunes, 9 de noviembre de 2015

Protegiendo Backups de RMAN contra fallos de la SAN (Parte I)

Protegiendo Backups de RMAN contra fallos de la SAN  (Parte I)

Por Joel Pérez oracle ace
Publicado en septiembre 2012
Reciban estimados tecnólogos Oracle un cordial saludo. A través del presente artículo, tendremos la oportunidad de visualizar y adentrarnos un poco en el tema de protección de los backups realizados con RMAN (Oracle Recovery Manager).
Los artículos que conforman esta serie son los siguientes:


A partir de la versión de servidor de base de datos 10g contamos con la tecnología de almacenamiento de información ASM (Automatic Storage Management) la cual revoluciono la forma de almacenar y administrar nuestras base de datos. Trajo consigo el concepto y modo de almacenamiento de nuestros backups, archived redo logs y otros elementos en el área (FRA: Flash Recovery Area). El FRA representa una respuesta a los cambios de costos y criticidad a la hora de gestar y recuperar nuestra backups.
Siempre se ha tenido la tradición de almacenar los backups en unidades de cinta, NAS o cualquier otro medio adaptado para tal fin, llevándose a cabo así el objetivo de protegernos contra fallos de hardware o software. A partir de la versión de manejador de base de datos 10g, la primera línea de backup por excelencia y best-practice paso a ser el FRA, por qué?, porque no hay nada mas rápido para recuperar o realizar un backup desde o hacia los propios discos duros con los cuales hemos trabajado toda la vida. En tiempos anteriores, en contraste a nuestros días, el costo de los discos duros era bastante alto, ya hoy en día ya no es así en la mayoría de los casos. Es por ello que nace el concepto del FRA.
Cuando se planifica e implementa una estrategia de backup robusta para nuestras bases de datos, tenemos principalmente la misión de protegernos contra fallos parciales o totales de hardware o software.
El FRA representa una solución practica de alto nivel para poseer la primera línea de backup en dispositivos rápidos (discos/particiones de SAN).
Habitualmente estos llamados discos realmente son particiones que provienen de una SAN (Storage Area Network).
SAN (Concepto): es una red concebida para conectar servidores, matrices (arrays) de discos y librerías de soporte. Principalmente, está basada en tecnología fibre channel y más recientemente en iSCSI. Su función es la de conectar de manera rápida, segura y fiable los distintos elementos que la conforman.
En las instalaciones de RAC (Real Application Cluster) e inclusive Single Instance sobre ASM es común disponer de particiones o bien llamadas (LUNs) para conformar los denominados Diskgroups de ASM, finalmente sobre los Diskgroups ASM es donde se alojaran los componentes de nuestra BBDD y eventualmente otros elementos del Oracle Server, RAC Clusterware, y otros.
Generalmente en particiones de SAN es donde realmente poseemos nuestras bases de datos y backups pero que pasaría si ocurre una falla fatal en la SAN...?, podemos permitirnos perder la data de nuestra compañía o negocio?, definitivamente la respuesta es: No.
Tenemos que poseer protección contra ese posible caso. Para ellos presentaremos diversas técnicas que nos ayudaran a tener una segunda línea de protección de backup para nuestras bases de datos.
Listaremos posibles opciones de almacenamiento diversas y/o externas al FRA. Dentro de las cuales resaltamos las siguientes:
  • En infraestructura NAS : NAS (del inglés Network Attached Storage) es el nombre dado a una tecnología de almacenamiento dedicada a compartir la capacidad de almacenamiento de un computador (Servidor) con ordenadores personales o servidores clientes a través de una red (normalmente TCP/IP), haciendo uso de un Sistema Operativo optimizado para dar acceso con los protocolos CIFS, NFS, FTP o TFTP. Generalmente, los sistemas NAS son dispositivos de almacenamiento específicos a los que se accede desde los equipos a través de protocolos de red (normalmente TCP/IP). También se podría considerar un sistema NAS a un servidor (Linux, Windows, ...) que comparte sus unidades por red, pero la definición suele aplicarse a sistemas específicos.
  • Discos duros externos
  • NFS
  • Cinta
  • Y otros
Para el presente artículo solo abordaremos una de las técnicas para poder trasladar nuestros backups a medios como: NAS, Discos duros externos, NFS o cualquier vía de almacenamiento presentable al o los servidor(es) donde poseemos nuestra(s) base(s) de datos.

Técnicas para extraer nuestros backups del ASM

  • Opción 1: Desde la versión de manejador de base de datos 11g Release1 tenemos disponible el comando cp perteneciente al utilitario asmcmd. Esta opción fue presentada y desarrollada en el articulo: "Protegiendo backups de RMAN contra fallos de la SAN (Parte I)"
  • Opción 2: Desde versiones anteriores al manejador de base de datos 11g, tenemos las opciones de: Backup Backupset perteneciente al conjunto de comandos y opciones de RMAN. Esta opción fue presentada y desarrollada en el articulo: "Protegiendo backups de RMAN contra fallos de la SAN (Parte II)"
  • Opción 3: Desde la versión de base de datos 10g tenemos la existencia del paquete DBMS_TRANSFER. Esta será la técnica utilizada para el presente artículo.
A continuación trabajaremos con la opción nro.3:

DBMS_FILE_TRANSFER

The DBMS_FILE_TRANSFER package provides procedures to copy a binary file within a database or to transfer a binary file between databases.
Oracle® Database PL/SQL Packages and Types Reference
11g Release 2 (11.2)
http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_ftran.htm

Vamos a realizarlo:
Base de Datos: DB
Diskgroup (DATA): +DATA
Diskgroup (FRA): +FRA
Paso1: Tomar backup full con RMAN estableciendo una etiqueta que nos pueda ayudar a identificar unívocamente las piezas pertenecientes a este:
rman_backup_full.sh
export ORACLE_SID=MYDB
export V_DATE=`date +%d%m%Y_%H%M`
export V_LOGFILE=/BKFULL_MYDB_RMAN_$V_DATE.log
rman target / @/run.rcv log=$V_LOGFILE

run.rcv
run {
       backup database tag='FULL_WEEKLY';
}
exit

En el caso presente estamos tomando un backup full de la BBDD y el elemento que nos ayudara a identificar de forma univoca el mismo será el TAG aplicado en la sentencia de backup full.
Una vez tomado el backup, visualizamos la piezas generadas del mismo:
RMAN> List Backup;
using target database control file instead of recovery catalog
List of Backup Sets
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
5       Full    1019.86M   DISK        00:01:15     10-NOV-11
        BP Key: 5   Status: AVAILABLE  Compressed: NO  Tag: FULL_WEEKLY
        Piece Name: +FRA/mydb/backupset/2011_11_10/nnndf0_full_weekly_0.271.766859353
  List of Datafiles in backup set 5
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1       Full 1072131    09-NOV-11 +DATA/mydb/datafile/system.256.766584645
  2       Full 1072131    09-NOV-11 +DATA/mydb/datafile/sysaux.257.766584645
  3       Full 1072131    09-NOV-11 +DATA/mydb/datafile/undotbs1.258.766584647
  4       Full 1072131    09-NOV-11 +DATA/mydb/datafile/users.259.766584647
  5       Full 1072131    09-NOV-11 +DATA/mydb/datafile/example.276.766585261

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
6       Full    9.58M      DISK        00:00:01     10-NOV-11
        BP Key: 6   Status: AVAILABLE  Compressed: NO  Tag: FULL_WEEKLY
        Piece Name: +FRA/mydb/backupset/2011_11_10/ncsnf0_full_weekly_0.269.766859431
  SPFILE Included: Modification time: 09-NOV-11
  SPFILE db_unique_name: mydb
  Control File Included: Ckp SCN: 1072131      Ckp time: 09-NOV-11
RMAN>
En el log presentado se puede apreciar la generación de 2 piezas 
+FRA/mydb/backupset/2011_11_10/nnndf0_full_weekly_0.271.766859353 & 
+FRA/mydb/backupset/2011_11_10/ncsnf0_full_weekly_0.269.766859431).  

Cada pieza posee atributos únicos, en esta ocasión determinaremos las mismas a transferir mediante los atributos TAG & BS KEY. Ambas piezas representan el objetivo para transferir a una localización de disco diversa al FRA.
Paso2: Visualizando localizaciones de piezas generadas en el FRA
Visualicemos las especificaciones de las piezas generadas a través de las vistas de diccionario de datos de nuestra base de datos.
SQL> select HANDLE from v$backup_piece
  2  where TAG='FULL_WEEKLY';

HANDLE
-----------------------------------------------------------------
+FRA/mydb/backupset/2011_11_10/nnndf0_full_weekly_0.271.766859353
+FRA/mydb/backupset/2011_11_10/ncsnf0_full_weekly_0.269.766859431
SQL>

Paso3: Creación del paquete DBMS_FILE_TRANSFER.
Una vez divisadas las piezas a transferir externamente de nuestro almacenamiento ASM. Procederemos a verificar si el paquete DBMS_FILE_TRANSFER esta creado.
SQL> desc dbms_file_transfer
PROCEDURE COPY_FILE
Argument Name                  Type               In/Out Default?
------------------------------ ------------------ ------ --------
SOURCE_DIRECTORY_OBJECT        VARCHAR2                IN
SOURCE_FILE_NAME               VARCHAR2                IN
DESTINATION_DIRECTORY_OBJECT   VARCHAR2                IN
DESTINATION_FILE_NAME          VARCHAR2                IN
PROCEDURE GET_FILE
Argument Name                  Type               In/Out Default?
------------------------------ ------------------ ------ --------
SOURCE_DIRECTORY_OBJECT        VARCHAR2                IN
SOURCE_FILE_NAME               VARCHAR2                IN
SOURCE_DATABASE                VARCHAR2                IN
DESTINATION_DIRECTORY_OBJECT   VARCHAR2                IN
DESTINATION_FILE_NAME          VARCHAR2                IN
PROCEDURE PUT_FILE
Argument Name                  Type               In/Out Default?
------------------------------ ------------------ ------ --------
SOURCE_DIRECTORY_OBJECT        VARCHAR2                IN
SOURCE_FILE_NAME               VARCHAR2                IN
DESTINATION_DIRECTORY_OBJECT   VARCHAR2                IN
DESTINATION_FILE_NAME          VARCHAR2                IN
DESTINATION_DATABASE           VARCHAR2                IN

SQL>

Si el mismo no esta creado, podremos crearlo con el siguiente script:
{ORACLE_HOME}/rdbms/admin/dbmsxfr.sql
Si algún usuario diferente de sys necesita acceso al mismo, podemos otorgar el privilegio de la siguiente manera:
GRANT EXECUTE ON dbms_file_transfer TO ;
Paso4: Creación de directorios origen y destino para la transferencia
SQL> create directory source_dir as
 2  '+FRA/mydb/backupset/2011_11_10';

Directory created.

SQL> create directory target_dir as
 2  '/home/oracle/MyExternalFileSystem';

Directory created.

Para cualquier usuario que necesite acceder a estos directorios se deberá otorgar los permisos necesarios:
SQL> grant read, write on directory source_dir to ;

Grant succeeded.

SQL> grant read, write on directory target_dir to ;

Grant succeeded.

SQL>

Paso5: Llevando a cabo las transferencias:
BEGIN
 sys.dbms_file_transfer.copy_file(source_directory_object =>
 'SOURCE_DIR', source_file_name => 'nnndf0_full_weekly_0.271.766859353',
 destination_directory_object => 'TARGET_DIR' ,
 destination_file_name => 'MyFullBackupPiece01.bkp');
END;
/
PL/SQL procedure successfully completed.

BEGIN
 sys.dbms_file_transfer.copy_file(source_directory_object =>
 'SOURCE_DIR', source_file_name => 'ncsnf0_full_weekly_0.269.766859431',
 destination_directory_object => 'TARGET_DIR' ,
 destination_file_name => 'MyFullBackupPiece02.bkp');
END;
/
PL/SQL procedure successfully completed.

Visualizacion de archivos (piezas de RMAN) generadas en el sistema operativo
[oracle@MYSERVER-mydb MyExternalFileSystem]$ ls -lt
total 1057452
-rw-r----- 1 oracle dba   10059776 Nov 10 18:08 MyFullBackupPiece01.bkp
-rw-r----- 1 oracle dba 1071702016 Nov 10 18:07 MyFullBackupPiece02.bkp
[oracle@MYSERVER-mydb MyExternalFileSystem]$

Para utilizar las piezas generadas en recuperaciones de nuestra base de datos, debemos catalogar las mismas. Esto se podrá llevar a cabo a través del comando CATALOG de RMAN.
RMAN> catalog start with '/home/oracle/MyExternalFileSystem';

Aplicaciones y uso

Las posibles aplicaciones reales que podemos realizar con transferencias de piezas o archivos desde ASM hacia otros destinos son variadas. Listamos algunas:
  • Transferencia de Archived Redo Logs para resolver casos de GAP para Manual Standby Databases o Data Guard en versiones 10g/11g.
  • Extraer RMAN backups (full, archives, controlfiles, etc...) para procedimientos tales como: RMAN Duplicate, Instanciación de Standby o Data Guard Databases, etc... y otros.
  • Transferencias de ASM a ASM para replicación de BBDDs
  • Y muchas otras mas

Protegiendo Backups de RMAN contra fallos de la SAN ( Parte II )

Protegiendo Backups de RMAN contra fallos de la SAN ( Parte II )

Por Joel Pérez
Publicado en enero 2012
Reciban estimados tecnólogos Oracle un cordial saludo. A través del presente artículo, tendremos la oportunidad de visualizar y adentrarnos un poco en el tema de protección de los backups realizados con RMAN ( Oracle Recovery Manager ).


Los artículos que conforman esta serie son los siguientes:


A partir de la versión de servidor de base de datos 10g contamos con la tecnología de almacenamiento de información ASM ( Automatic Storage Management ) la cual revoluciono la forma de almacenar y administrar nuestras base de datos. Trajo consigo el concepto y modo de almacenamiento de nuestros backups, archived redo logs y otros elementos en el área ( FRA: Flash Recovery Area ). El FRA representa una respuesta a los cambios de costos y criticidad a la hora de gestar y recuperar nuestra backups.
Siempre se ha tenido la tradición de almacenar los backups en unidades de cinta, NAS o cualquier otro medio adaptado para tal fin, llevándose a cabo así el objetivo de protegernos contra fallos de hardware o software. A partir de la versión de manejador de base de datos 10g, la primera línea de backup por excelencia y best-practice paso a ser el FRA, porque ?, porque no hay nada mas rápido para recuperar o realizar un backup desde o hacia los propios discos duros con los cuales hemos trabajado toda la vida. En tiempos anteriores, en contraste a nuestros días, el costo de los discos duros era bastante alto; ya hoy en día ya no es así en la mayoría de los casos. Es por ello que nace el concepto del FRA.
Cuando se planifica e implementa una estrategia de backup robusta para nuestras bases de datos, tenemos principalmente la misión de protegernos contra fallos parciales o totales de hardware o software.
El FRA representa una solución practica de alto nivel para poseer la primera línea de backup en dispositivos rápidos ( discos/particiones de SAN ).
Habitualmente estos llamados discos realmente son particiones que provienen de una SAN (storage area network). SAN ( Concepto ): es una red concebida para conectar servidores, matrices (arrays) de discos y librerías de soporte. Principalmente, está basada en tecnología fibre channel y más recientemente en iSCSI. Su función es la de conectar de manera rápida, segura y fiable los distintos elementos que la conforman.
En las instalaciones de RAC ( Real Application Cluster ) e inclusive Single Instance sobre ASM es común disponer de particiones o bien llamadas ( LUNs ) para conformar los denominados Diskgroups de ASM, finalmente sobre los Diskgroups ASM es donde se alojaran los componentes de nuestra BBDD y eventualmente otros elementos del Oracle Server, RAC Clusterware, y otros.
Generalmente en particiones de SAN es donde realmente poseemos nuestras bases de datos y backups pero que pasaría si ocurre una falla fatal en la SAN… ?, podemos permitirnos perder la data de nuestra compañía o negocio ?, definitivamente la respuesta es: No.
Tenemos que poseer protección contra ese posible caso. Para ellos presentaremos diversas técnicas que nos ayudaran a tener una segunda línea de protección de backup para nuestras bases de datos.
Listaremos posibles opciones de almacenamiento diversas y/o externas al FRA. Dentro de las cuales resaltamos las siguientes:
  • En infraestructura NAS : NAS (del inglés Network Attached Storage) es el nombre dado a una tecnología de almacenamiento dedicada a compartir la capacidad de almacenamiento de un computador (Servidor) con ordenadores personales o servidores clientes a través de una red (normalmente TCP/IP), haciendo uso de un Sistema Operativo optimizado para dar acceso con los protocolos CIFS, NFS, FTP o TFTP. Generalmente, los sistemas NAS son dispositivos de almacenamiento específicos a los que se accede desde los equipos a través de protocolos de red (normalmente TCP/IP). También se podría considerar un sistema NAS a un servidor (Linux, Windows, ...) que comparte sus unidades por red, pero la definición suele aplicarse a sistemas específicos
  • Discos duros externos
  • NFS
  • Cinta
  • Y otros
Para el presente artículo solo abordaremos una de las técnicas para poder trasladar nuestros backups a medios como: NAS, Discos duros externos, NFS o cualquier vía de almacenamiento presentable al o los servidor(es) donde poseemos nuestra(s) base(s) de datos.
Técnicas para extraer nuestros backups del ASM
  • Opción 1: Desde la versión de manejador de base de datos 11g Release1 tenemos disponible el comando cp perteneciente al utilitario asmcmd. Esta opción fue presentada y desarrollada en el articulo : “Protegiendo backups de RMAN contra fallos de la SAN ( Parte I )”
  • Opción 2: Desde versiones anteriores al manejador de base de datos 11g, tenemos las opciones de: Backup Backupset perteneciente al conjunto de comandos y opciones de RMAN. Esta será la técnica utilizada para el presente artículo.
  • Opción 3: Desde versiones anteriores al manejador de base de datos 11g, tenemos la existencia del paquete DBMS_TRANSFER. Esta opción será desarrollada en la parte III del presente articulo : “Protegiendo backups de RMAN contra fallos de la SAN ( Parte III )”
A continuación trabajaremos con la opción nro.2:
Backups of Backup Sets ( Concepto )
The RMAN
BACKUP BACKUPSET
command backs up backup sets rather than actual database files. This command supports disk-to-disk or disk-to-tape backups, but not tape-to-tape backups.

The
BACKUP BACKUPSET
command uses the default disk channel to copy backup sets from disk to disk. To back up from disk to tape, you must either manually allocate a channel of DEVICE TYPE sbt or configure an automatic sbt channel.

Una vez visto en detalle el concepto del comando “Backup Backupset”. Planteemos un ejemplo práctico ajustado a la realidad del día a día de nuestras labores como DBA.
Normalmente los backups full realizados con RMAN residen en nuestra área FRA y para el escenario que estamos planteando, existirá la necesidad de transferir las piezas del un backup full a filesystem ( filesystem perteneciente a una unidad NAS, NFS, DD externos o cualquier otro ).
Vamos a realizarlo:
Base de Datos: MYDB Diskgroup ( DATA ): +DATA Diskgroup ( FRA ): +FRA
Paso1: Tomar backup full con RMAN estableciendo una etiqueta que nos pueda ayudar a identificar unívocamente las piezas pertenecientes a este:
rman_backup_full.sh
export ORACLE_SID=MYDB
export V_DATE=`date +%d%m%Y_%H%M`
export V_LOGFILE=/BKFULL_MYDB_RMAN_$V_DATE.log 
rman target / @/run.rcv log=$V_LOGFILE 

run.rcv
run {    
    backup database tag='FULL_WEEKLY'; 
} 
exit 

En el caso presente estamos tomando un backup full de la BBDD y el elemento que nos ayudara a identificar de forma univoca el mismo será el TAG aplicado en la sentencia de backup full.
Una vez tomado el backup, visualizamos la piezas generadas del mismo:
RMAN> List Backup;

using target database control file instead of recovery catalog
List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
5       Full    1019.86M   DISK        00:01:15     10-NOV-11
        BP Key: 5   Status: AVAILABLE  Compressed: NO  Tag: FULL_WEEKLY
        Piece Name: +FRA/mydb/backupset/2011_11_10/nnndf0_full_weekly_0.271.766859353
  List of Datafiles in backup set 5
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1       Full 1072131    09-NOV-11 +DATA/mydb/datafile/system.256.766584645
  2       Full 1072131    09-NOV-11 +DATA/mydb/datafile/sysaux.257.766584645
  3       Full 1072131    09-NOV-11 +DATA/mydb/datafile/undotbs1.258.766584647
  4       Full 1072131    09-NOV-11 +DATA/mydb/datafile/users.259.766584647
  5       Full 1072131    09-NOV-11 +DATA/mydb/datafile/example.276.766585261

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
6       Full    9.58M      DISK        00:00:01     10-NOV-11
        BP Key: 6   Status: AVAILABLE  Compressed: NO  Tag: FULL_WEEKLY
        Piece Name: +FRA/mydb/backupset/2011_11_10/ncsnf0_full_weekly_0.269.766859431
  SPFILE Included: Modification time: 09-NOV-11
  SPFILE db_unique_name: mydb
  Control File Included: Ckp SCN: 1072131      Ckp time: 09-NOV-11
RMAN>


En el log presentado se puede apreciar la generación de 2 piezas
+FRA/mydb/backupset/2011_11_10/nnndf0_full_weekly_0.271.766859353 & 
+FRA/mydb/backupset/2011_11_10/ncsnf0_full_weekly_0.269.766859431).   

Cada pieza posee atributos únicos, en esta ocasión determinaremos las mismas a transferir mediante los atributos TAG & BS KEY. Ambas piezas representan el objetivo para transferir a una localización de disco diversa al FRA.
Paso2: Visualizando localizaciones de piezas generadas en el FRA
Visualicemos las especificaciones de las piezas generadas a través del vistas de diccionario de datos de nuestra base de datos.
SQL> select HANDLE from v$backup_piece
  2  where TAG='FULL_WEEKLY';

HANDLE
--------------------------------------------------------------------------------
+FRA/mydb/backupset/2011_11_10/nnndf0_full_weekly_0.271.766859353
+FRA/mydb/backupset/2011_11_10/ncsnf0_full_weekly_0.269.766859431
SQL>


Paso3: Construir script para transferir las piezas externamente al FRA
Base de Datos: MYDB
Version de Oracle Server: 11g Release2
ASM Home: /u01/app/11.2.0/grid
Diskgroup ( FRA ): +FRA
Pre_transfer_backup_full.sh
export ORACLE_SID=MYDB
sqlplus / as sysdba @/Extracting_script.sql

Extracting_script.sql

SET NEWPAGE    0
SET SPACE      0
SET PAGESIZE   0
SET ECHO     OFF
SET FEEDBACK OFF
SET HEADING  OFF
SET TERMOUT  OFF
SET VERIFY   OFF
set linesize 400

spool /Transfer_full_backup.sql

select distinct jp from (
select  'run { backup backupset ' || BS_KEY ||
' format ''/MyExternalFileSystem/PIECE_BSKEY_' || BS_KEY
|| '.BKP' || '''' || '; }' jp
from v$backup_files
where tag='FULL_WEEKLY'
);

spool off
exit;


Es apreciable destacar que la vista “V$BACKUP_FILES” posee campos altamente útiles para delimitar las piezas a transferir. A través de esta podemos ajustar y filtrar de forma adecuada las piezas requeridas para la labor.
Referencia de la vista “V$BACKUP_FILES”
V$BACKUP_FILES

Oracle® Database Reference 11g Release 1 (11.1)

Part Number B28320-03

http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_1047.htm

Por ejemplo, si se desea filtrar las piezas por:
  • TAG utilizamos el campo TAG
  • BS_KEY representando la llave primaria que identifica la pieza perteneciente a un backupset
  • Modo de compresión utilizamos el campo COMPRESSED
  • y así sucesivamente
Producto de la ejecución del script “Pre_transfer_backup_full.sh” se generara el script “Transfer_full_backup.sql”. Dicho script posteriormente deberá ser ejecutado desde una sesión de RMAN.
El contenido del script “Transfer_full_backup.sql” será algo similar a lo siguiente:s
run { backup backupset 5 format '/MyExternalFileSystem/PIECE_BSKEY_5.BKP'; }
run { backup backupset 6 format '/MyExternalFileSystem/PIECE_BSKEY_6.BKP'; }


Paso4: Ejecutar el script “Transfer_full_backup.sql” desde RMAN
El script “Transfer_full_backup.sql” posteriormente tendrá que se ejecutado desde una sesión de RMAN. Para el presente caso se generan piezas equivalentes a las generadas en el FRA, el destino escogido para las mismas es el filesystem “/MyExternalFileSystem”. El “feedback” de la ejecución seria de la siguiente manera:
RMAN> run { backup backupset 5 format '/MyExternalFileSystem/PIECE_BSKEY_5.BKP'; }

Starting backup at 10-NOV-11
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=34 device type=DISK
channel ORA_DISK_1: input backup set: count=11, stamp=766859352, piece=1
channel ORA_DISK_1: starting piece 1 at 10-NOV-11
channel ORA_DISK_1: backup piece +FRA/mydb/backupset/2011_11_10/nnndf0_full_weekly_0.271.766859353
piece handle=/MyExternalFileSystem/PIECE_BSKEY_5.BKP comment=NONE
channel ORA_DISK_1: finished piece 1 at 10-NOV-11
channel ORA_DISK_1: backup piece complete, elapsed time: 00:01:05
Finished backup at 10-NOV-11

RMAN>

RMAN> run { backup backupset 6 format '/MyExternalFileSystem/PIECE_BSKEY_6.BKP'; }

Starting backup at 10-NOV-11
using channel ORA_DISK_1
channel ORA_DISK_1: input backup set: count=12, stamp=766859429, piece=1
channel ORA_DISK_1: starting piece 1 at 10-NOV-11
channel ORA_DISK_1: backup piece +FRA/mydb/backupset/2011_11_10/ncsnf0_full_weekly_0.269.766859431
piece handle=/MyExternalFileSystem/PIECE_BSKEY_6.BKP comment=NONE
channel ORA_DISK_1: finished piece 1 at 10-NOV-11
channel ORA_DISK_1: backup piece complete, elapsed time: 00:00:01
Finished backup at 10-NOV-11

RMAN>

Las piezas obtenidas son: PIECE_BSKEY_5.BKP & PIECE_BSKEY_6.BKP


Paso5: También se puede llevar a cabo la tarea con una sola instrucción de la siguiente manera:
RMAN> backup backupset 5,6 format '/MyExternalFileSystem/MyBackup_out_of_ASM_%t_s%s_s%p.BKP';

Starting backup at 10-NOV-11
using channel ORA_DISK_1
channel ORA_DISK_1: input backup set: count=15, stamp=766864699, piece=1
channel ORA_DISK_1: starting piece 1 at 10-NOV-11
channel ORA_DISK_1: backup piece +FRA/mydb/backupset/2011_11_10/nnndf0_full_weekly_0.271.766859353
piece handle=/MyExternalFileSystem/MyBackup_out_of_ASM_766864699_s15_s1.BKP comment=NONE
channel ORA_DISK_1: finished piece 1 at 10-NOV-11
channel ORA_DISK_1: backup piece complete, elapsed time: 00:00:55
channel ORA_DISK_1: input backup set: count=16, stamp=766864775, piece=1
channel ORA_DISK_1: starting piece 1 at 10-NOV-11
channel ORA_DISK_1: backup piece +FRA/mydb/backupset/2011_11_10/ncsnf0_full_weekly_0.269.766859431
piece handle=/MyExternalFileSystem/MyBackup_out_of_ASM_766864775_s16_s1.BKP comment=NONE
channel ORA_DISK_1: finished piece 1 at 10-NOV-11
channel ORA_DISK_1: backup piece complete, elapsed time: 00:00:01
Finished backup at 10-NOV-11

RMAN>

Tal cual como se puede apreciar, el identificador de las piezas es el atributo BS_KEY.
Visualizacion de archivos ( piezas de RMAN ) generadas en el sistema operativo
[oracle@MYSERVER-mydb MyExternalFileSystem]$ ls -lt
total 1057452
-rw-r----- 1 oracle dba   10059776 Nov 10 18:08 MyBackup_out_of_ASM_766864775_s16_s1.BKP
-rw-r----- 1 oracle dba 1071702016 Nov 10 18:07 MyBackup_out_of_ASM_766864699_s15_s1.BKP
[oracle@MYSERVER-mydb MyExternalFileSystem]$

Dichas piezas son perfectamente validas y consistentes para cualquier recuperación de nuestra base de datos. Las mismas quedan catalogadas en los controlfiles y/o catalogo de RMAN.

Aplicaciones y uso



Las posibles aplicaciones reales que podemos realizar con transferencias de piezas o archivos desde ASM hacia otros destinos son variadas. Listamos algunas:
  • Transferencia de Archived Redo Logs para resolver casos de GAP para Manual Standby Databases o Data Guard en versiones 10g
  • Extraer RMAN backups ( full, archives, controlfiles, etc… ) para procedimientos tales como: RMAN Dupliicate, Instanciacion de Standby o Data Guard Databases, etc… y otros
  • Transferencias de ASM a ASM para replicación de BBDDs
  • Y muchas otras mas