Mostrando entradas con la etiqueta oracle. Mostrar todas las entradas
Mostrando entradas con la etiqueta oracle. Mostrar todas las entradas

domingo, 26 de julio de 2020

Desbloquear cuenta de usuario o cuenta admin en Oracle Apex 20.1

De vez en cuando sucede que un usuario de la aplicación de Apex se le olvide su contraseña o la ingrese mal varias veces, esto hará que la cuenta del usuario en Oracle Apex se bloquee, lo mismo puede suceder para la cuenta de administración utilizada para administrar el entorno de Apex.

Una forma para desbloquear el usuario final o el usuario administrador es con los pasos siguientes como usuario SYS:

1. El siguiente comando nos permitirá ver los usuarios que actualmente se encuentran bloquedados: 

select * from APEX_200100.WWV_FLOW_FND_USER
where account_locked = 'Y';

2. Una vez hemos corroborado que el usuario en cuestión se encuentra bloqueado, podemos ejecutar el siguiente comando para desbloquear el usuario, acá desbloquearé un usuario con nombre CARLOS:

update APEX_200100.WWV_FLOW_FND_USER
set account_locked = 'N'
where user_name in ('CARLOS');

NOTA: si se fijan estoy usando el esquema de APEX_200100, esto es porque mi versión de APEX es la 20.1 si su versión es diferentes deben cambiarlo al nombre de esquema correspondiente a su versión, pueden determinar el nombre de su esquema ejecutando el siguiente comando siempre como usuario SYS:

select username from dba_users where username like 'APEX%';

El comando anterior nos mostrará una serie de esquemas entre los cuales deberemos utilizar el que tiene números ya que éstos indican la versión de Apex instalada en su entorno:



Con los pasos anteriores habremos desbloqueado el usuario sin problemas!

Saludos! 


viernes, 24 de julio de 2020

Oracle Apex 20.1: ORA-24247: network access denied by access control list (ACL)

Al tratar de utilizar un servicio REST en Oracle Apex 20.1 el siguiente mensaje puede aparecer:

ORA-24247: network access denied by access control list (ACL)



Este mensaje es normal es un ambiente recien creado de Apex, donde no se ha habilitado los servicios de red.

Los servicios de red nos permiten realizar las siguientes acciones:
  • Envío de correo saliente en Oracle Application Express.
  • Llamar a métodos desde el paquete APEX_MAIL.
  • Consumir servicios web de Oracle Application Express.
  • Realización de llamadas LDAP salientes desde Oracle Application Express.
  • Impresión de reportes en PDF.

Para solventar el mensaje anterior basta con ejecutar como usuario SYS de la Base de datos el siguiente script para brindar el acceso requerido:

BEGIN
    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => '*',
        ace => xs$ace_type(privilege_list => xs$name_list('connect'),
                           principal_name => 'APEX_200100',
                           principal_type => xs_acl.ptype_db));
END;
/


Del script anterior cabe recalcar los siguientes puntos:

  • El asterisco indica que se brinda acceso desde cualquier host. Puede ser reemplazado el valor por la palabra localhost para restringir el acceso solamente desde el servidor donde se encuentra instalada la Base de Datos.
  • En el principal_name se brinda acceso al usuario APEX_200100.
  • Este Script asumen que la versión de la Base de Datos siendo utilizada es 12c o superior.

NOTA: Si en caso se está utilizando una Base de Datos previa a la versión 12c se puede usar el siguiente script:

DECLARE
  ACL_PATH  VARCHAR2(4000);
BEGIN
   
  SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
   WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;
 
  IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_200100',
     'connect') IS NULL THEN
      DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,
     'APEX_200100', TRUE, 'connect');
  END IF;
 
EXCEPTION
  
  WHEN NO_DATA_FOUND THEN
  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
    'ACL that lets power users to connect to everywhere',
    'APEX_200100', TRUE, 'connect');
  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
END;
/
COMMIT;


lunes, 13 de abril de 2020

Está certificado Weblogic 10.3.6 con la base de datos 19c ?

La respuesta es SI.

Weblogic 10.3.6 se encuentra certificado con la versión de Oracle Database 19.3+ en modalidad On-Premise.

Nota: está soportada la versión de base de datos 18c/19c pero siempre en modalidad On-Premisa, la versión 18c/19c en la nube NO está soportada.

