有一个需求是,每天定时要把oracle某张表里的数据按要求导出成txt文件,放在aix主机指定目录下。目录需要定时创建和删除的。这个目录是按日期来命名的,text文件也按日期来命名。请问怎么搞啊?能都写到存储过程里用job定时执行吗?我什么都不懂,请大家多多赐教,谢谢!
------解决方案--------------------
oracle可以在directory中实现这个功能
但是你的做法反过来会更好,即,用shell来执行存储过程,而不是用存储过程调用shell
操作系统中可以设置定时任务,比oracle的job更加稳定
------解决方案--------------------
给你一个大概思路吧 。 你自己需要去改造
创建一个back.sql
vi /mnt/back.sql
=============文件内容开始===========================
spool mnt/xx.txt(这里存在问题,如何放在对应日期的文件中)
select t.bdz_id,t.bianma,t.mingzi from ms_biandianzhanaaa t;
spool off
exit
=============文件内容结束===========================
创建一个back.sh
vi /mnt/back.sh
=============文件内容开始===========================
#!/bin/sh
export ORACLE_SID=orcl
export ORACLE_HOME=/oracle/product/11.2.0/db_1
FILEDATE=`date +%Y%m%d`
FILEDATE2=`date +%Y%m%d -d '1 days ago'`
mkdir -p /mnt/$FILEDATE
rm -rf /mnt/$FILEDATE2
sqlplus user/pwd@orcl @/mnt/back.sql
rem shopping创建完毕
exit
=============文件内容结束===========================
chmod +x /mnt/back.sh
crontab -e
0 12 * * * /mnt/back.sh
------解决方案--------------------
#7 的例子,就很具有代表性。
至于说,为什么 crontab 比 job(scheduler)好,这个更多的时候是个人的习惯:
1. 9i 以前的版本,只能使用 job ,它不能调用 OS 命令,10g 开始就可以调用 OS 命令,其实还是 shell ;
2. 要单独的使用 utl_file 的话,你得配置 directory ,无形中又多一个步骤;
3. job 这个东西,会不定的变成 breaken,你翻一下论坛,这样的例子不算少,问题比较难查找,当然了,你是高手的话,可以忽略这条);