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

lunes, 29 de junio de 2015

Instalar Oracle 12C ASM Grid y Base de Datos

Como instalar Oracle ASM 12C en windows?


ASM es la gestión automática del almacenamiento de los datos de la/las instancias de BD Oracle, esto quiere decir que las unidades de almacenamiento no van a ser gestionadas por SO si no por una instancia ASM Oracle.

Arquitectura ASM

SO Windows server 2008r2
RAM 10Gb
HD 60Gb para el SO
HD 100Gb para el almacenmaiento ASM.

Para esta instalación vamos a tener que realizar unas configuraciones como pre-requisitos para la instalación del ASM.

Oracle 12C ASM sobre un SO WS 2008R2, para ello tenemos primero realizar las descarga del software instalador del Grid y Base de Datos:
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/database12c-win64-download-2297732.html

Oracle Database 12c Release 1 (12.1.0.2.0) for Microsoft Windows (x64)
Descomprimir dentro de la carpeta c:\instaladores\database

Oracle Database Grid Infrastructure (12.1.0.2.0) for Microsoft Windows (x64)
Descomprimir dentro de la carpeta c:\instaladores\grid

Para mas información de lo que es ASM dejo el link siguiente:
http://oracle-y-yo.blogspot.com/2012/01/oracle-asm.html

Preparacion del SO

Instalar Java
https://www.java.com/es/download/

Modificar el archivo c:\Windows\System32\drivers\etc\host, agregar las siguinetes lineas

127.0.0.1 localhost
::1 localhost
127.0.0.1 oracle12c oracle12c.technologylair.com

Desactivar user account control UAC desde el panel de control.

Preparar los volumenes de disco (dejarlas en estado crudo sin formato) que van a ser gestionadas por el ASM,  en este ejemplo solo tenemos un disco de 100Gb que vamos a usar como espacio ASM y vamos a dividirlo en volumenes 90Gb para datos(DATA) y 10Gb para flash recovery(FRA).
Disco sin formatear, se dividara en 90Gb y 10Gb

Agregamos nuevo volumen

Indicamos el tamano

No se le asigna letra

No formateamos, lo dejamos en crudo


Repetimos los pasos para crear el otro volumen con el espacio faltante de 90Gb

Instalación de la infrastructura GRID

Preparacion de los volumenes
Con esto ya tendremos nuestros volumnes de 90Gb y 10Gb en estado RAW que seran presentados al ASM, para ello debemos de prepararlo, para ello vamos a descomprimir los instaladores de grid en la ruta c:\instaladores\grid, abrir una ventada CMD y ejecutar el asmtool.exe list.

  • c:\instaladores\grid\asmtool\asmtool.exe list


Tomamos los volumenes que no tienen formato \Device\Harddisk1\Partition1 y \Device\Harddisk1\Partition2 y vamos a agregarlo como volumenes disponibles para el ASM.
  • c:\instaladores\grid\asmtool\asmtool.exe -add  \Device\Harddisk1\Partition1 DATA_01
  • c:\instaladores\grid\asmtool\asmtool.exe -add  \Device\Harddisk1\Partition1 DATA_02


Instalación del software Oracle Grid
Ejecutar el setup.exe dentro de la carpeta c:\instaladores\grid\setup.exe

Omitimos las actualizaciones, si tienen una cuenta oracle la pueden activar

Instalar y Configurar infraestructura Grid para un Servidor Independiente

Seleccionamos el idioma
 En esta parte vamos a crear el grupo de discos DATA que va a servir de almacenamiento, ASM permite elegir el tipo de redundancia (RAID):

  • EXTERNAL: Necesitas 1 disco para crear 1 diskgroup. no permite fallos de discos
  • NORMAL: Necesitas 2 discos para crear 1 diskgroup. permite un fallo de discos
  • HIGH: Necesitas 3 discos para crear 1 diskgroup. permite hasta 2 fallos de discos

Todo depende del nivel de seguridad ante daños que se desea implementar o si el manejo del raid esta por hardware ya no necesitaras mantener una redundancia. En este ejemplo los crearemos como External.


Sleccionamos el volumen de 90Gb para el grupo DATA

Establecemos contraseña

Definimos el home de la instlacion



Siguiendo estos pasos ya tenemos lista la instancia ASM que sera la gestora del alamacenamiento, luego de esto procederemos a crear un grupo mas de discos que sera la Flash Recovery Area llamado FRA

Ejecutamos el asistente de configuracion de Gestion Automatica que esta dentro del Menu Inicio\Oracle-OraGI12Home1\Herramientas de Configuracion y Migracion.
Seleccionamos Crear
Seleccionamos el volumen de 10Gb y lo anexamos al nuevo grupo FRA
La FRA nos servidrá durante la instalación y creación de la instancia Oracle Database, como espacio de recuperación de Flash Recovery.

Instalación del software Oracle Database
Ejecutar el setup.exe dentro de la carpeta c:\instaladores\database\setup.exe

 
Si tenemos un usuario support lo podemos ingresar

Omitimos actualizaciones

Instalamos y creamos base de datos

Seleccionamos de tipo servidor

Instancia de tipo unica

Instalacion avanzada

Seleccionamos nuestros idiomas

Tipo de edicion de BD, en mi caso standart edition one

Seleccionamos que se cree con la cueta incorporada de windows


Seleccionamos el home del software Oracle Database

Selecionamos de tipo transaccional
En esta sección tenemos la opción de crear una instancia PDB que este dentro de una base contenedora CDB, si deseamo crear una base de la forma tradicional enconces de desmarca "Crear como Base de Datos el Contenedor"

Assignamos la memoria de la BD, como recomendación no mas del 60% de la física

Seleccionamos el juego de caracteres

Indicamos en donde se van a ubicar los datos de la BD, en este caso dentro del ASM.

Si tenemos un Cloud Control lo registramos si deseamo, en otro caso no lo marcamos

Seleccionamos DATA como repositorio de almacenamiento

Definimos la clave por usuario de base de datos o unica para todos los usuarios



Nos muestra la información de la base de datos que se creó.

Finalizar.

Listo, ya tenemos listo nuestra base de datos D7IPROD con almacenamiento ASM.

Probamos la conexion a la BD desde el SQLPLUS