MERCADOS FINANCIEROS

miércoles, 27 de mayo de 2015

Actualización de OEM 12cR2 a OEM 12cR3 en Oracle Linux



Actualización de OEM 12cR2 a OEM 12cR3 en Oracle Linux


Enterprise Manager 12c es el producto que ofrece Oracle como solución integrada de gestión de la nube y orientada a los negocios y la empresa, no nada más al manejo de las bases de datos como solía ser en versiones anteriores, hoy en día es un producto tan robusto que te permite manejar todo el ciclo de vida de una aplicación y los costos que conlleva esta.
Pero de igual manera y como todo producto tecnológico, hay que mantenerlo a la vanguardia para que te pueda brindar las ultimas características que ofrece este. Por eso aquí te voy a platicar de cómo hacer una actualización de la versión 12cR2 (12.1.0.2) a 12cR3 (12.1.0.3).
Lo primero que hay que hacer es verificar que estamos en la versión 12cR2, ya que esto nos va a ayudar para poder cumplir los pre-requisitos para nuestra actualización.
oracle@ testhost.dlab.pythian.com [oms] /u01/OracleHomes/Middleware/oms/bin
oracle $ ./emctl status oms
Oracle Enterprise Manager Cloud Control 12c Release 2  
Copyright (c) 1996, 2012 Oracle Corporation.  All rights reserved.
WebTier is Up
Oracle Management Server is Up

oracle@testhost.dlab.pythian.com [] /u01/OracleHomes/Middleware/oms/OPatch
oracle $ ./opatchlsinventory
Oracle Interim Patch Installer version 11.1.0.9.8
Copyright (c) 2012, Oracle Corporation.  All rights reserved.


Oracle Home       : /u01/OracleHomes/Middleware/oms
Central Inventory : /u01/app/oraInventory
from           : /u01/OracleHomes/Middleware/oms/oraInst.loc
OPatchversion    : 11.1.0.9.8
OUI version       : 11.1.0.9.0
Log file location : /u01/OracleHomes/Middleware/oms/cfgtoollogs/opatch/
opatch2013-08-25_14-27-16PM_1.log


OPatch detects the Middleware Home as "/u01/OracleHomes/Middleware"

Lsinventory Output file location : /u01/OracleHomes/Middleware/oms/cfgtoollogs/opatch/lsinv/
lsinventory2013-08-25_14-27-16PM.txt

----------------------------------------------------------------------------
Installed Top-level Products (1): 

EM Platform (OMS)                                                 12.1.0.2.0
There are 1 products installed in this Oracle Home.


Interim patches (2) :

Patch  16720037     : applied on Fri Jul 26 17:04:54 EDT 2013
Unique Patch ID:  16375977
Patch description:  "ENTERPRISE MANAGER BASE PLATFORM - OMS 12.1.0.2.3 PSU (GENERIC)"
   Created on 11 Jul 2013, 07:07:23 hrs PST8PDT
   Bugs fixed:
     13564862, 16026950, 15872430, 13923303, 16295882, 14582201, 14674956
     14681479, 14526341, 16007962, 14355479, 13038747, 14812404, 14342208
     14762857, 14769075, 14693191, 14672991, 16006811, 14010647, 16236221
     14604267, 14473422, 15882400, 16417886, 14580616, 14463440, 14729169
     14673451, 15845393, 16290212, 13508023, 14408052, 16595948, 14709740
     16184336, 14527469, 14520274, 16384695, 15861782, 15939396, 16339981
     14385641, 15943462, 15859144, 14588625, 14508734, 14623310, 14727947
     14299157, 10367113, 14685307, 16492405, 10096491, 14646978, 16383091
     14285253, 14562085, 14763683, 15955206, 14258259, 14761661, 14673182
     14666763, 15875808, 14763575, 14594247, 14745153, 14791323, 14795109
     14559710, 14749579, 16092658, 10422783, 14473995, 14508416, 14788062
     14270937, 15890511, 14735169, 15830769, 14758235, 13894390, 14235906
     14394014, 14182184, 14728061, 14557951, 14293602, 14587045, 14326585
     14519924, 14840279, 14791371, 14594990, 16225858, 14480859, 14360903
     16244433, 14235923, 14687246, 16060571, 16249001, 14302926, 16399409
     16720037, 15928584, 15945297, 14550814, 16173939, 14761108, 13588621
     13849711, 14693208, 14763611, 14585884, 14807230, 13550435, 13891094
     14521115, 14587300, 14767273, 14397242, 16162621, 14848419, 14477373
     13079372, 14223651, 16036046, 14475316, 14380701, 14351499, 14571497
     14630733, 14845582, 14543562, 16201338, 14561583, 16204193, 14683668
     14846905, 15887936, 14807598, 14473509, 16050320, 14485604, 14563656
     15897575, 14636925, 15978947, 14377038, 15964986, 16206258, 16208410
     14208766, 14495973, 14461107, 14763632, 16211946, 14675057, 14541496
     14804073, 14249715, 13987830, 14032756, 14838874, 14786608, 16194290
     14096173, 14306214, 14149721, 14833587, 14793497, 14775943, 14568969
     14695367, 14693204, 14356241, 14691873, 14681848, 14794550, 14345046
     16264015, 14651399, 14776583, 14304836, 14756522, 14336237, 14697257
     14357531, 14571792, 15962488, 14544587, 14728398, 14315126, 14586919
     16226201, 16195634, 14685375, 14708698, 14335511, 14777653, 14598372

Patch  13983293     : applied on Wed Jan 30 02:41:15 EST 2013
Unique Patch ID:  14779750
   Created on 25 Apr 2012, 02:18:06 hrs PST8PDT
Bugs fixed:
     13587457, 13425845, 11822929



--------------------------------------------------------------------------------

OPatch succeeded.

Como lo mencione arriba , hay que cumplir los prerrequisitos para poder actualizar OEM, y aquí no voy a entrar en todos los detalles de cómo tener todos los prerrequisitos de HW y SW cumplidos, pero si te voy a dar un tip, el 99% de los prerrequisitos se cumplen si tienes en el mismo server tienes instalado la base de datos 11gR2 y se simplifica utilizando el rpm oracle-rdbms-server-11gR2-preinstalldel repositorio yum publico de Oracle. Aunque esta en ingles, aquí te dejo la liga de cómo poder hacerlo.
Aquí te dejo un ejemplo si es que te llega a faltar un paquete, recuerda que estos cambios en el sistema se hacen con el usuario root, todos los demás se hacen con el usuario de instalación, que en general es el usuario oracle:
[root@testhost ~]# yum install setarch
el5_addons                  | 2.9 kB     00:00     
ol5_UEK_latest              | 2.9 kB     00:00     
ol5_latest                  | 3.5 kB     00:00     
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package setarch.x86_64 0:2.0-1.1 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================
Package      Arch        Version     Repository      Size
==============================================================
Installing:
setarch     x86_64      2.0-1.1      ol5_latest     9.7 k

Transaction Summary
==============================================================
Install       1 Package(s)
Upgrade       0 Package(s)

Total download size: 9.7 k
Is this ok [y/N]: y
Downloading Packages:
setarch-2.0-1.1.x86_64.rpm                                                                                                                            | 9.7 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing     :setarch                                                                                                                                               1/1 

Installed:
setarch.x86_64 0:2.0-1.1                                                                                                                                                   

Complete!

Es importante que una ves que hayas cumplido con todos los prerrequisitos de HW y SW , en mi caso fue súper importante que tuviéramos mas de 800mb en el /tmp ya que estábamos muy limitados de espacio ahí y nos causo problemas al correr los prerrequisitos. De igual manera te recomiendo que leas este documento de MOS (ChecklistforUpgrading Enterprise Manager Cloud Control from Version 12.1.x to 12.1.0.3 1568143.1), ya que esto te permitirá saber si necesitas un parche, que para esta actualización es necesario de aplicar el parche 11061801 a la Base de Datos del repositorio 11.2.0.3 con el ultimo opatch (MOS 6880880).
Así que para aplicar el parche en la base de datos te recomiendo que crees un punto de restauración y cerciorarte que tienes un respaldo válido antes de aplicarlo, así puedes regresar tu base en caso de ser necesario.
SQL> select count(1) from dba_objects where status<>'VALID';

COUNT(1)
----------
  0 


SQL> CREATE RESTORE POINT before_patch GUARANTEE FLASHBACK DATABASE;

Restorepointcreated.

Una vez que creamos estos punto de restauración, hay que detener todos los servicios que le pertenecen al ORACLE_HOME que vas a actualizar y aplicar el parche.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit

oracle@testhost.dlab.pythian.com [repodb] /u04/stage/db_home_patches/11061801
oracle $ lsnrctl stop listener

oracle@testhost.dlab.pythian.com [repodb] /u04/stage/db_home_patches/11061801
oracle $ which opatch
/u01/OracleHomes/db11g/product/11.2.0/dbhome_1/OPatch/opatch

oracle@testhost.dlab.pythian.com [repodb] /u04/stage/db_home_patches/11061801
oracle $ which unzip
/usr/bin/unzip

oracle@testhost.dlab.pythian.com [repodb] /u04/stage/db_home_patches/11061801
oracle $ opatch apply
Oracle Interim Patch Installer version 11.2.0.3.5
Copyright (c) 2013, Oracle Corporation.  All rights reserved.

oracle@testhost.dlab.pythian.com [repodb] /u04/stage/db_home_patches/11061801
oracle $ opatchlsinventory | grep 11061801
Patch  11061801     : applied on Sat Aug 25 16:03:09 EDT 2013
11061801


Una vez que aplicaste el parche a los binario, hay que hacer los pasos post patch.
oracle@testhost.dlab.pythian.com [repodb] /u04/stage/db_home_patches/11061801
oracle $ lsnrctl start listener

oracle@testhost.dlab.pythian.com [repodb] /u04/stage/db_home_patches/11061801
oracle $ sqlplus

SQL*Plus: Release 11.2.0.3.0 Production on Sat Aug 25 16:05:42 2013

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

Enter user-name: /as sysdba
Connected to an idle instance.

SQL> startup

SQL> @@?/rdbms/admin/owmctrg.plb

SQL> alter trigger wmsys.no_vm_drop_aenable ;

Trigger altered.

SQL> select count(1) from dba_objects where status<>'VALID';

COUNT(1)
----------
  0

Una vez que finalizo en el parche en el repositorio, tenemos que hacer también ciertas verificaciones.
a) Tenemos que cerciorarnos que Oracle DatabaseVault no este habilitado.
select * from V$OPTION where PARAMETER = 'Oracle Database Vault';

PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
Oracle Database Vault
FALSE

b) Verificar que no existan snapshots en las tablas del repositorio.
SQL> select master ,log_table from all_mview_logs where log_owner='SYSMAN';

no rowsselected

c ) Checar que exista una partición en la tabla MGMT_AUDIT_LOGS para el día que vas a hacer la actualización.
SQL> select object_name, SUBOBJECT_NAME, CREATED  fromdba_objects
2  whereobject_name='MGMT_AUDIT_LOGS' and CREATED > sysdate-3;

