viernes, 29 de julio de 2016

BD Oracle Física VS BD Oracle Virtual VMWARE

Saludos,

Ahora que vivimos en el mundo de la virtualización, por que no virtualizar nuestra base de datos Oracle? Miedo, temor?  Aunque el boom de la tecnología es virtualizar, nuestras preocupación en base de datos de Oracle es que si no se degradará el rendimiento. En este blog vamos analizar un ambiente virtual con VMWARE.

VMWARE ofrece excelente características como el VMotion, Alta Disponibilidad y Tolerancia a Fallos, en resumen para los que no tenemos un Oracle RAC (pobre y humildemente tenemos una SE , SEO o SE2) o no tenemos un Apliance de Oracle, VMWARE es la mejor opción para implementar estrategia de continuidad del negocio. No trataremos temas de licencias, pero solo para su conocimiento Oracle no certifica a VMWARE como virtualizador para sus productos(Para mas información leer el link de Oracle  Doc ID 249212.1),  resumiéndoles no es que Oracle no da soporte sino es que si el problema (Tipico ORA-600) no esta dentro su base de soluciones Oracle solicitará recrear el ambiente en uno certificado para investigar y dar solución.

Bueno, volviendo a nuestros temores de virtualizar la base de datos, como saber si no tendremos problemas de rendimiento? No hay mejor forma que probando el producto, para ello necesitamos un servidor y la herramienta VMWARE. El laboratorio a realizar es probar la base de datos física y virtual en el mismo servidor.  Por ahí conseguí un servidor de préstamo y descargue la versión de prueba de VMWare y pedi ayuda a un amigo experto en VMWARE para realizar la instalación adecuada del producto.



Equipo
HP DL360
Procesador
e5-2637 – 3ghz (2 core)
Discos
4 discos SAS 3.5  10k  de 500
RAM
20G


Ahora como vamos a probar la BD? pues lo mejor es usar herramientas de strees, en mi caso use la Benchmark Factory for Database de Quest(Version de prueba 30 días)que sirve para motores de BD Oracle, Sql Server, MySql, Etc. La herramiente presta varios planes preconfigurados segun el tipo de BD OLTP u OLAP en donde seleccionamos lo planes  para carga de datos, transacciones y consultas, estos planes pueden ser modificados a nuestra conveniencia. Para nuestro laboratorio se establecio un plan de trabajo para BD OLTP con un inicio de 5 usuarios incrementando en 5 usuarios hasta llegar a los 80 usuarios recurrentes. Esto quiere decir que cada usuario conectado ejecutará el plan de trabajo (Inserts, Updates, Delete y Select)  de manera simultanea hasta llegar al nuemro de 80 usuarios. Con esta prueba podemos evaluar el tiempo promedio de respuesta de las transacciones y monitorear el host para ver el consumo de procesador, latencia de discos, uso de memoria entre otros.

Voy a mostrar los resultados de la prueba de strees realizada, en ella se motrará en el eje X la carga de usuarios y en el eje Y los valores del test.




Comparativo de prueba de stress database
Virtual en VMWARE
SO WS2012 STD
Ram 20GB
2Cores
BD Oracle 12.1.0.2
Memory 10G
Equipo Físico
SO WS2012 STD
20GB
2 Cores
BD Oracle 12.1.0.2
Memory 10G
Promedio de transacciones x segundo
Tiempo promedio de respuestas a grupo de transacciones
Bloques por Segundo
Bytes por Segundo



La herramiente Benchmark Factory arroja los resultados:
  • Promedio de transacciones x segundo. Numero promedio que se ejecutaron por cada grupo de usuarios.
  • Tiempo promedio de respuestas a grupo de transacciones. Segun el plan que se eligio tiene un cierto grupo de transacciones configuradas las cuales de promedia el tiempo de respuesta.
  • Bloques por Segundo. Cuanto bloques por segundo se procesaron.
  • Bytes por Segundo. Cuanto bytes por segundo se procesaron.
Si los comparamos entre el virtual y el fisico (El cual se uso el mismo equipo) las diferencias son considerables, el rendimiento es conforme aumenta la carga de usuario es mucho mejor en el fisico que en el virtual.

Ahora no con esto quiero satanizar a lo virtual, solo hay que evaluar el hardware con el que vamos a virtualizar para ver si cumple con las espectativas a nivel de rendimiento. Claro que en mi caso que trabajo en una mediana empresa por mas que quiera adquirir un mejor hardware el presupuesto no me lo permite, por ello no considero la virtualización de la BD.

Espero les sisrva como referencia de las previsiones del caso antes de tomar la decisión de virtualizar la base de datos con el fin tener el equipo idoneo que ofresca el mejor rendimiento.


domingo, 20 de marzo de 2016

Instalacion ASM + Instancia Oracle 12C en sistema operativo Windows 2012

Hola,

Vamos a realizar la instalación de la infraestructura Oracle 12C lo que comprende:

  • Instalacion SO Windows Server 2012.
  • Instalacion y configuración del GRID para la instancia ASM.
  • Instalacion y configuración de la base de datos Oracle 12C SE2 que acceda al repositorio ASM
Esta instalación la vamos a realizar sobre  un sistema operativo Windows Server 2012, el cual tambien lo vamos a instalar dando las especificaciones y recomendaciones necesarias.

Requisitos de Softwre
  • WS2012:
  1.  https://www.microsoft.com/es-es/evalcenter/evaluate-windows-server-2012-r2
  •  Oracle Grid 12C. Instaladores para la gestion del ASM de Oracle
  1. http://download.oracle.com/otn/nt/oracle12c/121020/winx64_12102_grid_1of2.zip
  2. http://download.oracle.com/otn/nt/oracle12c/121020/winx64_12102_grid_2of2.zip
  •  Oracle 12C SE2. Instaladores del motor de BD Oracle
  1.  http://download.oracle.com/otn/nt/oracle12c/121020/winx64_12102_SE2_database_1of2.zip
  2.  http://download.oracle.com/otn/nt/oracle12c/121020/winx64_12102_SE2_database_2of2.zip


Arquitectura a implementar
El siguiente grafico esquematiza la arquitectura Oracle que vamos a implementar, los volumenes de discos no seran gestionados por el SO, sino por la instanacia ASM, para ello habra que presentarselos en crudo al ASM. Con esto ya se tendrá un almacenamiento centralizado gestionado por Oracle que podremos utilizar para que la o las instancias que creemos utilicen como almacenamiento el ASM.



A continuacion las especificaciones definidas para el servidor:
  • Memoria 6Gb
  • Procesador 1
  • Almacenamiento
  1. Disk 0 60Gb   Instalacion de SO
  2. Disk 1 40GB   Instalacion de los binarios de Oracle
  3. Disk 2 400GB Disco para el almacenamiento ASM, este no se presentará el SO, sino que será presentado al SO
 
Ahora si, una vez obtenido todos los instaladores procederemos a realizar la instalacion y configuración del SO. Posterior a esto realizaremos la instalación de la arquitectura Oracle.

Instalación SO Windows Server 2012
La instalación del SO es muy sencilla, solo tenemos que tener en cuenta lo siguiente:
  • Instalar la versión Windows Server 2012 SE (servidor con GUI). Esta versión nos permite tener la consola gráfica para administrar el servidor.
  • Seleccionar el volumen donde se instalará el SO.
  • Desactivar el firewall de windows.
  • Configurar el dominio, grupo de trabajo o nombre del equipo de ser necesario.
  • Si necesita realizar alguna configuración de red, como recomendación realizarlo antes de instalar Oracle.



Recomendaciones adicionales:
  • Desactiva UAC: Desde el regedit "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system" setear en 0 el valor enableUA
  • Instalar el runtime de java https://www.java.com/es/download/


