jueves, 21 de noviembre de 2019

Oracle 19c XE o XE 20c?

Ha transcurrido más de un año desde la liberación de Oracle XE 18c (20 de octubre de 2018) y de acuerdo a las afirmaciones(2018) de Gerald Venzl(Product Manager de XE) se debería disponer de Oracle XE 19c uno o dos meses después de liberar las ediciones Empresarial y Standard, cosa que no ha sucedido aún.

Sin embargo, hoy 21 de noviembre de 2019 a través de un hilo del Foro para la Comunidad de usuarios de XE,

Se está trabajando para lanzar 20c XE dentro de las 2 
semanas posteriores al lanzamiento local.
 

Tras esta revelación se puede deducir o especular que no habrá Oracle XE 19c, lo cierto es que el próximo año se contará con Oracle XE 20c en menor tiempo que sus liberaciones antecesoras, espero que así sea; así mismo, sería ideal contar con más relajamiento de sus límites de recursos (4 a 8 GB. de RAM y 20GB de almacenamiento). 

Por ahora, hay que seguir aprendiendo, desarrollando y desplegando con Oracle 18c XE, sin dudas, un excelente  SGBD para desarrollo y producción tanto en línea como en entornos locales.

Comparto el hilo del foro, fuente de esta temática:



miércoles, 20 de noviembre de 2019

Cambio de contraseña en usuario System en Oracle 18c XE

El usuario SYSTEM permite realizar tareas de administración de la base de datos como exportar, importar, crear usuarios, entre otras actividades propias de un DBA. En un entorno Multitenant, SYSTEM(al igual que SYS) es un usuario común de Oracle Database, considerando esto, cómo se procede a cambiar la contraseña de SYSTEM en una  PDB? La respuesta es: cambiar la contraseña desde el contenedor, el cómo hacerlo se detalla a continuación:


1) Ejecutar SQLPLUS.

2) Conectarse como SYSTEM a la base de datos:


 3) Submitir la sentencia alter user siguiente:



4)  Conectarse como SYSTEM a XEPDB1.




Como se puede apreciar, el cambio de contraseña realizado en SYSTEM desde el contenedor, afecta a todas las PDB's, es decir, la contraseña de SYSTEM será la misma para cada PDB creada.

Intentar lo anterior pero desde una PDB como XEPDB1 produce el error ORA-65066: Los cambios especificados deben aplicarse a todos los contenedores.



Nota: Los usuarios de Oracle 10g/11g XE , solo deben ejecutar las instrucciones 1,2,3.

Espero este artículo sirva de ayuda.

 Saludos.

domingo, 15 de septiembre de 2019

Como retornar resultados implícitamente de un SELECT usando procedimientos almacenados

Oracle desde la versión 11g permite retornar un conjunto resultado de una sentencia SELECT de modo implícito (sin usar una variable de tipo sys_refcursor como parámetro de salida) invocando a la función RETURN_RESULT del paquete DBMS_SQL.

SYS_REFCURSOR es un tipo de datos que representa un cursor o área de memoria donde se almacena temporalmente un conjunto resultado permitiendo recuperar una a una cada fila.
 
A continuación se presenta un ejemplo que recupera filas de la tabla empleados:

create or replace procedure select_employees as

  rf_cursor_employees SYS_REFCURSOR;
begin
 
  open rf_cursor_employees for
    SELECT employee_id,first_name,last_name,salary,email,phone_number
      FROM HR.employees
    ORDER BY last_name,first_name;
   
    dbms_sql.return_result(rf_cursor_employees);
   
end select_employees;

Compilar  con Oracle SQL Developer o SQL*Plus:



Para su ejecución, se invoca al procedimiento SELECT_EMPLOYEES:

exec select_employees; 


Se puede recuperar más de un conjunto resultado al igual que se lo hace con la forma tradicional empleando variables de tipo  sys_refcursor en lugar de parámetros como se ilustra en el siguiente caso :

create or replace procedure select_multiples_resultados as
 rf_cursor_departments SYS_REFCURSOR;
 rf_cursor_employees SYS_REFCURSOR;