OBJECT_NAME
----------------------------------------
SUBOBJECT_NAME         CREATED
------------------------------ ---------
MGMT_AUDIT_LOGS
2013-08-26 00:00        25-AUG-13

MGMT_AUDIT_LOGS
2013-08-25 00:00        24-AUG-13

MGMT_AUDIT_LOGS
2013-08-24 00:00        23-AUG-13

Asegúrate que los siguientes parámetros en tu base de datos se cumplan, al igual que deshabilitar el job de Oracle que reúne las estadísticas. Si no los tienes así, has la modificación y cuando termine la actualización, regrésalos al valor que tienen.
SQL> SQL> show parameter job_queue_processes

NAME         TYPE  VALUE
------------------------------------ ----------- -----------
job_queue_processes       integer  0

SQL> show parameter parallel_max_servers

NAME         TYPE  VALUE
------------------------------------ ----------- -----------
parallel_max_servers       integer  8

SQL> exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');

Ahora si regresamos al OMS y necesitamos correr la verificación de los prerrequisitos del OMS desde donde se encuentran los archivos de instalación del OEM12cR3.
[oracle@testhostoms]$ cd /u04/stage/install/requisites/bin/
[oracle@testhost bin]$ ./emprereqkit -executionType upgrade   \
> -prerequisiteXMLLoc /u01/OracleHomes/Middleware/oms/install/requisites/list/ \
> -connectString "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=testhost.dlab.pythian.com)
(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=****.oracle.com)))" \
> -dbUser SYS -dbPassword ******  -dbRolesysdba -reposUser SYSMAN -showPrereqs
Oracle Enterprise Manager Cloud Control 12c Release 12.1.0.2.0
Copyright (c) 1996, 2010 Oracle Corporation. All rights reserved.

Running EMPrereqKit ............

Result of prerequisite list, for scenario upgrade :

--------------------------------------------------------------------------------------------------------
             Prerequisite Name            |Status|Corrective Action Status|Post Corrective Action Status
--------------------------------------------------------------------------------------------------------
Check for invalid objects in the          |  NE  |          NA             |             NA            |
EM repository
Check the CBO stats gathering job         |  NE  |          NE             |             NE            |
Check nls_length_semantics parameter      |  NE  |          NA             |             NA            |
Check for the EM Target policy            |  NE  |          NA             |             NA            |
Check for automatic UNDO management       |  NE  |          NA             |             NA            |
Ensure that the undo tablespace has       |  NE  |          NA             |             NA            |
at least one dataf
Check for a DBA policy on SYSMAN          |  NE  |          NA             |             NA            |
Check DBA jobs running                    |  NE  |          NA             |             NA            |
Ensure that PK, FK constraints are        |  NE  |          NA             |             NA            |
not disabled
Ensure that all EM AQ queue tables        |  NE  |          NA             |             NA            |
are enabled for enq

Ensure that EM triggers are not disabled  |  NE  |          NA             |             NA            |
Ensure that the SYSTEM tablespace has at  |  NE  |          NA             |             NA            |
least one dat
Ensure that the EM tablespace has at      |  NE  |          NA             |             NA            |
least one datafil
Ensure that the Oracle partitioningoption |  NE  |          NA             |             NA            |
is installe
Check remote_login_passwordfile parameter |  NE  |          NA             |             NA            |
Check emkey is copied to the repository   |  NE  |          NA             |             NA            |
Check policies for MGMT_JOB table         |  NE  |          NA             |             NA            |
Check EM_USER_CONTEXT is present in       |  NE  |          NA             |             NA            |
the repository
Check Abnormalcondition in the Audit      |  NE  |          NA             |             NA            |
Master Table 
Check EXEMPT ACCESS POLICY is grants      |  NE  |          NA             |             NA            |
Check max_enabled_rolesinit parameter     |  NE  |          NA             |             NA            |
Check executeprivilege on DBMS_RANDOM     |  NE  |          NA             |             NA            |
Check that no PAF executions are          |  NE  |          NA             |             NA            |
scheduledor running.
Check if all Agents are                   |  NE  |          NA             |             NA            |
securedwithlatest CA 
Check for the global stalepercent         |  NE  |          NA             |             NA            |
Check if SYSMAN account is locked         |  NE  |          NA             |             NA            |
Check if MGMT_VIEW account is locked      |  NE  |          NA             |             NA            |
Check if ORACLE_OCM account is locked     |  NE  |          NA             |             NA            |
Check if SYSMAN schema is present         |  NE  |          NA             |             NA            |
for upgrade 
Check Policies for MGMT_CORRECTIVE_ACTION |  NE  |          NA             |             NA            |
table  
Check Fine-grainedaccess control option   |  NE  |          NA             |             NA            |
Check the ConnectorConfigTable            |  NE  |          NA             |             NA            |
Check ifSnapshotlogs are created on       |  NE  |          NA             |             NA            |
EM tables   
Check ifrequired DBMS packages are valid  |  NE  |          NA             |             NA            |
Check the existence of currentavailability|  NE  |          NA             |             NA            |
indexes 
Check if SYSMAN_OPSS account is locked    |  NE  |          NA             |             NA            |
Check optimizersql plan baseline capture. |  NE  |          NA             |             NA            |
Check iftemporarytablespace group         |  NE  |          NA             |             NA            |
TEMP exist
Checksif GVM Performance collection       |  NE  |          NE             |             NA            |
job is running. 
Check execution_dbcolumn for              |  NE  |          NA             |             NA            |
constraintviolations. 
Check the processes instance              |  NE  |          NA             |             NA            |
parameter value  
Check the memory_target instance          |  NE  |          NA             |             NA            |
parameter value. 
Check the workarea_size_policy instance   |  NE  |          NA             |             NA            |
parameter valu
Check the session_cached_cursors          |  NE  |          NA             |             NA            |
instance parameter va
Check the job_queue_processes instance    |  NE  |          NE             |             NE            |
parameter value
Check the open_cursors instance           |  NE  |          NA             |             NA            |
parameter value. 
Check the log_buffer instance             |  NE  |          NA             |             NA            |
parameter value.  
Check the shared_pool_size instance       |  NE  |          NA             |             NA            |
parameter value. 
Check the db_cache_size instance          |  NE  |          NA             |             NA            |
parameter value.  
Check the large_pool_size instance        |  NE  |          NA             |             NA            |
parameter value. 
Check the java_pool_size instance         |  NE  |          NA             |             NA            |
parameter value.  
Check the streams_pool_size instance      |  NE  |          NA             |             NA            |
parameter value.
Check the timed_statistics instance       |  NE  |          NA             |             NA            |
parameter value. 
Check the statistics_level instance       |  NE  |          NA             |             NA            |
parameter value. 
Check the redo log size.                  |  NE  |          NA             |             NA            |
Check the compatible instance             |  NE  |          NA             |             NA            |
parameter value. 
--------------------------------------------------------------------------------------------------------
                        NE = Not Executed                        NA = Not Applicable
--------------------------------------------------------------------------------------------------------

Si llegaras a encontrar alguna discrepancia, aquí seria el momento de corregirla, antes de correr tu actualización .
Lo que sigue, es que tenemos que copiar el emkey de OMS existente en el repositorio de gestión actual y confirmar que se copió.
[oracle@testhostoms]$ cd /u01/OracleHomes/Middleware/oms/bin
[oracle@testhost bin]$./emctlconfigemkey -copy_to_repos -sysman_pwd ******
[oracle@testhost bin]$./emctl status emkey -sysman_pwd ******

Nota. Para la verificación, veras un aviso similar a este:
The EM Key  iscofiguredproperly, but is not secure.
Secure the EMKeyby running "emctlconfigemkey -remove_from_repos".

Aunque el instalador lo hace, te recomiendo que detengas OMS y el agente para la actualización :
[oracle@testhostoms]$ cd /u01/OracleHomes/Middleware/oms/bin
[oracle@testhost bin]$./emctl stop oms
[oracle@testhost bin]$ cd /u01/OracleHomes/agent/core/12.1.0.2.0/bin
[oracle@testhost bin]$./emctl stop agent

Para poder correr la actualización de manera silenciosa, construí el siguiente archivo de tipo response (upgrade.rsp). Aquí también te dejo la liga, para que puedas verificar que hace cada uno de los parámetros :
RESPONSEFILE_VERSION=2.2.1.0.0
UNIX_GROUP_NAME="oinstall"
INVENTORY_LOCATION="/u01/app/oraInventory"
SECURITY_UPDATES_VIA_MYORACLESUPPORT=true
DECLINE_SECURITY_UPDATES=false
MYORACLESUPPORT_USERNAME="your_mos_email@email.com"
MYORACLESUPPORT_PASSWORD="your_mos_password"
INSTALL_UPDATES_SELECTION="skip"
STAGE_LOCATION=
MYORACLESUPPORT_USERNAME_FOR_SOFTWAREUPDATES=
MYORACLESUPPORT_PASSWORD_FOR_SOFTWAREUPDATES=
ORACLE_MIDDLEWARE_HOME_LOCATION="/u04/OracleHomes/Middleware"
ORACLE_INSTANCE_HOME_LOCATION=
OLD_BASE_DIR="/u01/OracleHomes"
ONE_SYSTEM=true
SYS_PASSWORD="Welcome1"
SYSMAN_PASSWORD="Welcome1"
REPOSITORY_BACKUP_DONE=true
b_upgrade=true
EM_INSTALL_TYPE="NOSEED"
FROM_LOCATION="../oms/Disk1/stage/products.xml"
TOPLEVEL_COMPONENT={"oracle.sysman.top.oms","12.1.0.3.0"}

Te recomiendo que el siguiente comando lo corras desde una sesión de VNC, ya que se tarda cerca de 2 horas en correr, y si llegaras a perder tu conexión en el proceso, te complicarías las cosas.
[oracle@testhostoms]$ cd /u04/stage/
[oracle@testhost stage]$./runInstaller -silent -responseFile /u04/stage/response/upgrade.rsp

Para poder verificar, como esta corriendo tu actualización, te recomiendo que vayas al directorio del inventario, ya ahí puedes hacer un tail.
[oracle@testhostlogs]$ pwd
/u01/app/oraInventory/logs
 [oracle@testhostlogs]$ tail -f silentInstall2013-08-25_07-34-11-PM.log

Si ya terminó el upgrade, nada más hay que correr el script allroot.sh desde la nueva locación del OMS 12cR3, esto es con el usuario root, no con el usuario oracle.
[root@testhostoms]$ pwd
/u04/OracleHomes/oms/
[root@testhostoms]$ ./allroot.sh

Ahora que terminó la actualización, podemos verificar que nuestro OMS está en la versión 12cR3.
[oracle@testhost bin]$ cd /u04/OracleHomes/oms/bin
[oracle@testhost bin]$ ./emctl status oms
Oracle Enterprise Manager Cloud Control 12c Release 3  
Copyright (c) 1996, 2013 Oracle Corporation.  All rights reserved.
WebTier is Up
Oracle Management Server is Up

Aunque ya terminamos con la actualización de nuestro OMS, no hemos terminado con toda la actualización porque necesitamos actualizar a nuestro(s) agente(s)
Para el agente del servidor OMS, hay que levantarlo primero :
[oracle@testhost bin]$ cd /u01/OracleHomes/agent/core/12.1.0.2.0/bin
[oracle@testhost bin]$./emctl start agent


Asegúrate de igual manera que el agente esté seguro, o sea que sea https la dirección y no http, si no es así, corre el comando.
[oracle@testhost bin]$./emctlstatusagent
..
Agent URL         :https://testhost.dlab.pythian.com:3872/emd/main/
Repository URL    :https://testhost.dlab.pythian.com:4900/empbs/upload
..
[oracle@testhostbin]$./emctlsecureagent

Ya para finalizar, vamos a nuestro OEM recién actualizado y lo único que tienes que confirmar es que los agentes que vayas a actualizar no se encuentren en la sección de “NotUpgradableAgents”.
Setup-> Manage Cloud Control -> Upgrade Agents -> Submit
Cuando termine, podrás ver los siguiente:
[oracle@testhost bin]$ ./emctl status agent
Oracle Enterprise Manager Cloud Control 12c Release 3  
Copyright (c) 1996, 2013 Oracle Corporation.  All rights reserved.
---------------------------------------------------------------
Agent Version     : 12.1.0.3.0
OMS Version       : 12.1.0.3.0
Protocol Version  : 12.1.0.1.0
Agent Home        : /u01/OracleHomes/agent/agent_inst
AgentBinaries    : /u01/OracleHomes/agent/core/12.1.0.3.0
Agent Process ID  : 6381
Parent Process ID : 6323
Agent URL         : https://testhost.dlab.pythian.com:3872/emd/main/
Repository URL    : https://testhost.dlab.pythian.com:4900/empbs/upload
Started at        : 2013-09-01 00:07:35
Startedbyuser   : oracle
LastReload       : (none)
Lastsuccessfulupload                       : 2013-09-01 00:08:08
Lastattemptedupload                        : 2013-09-01 00:08:08
Total Megabytes of XML files uploaded so far : 0.01
Number of XML files pendingupload           : 24
Size of XML files pendingupload(MB)         : 0.05
Available disk space on uploadfilesystem    : 8.55%
Collection Status                            :Collectionsenabled
Heartbeat Status                             : Ok
Lastattemptedheartbeat to OMS              : 2013-09-01 00:08:05
Lastsuccessfulheartbeat to OMS             : 2013-09-01 00:08:05
Nextscheduledheartbeat to OMS              : 2013-09-01 00:09:06

---------------------------------------------------------------
Agent is Running and Ready

Conclusión
Como puedes ver, el proceso es largo y a la mejor un poco complejo, por eso te recomiendo que antes de empezar tengas un respaldo de tu OMS_HOME,AGENT_HOME y de tu base de datos repositorio. De igual manera , la documentación oficial siempre va a tener los pasos actualizados, así que antes de que te aventures, te recomiendo que los leas para tener una actualización exitosa.

Simplificación de las instalaciones de Oracle Database 12c y 11g en Oracle Linux 6

 

Simplificación de las instalaciones de Oracle Database 19c 12c y 11g en Oracle Linux 6

yum -y install oracle-database-ee-19c
yum -y install oracle-database-preinstall-19c

Simplificación de la instalación de Oracle Database 12c u 11g en Oracle Linux 6 mediante la instalación del paquete RPM oracle-rdbms-server-12cR1-preinstall o oracle-rdbms-server-11gR2-preinstall, que ejecuta de forma automática varias tareas como instalar paquetes de software requeridos, resolver dependencias de paquetes y modificar parámetros del kernel.
Presentación de los RPM oracle-rdbms-server-12cR1-preinstall y oracle-rdbms-server-11gR2-preinstall para Oracle Linux
Antes de instalar Oracle Database 12c u 11g en un sistema, es necesario configurar el entorno operativo, puesto que la base de datos requiere ciertos paquetes de software, versiones de paquetes y modificaciones de los parámetros del kernel. (Consulte la guía de instalación de Oracle Database que corresponda para conocer los requisitos relativos a hardware, software y sistema operativo.)
Nota: El presente artículo es válido para Oracle Linux 6. En un artículo anterior, "How I Simplified Oracle Database Installation on Oracle Linux" (Simplificación de la instalación de Oracle Database en Oracle Linux), se aborda la ejecución de una tarea similar en versiones de Oracle Linux 5.
Descubrí que existe un modo notablemente sencillo de cumplimentar los requisitos de instalación en Oracle Linux: Primero, instale el paquete RPM denominado oracle-rdbms-server-12cR1-preinstall o el oracle-rdbms-server-11gR2-preinstall, según cuál sea su versión de base de datos. Este RPM ejecuta varios pasos de configuración previa:
  • Descarga e instalación automáticas de paquetes de software y versiones específicas de paquetes requeridas para instalar Oracle Grid Infrastructure y Oracle Database 12 c Versión 1 (12.1) u 11g Versión 2 (11.2.0.3); las dependencias de paquetes se resuelven mediante capacidades yum o up2date .
  • Creación del usuario oracle y los grupos oinstall (para OraInventory) y dba (para OSDBA), que se usan durante la instalación de la base de datos. (Por motivos de seguridad, este usuario no tiene contraseña predeterminada y no puede iniciar sesión de manera remota. Para permitir el inicio de sesión remoto, defina una contraseña utilizando la herramienta passwd.)
  • Modificación de parámetros del kernel en /etc/sysctl.conf para cambiar la configuración relativa a memoria compartida, semáforos, cantidad máxima de descriptores de archivos, etcétera.
  • Definición de límites máximos y flexibles para los recursos del shell en /etc/security/limits.conf, por ejemplo espacio de direcciones de memoria bloqueado, cantidad de archivos abiertos, cantidad de procesos y tamaño de archivos del núcleo.
  • Definición numa=off en el kernel para máquinas x86_64.
Nótese que oracle-rdbms-server-12cR1-preinstall y oracle-rdbms-server-11gR2-preinstall analizan los archivos /etc/sysctl.conf y /etc/security/limits.conf existentes y actualizan los valores solo en la medida en que se requiera para instalar la base de datos. Toda configuración personalizada previamente que no se relacione con la instalación de la base de datos permanece sin modificación alguna.
Es posible obtener los paquetes RPM oracle-rdbms-server-12cR1-preinstall y oracle-rdbms-server-11gR2-preinstall a través de la red Oracle Unbreakable Linux Network (ULN, que requiere contar con contrato de soporte técnico), desde los medios de distribución Oracle Linux o en el repositorio yum público de Oracle. Por lo tanto, independientemente de que su sistema esté registrado en la red ULN para obtener acceso a parches y soporte técnico de Oracle, es posible utilizar oracle-rdbms-server-12cR1-preinstall y oracle-rdbms-server-11gR2-preinstall para simplificar la instalación de la base de datos en Oracle Linux. Además, el repositorio yum público de Oracle incluye en la actualidad todos los parches de seguridad y para resolución de errores, lo que garantiza la seguridad y estabilidad de los sistemas mediante el acceso a las más recientes actualizaciones de seguridad y correcciones de errores.

Instalación del RPM oracle-rdbms-server-12cR1-preinstall o oracle-rdbms-server-11gR2-preinstall .
En el resto del artículo, describo los pasos del procedimiento que seguí para instalar oracle-rdbms-server-11gR2-preinstall en Oracle Linux mediante el repositorio yum público de Oracle. Los pasos que se describen en el apartado siguiente pueden utilizarse para cualquiera de las versiones del paquete RPM de preinstalación. Partí de un sistema en el que se ejecuta Oracle Linux Versión 6, Actualización 4 para x86_64, una versión de 64 bits de Oracle Linux que descargué de Oracle Software Delivery Cloud (es necesario registrarse o iniciar sesión). En primer lugar, configuré un archivo de configuración yum que apuntaba al repositorio correcto y, luego, instalé el RPM oracle-rdbms-server-11gR2-preinstall desde ese repositorio.
A continuación, se indican los pasos requeridos para configurar un sistema para la posterior instalación de Oracle Database utilizando oracle-rdbms-server-11gR2-preinstall. Recuerde que para el paquete oracle-rdbms-server-12cR1-preinstall deben seguirse los mismos pasos; solo es necesario cambiar el nombre del paquete RPM en el paso correspondiente a la instalación de yum.
  1. Recupere el archivo que configura las ubicaciones de repositorio como usuario autorizado (por ejemplo, root):
  2. # cd /etc/yum.repos.d
    # wget http://public-yum.oracle.com/public-yum-ol6.repo  

  3. Con un editor de texto, modifique el archivo reemplazando el campo enabled=0 por enabled=1 para reflejar los repositorios que correspondan a la versión del sistema operativo de la máquina.
  4. A continuación, se incluye un fragmento de public-yum-old6.repo con las líneas modificadas en negrita.
    [ol6_latest]
    name=Oracle Linux $releasever Latest ($basearch)
    baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/latest/$basearch/
    gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol6
    gpgcheck=1
    enabled=1  

    [ol6_UEK_latest]
    name=Latest Unbreakable Enterprise Kernel for Oracle Linux $releasever ($basearch)
    baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/UEK/latest/$basearch/
    gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol6
    gpgcheck=1
    enabled=1  

    Puesto que el sistema de destino ejecuta Oracle Linux Versión 6, Actualización 4 para x86_64, que instala Oracle Unbreakable Enterprise Kernel en forma predeterminada, deben habilitarse dos repositorios, [ol6_latest] y [ol6_UEK_latest].
  5. A continuación, instale el RPM oracle-rdbms-server-11gR2-preinstall con el comando yum install. Si estuviera utilizando Oracle Database 12c, debería escribir yum install.
  6. La salida en el Listado 1 muestra la comprobación de dependencias que lleva a cabo la instalación y la posterior descarga e instalación de los paquetes requeridos.
    rpm -qa | grep -i ora
    # yum install oracle-rdbms-server-12cR1-preinstall
    # yum install oracle-rdbms-server-11gR2-preinstall
    Loaded plugins: refresh-packagekit, rhnplugin, security
    Setting up Install Process
    Resolving Dependencies
    --> Running transaction check
    ---> Package oracle-rdbms-server-11gR2-preinstall.x86_64 0:1.0-6.el6 will be installed
    --> Processing Dependency: gcc-c++ for package: oracle-rdbms-server-11gR2-preinstall-1.0-6.el6.x86_64
    --> Processing Dependency: gcc for package: oracle-rdbms-server-11gR2-preinstall-1.0-6.el6.x86_64
    --> Processing Dependency: libaio-devel for package: 
        oracle-rdbms-server-11gR2-preinstall-1.0-6.el6.x86_64
    --> Processing Dependency: libstdc++-devel for package:  
        oracle-rdbms-server-11gR2-preinstall-1.0-6.el6.x86_64
    --> Processing Dependency: glibc-devel for package: 
        oracle-rdbms-server-11gR2-preinstall-1.0-6.el6.x86_64
    --> Processing Dependency: compat-libstdc++-33 for package: 
        oracle-rdbms-server-11gR2-preinstall-1.0-6.el6.x86_64
    --> Processing Dependency: ksh for package: oracle-rdbms-server-11gR2-preinstall-1.0-6.el6.x86_64
    --> Processing Dependency: compat-libcap1 for package: 
        oracle-rdbms-server-11gR2-preinstall-1.0-6.el6.x86_64
    --> Running transaction check
    ---> Package compat-libcap1.x86_64 0:1.10-1 will be installed
    ---> Package compat-libstdc++-33.x86_64 0:3.2.3-69.el6 will be installed
    ---> Package gcc.x86_64 0:4.4.6-4.el6 will be installed
    --> Processing Dependency: cpp = 4.4.6-4.el6 for package: gcc-4.4.6-4.el6.x86_64
    --> Processing Dependency: cloog-ppl >= 0.15 for package: gcc-4.4.6-4.el6.x86_64
    ---> Package gcc-c++.x86_64 0:4.4.6-4.el6 will be installed
    --> Processing Dependency: libmpfr.so.1()(64bit) for package: gcc-c++-4.4.6-4.el6.x86_64
    ---> Package glibc-devel.x86_64 0:2.12-1.80.el6_3.4 will be installed
    --> Processing Dependency: glibc-headers = 2.12-1.80.el6_3.4 for package: 
        glibc-devel-2.12-1.80.el6_3.4.x86_64
    --> Processing Dependency: glibc-headers for package: glibc-devel-2.12-1.80.el6_3.4.x86_64
    ---> Package ksh.x86_64 0:20100621-16.el6 will be installed
    ---> Package libaio-devel.x86_64 0:0.3.107-10.el6 will be installed
    ---> Package libstdc++-devel.x86_64 0:4.4.6-4.el6 will be installed
    --> Running transaction check
    ---> Package cloog-ppl.x86_64 0:0.15.7-1.2.el6 will be installed
    --> Processing Dependency: libppl_c.so.2()(64bit) for package: cloog-ppl-0.15.7-1.2.el6.x86_64
    --> Processing Dependency: libppl.so.7()(64bit) for package: cloog-ppl-0.15.7-1.2.el6.x86_64
    ---> Package cpp.x86_64 0:4.4.6-4.el6 will be installed
    ---> Package glibc-headers.x86_64 0:2.12-1.80.el6_3.4 will be installed
    --> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers-2.12-1.80.el6_3.4.x86_64
    --> Processing Dependency: kernel-headers for package: glibc-headers-2.12-1.80.el6_3.4.x86_64
    ---> Package mpfr.x86_64 0:2.4.1-6.el6 will be installed
    --> Running transaction check
    ---> Package kernel-uek-headers.x86_64 0:2.6.32-300.32.1.el6uek will be installed
    ---> Package ppl.x86_64 0:0.10.2-11.el6 will be installed
    --> Finished Dependency Resolution
    Dependencies Resolved
    
    
    ================================================================================
     Package                         Arch   Version                Repository  Size
    ================================================================================
    Installing:
    oracle-rdbms-server-11gR2-preinstall
                                     x86_64 1.0-6.el6              ol6_latest  15 k
    Installing for dependencies:
     cloog-ppl                       x86_64 0.15.7-1.2.el6         ol6_latest  93 k
     compat-libcap1                  x86_64 1.10-1                 ol6_latest  17 k
     compat-libstdc++-33             x86_64 3.2.3-69.el6           ol6_latest  183 k
     cpp                             x86_64 4.4.6-4.el6            ol6_latest  3.7 M
     gcc                             x86_64 4.4.6-4.el6            ol6_latest  10 M
     gcc-c++                         x86_64 4.4.6-4.el6            ol6_latest  4.7 M
     glibc-devel                     x86_64 2.12-1.80.el6_3.4      ol6_latest  970 k
     glibc-headers                   x86_64 2.12-1.80.el6_3.4      ol6_latest  600 k
     kernel-uek-headers              x86_64 2.6.32-300.32.1.el6uek ol6_latest  713 k
     ksh                             x86_64 20100621-16.el6        ol6_latest  684 k
     libaio-devel                    x86_64 0.3.107-10.el6         ol6_latest  13 k
     libstdc++-devel                 x86_64 4.4.6-4.el6            ol6_latest  1.5 M
     mpfr                            x86_64 2.4.1-6.el6            ol6_latest  156 k
     ppl                             x86_64 0.10.2-11.el6          ol6_latest  1.3 M

    Transaction Summary
    ================================================================================
    Install      15 Package(s)
    Total download size: 25 M
    Installed size: 61 M
    Is this ok [y/N]: Downloading Packages:
    --------------------------------------------------------------------------------
    Total                                           710 kB/s |  25 MB     00:35     
    Running rpm_check_debug
    Running Transaction Test
    Transaction Test Succeeded
    Running Transaction
      Installing : mpfr-2.4.1-6.el6.x86_64                                  1/15 
      Installing : libstdc++-devel-4.4.6-4.el6.x86_64                       2/15 
      Installing : cpp-4.4.6-4.el6.x86_64                                   3/15 
      Installing : ppl-0.10.2-11.el6.x86_64                                 4/15 
      Installing : cloog-ppl-0.15.7-1.2.el6.x86_64                          5/15 
      Installing : kernel-uek-headers-2.6.32-300.32.1.el6uek.x86_64         6/15 
      Installing : glibc-headers-2.12-1.80.el6_3.4.x86_64                   7/15 
      Installing : glibc-devel-2.12-1.80.el6_3.4.x86_64                     8/15 
      Installing : gcc-4.4.6-4.el6.x86_64                                   9/15 
      Installing : gcc-c++-4.4.6-4.el6.x86_64                               10/15 
      Installing : compat-libstdc++-33-3.2.3-69.el6.x86_64                  11/15 
      Installing : libaio-devel-0.3.107-10.el6.x86_64                       12/15 
      Installing : ksh-20100621-16.el6.x86_64                               13/15 
      Installing : compat-libcap1-1.10-1.x86_64                             14/15 
      Installing : oracle-rdbms-server-11gR2-preinstall-1.0-6.el6.x86_64    15/15 
      Verifying  : gcc-4.4.6-4.el6.x86_64                                   1/15
      Verifying  : compat-libcap1-1.10-1.x86_64                             2/15 
      Verifying  : ksh-20100621-16.el6.x86_64                               3/15 
      Verifying  : glibc-devel-2.12-1.80.el6_3.4.x86_64                     4/15 
      Verifying  : libaio-devel-0.3.107-10.el6.x86_64                       5/15 
      Verifying  : oracle-rdbms-server-11gR2-preinstall-1.0-6.el6.x86_64    6/15 
      Verifying  : gcc-c++-4.4.6-4.el6.x86_64                               7/15 
      Verifying  : glibc-headers-2.12-1.80.el6_3.4.x86_64                   8/15 
      Verifying  : libstdc++-devel-4.4.6-4.el6.x86_64                       9/15 
      Verifying  : compat-libstdc++-33-3.2.3-69.el6.x86_64                  10/15 
      Verifying  : mpfr-2.4.1-6.el6.x86_64                                  11/15 
      Verifying  : kernel-uek-headers-2.6.32-300.32.1.el6uek.x86_64         12/15 
      Verifying  : cpp-4.4.6-4.el6.x86_64                                   13/15 
      Verifying  : ppl-0.10.2-11.el6.x86_64                                 14/15 
      Verifying  : cloog-ppl-0.15.7-1.2.el6.x86_64                          15/15 
    

    Installed:
      oracle-rdbms-server-11gR2-preinstall.x86_64 0:1.0-6.el6
                           
    Dependency Installed:
      cloog-ppl.x86_64 0:0.15.7-1.2.el6                                             
      compat-libcap1.x86_64 0:1.10-1                                                
      compat-libstdc++-33.x86_64 0:3.2.3-69.el6                                     
      cpp.x86_64 0:4.4.6-4.el6                                                      
      gcc.x86_64 0:4.4.6-4.el6                                                      
      gcc-c++.x86_64 0:4.4.6-4.el6                                                  
      glibc-devel.x86_64 0:2.12-1.80.el6_3.4                                        
      glibc-headers.x86_64 0:2.12-1.80.el6_3.4                                      
      kernel-uek-headers.x86_64 0:2.6.32-300.32.1.el6uek                            
      ksh.x86_64 0:20100621-16.el6                                                  
      libaio-devel.x86_64 0:0.3.107-10.el6                                          
      libstdc++-devel.x86_64 0:4.4.6-4.el6                                          
      mpfr.x86_64 0:2.4.1-6.el6                                                     
      ppl.x86_64 0:0.10.2-11.el6
                                                        
    Complete!

    Listado 1: Instalación del RPM oracle-rdbms-server-11gR2-preinstall .
    La instalación de yum registra los mensajes relativos a los cambios del kernel en el archivo /var/log/oracle-rdbms-server-11gR2-preinstall/results/orakernel.log y confecciona copias de seguridad de la configuración actual del sistema en el directorio /var/log/oracle-rdbms-server-11gR2-preinstall/backup.
  7. Al llegar a este punto, el sistema está listo para la instalación de Oracle Database. Por ejemplo, para instalar Oracle Database 11g Versión 2, siga las instrucciones que se ofrecen en el capítulo 4, "Installing Oracle Database" (Instalación de Oracle Database), de la Database Installation Guide for Linux (Guía de instalación de Database para Linux).
Los siguientes son los pasos que seguí para instalar Oracle Database 11g Versión 2 en el entorno de prueba. Asegúrese de consultar toda la documentación y adoptar las prácticas recomendadas antes de instalarlo en su entorno de producción.
- Como usuario root, cree un directorio principal en un sistema de archivos que cuente con espacio suficiente para funcionar como ubicación de destino de los archivos descargados:
# mkdir /home/OraDB11g
# cd /home/OraDB11g

El espacio en disco necesario para el sistema de archivos varía en función del tipo específico de instalación, pero aproximadamente el doble del espacio que ocupan los archivos comprimidos o 5 GB son suficientes para alojar el software y los archivos de datos
- Descargue en este directorio de destino los archivos de medios desde la página Oracle Database Software Downloads (Descargas de software de Oracle Database) de Oracle Technology Network.
- Extraiga los archivos:
# unzip linux.x64_11gR2_database_1of2.zip
# unzip linux.x64_11gR2_database_2of2.zip 

- Inicie sesión como usuario oracle. Cambie de directorio a database y escriba el siguiente comando para ejecutar la herramienta Oracle Universal Installer:
$ cd /home/OraDB11g/database
$ ./runInstaller 


