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/7328508http://blog.sina.com.cn/s/blog_a97aa69e01015wwb.html
版权声明:本文为博主原创文章,未经博主允许不得转载。