miércoles, 3 de marzo de 2021

Oracle 21c - Usando Expresiones en Parámetros de Inicialización

En el artículo "¿Qué hay de nuevo en Oracle 21c?" publicado en diciembre del año pasado, mencionamos algunas de las mejoras y nuevas características de Oracle 21. En este y en próximos artículos vamos a ver en detalle lo que Oracle 21c trae de nuevo, comenzando con la posibilidad de usar expresiones en la definición de los parámetros de inicialización (ya sea en initXXX.ora o SPFile).


Usando Variables de Entorno en Parámetros de Inicialización

Esta posibilidad nos permite usar variables definidas a nivel de entorno (sistema operativo) en parámetros. Esto nos permite independizarnos, por ejemplo, de la ubicación de archivos.

En el ejemplo siguiente, vamos a configurar el parámetro "db_recovery_file_dest" para que use el valor de la variable de entorno "RECO" en un entorno Linux

SQL> ALTER SYSTEM SET db_recovery_file_dest='$RECO' SCOPE=BOTH;

System altered.

SQL> SHOW PARAMETER db_recovery_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------------------------
db_recovery_file_dest                string      $RECO
db_recovery_file_dest_size           big integer 250G

Luego, vamos a verificar como se guarda efectivamente el valor. Para ello crearemos un archivo pfile a partir del spfile que acabamos de modificar, y luego vamos a buscar en el mismo la linea que contenga el tecto "db_recovery_file_dest"

SQL> create pfile='/tmp/pfile.txt' from spfile;

File created.

SQL> host fgrep db_recovery_file_dest /tmp/pfile.txt
*.db_recovery_file_dest='$RECO'
SQL>

Es importante asegurarnos que la variable de entorno esté configurada al momento de iniciar la instancia, de lo contrario obtendremos un error "ORA-07217: sltln: environment variable cannot be evaluated". Los cambios que se hagan a la variable de entorno con posterioridad al inicio de la instancia no son tenidos en cuenta por la misma.

Usando otros Parámetros en Parámetros de Inicialización

Esta opción nos permite definir el valor de un parámetro basándonos en el valor de otro parámetro ya definido. Si consultamos el valore de los parámetros que incluyen la palabra PROCESSES, veremos lo siguiente:

SQL> show parameter processes

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     1
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     40
log_archive_max_processes            integer     4
processes                            integer     600
SQL>

A continuación, vamos a definir que queremos que el valor de "log_archive_max_processes" sea el 10% del valor de PROCESSES (sólo a modo de ejemplo). Para ello, vamos a usar la siguiente sintaxis:

SQL> alter system set log_archive_max_processes='processes/10';

System altered.

SQL>
Si consultamos nuevamente el valor del parámetro, veremos que el mismo ahora esta configurado en 60 (10% de 600):

SQL> show parameter log_archive_max_processes

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_max_processes            integer     60
SQL>
Y podemos validar también como queda "guardado" en el archivo de configuración (veremos que se guarda la "formula" y no el valor resultante de la misma):

SQL> create pfile='/tmp/pfile.txt' from spfile;

File created.

SQL> host fgrep log_archive_max_processes /tmp/pfile.txt
*.log_archive_max_processes=processes/10
SQL>
Por lo que podemos deducir que cualquier cambio que aplicamos al valor del parámetro PROCESSES automáticamente afectará a todos los parámetros definidos en base al mismo, sin necesidad de tener que modificarlos en forma individual.

Consideraciones generales

Estas son algunas consideraciones adicionales cuando usamos expresiones en parámetros de inicialización:

  • Las expresiones deben estar dentro de comillas simples al momento de usarlas en una sentencia ALTER SYSTEM or ALTER SESSION.
  • Las expresiones pueden ser usadas tanto en archivos de tipo PFile (parámetros estáticos) como en archivos de parámetros dinámicos de tipo SPFile.
  • Se pueden usar dos funciones adicionales, MAX y MIN, que permiten elegir el valor mayor o menor (según el caso) entre dos valores. Esto es útil cuando debemos fijar un valor mínimo. Por ejemplo, la expression MIN(40,PROCESSES) devolverá 40 cuando el parámetro PROCESSES es mayor a 40, o el valor de PROCESSES cuando sea menor a 40.

Para mas ejemplos y practica, podemos consultar el artículo "Practice: Using Expressions in Initialization Parameters" en la documentación de Oracle 21, en la sección "Learning Database New Features".

No hay comentarios.:

Publicar un comentario