You are hereBlogues / alberto's blog / Conversión de BD RAC 11gR2 de policy-managed a admin-managed

Conversión de BD RAC 11gR2 de policy-managed a admin-managed


Por: alberto - Publicado o: 24 May 2012

Oracle introduciu na versión 11gR2 da solución RAC a posibilidade de administrar dinamicamente os nodos nos que as instancias das BDs poden estar a executarse. Até esta versión, á hora de crear unha BD RAC só era posible especificar os servidores sobre os que se creará unha instancia. Con 11gR2 é posible indicar unha cardinalidade de instancias e asociar a BD ó que se denomina un pool de servidores. Os pools de servidores son entidades dinámicas e en función da parametrización do pool e da dispoñibilidade dos servidores no clúster, un determinado servidor pertencerá a un pool ou a outro. Así, unha instancia de BD pode arrincar en diferentes nodos. Este comportamento, deseñado para un contorno complexo de múltiples nodos, pode verificarse nun RAC simple de dous nodos.
No noso exemplo, temos creada unha base de datos RAC administrada por políticas que está asignada a un pool de servidores. O pool de servidores chámase oracle e está composto polos dous nodos no que está instalada a Grid Infrastructure co que é o único pool creado (aparte dos pools predefinidos Generic e Free):

[oracle@oracle2 ~]$ crsctl status srvpool
NAME=Free
ACTIVE_SERVERS=

NAME=Generic
ACTIVE_SERVERS=

NAME=ora.oracle
ACTIVE_SERVERS=oracle1 oracle2

Vemos que a nosa BD está administrada por políticas e que o pool de servidores ó que está asignada é o pool oracle, composto polos nodos oracle1 e oracle2.

[oracle@oracle1 ~]$ srvctl config database -d acc
Database unique name: acc
Database name:
Oracle home: /u01/app/oracle/product/11.2.0/dbhome_1
Oracle user: oracle
Spfile: +DATA/acc/spfileacc.ora
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: oracle
Database instances:
Disk Groups: DATA
Services: acc
Database is policy managed

No noso caso, o pool ten un tamaño máximo de dous nodos, que é o número total de servidores que forman parte do clúster.

[oracle@oracle2 ~]$ crsctl status srvpool ora.oracle -f
NAME=ora.oracle
IMPORTANCE=0
MIN_SIZE=0
MAX_SIZE=2
SERVER_NAMES=
PARENT_POOLS=
EXCLUSIVE_POOLS=
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTIVE_SERVERS=oracle1 oracle2

De feito, á diferencia dunha BD xestionada polo administrador, non existen instancias asociadas ás BDs, é dicir as instancias en si son dinámicas e dependentes da cardinalidade do pool ó que está asociada a BD. Por defecto, Oracle emprega un identificador numérico co número da instancia. Se arrincamos sen mais, vemos que as instancias creadas son acc_1 en oracle1 e acc_2 en oracle2.

[oracle@oracle1 ~]$ ps -ef | grep pmon_acc
oracle   15063     1  0 14:21 ?        00:00:00 ora_pmon_acc_1
[oracle@oracle1 ~]$ ssh oracle2 "ps -ef | grep pmon_acc"
oracle   17035     1  0 14:21 ?        00:00:00 ora_pmon_acc_2 

Pero a instancia acc_1 ben podería arrincar en oracle2 ou incluso empregar un nome diferente se arrincamos unha instancia manualmente:

[oracle@oracle1 ~]$ srvctl start instance -d acc -n oracle1 -i oracle_2
[oracle@oracle1 ~]$ ps -ef | grep pmon_oracle_2
oracle   19864     1  0 14:25 ?        00:00:00 ora_pmon_oracle_2

E vemos que efectivamente existe unha instancia arrincada no nodo oracle1 cuxo nome é o de menos de cara a ofrecer un servizo xa que o SID a día de hoxe é unha propiedade que adquire un carácter meramente privado, xa que os accesos vía servizos de clúster resultan moito mais potentes e flexibles.

[oracle@oracle2 ~]$ crsctl stat res ora.acc.db -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.acc.db
      1        ONLINE  ONLINE       oracle1                  Open                
      2        OFFLINE OFFLINE                               Instance Shutdown   

Unha característica dunha instalación RAC 11gR2 é que non poden convivir nos mesmos nodos bases de datos xestionadas por políticas e bases de datos xestionadas polo administrador.  Do documento Oracle® Real Application Clusters Administration and Deployment Guide 11g Release 2 (11.2):

Using the Same Cluster for Administrator-Managed and Policy-Managed Databases
If you want to create an administrator-managed database on a cluster that already
hosts policy-managed databases, then you must carefully select the nodes for the
administrator-managed database. This is because the nodes that you select for an
administrator-managed database that are in policy-managed server pools will be
moved into the Generic server pool as part of this process.
If you select nodes that already run other policy-managed database instances, then
DBCA prompts you with a message that lists the instances and services that will be
shut down when DBCA creates the administrator-managed database. If you select the
Yes button on the dialog box when DBCA asks "Do you want to continue?," then your
policy-managed database instances and services will be shut down as a result of the
administrator-managed database creation process.

Neste mesmo documento, se amosa un procedemento para transformar unha BD admin-managed nunha BD policy-managed e se indica que non é posible facer unha conversión directa de policy-managed a admin-managed, e resulta preciso eliminar no clúster a BD para posteriormente engadila de novo. Imos a facer esta operación coa nosa BD.
A nivel de clúster temos creada unha BD RAC asignada a un pool con dous nodos (polo tanto unha BD con dúas instancias), e un servizo de clúster. Este servizo no noso caso é un servizo que emprega as opcións por defecto, pero debemos ter en conta a súa configuración para establecer as mesmas opcións cando o recreemos xa que será eliminado ó desrexistrar a BD. Para ver a súa configuración empregamos o comando srvctl:

[oracle@oracle1 ~]$ srvctl config service -d acc -s acc
Service name: acc
Service is enabled
Server pool: oracle
Cardinality: UNIFORM
Disconnect: false
Service role: PRIMARY
Management policy: AUTOMATIC
DTP transaction: false
AQ HA notifications: false
Failover type: NONE
Failover method: NONE
TAF failover retries: 0
TAF failover delay: 0
Connection Load Balancing Goal: LONG
Runtime Load Balancing Goal: NONE
TAF policy specification: NONE
Service is enabled on nodes:
Service is disabled on nodes: 

Comezamos parando a BD, paso imprescindible para eliminala da configuración do clúster.

[oracle@oracle1 ~]$ srvctl stop database -d acc 

Como resultado os recursos de clúster asociados á BD acc están parados:

ora.acc.acc.svc
      1        OFFLINE OFFLINE
ora.acc.db
      1        OFFLINE OFFLINE                Instance Shutdown
      2        OFFLINE OFFLINE                Instance Shutdown

Agora eliminamos a súa configuración co comando srvctl remove. Este comando modifica información no OCR de Clusterware e non ten impacto sobre a BD nin sobre os seus datos.

[oracle@oracle1 ~]$ srvctl remove database -d acc
Remove the database acc? (y/[n]) y 

Podemos comprobar que os recursos que anteriormente viamos parados agora xa non existen:

[oracle@oracle1 ~]$ crsctl stat res -t | grep -i acc
[oracle@oracle1 ~]$

Damos de alta a BD con xestión polo administrador. No comando especificamos o nome da BD, o ORACLE_HOME dende a que se arrinca, a ruta ó ficheiro spfile , os modos de startup e shutdown, se a BD é devolta ó seu estado anterior en caso de reinicio do servidor, e a lista de grupos de disco ASM ós que ten acceso. Non é obrigatorio o uso de tódolos parámetros xa que existen nalgúns casos valores por defecto. Tamén existen outras opcións adicionais de configuración que poden consultarse na sección “SRVCTL Command Reference” do documento “Oracle Clusterware and Oracle Real Application Cluesters Administration and Deployment Guide”.

[oracle@oracle1 ~]$ srvctl add database -d acc -o /u01/app/oracle/product/11.2.0/dbhome_1 -p +DATA/acc/spfileacc.ora -s open -t immediate -y AUTOMATIC -a DATA 

Se agora tentamos arrincar a BD, obteremos un erro:

[oracle@oracle1 ~]$ srvctl start database -d acc

Database acc cannot be started since it has no configured instances.

Xa non estamos ante unha BD xestionada por políticas onde non precisamos definir instancias xa que estas son xestionadas polo clúster de xeito automático. Unha BD xestionada polo administrador precisa configurar instancias concretas asociadas a servidores específicos que serán o único emprazamento onde poidan executarse. Así:

[oracle@oracle1 ~]$ srvctl add instance -d acc -i acc_1 -n oracle1
[oracle@oracle1 ~]$ srvctl add instance -d acc -i acc_2 -n oracle2

No exemplo empregamos a mesma nomenclatura que Oracle utiliza para nomear as instancias de xeito que reutilizamos as estruturas de log creadas na ADR, conservando por exemplo os mesmos ficheiro de alert que tiñamos previamente.
Engadimos o servizo que existía previamente e o asociamos ás dúas instancias como PREFERRED o que implica que dito servizo será atendido polas dúas.

[oracle@oracle1 ~]$ srvctl add service -d acc -s acc -r acc_1,acc_2 

Arrincamos de novo a BD. Non houbo ningún cambio sobre a mesma e incluso cos pasos seguidos os nomes das instancias son os mesmos que anteriormente tiñamos.

[oracle@oracle1 ~]$ srvctl start database -d acc 

Na saída co comando crsctl stat res -t vemos que os recursos están configurados e ONLINE.

ora.acc.acc.svc
      1        ONLINE  ONLINE       oracle2
      2        ONLINE  ONLINE       oracle1
ora.acc.db
      1        ONLINE  ONLINE       oracle1                  Open
      2        ONLINE  ONLINE       oracle2                  Open
Share this

Enviar un comentario novo

O contido deste campo é privado e non se amosará publicamente.
  • As direccións das páxinas web e as direccións de correo se convirten en enlaces automáticamente.
  • Tags HTML permitidos: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Os saltos de liña e párrafo créanse automaticamente.

Máis información acerca das opcións de formato

Image CAPTCHA
Escriba os caracteres que se amosan na imaxe.