Ronald_Vargas_CRThis is a featured page

Creación de ambiente de Pruebas y Producción

Ejecución de scripts-shell

desde Procedimiento o Paquete de base de datos

Oracle 9i R2 9.2.0.7

Linux Red Hat Enterprise Server 4 y 5

Objetivo:


Ejecutar desde un procedimiento o paquete de base de datos Oracle, scripts de S.O.


Pre-requisitos de implementación:


Los paquetes de Java de la base de datos, deben estar en estado “VÁLIDO” y para esta prueba e implementación se tiene la base de datos parchada con el patch set 6. ( 9.2.0.7 ). En esencia debería funcionar con un patch set superior.

SQL> column comp_name format a60

SQL> select comp_name, status, version from dba_registry;

COMP_NAME STATUS VERSION
------------------------------------------------------------ ----------- ---------
Oracle9i Catalog Views VALID 9.2.0.7.0
Oracle9i Packages and Types VALID 9.2.0.7.0
Oracle Workspace Manager VALID 9.2.0.1.0
JServer JAVA Virtual Machine VALID 9.2.0.7.0
Oracle XDK for Java VALID 9.2.0.9.0
Oracle9i Java Packages VALID 9.2.0.7.0
Oracle interMedia VALID 9.2.0.7.0 Spatial VALID 9.2.0.7.0
Oracle Text VALID 9.2.0.7.0 Oracle XML Database VALID 9.2.0.7.0

Debemos contar con acceso al sistema operativo con el usuario root ó el dueño de los scripts.

Cuenta con privilegios de DBA en la base de datos y de ser necesario, cuenta y password del esquema en donde se implementará el llamado del paquete.

Creación ambiente de prueba:

Vamos a crear un ambiente rápido de pruebas, para verificar el funcionamiento de los paquetes. Con la cuenta DBA, procedemos a otorgar los permisos de ejecución a los paquetes de la base de datos sobre los directorios de trabajo del sistema operativo, así como definimos el usuario de base de datos a utilizar dichos permisos.

Con el siguiente bloque, vamos a definir los permisos de ejecución, lectura y escritura sobre todos los archivos que se encuentren en el directorio /opt/oracle/scripts, /opt/oracle/files, /opt/oracle/files/historico, /opt/oracle/files/bitacora, al esquema “CEMACONAF”.

begin

dbms_java.grant_permission

('CEMACONAF',

'java.io.FilePermission',

'/opt/oracle/scripts/*',

'execute');

dbms_java.grant_permission

('CEMACONAF',

'java.io.FilePermission',

'/opt/oracle/scripts/*',

'execute');

dbms_java.grant_permission

('CEMACONAF',

'java.lang.RuntimePermission',

'*',

'writeFileDescriptor' );

-- try to accomodate input redirection

dbms_java.grant_permission

('CEMACONAF',

'java.lang.RuntimePermission',

'/opt/oracle/scripts/*',

'readFileDescriptor' );

-- try to accomodate input/output redirection

dbms_java.grant_permission

('CEMACONAF',

'java.io.FilePermission',

'/opt/oracle/scripts/*',

'read,write');

-- commit;

end;

/


begin

dbms_java.grant_permission

('CEMACONAF',

'java.io.FilePermission',

'/opt/oracle/files/historico/*',

'execute');

dbms_java.grant_permission

('CEMACONAF',

'java.io.FilePermission',

'/opt/oracle/files/historico/*',

'execute');

dbms_java.grant_permission

('CEMACONAF',

'java.lang.RuntimePermission',

'*',

'writeFileDescriptor' );

-- try to accomodate input redirection

dbms_java.grant_permission

('CEMACONAF',

'java.lang.RuntimePermission',

'/opt/oracle/files/historico/*',

'readFileDescriptor' );

-- try to accomodate input/output redirection

dbms_java.grant_permission

('CEMACONAF',

'java.io.FilePermission',

'/opt/oracle/files/historico/*',

'read,write');

-- commit;

end;

/

begin

dbms_java.grant_permission

('CEMACONAF',

'java.io.FilePermission',

'/opt/oracle/files/bitacora/*',

'execute');

dbms_java.grant_permission