Instalación Oracle Grid

La instalación de la infraestrutura Grid consiste en:
  • Preparación del los discos para ASM
  • Instalación del software Oracle Grid

Instalación y Configuración de base de datos Oracle con repositorio ASM
A continaución la instalación del motor de base de datos y la configuración de una instancia.
 

miércoles, 1 de julio de 2015

Creación de un archivo PDF desde PL/SQL de Oracle


Es posible generar archivos PDF desde Oracle?

Buscando por la web encontre un paquete AS_PDF que permite generar archivos PDF con el formato que necesitemos, viendo los ejemplos es muy completa y la podemos adaptar a nuestras necesidades, pero dependiendo del contenido va a depender la complejidad de armar un archivo PDF.

Este post fue realizado con la referencia de ejemplos de la siguiente pagina:
https://technology.amis.nl/2010/10/20/as_pdf-generating-a-pdf-document-with-some-plsql/

Voy a dar unos ejemplos sencillos de como utilizar el paquete, pero antes de usar los ejemplos  primero hay que descargar el código del paquete AS_PDF_MINI y compilarlo:
AS_PDF_MINI.PKS
AS_PDF_MINI.PKB

Creación archivo PDF con AS_PDF_MINI

Una vez creado el paquete AS_PDF_MINI tenemos que definir un directorio en el host y crear el directorio en la BD para poder guardar los archivos PDF generados.

Directorio del host de BD D:\PDF

Creamos el directorio en la BD

CREATE OR REPLACE DIRECTORY PDF AS 'D:\PDF';

Ejemplo 1
Generación de un archivo PDF simple
begin
as_pdf_mini.init;
as_pdf_mini.write( 'Esto es una prueba para la creacion de un PDF desde una rutina PL/SQL.' );
as_pdf_mini.write( 'Por cada linea escrita por as_pdf_mini.write() se agrega en la linea siguiente. Sin embargo el texto se ajuasta automaticamente en la nueva linea .' );
as_pdf_mini.write( 'Tambien existe la posibilidad de poner el texto en cualquier lugar ubicando las coordenadas', -1, 700 );
as_pdf_mini.write( 'Asi es', 100, 650 );
as_pdf_mini.write( 'Tambien tienes la capacidad de alinear el texto a las izquierda, derecha y centrada', p_y => 600, p_alignment => 'right' );
--P_DIR directorio donde se almacenara el archivos,P_FILENAME nombre del archivo
as_pdf_mini.save_pdf(p_dir=>'PDF',p_filename=>'EjemploPDF.pdf');
end;

El archivo EjemploPDF.PDF se generará en la ruta D:\PDF
Ejemplo del archivo generado


Ejemplo 2
Creaciónn de lineas verticales y horizontales
begin
    as_pdf_mini.init;
    for i in 1 .. 10 loop
        as_pdf_mini.horizontal_line( 30, 700 - i * 15, 100, i );
    end loop;
    for i in 1 .. 10 loop
        as_pdf_mini.vertical_line( 150 + i * 15, 700, 100, i );
    end loop;
    for i in 0 .. 255 loop
        as_pdf_mini.horizontal_line( 330, 700 - i, 100, p_line_color => to_char( i, 'fm0x' ) || to_char( i, 'fm0x' ) || to_char( i, 'fm0x' ) );
    end loop;
    --P_DIR es el directorio donde se almacenara los archivos,P_FILENAME es el nombre del archivo que se va a generar
    as_pdf_mini.save_pdf(p_dir=>'PDF',p_filename=>'EjemploPDF_2.pdf');
end;

El archivo EjemploPDF_2.PDF se generará en la ruta D:\PDF
Archivo generado

