Saturday, September 26, 2020

Solucionar error ORACLE TNS:error del adaptador de protocolo ORACLE 18c XE

Fix error TNS:error del adaptador de protocolo



Recientemente tuve este error de TNS:error del adaptador de protocolo al intentar conectarme por SqlPlus.


Para solucionar este problema existen dos opciones.

Opción 1

La primera será reiniciando el listener para ello abrimos una ventana CMD como administrador y ejecutaremos:

lsnrctl stop

luego:

lsnrctl start

podremos comprobar el estado de con el comando:

lsnrctl status




Opción 2

Si esto no funciona, Posiblemente en erro de la instalación la variable de entorno no se ha creado y procederemos a crearla; ORACLE_SID con el valor XE.



Y finalmente ya podras conectarte normalmente.




Share:

Thursday, September 24, 2020

Instalar Oracle APEX 20.1 en español o multilenguaje / Oracle REST Data Services ORDS + Tomcat + Windows

Install Oracle APEX 20.1 / Ords 20 + Apache Tomcat + Windows + Oracle 18c Express
Instalar Oracle APEX 20.1 en español / Ords + Apache Tomcat + Windows 
En esta oportunidad hare una guía completa de:
  •     Instalación Oracle APEX 20.1 en español o multilenguaje
  •     Instalación y configuración de Apache Tomcat.
  •     Instalación y configuración de ORDS.





Para ello usaremos la base de datos Oracle 18c express.
Primero descargamos la versión multilenguaje de APEX



Pasamos a descomprimir y abrimos una ventana cmd y nos situamos en la ruta donde está descomprimida nuestra carpeta APEX






Nos conectamos a sqlplus como sys as sysdba


Lo primero es desbloquear anonymous:

ALTER USER ANONYMOUS ACCOUNT UNLOCK;



Luego cambiamos el contenedor donde instalaremos APEX.

ALTER SESSION SET CONTAINER = XEPDB1;



Luego creamos el tablespace:

En mi caso lo he creado en 'E:\Instaladores/apex_201/db/apex20100.dbf' , pueden colocar la ruta de su preferencia.

CREATE TABLESPACE apex20100 DATAFILE 'E:\Instaladores/apex_201/db/apex20100.dbf' SIZE 300M AUTOEXTEND ON NEXT 1M; 


Luego procedemos con instalar APEX

@apexins.sql apex20100 apex20100 TEMP /i/


Configuramos rest
@apex_rest_config.sql

Cambiamos el puerto de acceso para usar Ords correctamente.

EXEC DBMS_XDB.sethttpport(0);  


Configuramos la contraseña del workspace internal, ejecutamos

@apxchpwd

Ahora instalaremos Tomcat

https://tomcat.apache.org/download-90.cgi

Todo será next, next hasta el punto de la imagen donde cambiaremos el puerto por el cual nos conectaremos a APEX

Nota: Más adelante si lo dejaron con 8080 este se puede cambiar manualmente.

Nota2: Para instalar Tomcat necesitaremos Java JDK o JRE

Luego finalizamos la instalación normalmente.

Ahora instalaremos ORDS

Descargamos y descomprimimos ORDS

Abrimos una ventana de CMD y nos dirigimos al directorio donde hemos descomprimido ORDS en mi caso "E:\Instaladores\ords-20.2.0.178.1804"




Luego creamos una carpeta donde se guardara la configuración de ORDS, en mi ejemplo le puse  "E:\Instaladores\ords_config"

Luego ejecutamos

java -jar ords.war install advanced


Una vez finalizada la configuración de ORDS necesitamos copiar el archivo ords.war del directorio donde ejecutamos java -jar xxxx Y lo pegamos en la carpeta web apps de Tomcat usualmente en esta dirección "C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps"


Ahora necesitamos las imagenes, para ello copiamos del directorio de APEX , la carpeta imágenes y la pegamos en webapps de tomcat, asi mismo renombramos la carpeta a solo "i"


Ahora reiniciamos el servicio de tomcat-

Con todo esto ya tendremos APEX instalado y corriendo en ORDS, en la url localhost:20100/ords/apex

Cambiando el lenguaje

Para tener el lenguaje de APEX en español o cualquier necesitamos ejecutar @load_TULANG.sql

