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!
Suscribirse a:
Entradas (Atom)
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...
-
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_SCHEDU...
-
Para crear una PDB e importar en ella, primero se debe crear la PDB, lo cual se puede hacer directamente en el asistente de configuración d...
-
Cuando tratamos de descomprimir un archivo comprimido con contraseña en 7zip (*.7z) en nuestro Linux Mint (o quizás en cualquier otra distr...