La certificación está dando con los drivers que ya vienen instalados con el Weblogic, si necesitan cambiar los drivers del Weblogic tomen en consideración que no está soportado hacerlo manualmente, sino se debe seguir el método provisto por Oracle que sería instalar algún parche.

Para mayor información se puede revisar la siguiente nota de Oracle:
If Weblogic 10.3.6 Support Oracle DB 19c? (Doc ID 2637763.1)

viernes, 13 de marzo de 2020

REP-0118 al tratar de abrir el Reports Builder

Si en una nueva instalación de Forms/Reports al tratar de abrir el Reports Builder nos aparece el siguiente mensaje:

REP-0118: Unable to create a temporary file.

Es debido a que la variable REPORTS_TMP no está definida o está apuntando a una ubicación en la cual no se tiene permisos de escritura.

Por lo anterior se debe validar lo siguiente para su corrección:
  • Validar que la variable este definida en la siguiente ubicación: HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_Oraclexxxx
  • La Ubicación a la que apunta la variable anterior el usuario tenga permisos de escritura y que tenga el espacio suficiente.


Como crear un Servidor de Reportes de tipo Standalone en Oracle Reports 12c

Para crear un Servidor de Reportes de tipo Standalone y no utilizar el tradacional de tipo In-Process que se crear al instalar el producto, se deben seguir los siguientes pasos:
  1. Desde una linea de comandos o terminal ubicarse en la siguiente ruta: $ORACLE_HOME\oracle_common\common\bin
  2. Iniciar el WLST por medio de ejecutar el archivo wlst.cmd/wlst.sh
  3. Conectarnos al AdminServer por medio del siguiente comando:  connect('weblogic','weblogic_password','localhost:7001')
  4. Ejecutar el siguiente comando para crear el Servidor de Reportes:
 createReportsServerInstance(instanceName='rep_server1',machine='AdminServerMachine')

    Listo! con esto se ha creado el Servidor de tipo Stanadlone.

Nota: antes de proceder con los pasos para crear el Servidor de Reportes de tipo Standalone, se debe haber ejecutado por medio de WLST el comando createReportsToolsInstance(). Pueden corroborar que ya se ejecuto si existe el siguiente directorio:

$DOMAIN_HOME\reports

miércoles, 11 de diciembre de 2019

Error oracle.as.scheduler.ejb.AsyncRequestBean desplegando BI Publisher 12c

Al tratar de desplegar el EAR del BI Publisher se presenta el siguiente error en la consola de Weblogic:

Unable to access the selected application.
Error oracle.as.scheduler.ejb.AsyncRequestBean
El siguiente mensaje puede aparecer también:

The configuration for xxxx is still being loaded from your last request, please wait a moment and retry.

CAUSA:

Las librerías compartidas del despliegue no se encuentran disponibles para el AdminServer.

SOLUCIÓN:

1. Entrar a la consola de Weblogic.
2. Activar sesión de cambios en la consola.
3. Navegar al apartado de Despliegues.
4. Ingresar a la librería bip-shared-libraries(11.1.1)
5. Seleccionar el tab "Targets".
6. Seleccionar el servidor AdminServer y guardar los cambios.
7. Activar los cambios en la consola.
8. Probar nuevamente el despliegue de la aplicación de BI Publisher... esta vez debe funcionar! ;)

NOTA:

Si aún con los pasos anteriores no funciona, los siguientes pasos pueden ayudar:

1. Bajar todos los servicios de BI:
    $DOMAIN_HOME/bitools/bin/stop.sh
2. Reemplazar el EAR (en caso de no haberlo borrado desde la consola).
3. Remover la carpeta tmp que se encuentra en la ruta:
    $DOMAIN_HOME/servers/bi_server1/tmp
4. Iniciar todos los servicios de BI:
    $DOMAIN_HOME/bitools/bin/start.sh




lunes, 4 de noviembre de 2019

Crear Wallet en Base de Datos Oracle: UTL_HTTP y SSL

Si estás tratando de consumir un servicio Web por medio de HTTPS a nivel de código PL/SQL o por otra vía en la Base de Datos y te da el siguiente error:

ORA-29024: Certificate validation failure

