定时truncate一个表

[复制链接]
查看11 | 回复9 | 2013-8-22 10:00:10 | 显示全部楼层 |阅读模式
谁知道怎么可以定时truncate一个表,操作系统linux AS4u2,数据库 oracle10g急用!
回复

使用道具 举报

千问 | 2013-8-22 10:00:10 | 显示全部楼层
还有这样的需求?
可以在数据库用JOB实现
也可在操作系统用CRONTAB实现
回复

使用道具 举报

千问 | 2013-8-22 10:00:10 | 显示全部楼层
如果写过程用job来实现,但是过程不支持Truncate操作,能帮我些个shell么,我会用crontab,但是写不好shell!
回复

使用道具 举报

千问 | 2013-8-22 10:00:10 | 显示全部楼层
最初由 liuwarrior 发布
[B]如果写过程用job来实现,但是过程不支持Truncate操作,能帮我些个shell么,我会用crontab,但是写不好shell! [/B]

动态SQL支持TRUNCATE。
回复

使用道具 举报

千问 | 2013-8-22 10:00:10 | 显示全部楼层
最初由 liuwarrior 发布
[B]如果写过程用job来实现,但是过程不支持Truncate操作,能帮我些个shell么,我会用crontab,但是写不好shell! [/B]

还是用JOB吧,方便,楼上也说了,要用动态SQL。
用shell也简单,写个sql语句,让sqlplus执行就是了。 两句话搞定
shell文件内容:
#这里设置你的Oracle环境变量
export ORACLE_HOME=/asdasdf/adf
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=xxx
sqlplus user/pass @trunc.sql
trunc.sql 中就是你的代码了:
truncate table mytable
回复

使用道具 举报

千问 | 2013-8-22 10:00:10 | 显示全部楼层
多谢xjg兄得指导,我在crobtab里面设了定时,奇怪的是,我shell脚本直接执行可以,但是定时器自己执行得时候却不成功:
我得oracle用户的crontab是这样得:
00 09 * * * sh /home/oracle/a.sh
shell是这样得:
#!/bin/bash
/u01/app/oracle/product/10.2.0/db_1/bin/sqlplus -s "hfcx/****t@ora1020"<<EOF
truncate table channel_qf;
exit
EOF
我在oracle下执行:sh /home/oracle/a.sh
可以成功truncate表,但是定时器却不能truncate表;
大家看看有没有什么问题
我再试试xjg兄的方法!
回复

使用道具 举报

千问 | 2013-8-22 10:00:10 | 显示全部楼层
用户对文件没有执行权限。 ls -lta.sh看看就知道。
回复

使用道具 举报

千问 | 2013-8-22 10:00:10 | 显示全部楼层
有执行权限的,真是个郁闷的事情,现在还没有解决调,我只好用delete先与其他语句一起写到过程里面了,不过总感觉不如truncate好,先慢慢用着。
希望有知道的朋友多帮想想办法。
回复

使用道具 举报

千问 | 2013-8-22 10:00:10 | 显示全部楼层
最初由 liuwarrior 发布
[B]多谢xjg兄得指导,我在crobtab里面设了定时,奇怪的是,我shell脚本直接执行可以,但是定时器自己执行得时候却不成功:
我得oracle用户的crontab是这样得:
00 09 * * * sh /home/oracle/a.sh
shell是这样得:
#!/bin/bash
/u01/app/oracle/product/10.2.0/db_1/bin/sqlplus -s "hfcx/****t@ora1020"<<EOF
truncate table channel_qf;
exit
EOF
我在oracle下执行:sh /home/oracle/a.sh
可以成功truncate表,但是定时器却不能truncate表;
大家看看有没有什么问题
我再试试xjg兄的方法! [/B]

是不是crontab不支持这样带空格的命令? 直接这样写试试:
00 09 * * * /home/oracle/a.sh
回复

使用道具 举报

千问 | 2013-8-22 10:00:10 | 显示全部楼层
最初由 liuwarrior 发布
[B]有执行权限的,真是个郁闷的事情,现在还没有解决调,我只好用delete先与其他语句一起写到过程里面了,不过总感觉不如truncate好,先慢慢用着。
希望有知道的朋友多帮想想办法。 [/B]

如果你能在过程中删除数据,其实也可以用动态SQL在过程中truncate table的,不过可能有限制就是了
因为truncate table一执行就把你的事务提交了,嗯,可以试试用独立事务来执行truncate table,呵呵~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行