begin
  open rf_cursor_departments for
     SELECT
         department_id,department_name
     FROM HR.departments
     ORDER BY department_name;
    
    dbms_sql.return_result(rf_cursor_departments);

  open rf_cursor_employees for
    SELECT employee_id,first_name,last_name,salary,email,phone_number
    FROM HR.employees
    ORDER BY last_name,first_name;
   
    dbms_sql.return_result(rf_cursor_employees);
   
end select_multiples_resultados;
 
Compilar con SQL Developer o SQL*PLus.

Ejecutar el procedimiento:

exec select_multiples_resultados;



Conclusión:

Por medio de la función RETURN_RESULT se puede obtener uno o varios conjuntos resultado sin declarar parámetros de tipo SYS_REFCURSOR en los  procedimientos, sino, como variables locales del mismo facilitando el trabajo de codificación.
 
Nota:




domingo, 1 de septiembre de 2019

Cómo desbloquear una cuenta de usuario en Oracle XE 18c usando SQL Developer

Para poder desbloquear una cuenta de usuario Oracle empleando SQL Developer, se debe crear una conexión basada en un usuario con privilegios DBA como SYS o SYSTEM.

En este post  se usa una conexión basada en el usuario SYSTEM de la base de datos XEPDB1 instalada por defecto y que contiene al esquema HR(la base de datos contenedora de nombre XE y referida como CDB$ROOT no contiene HR).

1) Abrir la conexión basada en SYSTEM seleccionándola y haciendo click con botón secundario.



2) Ingresar la contraseña y hacer click en Ok.


 

3) Seleccionar Otros usuarios.



4) En el cuadro de diálogo Editar usuario, deseleccionar la casilla de comprobación Bloquedo haciendo click sobre ella.



5) Click sobre el botón Aplicar.


6) Click en Ok.




Cómo desbloquear una cuenta de usuario en Oracle XE 18c

Una cuenta de usuario Oracle puede estar bloqueada desde el momento de su creación o por algún otro factor, por tanto, para desbloquear una cuenta se debe iniciar sesión con un usuario administrador como SYS, SYSTEM o cualquier otra cuenta con privilegios DBA.

Para ejemplificar se iniciará sesión como SYS desde SQLPLUS usando la base de datos XEPDB1 donde se almacena el esquema HR:

1)Ejecutar SQL PLUS desde CMD(Windows) o Terminal(Linux)

2)Ejecutar el siguiente comando
sqlplus/as nolog

3)Igresar como user-name: sys as sysdba, pulsar INTRO e ingresar la clave, después pulsar INTRO.



4)Cambiar la sesión usando la base de datos XEPDB1 donde se almacena el esquema HR.

alter session set container=XEPDB1; 


5)Submitir la sentencia alter user siguiente y pulsar ENTER:

alter user HR
identified by HR
account unlock;






6)Comprobar si la acción ejecutada surtió efecto conectándose como HR:


conn HR/HR@localhost:1521/XEPDB1


Como se aprecia en la última imagen, la cuenta HR fue desbloqueada y se pudo iniciar sesión con ella.

Otro modo de hacer lo mismo conectándose directamente a XEPDB1:

*Repetir las instrucciones 1 y 2.

*Submitir el comando de conexión siguiente:
conn sys/suclave@localhost:1521/XEPDB1 AS SYSDBA


*Repetir las instrucciones 5 y 6.


Espero este post sea de utilidad.

Saludos

 

lunes, 26 de agosto de 2019

Características Avanzadas en Oracle XE 18c - Compresión Avanzada (Parte 2)

En esta segunda parte se analizarán los resultados de aplicar la compresión de datos avanzada sobre dos tablas con la misma estructura y datos, salvo que una de las tablas no comprimirá sus datos y la otra sí.

Puede crear las tablas en el esquema HR o en un nuevo esquema.

Las tablas tendrán la siguiente estructura:
 


Crear la tabla FACTURA_DETALLE

create table factura_detalle(
  fd_id varchar2(10) not null,
  nro_dtl integer not null,
  producto_id number(6) not null,
  cantidad number(6,3) not null,
  precio  number(6,3) not null,
  importe number generated always as (cantidad*precio) virtual,
  constraint fct_dtl_pk primary key(fd_id,nro_dtl)
)ROW STORE COMPRESS ADVANCED tablespace users;