('CEMACONAF',

'java.io.FilePermission',

'/opt/oracle/files/bitacora/*',

'execute');

dbms_java.grant_permission

('CEMACONAF',

'java.lang.RuntimePermission',

'*',

'writeFileDescriptor' );

-- try to accomodate input redirection

dbms_java.grant_permission

('CEMACONAF',

'java.lang.RuntimePermission',

'/opt/oracle/files/bitacora/*',

'readFileDescriptor' );

-- try to accomodate input/output redirection

dbms_java.grant_permission

('CEMACONAF',

'java.io.FilePermission',

'/opt/oracle/files/bitacora/*',

'read,write');

-- commit;

end;

/


Una vez creados los permisos, procedemos a crear el paquete que utilizaremos para el llamado de los scripts desde la base de datos.

El script fue tomado del blog de:


http://asktom.oracle.com/pls/asktom

http://www.erpschools.com/Shell_Script_from_database_procedure_PL_SQL.asp

create or replace and compile java source named "Util"

as

import java.io.*;

import java.lang.*;

public class Util extends Object

{

public static int RunThis(String args)

{

Runtime rt = Runtime.getRuntime();


int rc = -1;

try

{

Process p = rt.exec(args);

int bufSize = 4096;

BufferedInputStream bis =

new BufferedInputStream(p.getInputStream(), bufSize);

int len;

byte buffer[] = new byte[bufSize];


// Echo back what the program spit out

while ((len = bis.read(buffer, 0, bufSize)) != -1)

System.out.write(buffer, 0, len);

rc = p.waitFor();

}

catch (Exception e)

{

e.printStackTrace();

rc = -1;

}

finally

{

return rc;

}

}

}

/


Luego vamos a crear la función con la cuál haremos el llamado de los scripts:


create or replace function RUN_CMD(p_cmd in varchar2) return number

as

language java

name 'Util.RunThis(java.lang.String) return integer';

/

Vamos a crear el procedimiento que ejecutará la llamada a la función anterior

create or replace procedure RC(p_cmd in varchar2)

as

x number;

begin

x := run_cmd(p_cmd);

end;

/


Vamos a crear un pequeño script, para realizar la prueba de ejecución:

[oracle@test scripts]$ more escribe.sh

#!/bin/sh

echo "Hola como estas, esto se escribe desde la base de datos" > /opt/oracle/scripts/texto.txt

[oracle@test scripts]$

[oracle@test scripts]$ ls -la escri* pasar*

-rwxr-xr-x 1 oracle oinstall 105 Feb 4 08:25 escribe.sh

-rwx------ 1 oracle oinstall 865 Feb 4 08:27 pasar_archivo.sh

[oracle@test scripts]$


Este script, deberá crear un archivo en la ruta especificada con el parámetro del comando “echo” incluido en el mismo.

Luego simplemente llamamos a al procedimiento desde la base de datos, logeados con el usuario del esquema al cuál le dimos permisos.


SQL> execute rc('/opt/oracle/scripts/escribe.sh');

PL/SQL procedure successfully completed.

[oracle@test scripts]$ more texto.txt

Hola como estas, esto se escribe desde la base de datos

[oracle@test scripts]$

Ahora vamos a realizar las pruebas con un script más complejo, que se encargue de llamar a un procedimiento de la base de datos, se conecte a un servidor ftp y traslade el contenido del procedimiento ejecutado, dejando un historial de los archivos creados y escribiendo a una bitácora.

[oracle@test scripts]$ more pasar_archivo.sh

#!/bin/sh

# Proceso para envio de archivos TXT Cacto

# Hecho 03 de Febrero de 2009

# Ronald Vargas

# Archivo de autologin /opt/oracle/.netrc

# Generacion de datos llamando a procedimiento almacenado de la BD

# creado por JCH en el esquema CEMACONAF

echo 'Hora de inicio '>>/opt/oracle/files/bitacora/bitacora_proceso.txt

date >>/opt/oracle/files/bitacora/bitacora_proceso.txt

sqlplus cemaconaf/$PASS <<EOF

execute pvarchivo_cacto('01');

exit;

EOF

cd /opt/oracle/files

# Traslado automatico de archivos a servidor FTP

ftp cacto <<EOF

ascii

prompt off

mput *.txt

dir

bye

EOF

# Pasa archivos a control historico

mv /opt/oracle/files/*.txt ./historico/ 2>>/dev/null

echo "Proceso de Traslado de archivos concluido"

echo 'Hora de Finalizacion '>>/opt/oracle/files/bitacora/bitacora_proceso.txt

date >>/opt/oracle/files/bitacora/bitacora_proceso.txt

[oracle@test scripts]$


El archivo .netrc, contiene el usuario utilizado para conectarse haciendo autologin en elservidor FTP.

[oracle@test ~]$ more .netrc

machine cacto login $USER password $PASS

[oracle@test ~]$

Nota:

Las variables $USER y $PASS, deben ser sustituidas por los valores verdaderos a utilizar.


Otras Aplicaciones:


Podemos utilizar el mismo procedimiento para dar permisos de ejecución a comandos del sistema operativo, como en el ejemplo a continuación:

SQL> begin

2 dbms_java.grant_permission

3 ('CEMACONAF',

4 'java.io.FilePermission',

5 '/usr/bin/who',

6 'execute');

7 end;

8 /

PL/SQL procedure successfully completed.

SQL> execute rc('/usr/bin/who');

root :0 Sep 18 15:39

root pts/1 Sep 18 15:41 (:0.0)

root pts/2 Feb 3 17:59 (t1_rvargas.red.co.cr)

PL/SQL procedure successfully completed.


TUX

Configuración de Red Hat ES 4.0 para instalar Oracle RDBMS 9i R 2 9.2.0.8

Hecho por: Ronald Vargas Q. / DBA Rige a partir de: 01 de Enero de 2008

La instalacion de Red Hat Enterprise Server 4.0, consta del vaciado de los discos númerados del 1 al 4.

Durante la instalación del RHES, se crean los sistemas de archivos necesarios para la instalación del Oracle, según un patrón parecido al siguiente:


[oracle@sedna Disk1]$ df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 8641696 6393552 1809168 78% /
/dev/sda1 101086 8658 87209 10%
/boot none 257884 0 257884 0%
/dev/shm /dev/sdb2 14974792 2031248 12182868 15% /opt

El root, debe contemplar suficiente espacio, como para instalar la totalidad del software de los 4 cd's, que suma apróximadamente 6 Gb y cerca de 2GB de espacio temporal, requerido para la instalación de Oracle.

En el ejemplo de distribucción anterior, el sistema de archivos “/opt”, será el utilizado para la instalación del motor de la base de datos.

El swaping, debe ser configurado con el doble de la memoria física instalada en el servidor, hasta un máximo de 2.5GB.

Configuración del S.O. para instalación de Oracle RDBMS

Una vez instalado el S.O., se procede con los siguientes pasos de configuración:

-----------------1 PASO -------------------- /etc/sysctl.conf

login as: root root@172.20.1.15's password:

[root@alpha ~]# cd /etc [root@alpha etc]# more sysctl.conf

# Kernel sysctl configuration file for Red Hat Linux

#

# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and

# sysctl.conf(5) for more details.

# Controls IP packet forwarding net.ipv4.ip_forward = 0

# Controls source route verification net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename.

# Useful for debugging multi-threaded applications.

kernel.core_uses_pid = 1

------------------ Parámetros que deben ser ingresados

# Parametros del Kernel para Oracle

kernel.sem = 250 32000 100 128

kernel.shmmax = 2147483648

kernel.shmmni = 4096

kernel.shmall = 2097152

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

# Tunning parametros RVQ 2008

net.core.rmem_default=262144

net.core.wmen_default=262144

net.core.rmem_max=262144

net.core.wmem_max=262144

fs.aio-max-size=1048576

-------------2 PASO ----------------

/etc/security/limits.conf

[root@alpha etc]# clear screen

[root@alpha etc]# cd security

[root@alpha security]# more limits.conf

# /etc/security/limits.conf

[root@alpha security]# vi limits.conf ...

# Parametros de Oracle, setting por RVQ-2008

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 4096

oracle hard nofile 63536

# End of file [root@alpha security]#

IMPORTANTE:
Una vez cambiados los parámetros del sistema, se debe reiniciar el equipo, para que estos puedan ser seteados. Los parámetros del kernel, pueden ser actualizados con el comando: sysctl -p, pero recomiendo que reinicien completamente el equipo.

Creados los parámetros de ambiente, procedemos con el usuario “root” a crear la cuenta dueña del motor de la base de datos:

[root@sedna ~]# groupadd dba
[root@sedna ~]# groupadd oinstall
[root@sedna ~]# useradd -c “oracle software owner” -g oinstall -g dba oracle
[root@sedna ~]# passwd oracle

Creada la cuenta de oracle, vamos a crear en el directorio que hubieras decidido para instalar el motor de la base de datos, un directorio con el nombre de instaladores y le vamos a asignar como dueño al grupo y usuario de Oracle.

[root@sedna opt]$ mkdir /opt/instaladores

[root@sedna opt]$ chown -R oracle:oinstall /opt/instaladores

[oracle@sedna opt]$ ls -la

total 48

drwxr-xr-x 5 oracle oinstall 4096 Sep 2 11:14 .

drwxr-xr-x 25 root root 4096 Sep 2 10:42 ..

drwxr-xr-x 3 oracle oinstall 4096 Sep 2 11:01 instaladores

drwx------ 2 oracle oinstall 16384 Sep 1 11:29 lost+found

drwxrwxr-x 4 oracle oinstall 4096 Sep 2 11:13 product

[oracle@sedna opt]$

Se deben crear dentro del directorio instaladores, los directorios Disk1, Disk2 y Disk3, con la “D” Mayúscula, para que los tome la instalación en forma automática y copiar cada CD-ROM de instalación al respectivo directorio. Por experiencia, copiar los discos de instalación al hard disk, mejora considerablemente el tiempo de instalación del software, reduciéndolo a 1/3 parte.

[oracle@sedna RDBMS]$ ls -la

total 40

drwxr-xr-x 5 oracle oinstall 4096 Sep 2 09:32 .

drwxr-xr-x 3 oracle oinstall 4096 Sep 2 11:01 ..

drwxr-xr-x 7 oracle oinstall 4096 Sep 2 09:59 Disk1

drwxr-xr-x 3 oracle oinstall 4096 Sep 2 10:05 Disk2

drwxr-xr-x 3 oracle oinstall 4096 Sep 2 10:14 Disk3

[oracle@sedna RDBMS]$

----------3 PASO --------------- /$HOME/.bash_profile ( perfil usuario oracle )

login as: root root@172.20.1.6's

password: Last login: Tue Sep 2 10:43:42 2008

[root@sedna ~]# su - oracle

[oracle@sedna ~]$ more .bash_profile

# .bash_profile

# Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin export PATH

# Variables de ambiente Oracle

ORACLE_BASE=/opt export

ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/9.2.0

export ORACLE_HOME PATH=$ORACLE_HOME/bin:$PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

export PATH LD_LIBRARY_PATH ORACLE_HOME

LD_ASSUME_KERNEL=2.4.19

export LD_ASSUME_KERNEL

TMPDIR=/tmp

TMP=/tmp export

TMPDIR TMP

unset USERNAME

[oracle@sedna ~]$

PROCESO DE INSTALACION DEL SOFTWARE DE MOTOR DE BASE DE DATOS Fase 1

  1. Antes de iniciar la instalación en RHES 4.0 es necesario instalar el patch 4198954 que debe ser bajado de metalink.oracle.com. El patch trae consigo dos paquetes nuevos:
  • compat-libcwait-2.1-1.i386.rpm
  • ompat-oracle-rhel4-1.0-5.i386.rpm

Estos deben ser instalados con el usuario “root” con la opción: rpm -iv < nombre_paquete>.

Además tienen que tener a la mano el patch set 7 de Oracle 9i que es el número 4547809 para la versión de Linux que estan instalando ( 32bits/64bits), ya que este se necesita posteriormente.

Detalle de archivos:

drwxr-xr-x 3 oracle oinstall 4096 Sep 2 11:01 .

drwxr-xr-x 5 oracle oinstall 4096 Sep 2 11:14 ..

-rw-r--r-- 1 root root 4058 Nov 3 2005 compat-libcwait-2.1-1.i386.rpm

-rw-r--r-- 1 root root 3692 Feb 23 2005 compat-oracle-rhel4-1.0-5.i386.rpm

-rw-r--r-- 1 root root 5814 Sep 16 2007 p4198954_40_LINUX.zip

-rw-r--r-- 1 oracle oinstall 382660178 Jun 17 2007 p4547809_92080_LINUX.zip

[oracle@sedna instaladores]$

  1. Instalados los dos paquetes indicados, se debe abrir una sessión con el usuario “root”, para dar el acceso al ambiente gráfico al usuario “oracle”, con el siguiente comando:

xhost +

  1. Abrir una ventana nueva y logearse con el usuario “oracle”

su - oracle

  1. Vamos al directorio en donde se encuentra los discos de instalación:

[oracle@sedna ~]$ pwd /home/oracle [oracle@sedna ~]$ cd /opt/instaladores/R RDBMS/ README.txt [oracle@sedna ~]$ cd /opt/instaladores/RDBMS/Disk1 [oracle@sedna Disk1]$

  1. Ejecutamos el archivo de instalación

./runInstaller.sh

Continuamos con la instalación gráfica del motor de la base de datos.

Instalación del motor de la base de datos ORACLE Fase 2 Iniciar proceso de instalación.

Inicio de Instalación

Una vez ejecutado el script, aparece la pantalla de “Bienvenida” del Universal Installer de Oracle

Bienvenida OUI

Cuando escojen la opción next, les aparece la siguiente pantalla con las opciones del directorio de origen de los datos de instalación, el nombre genérico que le da Oracle al directorio de instalación y la ubicación en donde se instalará el software.

Continuando con la instalación le dan “next” y el OUI, cargará los programas que estan disponibles para instalar.

Ronald_Vargas_CR - Oracle Wiki

Los cd´s contienen el software para varios productos de Oracle, en el caso de nosotros, debemos escoger la opción de “Database”. En esta pantalla, también podemos escoger el soporte para otro lenguaje que queramos instalar con la base de datos.

Ronald_Vargas_CR - Oracle Wiki

Existen tres formas de instalar el software de base de datos y nuestra instalación dependerá del licenciamiento. En nuestro caso escogeremos la opción estandar del software.

Ronald_Vargas_CR - Oracle Wiki

En la siguiente pantalla, podremos definir, si deseamos crear y configurar una instancia de base de datos, con particularidades ya definidas “templates”. En nuestro caso escogeremos la opción de sólo software.

Ronald_Vargas_CR - Oracle Wiki

Finalmente, nos aparece la pantalla con el resumen de opciones de software que hemos escogido, junto con la información global, de los directorios de destino, tipo de lenguage y el espacio total requerido para la instalación.

Ronald_Vargas_CR - Oracle Wiki

Con esto queda instalado el software base de la base de datos. En el siguiente paso, deberemos instalar el patch set 7 ( 9.2.0.8 ), el cuál se hace siguiendo los mismos pasos aplicados para la instalación del motor. Lo único que se debe tener en cuenta, es bajar los servicios que Oracle haya levantado posterior a la instalación.

Básicamente, estamos hablando del “Agent” y del servicio “LISTENER”. Si estos estan corriendo, deben primero detenerse, antes de proceder con la instalación del patch set.

Una vez instalado el patch set a nivel del software del motor de la base de datos, hay que proceder con la aplicación a nivel de la instancia. En la siguiente entrega, les proporcionaré como realizar este procedimiento, en forma eficiente y efectiva, sin poner en peligro sus datos.

Gracias, RVQ-2008



rvargas@cemaco.co.cr
rvargas@cemaco.co.cr
Latest page update: made by rvargas@cemaco.co.cr , Feb 4 2009, 11:31 AM EST (about this update About This Update rvargas@cemaco.co.cr Edited by rvargas@cemaco.co.cr

1 image added

view changes

- complete history)
More Info: links to this page
There are no threads for this page.  Be the first to start a new thread.