El instalador universal de Oracle ejecuta una cantidad de comprobaciones para verificar que los paquetes y versiones de SO requeridos estén instalados. Además, comprueba parámetros del kernel definidos por la instalación de oracle-rdbms-server-11gR2-preinstall. Durante la comprobación de la configuración del kernel, el instalador puede indicar que algunos valores son erróneos (failed); en ese caso, deberá investigar los errores señalados. Puede ocurrir, en algunos casos, que de todos modos sea posible seguir adelante con la instalación de la base de datos. Si revisa la configuración del kernel en /etc/sysctl.conf, observará que oracle-rdbms-server-11gR2-preinstall ha modificado y añadido los valores necesarios para asegurar que se cumpla con los requisitos mínimos, según se definen en el apartado 2.10.1, "Displaying and Changing Kernel Parameter Values" (Visualización y modificación de valores de parámetros del kernel), en el capítulo 2, "Oracle Database Preinstallation Requirements" (Requisitos de instalación previa de Oracle Database), en la Oracle Database Installation Guide 11g Release2 (11.2) for Linux (Guía de instalación de Oracle Database 11g, Versión 2 (11.2) para Linux). A continuación se incluye la lista de requisitos:
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

Si fuera necesario, puede (como root) modificar el archivo /etc/sysctl.conf para especificar una configuración en forma manual, por ejemplo:
# vi /etc/sysctl.conf 
# /sbin/sysctl -p 


El instalador universal de Oracle ejecuta comprobaciones adicionales, por ejemplo, verifica la versión de la glibc, la variable de entorno y la configuración de la ruta, comprueba que haya suficiente espacio en disco, memoria física y espacio de intercambio. Por lo general, con la instalación de oracle-rdbms-server-11gR2-preinstall se satisfacen todos los requisitos previos, de modo que se puede proceder directamente a instalar la base de datos.


Conclusión

Instalar los RPM oracle-rdbms-server-12cR1-preinstall y oracle-rdbms-server-11gR2-preinstall puede ahorrar tiempo a la hora de instalar Oracle Database 12c y 11g en Oracle Linux. Estos RPM resuelven la mayor parte de los requisitos previos a la instalación de Oracle Database, por lo que simplifican en gran medida el proceso de instalación.

Información adicional

A continuación se incluyen los recursos mencionados con anterioridad en el presente documento:
Y estos son algunos recursos adicionales de la biblioteca de documentación de Oracle Database (http://www.oracle.com/pls/db112/homepage). Los subapartados pertinentes de Oracle Database Installation Guide 11g Release 2 (11.2) for Linux (Guía de instalación de Oracle Database 11g, Versión 2 [11.2] para Linux) (http://download.oracle.com/docs/cd/E11882_01/install.112/e16763/toc.htm) con direcciones URL válidas son los siguientes:
Véase también la entrada de blog "Oracle RDBMS Server 11gR2 Pre-Install RPM for Oracle Linux 6 has been released" (Se ha publicado el RPM Oracle RDBMS Server 11 g V2 Pre-Install para Oracle Linux 6): https://blogs.oracle.com/linux/entry/oracle_rdbms_server_11gr2_pre

Oracle Seguridad en Profundidad: Advanced Security Option



Oracle Seguridad en Profundidad: Advanced Security Option

Objetivo

  • Implementar TDE (Transparent Data Encription) para una tabla
  • Generar un backup encriptado
  • Recomendar manejo de wallet para la restauración de backups en operadores biométricos


Actividades

  • Modificación sqlnet.ora
  • Creación de Wallet
  • Creación de Tablespace encriptado
  • Crear tabla encriptada
  • Generación de export
  • Gestión del wallet


Software Requerido

Para configurar Advanced Security Option, no se requiere instalar ningún software adicional, ya que esta opción queda instalada, y solo debe ser configurada para que sea utilizada. Una vez utilizada se verifica según sea el caso, encriptación por red, encriptación de tablespaces o encriptación de tablas, generación de backups encriptados.


Modificación de SQLNET.ORA

Modificar el archivo sqlnet.ora, adicionando la siguiente llave donde se debe especificar la ubicación del  wallet, llave maestra de encriptación de sus bases de datos.
Se recomienda ubicar el wallet en un directorio fuera del $ORACLE_BASE.
Si este archivo ya existe asegurarse de sacar una copia primero.
ENCRYPTION_WALLET_LOCATION  = (SOURCE =
(METHOD =  FILE)
(METHOD_DATA  =
(DIRECTORY =  /u01/ASO/$ORACLE_UNQNAME)))


Creacion del Wallet


Método 1:

Crear el directorio donde se va crear el wallet.
mkdir /u01/ASO/ 

Establecer las variables de ambiente, es importante especificar estas dos variables cuando se sube una base de datos.
export ORACLE_SID=securedb 
export ORACLE_UNQNAME=securedb

Conectarse a la base de datos.
sqlplus  / as  sysdba

Crear y abrir el wallet:
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY  "seguridad123";

Revisar que el wallet ha sido creado
ls –lrt /u01/ASO

El wallet debe ser reabierto cada vez que se haga un reinicio de la base de datos y se puede cerrar para evitar el acceso a datos encriptados. Siempre se tienen que tener especificadas las variables de ambiente ORACLE_SID y ORACLE_UNQNAME.
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED  BY "seguridad123";
ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;

NOTA:
Este método requiere que cada vez que se reinicie la base de datos se abra el wallet;
Para crear llave de inicio automático:
orapki wallet create -wallet /u01/ASO/securedb -auto_login_local
Escribir el password usado en la creación del wallet.

Verificar que el reinicio automático funciona. Recordar que se deben especificar las variables de ambiente ORACLE_SID y ORACLE_UNQNAME, bajar la base de datos, subirla y utilizar el query select * from v$encryption_wallet;.
Método 2:
Crear el directorio donde se va crear el wallet.
mkdir /u01/ASO/securedb
 
Establecer las variables de ambiente
export ORACLE_SID=securedb
export ORACLE_UNQNAME=securedb 
 
Crear wallet con orapki, utilizar una clave fuerte, si no se generará un error.
orapki wallet create -wallet wallet_location  -pwd clave123
orapki  wallet create -wallet /u01/ASO/$ORACLE_UNQNAME -auto_login_local -pwd  seguridad123

En el directorio /u01/ASO/$ORACLE_UNQNAME quedan creados dos archivos, la llave y el archivo de auto login.
pwd
/u01/ASO/securerep
ls -lrt
total 8
-rw------- 1 oracle oracle 3512 Sep 16 09:48  ewallet.p12
-rw------- 1 oracle oracle 3589 Sep 16 09:51  cwallet.sso

El autologin solo ocurre en la maquina en la que se creó.

Creación Del Tablespace Encriptado

Para la creación del tablespace encriptado debe existir un wallet y estar abierto en el momento de la creación. En el momento de la creación se debe seleccionar el algoritmo de encriptación, entre las siguientes posibilidades:


CREATE BIGFILE TABLESPACE "TBSSEC"  DATAFILE '/u01/app/oracle/oradata/orcl1/TBSSEC.dbf' 
SIZE 100M LOGGING EXTENT  MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO DEFAULT STORAGE(ENCRYPT)  
ENCRYPTION USING 'AES192';   
ALTER USER HR QUOTA  UNLIMITED ON TBSSEC;


Verificar que el tablespace está encriptado:
SELECT  tablespace_name, encrypted FROM dba_tablespaces;
 
Tener en cuenta que el tamaño del tablespace debe ser lo suficientemente grande para contener la tabla.

Creacion De Tabla Encriptada

Dado que la encriptación se hace durante la escritura, se requiere mover la tabla. Una forma de hacerlo es por medio de la redefinición en línea. Se deben seguir las siguientes instrucciones:
  • Revisar que la tabla pueda tener una definición en línea:
EXEC  DBMS_REDEFINITION.can_redef_table('HR', 'EMPLOYEES');

  • Verificar objetos dependientes e índices de la tabla:
set linesize 150
select name, type, referenced_name
from  all_dependencies
where  referenced_name like 'EMPLOYEES'
and  referenced_type =  'TABLE' 
and  referenced_owner = 'HR';
NAME                           TYPE               REFERENCED_NAME
------------------------------ ------------------ ---------------------
SECURE_EMPLOYEES               TRIGGER            EMPLOYEES
EMP_DETAILS_VIEW               VIEW               EMPLOYEES
UPDATE_JOB_HISTORY             TRIGGER            EMPLOYEES
 
select index_name, table_name 
from dba_indexes 
where table_name ='EMPLOYEES';
INDEX_NAME                     TABLE_NAME
------------------------------ ------------------------------
EMP_EMAIL_UK                   EMPLOYEES
EMP_MANAGER_IX                 EMPLOYEES
EMP_NAME_IX                    EMPLOYEES
EMP_EMP_ID_PK                  EMPLOYEES
EMP_DEPARTMENT_IX              EMPLOYEES
EMP_JOB_IX                     EMPLOYEES

  • Crear una tabla temporal sobre la cual se haga la redefinición:
CREATE TABLE HR.EMPLOYEES_TEMP 
TABLESPACE  TBSSEC AS
SELECT  * FROM HR.EMPLOYEES WHERE 1=0;

  • Iniciar proceso de redefinición:
EXEC  DBMS_REDEFINITION.start_redef_table('HR','EMPLOYEES', 'EMPLOYEES_TEMP');

Para incluir los  los objetos dependientes como índices se puede ejecutar el procedimiento  que los incluye:
SET  SERVEROUTPUT ON
DECLARE
l_num_errors PLS_INTEGER;
BEGIN
DBMS_REDEFINITION.copy_table_dependents(
uname             => 'HR',
orig_table        => 'EMPLOYEES',
int_table         => 'EMPLOYEES_TEMP',
copy_indexes      => DBMS_REDEFINITION.cons_orig_params,  -- Non-Default
copy_triggers     => TRUE,  -- Default
copy_constraints  => TRUE,   -- Default
copy_privileges   => TRUE,   -- Default
ignore_errors     => TRUE, -- Default
num_errors        => l_num_errors); 
DBMS_OUTPUT.put_line('l_num_errors=' ||  l_num_errors);
END;
/ 


Verificar que los índices y objetos dependientes de la tabla temporal estén creados:
set linesize 150
select name, type, referenced_name
from  all_dependencies
where  referenced_name like 'EMPLOYEES_TEMP'
and  referenced_type =  'TABLE' 
and  referenced_owner = 'HR';
NAME                           TYPE               REFERENCED_NAME
------------------------------ ------------------ ----------------------
TMP$$_UPDATE_JOB_HISTORY0      TRIGGER            EMPLOYEES_TEMP
TMP$$_SECURE_EMPLOYEES0        TRIGGER            EMPLOYEES_TEMP
select index_name, table_name 
from  dba_indexes 
where  table_name ='EMPLOYEES_TEMP';
INDEX_NAME                     TABLE_NAME
------------------------------ ------------------------------
TMP$$_EMP_EMAIL_UK0            EMPLOYEES_TEMP
TMP$$_EMP_MANAGER_IX0          EMPLOYEES_TEMP
TMP$$_EMP_NAME_IX0             EMPLOYEES_TEMP
TMP$$_EMP_EMP_ID_PK0           EMPLOYEES_TEMP
TMP$$_EMP_DEPARTMENT_IX0       EMPLOYEES_TEMP
TMP$$_EMP_JOB_IX0              EMPLOYEES_TEMP

Es posible que se necesite recrear objetos como vistas y sinónimos. Luego se debe sincronizar la tabla, y una vez finalizada se puede borrar la tabla temporal, pero antes se puede revisar que la tabla hr.employees haya quedado encriptada:
EXEC  DBMS_REDEFINITION.sync_interim_table('HR','EMPLOYEES', 'EMPLOYEES_TEMP');
EXEC  DBMS_REDEFINITION.finish_redef_table('HR','EMPLOYEES', 'EMPLOYEES_TEMP');
DROP TABLE EMPLOYEES_TEMP;

Para la prueba, borrar la tabla original después de verificar que los datos han sido encriptados. Si se quiere revisar los datos y están en filesystem se puede abrir el archivo con “vi  tablespace.dbf” y escribir  “:%!xxd”, y buscar los datos de la tabla employees: por ejemplo HBAER:


select table_name, tablespace_name from dba_tables where table_name like  'EMPLOYEES%';   
TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
EMPLOYEES                      TBSSEC
EMPLOYEES_TEMP                 EXAMPLE


Tablespace EXAMPLE, donde está la tabla EMPLOYEES_TEMP



Tablespace TBSSEC, donde está la tabla EMPLOYEES:



Generación de Export Encriptado

El Data Pump permite que se genere un export encriptado. La encriptación se puede manejar con los siguientes métodos: dual, transparent y password. También se puede decidir si la encriptación se aplica a todos los datos o cuales columnas serán encriptadas.

Los modos de encriptación dual y transparent requieren que el Wallet esté abierto  y disponible. El modo más sencillo es proporcionar un password al momento del export y que este mismo se use en el momento del import, si el password no es el mismo el import fallará.

Se debe definir el directorio en el que se generen los exports:
CREATE  OR REPLACE DIRECTORY dump_dir AS '/u01/ASO/';
GRANT  READ, WRITE ON DIRECTORY dump_dir TO HR;

Parámetros de Data Pump:
  • encryption: se usa para especificar qué encriptar:
    • all: habilita la encriptación para datos y metadatos del export.
    • data_only: habilita encriptación solo para los datos exportados.
    • encrypted_columns_only: habilita encriptación de columnas encriptadas.
    • metadata_only: encripta la metada exportada.
    • none: deshabilita la encriptación de los objetos de la base de datos
  • encryption algorithm: especifica el tipo de algoritmo de encriptación con alguno de estos valores:
    • AES128, por defecto
    • AES192
    • AES256
  • encryption_mode: define cómo se maneja la seguridad del export
    • password: password en la generación y restauración del backup. Export recomendado cuando la restauración se realiza en una base de datos remota, o diferente a la de la fuente.
    • transparent: Requiere el uso de un wallet . Export recomendado cuando la restauración se realiza en la misma base de datos.
    • dual: crea un dumpfile que se puede recuperar con cualquiera de las dos alternativas anteriores
  • encryption_password: se usa para especificar el password para el dumpfile 
Ejemplos:
  • Encriptación con password
expdp HR/oracle dumpfile=expHR.dmp logfile=d expHR.log encryption=all encryption_mode=password 
encryption_password=test encryption_algorithm=aes25

  • Encriptación con transparent
expdp  HR/oracle dumpfile=expHR1.dmp logfile=expHR1.log encryption=all  encryption_mode=transparent 
encryption_algorithm=aes256 directory=dump_dir

Importación:
  • Encriptación con password
impdp  system/oracle dumpfile=expHR.dmp logfile=impHR.log directory=dump_dir  
Import:  Release 11.2.0.1.0 - Production on Wed Sep 17 07:24:31 2014
Copyright  (c) 1982, 2009, Oracle and/or its affiliates.   All rights reserved.
Connected  to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With  the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39002:  invalid operation
ORA-39174: Encryption  password must be supplied. 

Se debe proveer el password para la importación
impdp system/oracle dumpfile=expScott.dmp  logfile=impscott.log directory=dump_dir   encryption_password=test
 
  • Encriptación con transparent
impdp  system/oracle dumpfile=expScott1.dmp logfile=impScott1.log 

Gestion del Wallet


Respaldo

Se recomienda crear un respaldo de la llave:
  • Inmediatamente después de haberla creado
  • Cuando se cambie el master key (antes y después)
  • Cuando se actualice el password (antes y después)
  • Cuando se haga backup de la base de datos, guardar en medios (destinos) diferentes el backup del wallet y el backup de la base de datos
El backup de la llave debe ser guardado en una ubicación segura y en un resguardo onsite y offsite.

Permisos

Se recomienda restringir los permisos del archivo y el directorio donde reside el wallet.
chown –R oracle:oinstall /u01/ASO/$ORACLE_UNQNAME
chmod –R 700 /u01/ASO/$ORACLE_UNQNAME

Una vez creado el wallet establecer estos permisos sobre el wallet:
chmod 600 ewallet.p12

Para evitar el borrado del walet por equivocación agregarle permisos de “immutable” (Linux, ext2, ext3, ext4 y OCFS):
chattr +i ewallet.p12
chattr +i cwallet.sso 

Para poder hacer un re-key o cambiar el password, recuperar los permisos:
chattr -i ewallet.p12
chattr -i cwallet.sso

Una vez finalizados los cambios restaure a #”immutable”.
Password
Se recomienda el uso de un password fuerte que sea fácil de recordar, ya que si se compromete el password , se comprometen los datos encriptados en la base de datos, debe contener número y letras y tener como mínimo 10 caracteres.

Vistas Relacionadas con ASO

  • DBA_TABLES
  • DBA_TABLESPACES
  • DBA_ENCRYPTED_COLUMNS
  • ALL_ENCRYPTED_COLUMNS
  • USER_ENCRYPTED_COLUMNS
  • V$WALLET
  • V$ENCRYPTION_WALLET

Documentos de Referencia

Oracle Data Pump Encrypted Dump File Support
http://download.oracle.com/otndocs/products/database/enterprise_edition/utilities/pdf/datapump11g_encrypted_1106.pdf
Oracle Advanced Security Transparent Data Encryption Best Practices
http://www.oracle.com/technetwork/database/security/twp-transparent-data-encryption-bes-130696.pdf
RMAN Configuring Backup Encryption
http://docs.oracle.com/cd/E11882_01/backup.112/e10642/rcmconfa.htm#BRADV89467
Advanced Security Option orapki Utility
http://docs.oracle.com/cd/E11882_01/network.112/e10746/asoappf.htm#ASOAG500

Migración de Base de Datos a ASM “No Zero Downtime”



Migración de Base de Datos a ASM “No Zero Downtime”

Por Joel Pérez
Publicado en diciembre 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 migración o traslado de una base de datos ( BBDD ) Oracle a ASM utilizando RMAN ( Oracle Recovery Manager ).
A partir de la versión de servidor de base de datos 10g contamos con la tecnología de almacenamiento ASM ( Automatic Storage Management ) la cual revoluciono la forma de almacenar y administrar nuestras base de datos.
Anterior al surgimiento de ASM , las opciones típicas de almacenamiento eran filesystems o Raw devices. Los raw devices eran y siguen siendo dispositivos rápidos en acceso, debido a que el sistema operativo no tiene la necesidad de establecer una capa adicional de manejo de volúmenes para trabajar con los mismos.
La desventaja de ellos son varias:
  • Las particiones no pueden ser redimensionadas una vez establecidas
  • Los archive logs de la base de datos no pueden estar almacenados en raw devices por lo poco flexible de sus constitución
  • Si existiese la necesidad de crear nuevos datafiles, se tendría la necesidad de crear nuevos dispositivos raw
  • Y en general son poco flexibles para su administración
Para nosotros los DBAs ASM constituyo un giro de 360 grados de cómo seria la tendencia de almacenamiento y administración de nuestras bases de datos.
  • Ya no habría necesidad de crear varios puntos de montaje o filesystems
  • Los datafiles tendrían mayor protección respecto a su almacenamiento en filesystems
  • Tendríamos a la mano nuevas filosofías de arquitectura de storage: solo 2 Diskgroups para todas las bases de datos
  • Los problemas de I/O por saturación y cuellos de botellas en puntos de monturas serian elementos del pasado al existir el concepto de “Rebalance” entre ASM Disks, etc
  • Estas y 1000 razones mas hay para justificar la migración de nuestras bases de datos de filesystem a ASM
Para el presente artículo desarrollaremos el traslado de una base de datos de filesystem a ASM permitiendo un “Downtime” de termino medio, llevaremos a cabo el traslado de la base de datos estando la misma en estado cerrado. Un “Downtime” de termino medio se lleva a cabo al realizar una tarea que implica no disponibilidad de BBDD para empresas que por lo general poseen un sistema de producción que no trabaja 24x7x365. Representan empresas que generalmente poseen horarios laborales para sus sistemas que comprenden solo una parcialidad del dia ( Ej: de 8:00am a 5:00pm ). Estas cuentan con la posibilidad de establecer tareas de mantenimiento fuera de horarios laborales. Cuando existe este perfil de uso para nuestros sistemas expresamos que podemos llevar a cabo una tarea en la cual no dispondremos del servicio de la base de datos por un espacio de tiempo prologando de horas, a esto le denominamos “Downtime” medio. El termino mas conocido y asociado a la palabra “Downtime” es “Zero Downtime”.
Una estrategia de migración y/o traslado “Zero Downtime” tiene consigo la concepción de llevar a cabo la tarea en el menos tiempo posible ( segundos…, minutos… ) y por lo general esta asociada a empresas con negocios y servicios de alta criticidad que generalmente trabajan 24x7x365. Este mismo articulo lo desarrollaremos para llevar a cabo la misma tarea pero con técnicas que satisfagan la filosofía “Zero Downtime”.
Escenario: se posee una base de datos single instance con todos sus elementos ( Controlfiles, Datafiles, Redo Logs & Archives ) en filesystem y se desea trasladar la misma a ASM. Asumiendo que previamente el software necesario esta instalado, vamos a iniciar la actividad. La técnica utilizada en este articulo es valida para los “Oracle Servers 10g” en adelante.
BBDD Origen: SOURCE
Diskgroups disponibles para la migración: +DATA & +FRA
Reconocimiento de los elementos a trasladar de la BBDD “Source”
Reconocimiento de Datafiles:
oracle@MyjpServer ~]$ export ORACLE_SID=SOURCE
[oracle@MyjpServer ~]$
[oracle@MyjpServer ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.1.0.7.0 - Production on Sat Jul 28 18:34:39 2012

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


Connected to:
Oracle Database 11g Release 11.1.0.7.0 - 64bit Production
With the Real Application Clusters option

SQL> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
/home/oracle/SOURCE/users01.dbf
/home/oracle/SOURCE/undotbs01.dbf
/home/oracle/SOURCE/sysaux01.dbf
/home/oracle/SOURCE/system01.dbf


Reconocimiento de Tempfiles:
SQL> select file_name from dba_temp_files;

FILE_NAME
--------------------------------------------------------------------------------
/home/oracle/SOURCE/temp01.dbf

Reconocimiento de Controlfiles:
SQL> show parameters control_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /home/oracle/SOURCE/control01.
                                                 ctl, /home/oracle/SOURCE/contr
                                                 ol02.ctl, /home/oracle/SOURCE/
                                                 control03.ctl
SQL>
SQL> select NAME from v$controlfile;
NAME
---------------------------------
/home/oracle/SOURCE/control01.ctl
/home/oracle/SOURCE/control02.ctl
/home/oracle/SOURCE/control03.ctl

SQL>

Reconocimiento de Redo Log files:
SQL> select GROUP#, MEMBER from v$logfile;

    GROUP# MEMBER
---------- ---------------------------------
         3 /home/oracle/SOURCE/redo03.log
         2 /home/oracle/SOURCE/redo02.log
         1 /home/oracle/SOURCE/redo01.log

Reubicación de Controlfiles
Realizaremos cambios de parámetros a nivel de spfile ( Server Parameter File ) por lo tanto procederemos a respaldar el mismo para su restaurado en caso de ser necesitado.
Nota: Para respaldar el server parameter file la BBDD debe estar en estado “mount or open “
Estado actual de la BBBD: abierta.
 
rman target /

Recovery Manager: Release 11.1.0.7.0 - Production on Sat Jul 28 18:49:07 2012

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

connected to target database: SOURCE (DBID=2908208036)

RMAN> backup spfile format '/home/oracle/SOURCE/MySpfileBackup.ora';

Starting backup at 28-07-2012 18:49:11
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=147 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 28-07-2012 18:49:12
channel ORA_DISK_1: finished piece 1 at 28-07-2012 18:49:13
piece handle=/home/oracle/SOURCE/MySpfileBackup.ora tag=TAG20120728T184911 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 28-07-2012 18:49:13

RMAN>

Procedemos a cambiar los parámetros (controlfile y db_create_file_dest) a su nueva ruta. Cerraremos la base de datos con opción “immediate” para poseer los Datafiles & Redo Logs en correcta consistencia. La ruta escogida va alineada a las rutas “Oracle Managed Files” para base de datos en ASM. Los nuevos datafiles serán creados por defecto en la ruta especificada por el parámetro db_create_file_dest.
 
SQL> Alter System set control_files=’+DATA/source/controlfiles/control01.ctl’ scope=spfile;
SQL> alter system set db_create_file_dest='+DATA' scope=spfile;

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

Creación de Directorio en ASM donde se alojara el o los controlfiles
Para el presente caso trabajaremos creando solo 1 controlfile, si se desean crear controlfiles en distintos Diskgroups lo cual es el “best practice”, se podrá llevar a cabo de la misma manera. Se deberán crear los directorios respectivos en los Diskgroups respectivos y se deberá asignar rutas múltiples en el valor del parámetro control_files a nivel de spfile.
Recordemos que esta base de datos esta originalmente creada en filesystem y no posee ninguna relación con los ASM Diskgroups, por lo tanto es necesario crear los directorios de alojamiento de los Controlfiles, Datafiles, Redo Logs y otros. Para algunos de los elementos el procedimiento asociado ( RMAN restore ) los crea automáticamente, para otros no. En el caso del controlfile, el directorio tiene que ser creado.
Nota: para el presente caso estamos trabajando con un Oracle Server 11g R1 el cual posee la misma la misma arquitectura de “homes” a implementarse en ( 10g R1, 10g R2 & 11g R1 ). Dicha arquitectura cuenta con un home para ASM cuyo dueño típicamente es el usuario oracle. Este “home” trabaja de la mano con un “home” de nivel superior ( en escala de “stack” de componentes ) perteneciente al Oracle Server cuyo dueño es el usuario oracle también. Es por ello que establecemos el “home” de ASM a través del mecanismo ( . oraenv ).
Si trabajáramos en 11g R2 el “best practice” será que el “Grid Infraestructure Software” pertenezca al usuario “grid” y el Oracle Server al usuario “oracle”, en caso de estar en esta arquitectura, este paso se realizaría conectado al usuario grid.
Creación de directorios necesarios para poseer finalmente la siguiente ruta: +DATA/SOURCE/controlfiles
 
[oracle@MyjpServer ~]$ . oraenv
ORACLE_SID = [TEST] ? +ASM
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.1.0/asm1 is /u01/app/oracle
[oracle@MyjpServer ~]$
[oracle@MyjpServer ~]$ asmcmd
ASMCMD>
ASMCMD> cd +DATA
ASMCMD>
ASMCMD> mkdir SOURCE
ASMCMD>
ASMCMD> cd SOURCE
ASMCMD>
ASMCMD> mkdir CONTROLFILES
ASMCMD>
ASMCMD> cd controlfiles
ASMCMD>
ASMCMD> pwd
+DATA/SOURCE/controlfiles
ASMCMD>

Restaurado de Controlfiles en ASM
 
SQL> startup nomount
ORACLE instance started.

Total System Global Area  680607744 bytes
Fixed Size                  2162800 bytes
Variable Size             180359056 bytes
Database Buffers          494927872 bytes
Redo Buffers                3158016 bytes
SQL>

RMAN> restore controlfile from '/home/oracle/SOURCE/control01.ctl';

Starting restore at 28-07-2012 19:12:25
using channel ORA_DISK_1

channel ORA_DISK_1: copied control file copy
output file name=+DATA/source/controlfiles/control01.ctl
Finished restore at 28-07-2012 19:12:26

RMAN>

Visualizando el Controlfile creado
 
ASMCMD> pwd
+DATA/SOURCE/controlfiles
ASMCMD>
ASMCMD> ls -lt
Type   Redund  Striped  Time    Sys  Name
                                N    control01.ctl => +DATA/SOURCE/CONTROLFILE/
                                                       current.261.789851545
ASMCMD>

Estableciendo en modo “mount” la BBDD
 
SQL> alter database  mount;

Database altered.

SQL>

“Backup as Copy” de la BBDD
SQL> ho rman target /

Recovery Manager: Release 11.1.0.7.0 - Production on Sat Jul 28 19:18:08 2012

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

connected to target database: SOURCE (DBID=2908208036, not open)

RMAN> backup as copy database format '+DATA';

Starting backup at 28-07-2012 19:18:28
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=147 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/home/oracle/SOURCE/system01.dbf
output file name=+DATA/source/datafile/system.263.789851909 tag=TAG20120728T191829 RECID=1 
STAMP=789851918
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/home/oracle/SOURCE/sysaux01.dbf
output file name=+DATA/source/datafile/sysaux.264.789851925 tag=TAG20120728T191829 RECID=2 
STAMP=789851932
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/home/oracle/SOURCE/undotbs01.dbf
output file name=+DATA/source/datafile/undotbs1.268.789851939 tag=TAG20120728T191829 RECID=3
STAMP=789851939
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile copy
copying current control file
output file name=+DATA/source/controlfile/backup.269.789851941 tag=TAG20120728T191829 
RECID=4 STAMP=789851941
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/home/oracle/SOURCE/users01.dbf
output file name=+DATA/source/datafile/users.270.789851943 tag=TAG20120728T191829 RECID=5 
STAMP=789851942
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 28-07-2012 19:19:03
channel ORA_DISK_1: finished piece 1 at 28-07-2012 19:19:04
piece handle=+DATA/source/backupset/2012_07_28/nnsnf0_tag20120728t191829_0.271.789851943 
tag=TAG20120728T191829 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 28-07-2012 19:19:04

RMAN>

Visualizado de Datafiles creados
 
ASMCMD> cd  DATAFILE/
ASMCMD>
ASMCMD> ls -lt
Type      Redund  Striped  Time             Sys  Name
DATAFILE  UNPROT  COARSE   JUL 28 19:00:00  Y    USERS.270.789851943
DATAFILE  UNPROT  COARSE   JUL 28 19:00:00  Y    UNDOTBS1.268.789851939
DATAFILE  UNPROT  COARSE   JUL 28 19:00:00  Y    SYSTEM.263.789851909
DATAFILE  UNPROT  COARSE   JUL 28 19:00:00  Y    SYSAUX.264.789851925
ASMCMD>

RMAN Report schema antes de la aplicación de “Switch Database to copy”
 
RMAN> report schema;

Report of database schema for database with db_unique_name SOURCE

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    700      SYSTEM               ***     /home/oracle/SOURCE/system01.dbf
2    550      SYSAUX               ***     /home/oracle/SOURCE/sysaux01.dbf
3    30       UNDOTBS1             ***     /home/oracle/SOURCE/undotbs01.dbf
4    5        USERS                ***     /home/oracle/SOURCE/users01.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    20       TEMP                 32767       /home/oracle/SOURCE/temp01.dbf

RMAN>

“Switch Database to copy”
 
RMAN> switch database to copy;

datafile 1 switched to datafile copy "+DATA/source/datafile/system.263.789851909"
datafile 2 switched to datafile copy "+DATA/source/datafile/sysaux.264.789851925"
datafile 3 switched to datafile copy "+DATA/source/datafile/undotbs1.268.789851939"
datafile 4 switched to datafile copy "+DATA/source/datafile/users.270.789851943"

RMAN>

RMAN Report schema posterior a la aplicación de “Switch Database to copy”
 
RMAN> report schema;

Report of database schema for database with db_unique_name SOURCE

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    700      SYSTEM               ***     +DATA/source/datafile/system.263.789851909
2    550      SYSAUX               ***     +DATA/source/datafile/sysaux.264.789851925
3    30       UNDOTBS1             ***     +DATA/source/datafile/undotbs1.268.789851939
4    5        USERS                ***     +DATA/source/datafile/users.270.789851943

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    20       TEMP                 32767       /home/oracle/SOURCE/temp01.dbf

RMAN>

Creación de Directorio para Redo Log
 
ASMCMD> pwd
+DATA/source
ASMCMD>
ASMCMD> mkdir ONLINELOG
ASMCMD>
ASMCMD

Sustitución y/o cambios de Redo Logs
En esta base de datos tenemos originalmente 3 grupos de “Redo Logs” ( en filesystem ). El objetivo es crear grupos de redo logs con alojamiento en ASM. Para realizar esta tarea existen diversas técnicas. Para el presente caso lo haremos siguiendo la filosofía de “No Zero Downtime”. De acuerdo a la filosofía, no tendremos restricciones para detener e iniciar la BBDD hasta culminar la tarea. Si estuviésemos trabajando con filosofía “Zero Downtime” aplicaríamos técnicas para establecer nuevos grupos de redo logs con la BBDD en modo “open”.
Estado de la BBDD: “open”
Por estar trabajando en “Single Instance” no será necesario incluir el atributo “thread”. Si dicha técnica se estuviese aplicando para una BBDD en RAC se estableciera el parámetro “thread” para definir la asociación del grupo de Redo Log con el correspondiente “thread” ( thread=1/thread=2, etc )
Adición de Grupos de Redo Logs 4 y 5:
SQL> ALTER DATABASEBorrado del grupo de Redo Log 1:
  2  ADD LOGFILE GROUP 4 ('+DATA/source/ONLINELOG/redo04.log') SIZE 50M;

Database altered.

SQL> ALTER DATABASE
  2  ADD LOGFILE GROUP 5 ('+DATA/source/ONLINELOG/redo05.log') SIZE 50M;

Database altered.

Visualización de grupos de Redo Logs después de la adiciones:
SQL> select GROUP#, MEMBER from V$LOGFILE

    GROUP# MEMBER
---------- --------------------------------------------------
         3 /home/oracle/SOURCE/redo03.log
         2 /home/oracle/SOURCE/redo02.log
         1 /home/oracle/SOURCE/redo01.log
         4 +DATA/source/onlinelog/redo04.log
         5 +DATA/source/onlinelog/redo05.log

SQL>

Borrado del grupo de Redo Log 1:
SQL> alter database drop logfile group 1; 

Borrado del grupo de Redo Log 2. El mismo no puede ser removido aun debido a que la operación de redo log group para la BBDD se encuentra apuntando al mismo.
 
Database altered.
SQL> alter database drop logfile group 2;
alter database drop logfile group 2
*
ERROR at line 1:
ORA-01623: log 2 is current log for instance SOURCE (thread 1) - cannot drop
ORA-00312: online log 2 thread 1: '/home/oracle/SOURCE/redo02.log'

Borrado del grupo de Redo Log 3:
 
SQL> alter database drop logfile group 3;

Database altered.

SQL>

Visualización de grupos de Redo Logs posterior a las remociones:
 
SQL> select GROUP#, MEMBER from V$LOGFILE;

    GROUP# MEMBER
---------- --------------------------------------------------
         2 /home/oracle/SOURCE/redo02.log
         4 +DATA/source/onlinelog/redo04.log
         5 +DATA/source/onlinelog/redo05.log

SQL>

Estatus de los mismos. Tal como podemos visualizar. El grupo de redo log 1 se encuentra en “status”:current, con dicho estatus no podrá ser removido. Tenemos que aplicar diversos “switch logfile” para que el mismo se establezca en “status”:inactive y pueda ser removido ( esto aplica si la BBDD se encuentra abierta ), si la BBDD esta cerrada solo bastara que el grupo de redo log “current” sea el 4 o 5:
 
SQL> select GROUP#, STATUS, ARCHIVED from v$log;

    GROUP# STATUS           ARC
---------- ---------------- ---
         2 CURRENT          NO
         4 UNUSED           YES
         5 UNUSED           YES

SQL>

Realizaremos los “switchs” correspondientes:
 
SQL> alter system switch logfile;

System altered.

SQL> select GROUP#, STATUS, ARCHIVED from v$log;

    GROUP# STATUS           ARC
---------- ---------------- ---
         2 ACTIVE           NO
         4 CURRENT          NO
         5 UNUSED           YES


SQL> alter system switch logfile;

System altered.

SQL> select GROUP#, STATUS, ARCHIVED from v$log;

    GROUP# STATUS           ARC
---------- ---------------- ---
         2 ACTIVE           NO
         4 ACTIVE           NO
         5 CURRENT          NO

Tal cual fue el objetivo, el grupo de Redo log “current” actual es el 5. Podríamos haber escogido el 4 también. Lo importante es que no fuese el grupo de redo log 2, debido a que removeremos el mismo. Procederemos a cerrar la BBDD, establecimiento en modo “mount” de la misma y la remoción final del grupo de Redo Log 2:
 
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area  680607744 bytes
Fixed Size                  2162800 bytes
Variable Size             188747664 bytes
Database Buffers          486539264 bytes
Redo Buffers                3158016 bytes
Database mounted.
SQL>

SQL> alter database drop logfile group 2;

Database altered.

SQL> select GROUP#, STATUS, ARCHIVED from v$log;

    GROUP# STATUS           ARC
---------- ---------------- ---
         5 CURRENT          NO
         4 INACTIVE         NO

SQL>

SQL> alter database open;

Database altered.

SQL> alter system switch logfile;

System altered.

SQL> r
  1* alter system switch logfile

System altered.

SQL> r
  1* alter system switch logfile

System altered.

En este punto ya llevamos a cabo el objetivo de establecer operativamente solo grupos de Redo Logs en ASM:
 
SQL> select GROUP#, STATUS, ARCHIVED from v$log;

    GROUP# STATUS           ARC
---------- ---------------- ---
         4 CURRENT          NO
         5 INACTIVE         NO

SQL>

Visualizando Datafiles & Controlfile en ASM
Resumen del trabajo realizado hasta el momento:
SQL> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
+DATA/source/datafile/users.270.789851943
+DATA/source/datafile/undotbs1.268.789851939
+DATA/source/datafile/sysaux.264.789851925
+DATA/source/datafile/system.263.789851909

SQL>
SQL> show parameters control_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      +DATA/source/controlfiles/cont
                                                 rol01.ctl
SQL>
 
Trabajo sobre Tempfiles
Nuestra BBDD posee en este momento su “Temporary Tablespace” temp con datafile en filesystem. El objetivo es establecer el mismo en ASM. Para ellos realizaremos lo siguiente:
 
SQL> select file_name from dba_temp_files;

FILE_NAME
--------------------------------------------------------------------------------
/home/oracle/SOURCE/temp01.dbf

SQL>

Creación de Tablespace temporal nuevo “temp_tbsp”:
SQL> create temporary tablespace temp_tbsp 2 tempfile '+DATA' size 100m;
Establecimiento del Tablespace temporal “temp_tbsp” como tablespace por defecto de la BBDD:
 
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp_tbsp;

Database altered.

Remoción del Tablespace temporal “temp”:
 
SQL> drop tablespace temp including contents and datafiles;

Tablespace dropped.

Objetivo alcanzado, poseer un nuevo tablespace temporal con almacenamiento en ASM:
 
SQL> select file_name from dba_temp_files;

FILE_NAME
--------------------------------------------------------------------------------
+DATA/source/tempfile/temp_tbsp.275.789854493

SQL>

Cambio de la ruta para el Flash Recovery Area
Establecer la ruta de del Flash Recovery Area a un Diskgroup destinado para almacenar: Backups, Archive Redo Logs, y demás componentes y elementos de la BBDD.
 
SQL> show parameter db_create_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string      +FRA

Choosing a Location for the Flash Recovery Area
Oracle® Database Backup and Recovery Basics
10g Release 2 (10.2)

http://docs.oracle.com/cd/B19306_01/backup.102/b14192/setup005.htm
Establecimiento de spfile en ASM Diskgroup
[oracle@MyjpServer ~]$ rman target /

Recovery Manager: Release 11.1.0.7.0 - Production on Sun Aug 5 23:56:07 2012

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

connected to target database: SOURCE (DBID=2908920228)


RMAN> run { BACKUP AS BACKUPSET SPFILE;
2> RESTORE SPFILE TO '+DATA/SOURCE/spfilesource.ora';
3> }

Starting backup at 05-08-2012 23:57:45
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=140 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 05-08-2012 23:57:46
channel ORA_DISK_1: finished piece 1 at 05-08-2012 23:57:47
piece handle=+FRA/SOURCE/backupset/2012_08_05/o1_mf_nnsnf_TAG20120805T235746_81yq6tkl_.bkp 
tag=TAG20120805T235746 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 05-08-2012 23:57:47

Starting restore at 05-08-2012 23:57:47
using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: restoring SPFILE
output file name=+DATA/SOURCE/spfilesource.ora
channel ORA_DISK_1: reading from backup piece +FRA/SOURCE/backupset/2012_08_05/
o1_mf_nnsnf_TAG20120805T235746_81yq6tkl_.bkp
channel ORA_DISK_1: piece handle=+FRA/SOURCE/backupset/2012_08_05/
o1_mf_nnsnf_TAG20120805T235746_81yq6tkl_.bkp tag=TAG20120805T235746
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
Finished restore at 05-08-2012 23:57:50

RMAN>

Visualización de spfile generado en ASM Diskgroup
 
[oracle@MyjpServer ~]$ . oraenv
ORACLE_SID = [TEST] ? +ASM
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.1.0/asm1 is /u01/app/    oracle
[oracle@MyjpServer ~]$
[oracle@MyjpServer ~]$ asmcmd
ASMCMD>
ASMCMD> cd data
ASMCMD>
ASMCMD> cd source
ASMCMD>
ASMCMD> ls -lt
Type  Redund  Striped  Time  Sys  Name
                             N    ONLINELOG/
                             N    CONTROLFILES/
                             Y    CONTROLFILE/
                             N    spfilesource.ora => +DATA/     DB_UNKNOWN/PARAMETERFILE/
                                                                  SPFILE.261.790559869

ASMCMD>

Ajuste de archivo initsource.ora
 
[oracle@MyjpServer ~]$ rm $ORACLE_HOME/dbs/spfileSOURCE.ora
[oracle@MyjpServer ~]$ cd $ORACLE_HOME/dbs/
[oracle@MyjpServer ~]$ echo "SPFILE=+DATA/SOURCE/PARAMETERFILE/spfilesource.ora" > 
initsource.ora

De esta manara la instancia tomara como primera opción el “Parameter File” de nuestra BBDD, el cual apunta internamente al spfile que se encuentra en ASM.
“No Zero Downtime”
El presente artículo lleva a cabo el traslado de una BBDD de filesystem a ASM. Los pasos son estándar para bases de datos de cualquier tamaño. La técnica poseerá en no disponibilidad la BBDD mientras se apliquen lo procedimientos; mientras mayor sea la capacidad de la misma, mayor será el tiempo de “Downtime” para la tarea, es por ello que al mismo lo hemos denominado, un traslado con filosofía “No Zero Downtime”, para el próximo articulo llevaremos a cabo la misma tarea pero con técnicas para satisfacer un traslado con proposito “Zero Downtime”.
Aplicaciones y uso
Las técnicas para trasladar y/o alojar elementos de una base de datos en filesystem a ASM son llevados a cabo en situaciones como las siguientes:
  • Traslado de BBDD “Single Instance” de filesystem a BBDD “Single Instance” en ASM
  • Traslado de BBDD “Single Instance” de filesystem a BBDD “RAC” en ASM/OCFS/Certified NFS
  • Poseer una copia de BBDD en ASM o locación diversa para recuperaciones rápidas de datafiles
  • Poseer una copia de BBDD en ASM o locación diversa para recuperaciones rápidas de la BBDD completa
  • Y muchos otros casos mas