Thứ Sáu, 24 tháng 9, 2021

Thực thi lệnh OS từ PL/SQL trong Oracle Database

Mục đích: Bài viết này hướng dẫn bạn thực thi lệnh OS từ PL/SQL code block

connect system/oracle_4U

1. Tạo thủ tục kiểu Java:

CREATE OR REPLACE JAVA SOURCE NAMED "ExecuteCmd" as
 import java.lang.Runtime;
 import java.lang.Process;
 import java.io.IOException;
 import java.lang.InterruptedException;
 public class ExecuteCmd {
      public static void main(String args[]) {
          System.out.println("Start executing");
          try {
              Process p = Runtime.getRuntime().exec(args[0]);
                try {
                p.waitFor();}
              catch (InterruptedException intexc) {
                 System.out.println("Interrupted Exception on waitFor: " +  intexc.getMessage());}
                 System.out.println("Return code from process: "+ p.exitValue());
                 System.out.println("Done executing");}
              catch (IOException e) {
                 System.out.println("IO Exception from exec: " + e.getMessage());
                 e.printStackTrace();}
              }
     }
 /

2. Tạo PL/SQL wrapper function gọi đến thủ tục java 

CREATE OR REPLACE PROCEDURE execcmd (S1 VARCHAR2) 
   AS LANGUAGE JAVA 
   name 'ExecuteCmd.main(java.lang.String[])'; 

--Grant the JVM permission to interface with the operating system. Notice the first 
--   grants give the JVM permission to call rm,ls and kill. You will have to add any OS commands
--   that you want executed using this format.
exec dbms_java.grant_permission( 'SYSTEM', 'SYS:java.io.FilePermission', '/bin/rm','execute')
exec dbms_java.grant_permission( 'SYSTEM', 'SYS:java.io.FilePermission', '/bin/ls','execute')
exec dbms_java.grant_permission( 'SYSTEM', 'SYS:java.io.FilePermission', '/bin/kill','execute')
exec dbms_java.grant_permission( 'SYSTEM', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' )
exec dbms_java.grant_permission( 'SYSTEM','SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '' )
exec dbms_java.grant_permission( 'SYSTEM','SYS:java.lang.RuntimePermission', 'readFileDescriptor', '' )

create public synonym execcmd for execcmd;

grant execute on execcmd to public;

3. Tạo tablespace EXAMPLE test

select * from dba_data_files;

create tablespace example datafile '/u01/app/oracle/oradata/db12c/example01.dbf' size 10m autoextend on next 1M ;

4. Test xóa datafile

-- Delete a datafile but leave the database open
--set echo on
--set serveroutput on
set termout on
set feed on
--set feed off
set echo off
--set termout off

DECLARE
v_cmd varchar2(300);

BEGIN
execute immediate 'alter system switch logfile';
execute immediate 'alter system switch logfile';
select '/bin/rm -f '||dfile into v_cmd from
   (select rownum "NUM",a.name "DFILE", b.name "TBS"
    from v$datafile a join v$tablespace b using (ts#)
    where b.name='EXAMPLE'
            and a.name not like '+%')
    where num=1;
dbms_output.put_line(v_cmd);   
execcmd(v_cmd);
execute immediate 'alter system flush buffer_cache';
execute immediate 'alter system checkpoint';
 END;
 /

PROMPT "Data file deleted. Wait a couple minutes before proceeding."
PROMPT "Database should be open."

exit

Từ đó bạn có thể tự viết các thủ tục theo nhu cầu của mình.

Hy vọng hữu ích cho bạn.
=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, oracle oca, oracle ocp, oracle ocm

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master