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

miércoles, 23 de octubre de 2019

Instalar Apex 18 en Oracle 12c Multitenant


A continuación voy a mostrar unos pasos de manera simple para instalar una nueva versión del APEX en nuestra base de datos, el procedimiento está para base de datos multitenant, pero también se puede realizar sobre tradicionales (non-cdb) obviando el paso del cambio de contenedor.

Para instalar el Apex 18 o superior en una base de datos (El procedimiento también aplica para la versión 5, 5.x, 18.1) primero se debe descargar el archivo ZIP que necesitamos en la página de descargas de oracle (https://www.oracle.com/downloads)

De la descarga obtenemos un archivo ZIP, en este caso, el apex_18.1.zip, el cual subiremos al servidor donde reemplazaremos la carpeta $ORACLE_HOME/apex por la que está dentro del ZIP.

mv /ruta/del/archivo/apex_18.1.zip $ORACLE_HOME/
cd $ORACLE_HOME
-- si se quiere hacer un respaldo de la anterior
zip -r apex_old.zip apex/
rm -rf apex
unzip apex_18.1.zip

He de decir que este paso no es realmente necesario, ya que el ZIP se puede descomprimir en cualquier lugar y ejecutar desde ese lugar, es más una cuestión de orden para futuras instalaciones de la herramienta en otras instancias.

Luego de la "instalación" de la nueva versión en el home, procedemos a instalarlo realmente en la base de datos. Normalmente las bases de datos ya tienen de versiones anteriores, migraciones o de la misma instalación, una versión previa del apex (4.2 creo que es la por defecto) por lo que procederemos a desinstalarla.

Ingresamos al directorio del apex

cd $ORACLE_HOME/apex
-- Ingresamos a la base de datos.
sqlplus / as sysdba

-- Ingresamos a la PDB (si es multitenant)
SQL> alter session set container=nombrepdb;
-- Ejecutamos el desinstalador que vino en el ZIP
SQL> @apxremov.sql

Y esperamos la ejecución. La instrucción final dice que se debe salir de la sesión y volver a ingresar antes de ejecutar el script de instalación.

Luego repetimos el mismo proceso en la CDB, es decir, sin ingresar en la PDB a través del alter session, esto es para asegurarnos que no queden estructuras del APEX en la CDB, aunque no debería ser así, de cualquier modo la desinstalación es más rápida esta vez.

Para Instalar el nuevo APEX ingresamos a la base de datos nuevamente y lo vamos a hacer directamente en la PDB.

El script de instalación pide 4 parámetros que se pueden ingresar directamente en la línea de ejecución
Parámetro 1: Nombre del tablespace para el usuario de aplicación del Application Express
Parámetro 2: Nombre del tablespace para los archivos del usuario del Application Express
Parámetro 3: Nombre del tablespace temporal o del grupo de tablespaces temporales.
Parámetro 4: directorio virtual para las imagenes APEX (/i/)

En este caso utilizaremos el tablespace USERS y TEMP que ya vienen por defecto en las bases de datos, sin embargo se pueden cambiar por cualquiera de nuestra preferencia, el cuarto parámetro es un alias para el directorio de imágenes que se configura en el servidor de aplicaciones, pero que no es necesario tener listo para este paso.

Finalmente, la sintaxis de creación queda así.

@apexins.sql USERS USERS TEMP /i/

cd $ORACLE_HOME/apex
-- Ingresamos a la base de datos.
sqlplus / as sysdba

-- Ingresamos a la PDB (si es multitenant)
SQL> alter session set container=nombrepdb;
-- Ejecutamos el desinstalador que vino en el ZIP
SQL> @apexins.sql USERS USERS TEMP /i/
.
.
.
...set_appun.sql


PL/SQL procedure successfully completed.


Al final la ejecución muestra datos como las URL y los puertos asignados al APEX

Para verificar la nueva versión del apex, realizamos la siguiente consulta:

Select * from apex_release;



miércoles, 13 de marzo de 2019

Error ORA-27486 privilegios insuficientes al detener un scheduler job


Este error ocurre aunque el usuario desde el que aparece el error, sea el dueño del job (No DBA) que se está ejecutando.

exec DBMS_SCHEDULER.STOP_JOB('JOB_PRUEBA',force => true);

ORA-27486 insufficient privilege 
ORA-06512 at "SYS.DBMS_ISCHED", line 227
ORA-06512 at "SYS.DBMS_SCHEDULER", line 674

Para que el usuario pueda detener el job se le debe otorgar el rol MANAGE SCHEDULER

Grant MANAGE SCHEDULER to username;


miércoles, 30 de enero de 2019

Error al descomprimir archivo 7z con contraseña en Linux Mint


Cuando tratamos de descomprimir un archivo comprimido con contraseña en 7zip (*.7z) en nuestro Linux Mint (o quizás en cualquier otra distribución) nos podemos encontrar con el siguiente error:

Al hacer clic derecho en el archivo y elegir "Extraer aquí"


Al ejecutar el comando p7zip en la terminal

Esto se debe a que el p7zip que viene instalado por defecto en el Linux Mint es una implementación ligera que no permite ser utilizado correctamente con archivos protegidos por contraseña, por lo que debemos instalar el p7zip-full para lograrlo. 

Esto lo podemos hacer desde el gestor de software, synaptic o si se prefiere por la terminal con el siguiente comando:

sudo apt-get install p7zip-full

Luego de instalado, al hacer clic derecho en el navegador de archivos (Nemo) o desde la terminal, el comando nos pedirá la contraseña y podremos descomprimir nuestro archivo 7z.


Esta vez si solicita el password.


Espero que esta nota sea de ayuda.

Ciao!




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...