Crear la tabla FACTURA_DETALLE_UNCOMPRESS

create table factura_detalle_uncompress(
  fd_id varchar2(10) not null,
  nro_dtl integer not null,    
  producto_id number(6) not null,
  cantidad number(6,3) not null,
  precio  number(6,3) not null,
  importe number generated always as (cantidad*precio) virtual,
  constraint fct_dtl_pk primary key(fd_id,nro_dtl)
)tablespace users;

Insertar 10000 filas en la tabla comprimida y no comprimida usando el siguiente código PL/SQL :


Después de ejecutar con éxito el bloque PL/SQL, ejecutar la siguiente sentencia de selección para consultar el total en bytes ocupado por cada tabla:


Análisis de resultados
Puede apreciarse en los resultados de la consulta que FACTURA_DETALLE ocupa un poco más de la mitad del almacenamiento requerido por su contraparte no comprimida(FACTURA_DETALLE_UNCOMPRESS), es decir, que el radio de compresión de datos se aproxima a 2x o lo que es lo mismo, se redujo dos veces el espacio requerido en la tabla comprimida.


Conclusión

Se ha demostrado que la Compresión de Datos Avanzada es de gran utilidad para reducir el volumen de almacenamiento de datos a medida que estos se incrementan permitiendo ahorrar costos en este ámbito sin peder el rendimiento del SGBD. 











sábado, 24 de agosto de 2019

Características Avanzadas en Oracle XE 18c - Compresión Avanzada (Parte 1)

Desde la versión 18c, Oracle Database XE es muy diferente de las versiones previas (XE 10g y XE 11g) porque incluye muchas de las características de la Edición Empresarial (EE - Enterprise Edition)  de forma gratuita como por ejemplo: 
  • Compresión de Datos Avanzada(Advanced Compression).  
  • Seguridad Avanzada (Advanced Security).
  • En Memoria (In-Memory).
  • Compresión a Nivel de Índice(Index Compression)
  • Particionamiento(Partitioning)
Pulsar aquí para obtener una lista completa de características disponibles.

Este post se centrará brevemente en la Compresión Avanzada de Datos, característica que permite ganar espacio de almacenamiento a medida que el volumen de los datos se incrementa. El radio de compresión de datos es de 2x a 4x, es decir, reduce de 2 a 4 veces el espacio requerido para almacenar datos de una tabla (datos estructurados), incluso puede comprimir objetos como archivos (datos no estructurados como objetos grandes o LOBS).

Entre las ventajas de la compresión de datos avanzada se tiene:
  1. Reducción del espacio de almacenamiento requerido.
  2. No hay sobrecarga en operaciones de lectura en bloques comprimidos.
  3. Mayor rendimiento en operaciones DML como INSERT y UPDATE.

Esta característica se puede aplicar a tablas existentes o en el proceso de creación de las mismas sobre todo en ambientes de Almacenes de Datos (Data WareHouse), es decir, en entornos activos de almacenamiento y procesamiento de datos variables en el tiempo y que permiten tomar decisiones en los negocios.
 
Sintaxis para su aplicación en el proceso de creación de una tabla

create table NombreTabla(
   campos...
)ROW STORE COMPRESS ADVANCED

Ejemplo:


create table Objetos(
    objeto_id number(6) PRIAMRY KEY,
    objeto_nombre varchar2(120) NOT NULL
)ROW STORE COMPRESS ADVANCED 
tablespace USERS;  


Sintaxis para su aplicación en una tabla creada
 
alter table NombreTabla
ROW STORE COMPRESS ADVANCED ;

Ejemplo:

alter table Employees
ROW STORE COMPRESS ADVANCED;
 
Para verificar que la compresión de datos avanzada se ha aplicado a las tablas, se debe submitir la siguiente sentencia:

SELECT compression, compress_for
FROM   user_tables
WHERE  table_name IN('Objetos','Employees');


 
Resultado
 
TABLE_NAME  COMPRESS  COMPRESS_FOR                  
--------------------  ---------------   ------------------------------
EMPLOYEES     ENABLED     ADVANCED                            
OBJETOS            ENABLED    ADVANCED              
 
Aplicación desde Oracle SQL Developer 