Ejemplo 3
Manejo de los tipo de lestras y fornato de hoja
begin
as_pdf_mini.init;
--p_format formato de la hoja, p_orientation direccion de la hoja PORTRAIT o LANDSCAPE
AS_PDF_MINI.SET_FORMAT(p_format=>'A4',p_orientation=>'PORTRAIT');
as_pdf_mini.write( 'La versión mini de AS_PDF se limita a los 14 PDF- fuentes estándar y la codificación WINDOWS- 1252.' );
as_pdf_mini.set_font( 'helvetica' );
as_pdf_mini.write( 'helvetica, normal: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, 700 );
as_pdf_mini.set_font( 'helvetica', 'I' );
as_pdf_mini.write( 'helvetica, italic: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 );
as_pdf_mini.set_font( 'helvetica', 'b' );
as_pdf_mini.write( 'helvetica, bold: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 );
as_pdf_mini.set_font( 'helvetica', 'BI' );
as_pdf_mini.write( 'helvetica, bold italic: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 );
as_pdf_mini.set_font( 'times' );
as_pdf_mini.write( 'times, normal: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, 625 );
as_pdf_mini.set_font( 'times', 'I' );
as_pdf_mini.write( 'times, italic: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 );
as_pdf_mini.set_font( 'times', 'b' );
as_pdf_mini.write( 'times, bold: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 );
as_pdf_mini.set_font( 'times', 'BI' );
as_pdf_mini.write( 'times, bold italic: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 );
as_pdf_mini.set_font( 'courier' );
as_pdf_mini.write( 'courier, normal: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, 550 );
as_pdf_mini.set_font( 'courier', 'I' );
as_pdf_mini.write( 'courier, italic: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 );
as_pdf_mini.set_font( 'courier', 'b' );
as_pdf_mini.write( 'courier, bold: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 );
as_pdf_mini.set_font( 'courier', 'BI' );
as_pdf_mini.write( 'courier, bold italic: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 );
--
as_pdf_mini.set_font( 'courier' );
as_pdf_mini.write( 'symbol:', -1, 475 );
as_pdf_mini.set_font( 'symbol' );
as_pdf_mini.write( 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 );
as_pdf_mini.set_font( 'courier' );
as_pdf_mini.write( 'zapfdingbats:', -1, -1 );
as_pdf_mini.set_font( 'zapfdingbats' );
as_pdf_mini.write( 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 );
--
as_pdf_mini.set_font( 'times', 'N', 20 );
as_pdf_mini.write( 'times, normal with fontsize 20pt', -1, 400 );
as_pdf_mini.set_font( 'times', 'N', 6 );
as_pdf_mini.write( 'times, normal with fontsize 5pt', -1, -1 );
--P_DIR es el directorio donde se almacenara los archivos,P_FILENAME es el nombre del archivo que se va a generar
as_pdf_mini.save_pdf(p_dir=>'PDF',p_filename=>'EjemploPDF_3.pdf');
end;

El archivo EjemploPDF_3.PDF se generará en la ruta D:\PDF

Ejemplo 4
Inserción de una imagen en el documemento PDF, para ello ubicaremos una imagen BARCELONA.JPG dentro de la ruta del host D:\DMP para que sea leida e insertada en el documento.
begin
    as_pdf_mini.init;
    as_pdf_mini.set_format(p_format=>'A4',p_orientation => 'PORTRAIT');
    as_pdf_mini.put_image (p_dir=> 'PDF',p_file_name=>'BARCELONA.jpg',p_x=>130, p_y => 500);  
    as_pdf_mini.set_font( 'times', 'N', 24 );
    as_pdf_mini.write( p_txt=>'BARCELONA CAMPEON', p_Y=> 500,  p_alignment=>'center' );
    --se presenta imagen en dimension especifica

    as_pdf_mini.put_image (p_dir=> 'PDF',p_file_name=>'BARCELONA.jpg',p_x=>10, p_y => 300, p_width=>100,  p_height=>100); 
    as_pdf_mini.save_pdf(p_dir=>'PDF',p_filename=>'EjemploPDF_4.pdf');
end;

El archivo EjemploPDF_4.PDF se generará en la ruta D:\PDF