Cómo Cambiar el Parámetro de Procesos en Oracle 19c RAC

En este post te voy a mostrar cómo cambiar el parámetro procesos en una base de datos Oracle RAC.

Puedes utilizar este mismo método para cualquier parámetro RAC que requiera que las instancias se reinicien para que el cambio tenga efecto.

En una situación ideal, sólo modificarías los parámetros del sistema y luego pararías y arrancarías cada instancia.

Pero esto no funcionó como esperaba porque algunos servicios sólo estaban disponibles en un nodo y no en el otro, así que tuve que reubicarlos y volver a intentarlo.

Te mostraré todos los detalles en este post.

Puedes comprobar los límites actuales del proceso Oracle con esta consulta

SELECT INST_ID, RESOURCE_NAME, CURRENT_UTILIZATION, MAX_UTILIZATION, LIMIT_VALUE
FROM GV$RESOURCE_LIMIT
WHERE RESOURCE_NAME IN ( 'sessions', 'processes');

   INST_ID RESOURCE_NAME                  CURRENT_UTILIZATION MAX_UTILIZATION LIMIT_VALU
---------- ------------------------------ ------------------- --------------- ----------
         1 processes                                      120             250        700
         1 sessions                                       128             255       1074
         3 processes                                      699             700        700
         3 sessions                                       708             711       1074

Primero conecto y compruebo los valores actuales.

set lines 200
column NAME format a40
column VALUE format a50

select INST_ID,NAME,VALUE from gv$parameter
where NAME in ('processes','sessions')
order by 2,1;

Una vez que tenga los valores, quiero cambiar el parámetro procesos a 1500.

sqlplus / as sysdba

alter system set processes=1500 scope=spfile sid='*';

Así que ahora lo ideal sería tener que parar y reiniciar cada una de las 2 instancias RAC.

[oracle@node1:XI002PRO1 ~]$ srvctl stop instance -d XI002PRO -i XI002PRO1
PRCD-1315 : failed to stop instances for database XI002PRO
PRCR-1014 : Failed to stop resource ora.xi002pro.db
PRCR-1065 : Failed to stop resource ora.xi002pro.db
CRS-2974: unable to act on resource 'ora.xi002pro.db' on server 'node1' because that would require stopping or relocating resource 'ora.xi002pro.xi002pro_bkup1.svc' but the appropriate force flag was not specified

Así que comprobé todos los servicios de esa base de datos.

[oracle@node1:XI002PRO1 ~]$ srvctl status service -d XI002PRO
Service XI002PROPLUGSVC is running on instance(s) XI002PRO1
Service xi002pro_bkup1 is running on instance(s) XI002PRO1
Service xi002pro_bkup2 is running on instance(s) XI002PRO3
Service XI002PROSVC is running on instance(s) XI002PRO1

Se quejaba del servicio xi002pro_bkup1.

Intenté trasladar todos los servicios al nodo 3.

[oracle@node1:XI002PRO1 ~]$ srvctl relocate service -db XI002PRO -service XI002PROPLUGSVC -oldinst XI002PRO1 -newinst XI002PRO3
[oracle@node1:XI002PRO1 ~]$ srvctl relocate service -db XI002PRO -service xi002pro_bkup1 -oldinst XI002PRO1 -newinst XI002PRO3
[oracle@node1:XI002PRO1 ~]$ srvctl relocate service -db XI002PRO -service XI002PROSVC -oldinst XI002PRO1 -newinst XI002PRO3

Y luego volví a intentarlo

[oracle@node1:XI002PRO1 ~]$ srvctl stop instance -d XI002PRO -i XI002PRO1
[oracle@node1:XI002PRO1 ~]$ srvctl start instance -d XI002PRO -i XI002PRO1

Esta vez funcionó.

Ahora necesito reubicar los servicios de nuevo en el nodo 1.

[oracle@node1:XI002PRO1 ~]$ srvctl relocate service -db XI002PRO -service XI002PROPLUGSVC -oldinst XI002PRO3 -newinst XI002PRO1
[oracle@node1:XI002PRO1 ~]$ srvctl relocate service -db XI002PRO -service xi002pro_bkup1 -oldinst XI002PRO3 -newinst XI002PRO1
[oracle@node1:XI002PRO1 ~]$ srvctl relocate service -db XI002PRO -service XI002PROSVC -oldinst XI002PRO3 -newinst XI002PRO1

Todavía hay un servicio que estaba en el nodo 3 y que tengo que mover al nodo 1 para iniciar y detener la instancia.

Pero tuve a otro problema.

[oracle@node1:XI002PRO1 ~]$ srvctl relocate service -db XI002PRO -service xi002pro_bkup2 -oldinst XI002PRO3 -newinst XI002PRO1
PRCR-1106 : Failed to relocate resource ora.xi002pro.xi002pro_bkup2.svc from node xfpcon01db03 to node node1
PRCR-1089 : Failed to relocate resource ora.xi002pro.xi002pro_bkup2.svc.
CRS-2717: Server 'node1' is not in any of the server pool(s) hosting resource 'ora.xi002pro.xi002pro_bkup2.svc'

El problema es que este servicio xi002pro_bkup2 sólo tiene preferencia en el nodo 3 y ni siquiera está disponible en el nodo 1, como puedes ver con esto.

[oracle@node1:XI002PRO1 ~]$ srvctl config service -db XI002PRO -service xi002pro_bkup2
Service name: xi002pro_bkup2
Server pool:
Cardinality: 1
Disconnect: false
Service role: PRIMARY
Management policy: AUTOMATIC
DTP transaction: false
AQ HA notifications: false
Global: false
Commit Outcome: false
Failover type:
Failover method:
TAF failover retries:
TAF failover delay:
Connection Load Balancing Goal: LONG
Runtime Load Balancing Goal: NONE
TAF policy specification: NONE
Edition:
Pluggable database name:
Maximum lag time: ANY
SQL Translation Profile:
Retention: 86400 seconds
Replay Initiation Time: 300 seconds
Session State Consistency:
GSM Flags: 0
Service is enabled
Preferred instances: XI002PRO3
Available instances:

Así que añadí este servicio como disponible en el nodo 1 y preferido en el nodo 3 y volví a comprobarlo.

[oracle@node1:XI002PRO1 ~]$ srvctl modify service -db XI002PRO -service xi002pro_bkup2 -modifyconfig -preferred XI002PRO3 -available XI002PRO1
[oracle@node1:XI002PRO1 ~]$ srvctl config service -db XI002PRO -service xi002pro_bkup2                                              
Service name: xi002pro_bkup2
Server pool:
Cardinality: 1
Disconnect: false
Service role: PRIMARY
Management policy: AUTOMATIC
DTP transaction: false
AQ HA notifications: false
Global: false
Commit Outcome: false
Failover type:
Failover method:
TAF failover retries:
TAF failover delay:
Connection Load Balancing Goal: LONG
Runtime Load Balancing Goal: NONE
TAF policy specification: NONE
Edition:
Pluggable database name:
Maximum lag time: ANY
SQL Translation Profile:
Retention: 86400 seconds
Replay Initiation Time: 300 seconds
Session State Consistency:
GSM Flags: 0
Service is enabled
Preferred instances: XI002PRO3
Available instances: XI002PRO1

Como se muestra arriba, ahora el servicio es preferente en el nodo 3 y está disponible en el nodo 1.

Así que ahora puedo trasladar el servicio al nodo 1.

[oracle@node1:XI002PRO1 ~]$ srvctl relocate service -db XI002PRO -service xi002pro_bkup2 -oldinst XI002PRO3 -newinst XI002PRO1

Y luego puedo parar e iniciar la instancia en el nodo 3.

[oracle@node1:XI002PRO1 ~]$ srvctl stop instance -d XI002PRO -i XI002PRO3
[oracle@node1:XI002PRO1 ~]$ srvctl start instance -d XI002PRO -i XI002PRO3

Ahora vuelvo a trasladar el servicio al nodo 3.

[oracle@node1:XI002PRO1 ~]$ srvctl relocate service -db XI002PRO -service xi002pro_bkup2 -oldinst XI002PRO1 -newinst XI002PRO3

Y compruebo de nuevo los servicios cómo están distribuidos en cada nodo para ver si vuelven a estar como los tenía al principio.

[oracle@node1:XI002PRO1 ~]$ srvctl status service -d XI002PRO
Service XI002PROPLUGSVC is running on instance(s) XI002PRO1
Service xi002pro_bkup1 is running on instance(s) XI002PRO1
Service xi002pro_bkup2 is running on instance(s) XI002PRO3
Service XI002PROSVC is running on instance(s) XI002PRO1

Ahora valido que se ha aplicado el cambio en el parámetro procesos.

sqlplus / as sysdba

set lines 200
column NAME format a40
column VALUE format a50

select INST_ID,NAME,VALUE from gv$parameter
where NAME in ('processes','sessions')
order by 2,1;

   INST_ID NAME                                     VALUE
---------- ---------------------------------------- --------------------------------------------------
         1 processes                                1500
         3 processes                                1500
         1 sessions                                 2272
         3 sessions                                 2272

Así que todo parece ir bien.

Por supuesto, si haces una preparación antes de realizar la parada y arranque de cada instancia, podrías haber evitado todo esto durante la intervención.

Espero que te haya sido útil.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *