一、簡單后台執行。
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/7328508http://blog.sina.com.cn/s/blog_a97aa69e01015wwb.html
版權聲明:本文為博主原創文章,未經博主允許不得轉載。