免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1960 | 回复: 9
打印 上一主题 下一主题

这儿的高手多,还是在这儿问吧,关于shell 导出Oracle数据的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-19 19:09 |只看该作者 |倒序浏览
我想实现把一个表里的一个月前数据导入到备份表里去
然后吧,备份表里大于3个月的数据删除


Date1=`date '+20%y%m%d'`

sqlplus maps/maps <<EOF

INSERT INTO outTable_bak select * from outTable where to_number(replace(outdate ,'-','')+30) < to_number('$Date1') ;

delete from outTable t where to_number(replace(outdate ,'-','')+30) < to_number('$Date1') ;

delete from outTable_bak h where to_number(replace(outdate ,'-','')+90) < to_number('$Date1') ;

EOF


这是我写的,有没有更好的办法,而且这个算时间的办法好像有问题

论坛徽章:
0
2 [报告]
发表于 2005-06-19 21:22 |只看该作者

这儿的高手多,还是在这儿问吧,关于shell 导出Oracle数据的问题

不知道你的表的时间比较是什么形式,如果是date类型可以用:
datecolumn < to_date('$Date1', 'yyyymmdd')-30
如果是varchar类型,可以建立函数索引提高一下。

好像没有加上commit; (默认要的。)

论坛徽章:
0
3 [报告]
发表于 2005-06-20 00:13 |只看该作者

这儿的高手多,还是在这儿问吧,关于shell 导出Oracle数据的问题

表的时间 是 YYYY—MM—DD 这种形势的?

论坛徽章:
0
4 [报告]
发表于 2005-06-20 13:16 |只看该作者

这儿的高手多,还是在这儿问吧,关于shell 导出Oracle数据的问题

Oracle 有自己的 sysdate 函数,无需再从外面传进来date参数


INSERT INTO outTable_bak select * from outTable where
outdate  < sysdate - 30 ;
...
...

论坛徽章:
0
5 [报告]
发表于 2005-06-20 22:35 |只看该作者

这儿的高手多,还是在这儿问吧,关于shell 导出Oracle数据的问题

问题是人家的outdate看样子应该是char型。
不然也不用replace了。
其实单从语句方面出发也自有从where条件去优化。
要不加入hint优化,analyze一下表。
或者顺便做一下optimized_index_cose_adj等设置(有索引的化)

论坛徽章:
0
6 [报告]
发表于 2005-06-20 22:59 |只看该作者

这儿的高手多,还是在这儿问吧,关于shell 导出Oracle数据的问题

试试这样看看效果如何:
analyze table outTable compute statistics;
analyze table outTable_bak compute statistics;
insert的时侯直接加到历史表的最后面。
insert /*+append*/ into outTable_bak
select * from outTable;

论坛徽章:
0
7 [报告]
发表于 2005-06-20 23:55 |只看该作者

这儿的高手多,还是在这儿问吧,关于shell 导出Oracle数据的问题

outdate 是 VARCHAR2的

对了,我这样 to_number之后算出来的时间对不对啊,
月是30进位,to_number以后变成10进位,是不是有问题,我还没有想清楚,
是不是应该用 addmouth比较好一点

哦还有,导数据的过程中,这个shell没有动态效果,使用的人说不知道有没有在执行,就给ctrl+z 了,因为一次导个十几万条数据是需要一些时间的,shell能实现动态画面马?不懂,能弄个字符串“请等待”在闪烁就好,应该怎么写啊。

commit 没加,现在也可以提交,需要加码?
那没有完全成功的时候还得 Rollback 一下吧,

我很菜,不好意思,问题比较多

论坛徽章:
0
8 [报告]
发表于 2005-06-21 10:05 |只看该作者

这儿的高手多,还是在这儿问吧,关于shell 导出Oracle数据的问题

看来楼主是工商银行的?
建议快点把maps用户的密码改了哦

论坛徽章:
0
9 [报告]
发表于 2005-06-21 22:02 |只看该作者

这儿的高手多,还是在这儿问吧,关于shell 导出Oracle数据的问题

maps 这种垃圾密码,人人都知道,无所谓啦

论坛徽章:
0
10 [报告]
发表于 2005-06-22 11:35 |只看该作者

这儿的高手多,还是在这儿问吧,关于shell 导出Oracle数据的问题

既然outdate 是 VARCHAR2的,那用途to_date好点。
where to_date(outdate, 'yyyy-mm-dd') < sysdate - 30
同时建个函数索引to_date(outdate, 'yyyy-mm-dd'), 试试看,应该不错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP