本人写了一个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事务处理,怎么写?删除出错了,怎么回滚啊?谢谢啦!

解决方案 »

  1.   

    drop 表是没有什么事务回滚的
      

  2.   

    drop table,是DDL,会隐式提交的,没办法用事务
      

  3.   

    不是很清楚你的需求,配置在 tablist 这个文件里的不是就是要删的表吗?
    一开始确认一下不就好了吗?
      

  4.   


    嗯,实际上我是想做过还原功能的。我先把表删除,然后再导入。这个过程都是调用shell,完成的。
    我想,如果表删除了。但是导入过程却出错了,就需要恢复删除的表了。
    谢谢啦!
      

  5.   

    非要程序实现,可以试下drop之前用exp做个备份,drop出错时再imp回来
      

  6.   

    1.如果你不小心DROP错了,想恢复的话,确认你启用了回收站的功能
    然后执行:
    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语句写到恢复脚本里,改改就行了;
      

  7.   


    如果只是这个需求,而且不想启用回收站功能的话(我们生产环境都是把回收站功能关掉的)
    可以考虑以下思路1. 配置 tablist 文件
    2. 不要 drop 表,改为 rename
    3. 导入表,成功导入一张表,将表名记录到一个 log 文件中
    4. 对比 tablist 文件与 log 文件,cat tablist.txt | grep -vf log.txt,可以找出哪些被 rename 过后的表,没有被导入
    5. 将这些表 rename 回来
    6. 删除之前 rename 的备份表
      

  8.   

    另外说一句,我看你drop 表的 shell 里的脚本很眼熟呀好像就是我写的一样
    连变量命名都和我的一样。。
      

  9.   

    呵呵,我是在  http://topic.csdn.net/u/20110823/15/71b201a9-fdec-4e3f-94ed-ef2c0b84bfe3.html  看到的.我刚刚看了,的确是你(高手)的.
    恩,谢谢啦!