martes, 19 de noviembre de 2019

Cómo resetear un parámetro de la base de datos


En el caso en que queramos resetear o reiniciar el valor de un parámetro de la base de datos Oracle para que vuelva al defecto que tenía antes de ser modificado se pueden realizar las siguientes acciones:

- Si la base de datos funciona con un SPILE, se ejecuta la siguiente sentencia desde SQL*Plus:

ALTER SYSTEM RESET nombreparametro SCOPE=SPFILE;

Y al reiniciar la base de datos el valor será reiniciado a un defecto.

- Si la base de datos se inicio con un PFILE, solamente es necesario eliminar la línea del parámetro en el archivo (normalmente ubicado en $ORACLE_HOME/dbs en linux o $ORACLE_HOME/database en Windows, con el nombre initSID.ora) y reiniciar la instancia. Al no encontrar la especificación del parámetro le asigna un valor por defecto.


Extra: ¿Cómo sé si mi base de datos funciona con SPFILE o PFILE?

Ejecutar el comando "show parameter spfile" desde SQL*Plus, si nos trae resultados, confirmamos que está funcionando con un SPFILE.

viernes, 8 de noviembre de 2019

Extender el campo VARCHAR2 de 4000 a 32767 carácteres


A continuación describiré la manera básica para extender el tipo de datos varchar2 del límite de 4000 caracteres a 32767. Este método es válido al momento de escribir esto para las versiones 12.1.0.2, 12.2 y 18c

¡IMPORTANTE! tener en cuenta que este proceso es irreversible en la base de datos donde se ejecuta.

Los procedimientos a explicar serán de los dos siguientes casos:

- Para Non-CDB (O como se solían llamar en 11g, bases de datos normales)
- Para CDB o Multitenant  (Bases de datos contenedoras con PDB o de conexión en su interior)

PARA BASES DE DATOS NON-CDB O TRADICIONALES

0) Ingresar como SYSDBA (Todo el proceso debe realizarse así y conectado desde el servidor de BD)

$ sqlplus / as sysdba

1) Apagar la base de datos

SQL> Shutdown immediate

2) Encenderla en modo UPGRADE

SQL> Startup upgrade

3) Cambiar el parámetro MAX_STRING_SIZE a EXTENDED

SQL> Alter system set MAX_STRING_SIZE=EXTENDED;

4) Ejecutar el script utl32k.sql

SQL> @$ORACLE_HOME/rdbms/admin/utl32k.sql

5) Después de la ejecución exitosa del anterior script, reiniciar la base de datos de manera normal

SQL> shutdown immediate
SQL> startup

6) Ejecutar el script utlrp.sql para recompilar la base de datos entera

SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql


PARA BASES DE DATOS MULTITENANT (CDB y PDB)

Este proceso afecta a la base de datos CDB  y todas sus PDB activas, si se quiere realizar el proceso sobre solo una PDB se deben realizar los pasos anteriores conectado directamente a la PDB deseada.


0) Ingresar como SYSDBA (Todo el proceso debe realizarse así y conectado desde el servidor de BD)

$ sqlplus / as sysdba

1) En la CDB cambiar el parámetro MAX_STRING_SIZE a EXTENDED

SQL> ALTER SESSION SET CONTAINER=CDB$ROOT; -- si se está conectado a una de las PDB, sino no es necesario

SQL> ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED SCOPE=SPFILE;

2) Reiniciar la base de datos en modo UPGRADE

SQL> shutdown immediate

SQL> startup upgrade

3) Abrir todas las PDB en modo UPGRADE

SQL> alter pluggable database all open upgrade;
SQL> exit

4) En la terminal de comandos ejecutar el script utl32k a través del catcon.pl para que se ejecute en toda la instancia, se debe ingresar la clave del SYS cuando se requiera. Tener en cuenta que este proceso genera unos archivos de logs en una ruta que se debe especificar en el llamado al catcon.pl, por lo tanto esta ruta debe existir en el sistema operativo.

La sintaxis del comando es:
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u SYS -d $ORACLE_HOME/rdbms/admin -l '[rutaDeSalidaDeLosLogs]' -b utl32k_cdb_pdbs_output utl32k.sql

Ejemplo de ejecución:
$ mkdir /home/oracle/utl32k_cdb_pdbs_output
$ $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u SYS -d $ORACLE_HOME/rdbms/admin -l '/home/oracle/utl32k_cdb_pdbs_output' -b utl32k_cdb_pdbs_output utl32k.sql
catcon: ALL catcon-related output will be written to [/home/oracle/utl32k_cdb_pdbs_output/utl32k_cdb_pdbs_output_catcon_23172.lst]
catcon: See [/home/oracle/utl32k_cdb_pdbs_output/utl32k_cdb_pdbs_output*.log] files for output generated by scripts
catcon: See [/home/oracle/utl32k_cdb_pdbs_output/utl32k_cdb_pdbs_output_*.lst] files for spool files, if any
Enter Password: 
catcon.pl: completed successfully

5) Conectarse a la CDB nuevamente y reiniciar la base de datos en modo normal.

$ sqlplus / as sysdba

SQL> shutdown immediate
SQL> startup

6) Iniciar todas las PDBS en modo normal

SQL> alter pluggable database all open;
SQL> exit

7) En la terminal de comandos, ejecutar el utlrp.sql a través del catcon.pl, nuevamente tener en cuenta el directorio de salida y la clave de SYS.

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u SYS -d $ORACLE_HOME/rdbms/admin -l '[rutaDeSalidaDeLosLogs]' -b utlrp_cdb_pdbs_output utlrp.sql

Ejemplo de ejecución:
$ mkdir /home/oracle/utlrp_cdb_pdbs_output
$ $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u SYS -d $ORACLE_HOME/rdbms/admin -l '/home/oracle/utlrp_cdb_pdbs_output' -b utlrp_cdb_pdbs_output utlrp.sql
catcon: ALL catcon-related output will be written to [/home/oracle/utlrp_cdb_pdbs_output/utlrp_cdb_pdbs_output_catcon_24271.lst]
catcon: See [/home/oracle/utlrp_cdb_pdbs_output/utlrp_cdb_pdbs_output*.log] files for output generated by scripts
catcon: See [/home/oracle/utlrp_cdb_pdbs_output/utlrp_cdb_pdbs_output_*.lst] files for spool files, if any
Enter Password: 
catcon.pl: completed successfully

De esta manera queda funcional el cambio al parámetro MAX_STRING_SIZE

Si se quiere cambiar una PDB directamente, si se quiere cambiar en un ambiente RAC o simplemente tener mas información del tema, se pueden remitir a la documentación de oracle del parámetro en la cual está guía se basa.

https://docs.oracle.com/database/121/REFRN/GUID-D424D23B-0933-425F-BC69-9C0E6724693C.htm#REFRN10321

ORA-24098: valor invalido <NULL> para EMAIL_SERVER

Este error aparece cuando se quiere adicionar una notificación a un JOB que hemos creado previamente, y sucede porque el scheduler de la b...