Es debido a que la base de datos no confía en el certificado digital que se le presenta cuando trata de establecer comunicación con el servidor donde se encuentra alojado el servicio web en cuestión.

Para solucionar ésto lo que debemos hacer es conseguir el certificado del servidor donde se encuentra alojado el servicio web y crear una Wallet a nivel del sistema operativo donde se encuentra instalada nuestra base de datos. El certificado se puede conseguir en la barra de dirección del navegador cuando ponemos el WSDL del servicio.

Una vez tenemos el certificado realizamos los siguientes pasos:

1. Crear carpeta que contendrá el wallet:

mkdir -p /u01/app/oracle/wallet

2. Configurar las variables de ambiente de la base de datos porque haremos uso de la utilidad de orapki

3. Crear wallet:

orapki wallet create -wallet /u01/app/wallet -pwd welcome123 -auto_login

4. Agregar certificado:

orapki wallet add -wallet /u01/app/oracle/wallet -trusted_cert -cert "/u01/Root.crt" -pwd welcome123

5. Probar la invocación del servicio, para ello agregar el wallet antes de la invocación del servicio:

En mi caso lo probaré desde el SQLPLUS, una sola sesión todo lo siguiente:

SET SERVEROUTPUT ON
EXEC UTL_HTTP.set_wallet('file:/u01/app/oracle/wallet', NULL);
Creamos el siguiente procedimiento almacenado:

CREATE OR REPLACE PROCEDURE show_html_from_url (
  p_url  IN  VARCHAR2,
  p_username IN VARCHAR2 DEFAULT NULL,
  p_password IN VARCHAR2 DEFAULT NULL
) AS
  l_http_request   UTL_HTTP.req;
  l_http_response  UTL_HTTP.resp;
  l_text           VARCHAR2(32767);
BEGIN
  -- Make a HTTP request and get the response.
  l_http_request  := UTL_HTTP.begin_request(p_url);

  -- Use basic authentication if required.
  IF p_username IS NOT NULL and p_password IS NOT NULL THEN
    UTL_HTTP.set_authentication(l_http_request, p_username, p_password);
  END IF;

  l_http_response := UTL_HTTP.get_response(l_http_request);

  -- Loop through the response.
  BEGIN
    LOOP
      UTL_HTTP.read_text(l_http_response, l_text, 32766);
      DBMS_OUTPUT.put_line (l_text);
    END LOOP;
  EXCEPTION
    WHEN UTL_HTTP.end_of_body THEN
      UTL_HTTP.end_response(l_http_response);
  END;
EXCEPTION
  WHEN OTHERS THEN
    UTL_HTTP.end_response(l_http_response);
    RAISE;
END show_html_from_url;
/
Por último probamos la invocación:

EXEC show_html_from_url('https://esb.rinnovo.com:8885/purchase/get-transactions');
Obtendremos la respuesta de nuestro servicio sin problemas:

SQL> EXEC show_html_from_url('https://esb.rinnovo.com:8885/purchase/get-transactions');
{"generalResponse":{"responseDescription":"Version no
especificada","errors":[{"code":"400","id":"4b157gda-a7fc
","detail":"No se especificado un encabezado URI
existente","title":"Version no especificada"}],"responseCode":"700"}}

PL/SQL procedure successfully completed.

SQL>

Con el procedimiento anterior, solo bastará agregar la linea donde configuramos el Wallet sin el EXEC.

miércoles, 16 de octubre de 2019

FRM-10256 User is not authorized to run Oracle Forms Menu

Migrando una aplicación de Oracle Forms de una versión 11g a la última versión 12c se presenta el siguiente error al ejecutar una forma:


La razón del error anterior es que la aplicación está haciendo uso de seguridad por medio de los menús y no se ha migrado/creado la vista y sinónimos pertinentes.

Solución:


1. Ejecutar como usuario SYS el script que se encuentra en la ruta:
$ORACLE_HOME/tools/dbtab/forms/frmsec.sql

2. Ejecutar el siguiente grant:
Grant select on frm50_enabled_roles to public;

Verificación:

Por último se puede verificar los roles ingresando con un usuario y ejecutando la siguiente consulta que debe retornar los roles:

Select * from frm50_enabled_roles; 

Nota: este procedimiento también aplica para versión 10g y 11g.