Para aplicar la compresión avanzada de datos en SQL Developer, se debe editar o crear la tabla y selecciona
la opción Almacenamiento que se muestra en la siguiente imagen:
  
 
Hacer click en la opción del panel izquierdo DDL para visualizar la sentencia DDL generada.
 

Click en Aceptar.

Conclusión 
 
La Compresión de Datos Avanzada es una característica muy importante que puede ser aplicada en la base 
de datos Oracle 18c XE para ahorrar espacio de almacenamiento considerando el límite de 12GB impuesto
a esta edición, el dominio de esta técnica permitirá optimizar el almacén de datos. 
 


martes, 20 de agosto de 2019

Crear tablas y vistas con Oracle SQL Data Modeler Parte 2

En el artículo anterior, se desarrolló una serie de objetos de tipo tabla empleando SQL Developer Data Modeler, en este post que es continuación del anterior, se procederá a desarrollar Vistas a partir del archivo del modelo creado previamente.

1.Abrir el archivo del modelo desarrollado previamente:
      Archivo>>Data Modeler>>Abrir


  
2. En el cuadro de diálogo seelccionar el archivo con extensión .dmd y hacer click en Abrir.
 
3.  En el cuadro de diálogo seleccionar el modelo Relational_2 (o el que haya definido) y hacer click en Aceptar.


4. En la barra de herramientas de Data Modeler seleccionar Vista.

5. Hacer clik sobre el área de trabajo. En el cuadro de diálogo que se visualiza, ingresar el nombre de la Vista: ProgramasVIEW y hacer click en el botón Aplicar.
 



 6.  En el cuadro de diálogo Ver Propiedades, hacer click en  Consulta.
 
 7. Se visualizará el cuadro de diálogo  Generador de Consultas que en su panel derecho   muestra las tablas y vistas existentes incluyendo la vista que se está configurando.


8. Seleccionar la tabla programas y arrastrar al área de consulta(área en blanco) o hacer doble clik sobre la tabla programas.


 La tablas seleccionada se visualiza gráficamente en el área de consulta.


 9. Seleccionar los campos de la tabla programas, al realizar esta acción los campos se agregan en la primera cuadrícula debajo  del área de consulta.
10. Proceda a configurar las prpiedades de la consulta, por ejemplo:

Tipo de Orden: Ascendente
Secuencia de Orden: 1

Esto hará que los resultados (filas o registros) se muestren ordenados ascendentemente por nombre de programa.
Adicionalmente, a medida que realiza cambios, estos se traducen en una sentencia SELECT bajo la cuadrícula de columnas o campos como se aprecia en la imagen de abajo.

Hacer Click en Aceptar.
11.  Realizada la acción anterior, se oculta la ventana de Consultas y retorna al siguiente cuadro de diálogo Ver propiedades y hacer click en Aceptar.

12.  Se obtiene un cuadrado color verde que contiene el nombre de la vista con sus campos y el nombre de la tabla de donde provienen los campos.

13. Hacer Click con el botón secundario  sobre el nombre del Diseño y selccionar Guardar Diseño.
14. Click en Generar DDL de la barra de herramientas.


15. Seleccionar la versión de Oracle donde implementará el script.


16. Click en Generar.


17. En la pestaña Selección 'CREATE' expandir Sin Asignar a Esquemas y seleccionar tablas y vistas.



18. En la pestaña Selección 'DROP', seleccionar Tablas, Vistas y Claves Ajenas, estos elementos si ya existen en el esquema de destino serán borrados y posteriormente recreados.
 

19. Click sobre el botón Aceptar ubicado en la parte inferior dereecha del cuadro de diálogo Editor de Archivo DDL.


 20. Se desplega el código SQL que incluye la vista generada.
Posteriormente puede seguir las indicaciones 25 a 30 del post anterior para ejecutar el script.

Espero que este post sea de gran ayuda.  Sus comentarios son importantes, aún cuando no encuentren dificultades en el desarrollo de lo aquí descrito no olvidar comentar.

Saludos.



 
     
     

Entrada destacada

Cómo instalar Oracle Database 18c Express Edition para Windows

Oracle Database 18c XE ya está disponible para Windows 64bit, en este post se enseñará como instalar y configurar esta nueva versión en W...