Sign in or 

Ejecutar desde un procedimiento o paquete de base de datos Oracle, scripts de S.O.Pre-requisitos de implementación:
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.
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
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;
/
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; } } }
/
create or replace function RUN_CMD(p_cmd in varchar2)
return number as
language java name 'Util.RunThis(java.lang.String) return integer';
/
create or replace procedure RC(p_cmd in varchar2) as
x number;
begin
x := run_cmd(p_cmd);
end;
/
[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]$
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]$
[oracle@test scripts]$ more pasar_archivo.sh
#!/bin/sh
# Proceso para envio de archivos TXT
# 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]$
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)
|
rvargas@cemaco.co.cr |
Latest page update: made by rvargas@cemaco.co.cr
, Feb 4 2009, 12:27 PM EST
(about this update
About This Update
1 word added 3 words deleted view changes - complete history) |
|
Keyword tags:
scripts shell procedure
More Info: links to this page
|