linux 后台執行oracle sql腳本


一、簡單后台執行。

nohup  sqlplus   Oracle/Oracle@orcl   @sql.sql     &

--這樣的寫法會報錯(Error 45 initializing SQL*Plus Internal error) 

今天打算寫個后台執行清理單張表和備份sql腳本。發現一直報錯,網上也沒有具體的修改方法。

后來到別的博客去看看,有別的辦法可以解決:


二、編寫shell腳本和數據庫sql腳本

1、table_clear_data.sql和clear_data.sh上傳到oracle用戶,目錄為/opt/oracle/


2、clear_data.sh 腳本內容:

#!/bin/sh
sqlplus myname/pass <<EOF
@/opt/oracle/tabel_clear_data.sql;
EOF


3、table_clear_data.sql數據庫腳本內容:

--備份表
create table mytabel_all_201401
NOLOGGING
as (select * from mytabel);

--1、刪除不要的數據
delete from mytabel t where t.start_time < to_date('2012-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss') ;
commit;

--備份清理后的數據
create table mytabel _201401
NOLOGGING
as (select * from mytabel  );


--清空mytabel ,釋放空間--超過1千萬的表,需要truncate才能釋放表空間,提高查詢更新等效率。delete沒用,沒有釋放全部空間。
truncate table mytabel ;


--導入剛剛備份的數據到mytabel 
insert into mytabel  select * from mytabel _201401;
commit;


三、上傳文件並執行腳本

1、table_clear_data.sql和clear_data.sh上傳到oracle用戶主目錄下的/opt/oracle/目錄);

目錄必須正確,因為clear_data.sh腳本指定了該目錄。

 

2、賦予權限和轉碼

chmod 777 clear_data.sh    table_clear_data.sql

 dos2unix  clear_data.sh    table_clear_data.sql


3、用oracle用戶登錄,執行腳本命令

su - oracle

cd/opt/oracle/

nohup./clear_data.sh &        --必須加&符號,數據量大的話后台執行。

 

4、可以用tail -f nohup.out 查看當前執行的情況。



在網上參考的.sh腳本有別的寫法,有時間再試試。

http://blog.csdn.net/hj402555749/article/details/7328508

http://blog.sina.com.cn/s/blog_a97aa69e01015wwb.html


版權聲明:本文為博主原創文章,未經博主允許不得轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM