本人写了一个shell,其中tablist.txt文件里保存的表名,本shell作用是删除tablist.txt文件里的表。
#/bin/bash
TABLIST="/home/oracle/tablist.txt"
{
for tab in 'cat ${TABLIST}'
do
echo "drop table $tab;"
done
} | sqlplus -l -s cchmana/abcdef
我的问题是:我想做oracle事务处理,怎么写?删除出错了,怎么回滚啊?谢谢啦!
#/bin/bash
TABLIST="/home/oracle/tablist.txt"
{
for tab in 'cat ${TABLIST}'
do
echo "drop table $tab;"
done
} | sqlplus -l -s cchmana/abcdef
我的问题是:我想做oracle事务处理,怎么写?删除出错了,怎么回滚啊?谢谢啦!
一开始确认一下不就好了吗?
嗯,实际上我是想做过还原功能的。我先把表删除,然后再导入。这个过程都是调用shell,完成的。
我想,如果表删除了。但是导入过程却出错了,就需要恢复删除的表了。
谢谢啦!
然后执行:
flashback table test to before drop rename to test;--test是你DROP错的表名
至于如何查看系统是否启用的回收站功能,在sqlplus进去后,执行
show parameter recyclebin --VALUE值如果是on,就是启用了;否则就是没有启用
可以通过下面命令启用回收站:alter system set recyclebin=on;
2.如果你想写个SHELL脚本恢复的话,把上面的flashback语句写到恢复脚本里,改改就行了;
如果只是这个需求,而且不想启用回收站功能的话(我们生产环境都是把回收站功能关掉的)
可以考虑以下思路1. 配置 tablist 文件
2. 不要 drop 表,改为 rename
3. 导入表,成功导入一张表,将表名记录到一个 log 文件中
4. 对比 tablist 文件与 log 文件,cat tablist.txt | grep -vf log.txt,可以找出哪些被 rename 过后的表,没有被导入
5. 将这些表 rename 回来
6. 删除之前 rename 的备份表
连变量命名都和我的一样。。
恩,谢谢啦!