Este archivo lo pueden encontrar en la carpeta de APEX => Builder => y seleccionan la carpeta con el lenguaje que desean instalar.

En mi caso será español, carpeta ES.



De preferencia abrimos una nueva ventana de CMD, cambiamos nuestro directorio a donde esta la carpeta builder con el lenguaje que deseamos instalar en mi ejemplo, es "E:\Instaladores\apex_201\apex\builder\es" y nos conectamos como sys dba y ejecutamos:

Nota @load_es.sql en vez de ES deberíamos cambiar con el prefijo de nuestro lenguaje a instalar.

ALTER SESSION SET CONTAINER = XEPDB1; 

ALTER SESSION SET CURRENT_SCHEMA = APEX_200100;

@load_es.sql

Y listo finalmente solo necesitamos reiniciar el servicio de Tomcat.

Como pueden ver ahora ya tengo para seleccionar el lenguaje español en la parte inferior y a partir de ello todo el builder cambia.


Tip: me ha pasado que la después de ello da un error en ORDS, para ello he vuelto a configurar ORDS, si ello no funciona, pueden probar instalar APEX y seguidamente cambiar el lenguaje antes de instalar ORDS, lo cual seria su ultimo paso.

Share:

Thursday, August 6, 2020

Ordenamiento en reportes Oracle APEX (secuencias)

En determinada ocasión tenemos la necesidad de mostrar los registros al usuario dando prioridad al orden de los elementos listados en un reporte. Para ello podría indicar que hay dos formas no comunes de ordenar, una es usando drag y drop para lo cual les recomiendo el blog de Jorge y la otra seria agregando unos botones de subir o bajar, que es le método que les enseñare a continuación.



Demo en YouTube



Primero creamos un reporte clásico. en mi caso he usado la tabla DEPT para la demo.

Asi mismo he agregado una nueva columna para guardar el orden de los registros.

Lo ordenaremos por nuestra nueva columna,  order by order_dept

Agregaremos dos botones con HTML para mover arriba y abajo.




A este código he agregado el data-id para obtener el ID del registro, clase "arrow_container " para identificar donde esta mi ID, y en los botones un data-move_dir para saber la dirección , y una clase "move_row" para saber cuando se hace click al botón.

<div data-id="#DEPTNO#" class="arrow_container" >
  <button type="button"  data-move_dir="UP" title="Up" aria-label="Up" class="move_row t-Button t-Button--noLabel t-Button--icon t-Button--hot t-Button--small t-Button--noUI">
  <span aria-hidden="true" class="t-Icon fa fa-chevron-up"></span></button>

  <button type="button"  data-move_dir="DOWN" title="Down" aria-label="Down" class="move_row t-Button t-Button--noLabel t-Button--icon t-Button--hot t-Button--small t-Button--noUI">
  <span aria-hidden="true" class="t-Icon fa fa-chevron-down"></span></button>
</div>

Luego crearemos una acción dinámica para escuchar el click de los botones y pasaremos el elemento.



move_row(this.triggeringElement);

Mi función la he agregado a nivel de página para tener un mejor orden.



function move_row(element){
  // direcction = up or down
  var direction =   element.dataset.move_dir;
  var row = $(element).parents("tr:first");
  if (direction == "UP" ) {
      row.insertBefore(row.prev());
  } else {
    // down 
      row.insertAfter(row.next());    
  }
  save_order();  
}

La función save_order es la que me permitirá actualizar los registros en la base de datos a través de un llamada AJAX. la agregare también a nivel de la página.

function save_order(){
  
  var rowsOrder = $("#department_report").find(".t-Report-report tbody tr .arrow_container")
  var questionnaireOrder = Array.from(rowsOrder, x => $(x).data('id') );
   console.log(questionnaireOrder);
    
  apex.server.process("UPDATE_ORDER",        
  { 
    f01: questionnaireOrder
  }, 
    { success: function(pData){  
        apex.event.trigger( "#department_report", "apexrefresh" );
      }, 
      error: function(e) {   
           console.log(e);  
      } 
    }
  );
  
}

He creado un proceso AJAX callback y allí tengo lo siguiente.



declare
  l_order number;
begin 

  for i in 1..apex_application.g_f01.count loop 

    l_order := i * 10; 

   update dept
      set order_dept = l_order
    where deptno = to_number(apex_application.g_f01(i))
      and nvl(order_dept,0) != l_order;
      
  end loop;

  apex_json.open_object;
  apex_json.write('success',true);  
  apex_json.close_object;

exception
  when others then
    apex_json.open_object;
    apex_json.write('success',false); 
    apex_json.write('error_msg',sqlerrm); 
    apex_json.close_object;
end;


Y finalmente el resultado


Nota, para los botones he usado el button builder de apex.oracle/ut


Share:

Wednesday, July 22, 2020

Instalar Oracle APEX 20.1 en Google Cloud Platform – Compute Engine – CentOS 8 – DB 18c Express Edición Parte 3

Instalando y configurando Oracle APEX 20.1 en modo PlSql/Gateway en Google Cloud Platform



Video demo:



Nos conectamos a la consola y para tener un poco de orden iremos a la carpeta /tmp

cd /tmp



Para empezar descargamos APEX 
Al igual que la base de datos, necesitamos descargar de la página oficial, aceptar los términos y condiciones.
Luego copiar el link de descarga y reemplazarlo

curl -o apex_20.1_en.zip (Tu link APEX Aquí)

Ejemplo:

curl -o apex_20.1_en.zip https://download.oracle.com/otn/java/appexpress/apex_20.1_en.zip?AuthParam=1594869816_13631e285ad922ef877cb27ef1ac1bd7



una vez descargado APEX
nos dirigimos al directorio opt
cd /opt
aquí descomprimimos APEX como admin.

sudo unzip /tmp/apex_20.1_en.zip



Ahora nos conectamos en la cuenta oracle
sudo su - oracle

nos dirigimos a la carpeta opt/apex

cd /opt/apex


nos conectamos como sys dba

sqlplus
sys as sysdba

Una vez conectados desbloquemos el usuario ANONYMOUS

ALTER USER ANONYMOUS ACCOUNT UNLOCK;

AquÍ algo muy importante durante toda la instalación es que en esta versión tenemos la opción de pluggable database asi que es mejor hacer la instalación en el pluggable database y no en el root.
Podemos ejecutar show pdbs y ver las pdbs activas.


para esto durante toda la instalación de APEX debemos estar en la pdb1. Y para ello ejecutamos lo siguiente.

  ALTER SESSION SET CONTAINER = XEPDB1;


Creamos nuestra tablespace la configuración es a nuestro gusto

CREATE TABLESPACE apex20100 DATAFILE '/opt/oracle/oradata/XE/XEPDB1/apex20100.dbf' SIZE 300M AUTOEXTEND ON NEXT 1M; 

Instalamos APEX

@apexins.sql apex20100 apex20100 TEMP /i/



Terminada la instalación configuramos la clave de admin
@apxchpwd.sql




Desbloqueamos APEX_PUBLIC_USER

ALTER USER APEX_PUBLIC_USER IDENTIFIED BY 2345 ACCOUNT UNLOCK;

E instalamos rest
@apex_rest_config.sql


Configuramos las imágenes

@apex_epg_config.sql /opt

Para terminar la configuración indicamos en que puerto va estar APEX.

select dbms_xdb.gethttpport from dual;
 EXEC DBMS_XDB.sethttpport(20100); 

Ahora tendremos que abrir los puertos necesarios para la conexión
Seleccionamos nuestro compute engine e Iremos a la configuración de red




Luego seleccionamos cortafuegos y agregamos regla
Agregaremos al puerto TCP de entrada el puerto que seleccionamos anteriormente, en mi caso 20100
Y el rango de IP si queremos filtrar, en mi caso habilito a todas con 0.0.0.0/0



Ahora solo nos queda probar que funcione correctamente. 

Usaremos la ip de nuestro compute engine junto con el puerto que asignamos en mi caso

Para acceder al instance
http://34.67.73.89:20100/apex/apex_admin

Para acceder a un workspace
http://34.67.73.89:20100/apex/


Nota si en caso la página no responda, puedes intentar creando una regla de salida en cortafuegos.

Otro error común es que te pida datos de XDB
usuario y contraseña. El sitio dice: XDB
Normalmente he solucionado esto desbloqueando el usuario ANONYMOUS, del master PDB 

Share:

Thursday, July 16, 2020

Instalar Oracle APEX 20.1 en Google Cloud Platform – Compute Engine – CentOS 8 – DB 18c Express Edición Parte 2

Siguiendo con la serie de blogs
En esta oportunidad instalaremos la Base de datos Oracle 18c Express Edition




Ejecutaremos los siguientes pasos

* Descargar Instalar Oracle Database Preinstall
* Descargar Instalar algunas dependencias
* Descargar Instalar Oracle Database Express Edition (XE)




Abrimos una nueva consola de Google Compute Engine

NOTA: Si intentamos realizar la instalación de oracle pre-install nos dará una serie de errores, es por eso que descargaremos las siguientes dependencias.

Nos conectamos como admin.

sudo -s

dnf install -y glibc-devel
dnf install -y ksh
dnf install -y libaio-devel
dnf install -y libstdc++-devel
dnf install -y make
dnf install -y nfs-utils
dnf install -y psmisc
dnf install -y sysstat
dnf install -y xorg-x11-utils
dnf install -y xorg-x11-xauth
dnf install -y bc
dnf install -y bind-utils
dnf install -y binutils
dnf install -y net-tools
dnf install -y smartmontools
dnf install -y unzip

dnf install -y libnsl
dnf install -y libnsl.i686
dnf install -y libnsl2.i686





libcap y libstdc tendran que ser descargados de otras fuentes.
curl -o compat-libcap1-1.10-7.el7.x86_64.rpm http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libcap1-1.10-7.el7.x86_64.rpm

curl -o compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

E Instalamos

dnf localinstall compat-libcap1-1.10-7.el7.x86_64.rpm -y
dnf localinstall compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm -y 


Descargamos Oracle Database Preinstall

curl -o oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm

Descargar Oracle Database Express Edition (XE)

Para descargar Oracle 18c XE es un poco diferente, primero descargamos de la página oficial la versión Linux, aceptando los términos y condiciones.

Luego pausaremos la descarga y tomaremos el link, con ello reemplazaremos en nuestra url de descarga.
https://www.oracle.com/database/technologies/xe-downloads.html
        
curl -o oracle-database-xe-18c-1.0-1.x86_64.rpm https: (link a reemplazar)

Ejemplo
curl -o oracle-database-xe-18c-1.0-1.x86_64.rpm https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm?AuthParam=1594861804_d0fdaecbd1328cca54e2949c25917abf


Confirmamos las descargas con el comando ls -lh


Instalamos el pre-install y la base de datos

rpm -Uvh oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm  
rpm -Uvh oracle-database-xe-18c-1.0-1.x86_64.rpm 


Configuramos Oracle, nos pedirá una contraseña
/etc/init.d/oracle-xe-18c configure

Luego configuramos las rutas de acceso, para ello necesitaremos editar el archivo bash, en mi caso usare nano.
La librería la descargan de aquí.

sudo yum install nano

nano /home/oracle/.bash_profile

Y editamos el archivo agregando estas lineas

export ORACLE_BASE=/opt/oracle/ 
export LD_LIBRARY_PATH=/opt/oracle/product/18c/dbhomeXE/lib 
export ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE 
export PATH=$ORACLE_BASE/product/18c/dbhomeXE/bin:$PATH 
export PATH=/usr/bin:$PATH 
export ORACLE_SID=XE 
export ORAENV_ASK=NO

comandos útiles:
crtl+c o crtl+v , copiar y pegar
crtl+x Salir
crtl+O guardar y enter para guardar

ahora nos conectamos a la cuenta de Oracle



sudo su - oracle
 
ejecutamos 
source ~/.bash_profile 

y comprobamos el acceso a sqlplus

 sqlplus sys as sysdba


 

Y con esto ya tenemos nuestra base de datos 18c XE.

En el siguiente capítulo instalare Oracle APEX 20.1 en PL/SQL Gateway


Share:

Subscribe to my Newsletter

Acerca de mi:

img

Ing. Angel O. Flores Torres, soy Ingeniero de Sistemas e Ingeniero de Aplicaciones Oracle Apex, he trabajado con Oracle Apex 5 y 5.1 desde el 2017, En los ultimos años he desarrollado habilidades en CSS, JavaScript, Jquery y PlSql , I specialize in Oracle APEX (Oracle Application Express )

Followers

Popular Posts