Oracle更新数据后,查询一次,数据就自动还原了。我看视频里面,老师更新完数据后就没有commit,他查询后数据就还在。如果commit了,就是不能进行rollback to savepoint操作。我想进行savepoint的操作,完全没办法实现。

解决方案 »

  1.   

    delete from my_employees;
    select * from my_employees;
    显示:数据全没了
    select * from my_employees;
    显示:数据全是delete之前的
      

  2.   

    delete from my_employees;
    select * from my_employees;
    显示:数据全没了
    select * from my_employees;
    显示:数据全是delete之前的
    再比如:
    update my_employees
    set salary =1000
    where id =1;
    select * from my_employees;
    显示:id为1的salalry 1000
    select * from my_employees;
    显示: id为1的salary 850(改之前的数据)
      

  3.   

    1.
    delete from my_employees;
    select * from my_employees;
    显示:数据全没了2.
    select * from my_employees;
    显示:数据全是delete之前的
    这是两个会话吗? 或者说,你是打开了两个窗口吗?
      

  4.   


    delete from my_employees;
    commit;select t.*, rowid from my_employees t;select t.*, rowid from my_employees t;
      

  5.   

    可是commit了就不能回滚了
      

  6.   

    我看别人的,都是delete了,不管怎么select,都不会有数据还原的情况,还可以进行rollback操作。如果commit了,就不能rollback了
      

  7.   

    你的实验过程,哪里有 rollback 操作 ?
      

  8.   

    第二次select 是在同一个窗口(会话)运行的,还是另一个窗口(会话)中运行的?
      

  9.   


    原本是要savepoint,然后进行rollback操作,但是因为数据自动还原了就没有rollback操作的必要了。可是如果我分几次delete,就没办法实现rollback了
      

  10.   

    delete from my_employees;select t.*, rowid from my_employees t;select t.*, rowid from my_employees t;看看结果
      

  11.   

    我想要的效果,delete表中的数据,不管查询几次都是为空,只有在使用rollback后,表中的才可以恢复。而不是现在这样,查询第二次就直接数据还原了
      

  12.   

    楼主录制一个 gif 文件发上来,这个情况是不应该出现的。除非其他会话,给你重写了数据,也就是前面我让你查询 rowid 的原因。
      

  13.   


    如果是这种情况,应该在delete前就查rowid吧?而且如果有主键的话,这种情况也不可能出现,真是见了鬼了。 
      

  14.   

    楼主查下dba/all/user_dependencies视图,看看name或者referenced_name为'EMP0'时,有没有记录,看看有没有可疑的依赖对象。
      

  15.   

    另外,plsql dev不熟,不知道有没有设置执行sql前先回滚或者提交的功能?换个其他客户端试下?比如sqlplus,排除工具问题。
      

  16.   

    刚试了,sql plus没这个问题,PLsql的问题。
      

  17.   


    那你再用plsql dev的sql窗口而不是命令窗口试下?
      

  18.   

    可是,我看别人教程里面的plsql就没这个问题。难道是版本的问题,还是我设置的问题啊?有解决办法吗?
      

  19.   


    有可能是版本问题,有可能是设置问题,如果sql窗口没问题,那么也可能是特定版本的命令窗口BUG,第三方工具不靠谱啊
      

  20.   


    有可能是版本问题,有可能是设置问题,如果sql窗口没问题,那么也可能是特定版本的命令窗口BUG,第三方工具不靠谱啊试了一下,sql窗口没问题
      

  21.   

    那么查下设置里面是不是有针对命令窗口的自动提交回滚之类的设置?如果没有,那么就是BUG了吧
    如果不是非常喜欢plsql dev,可以换其他客户端,比如oracle自家的sql developer,或者quest的toad。
      

  22.   

    delete完成以后commit一下,否则再次查询还是有数据的
      

  23.   

    commit没提交之前,数据是不生效的
      

  24.   

    delete完成以后commit一下,否则再次查询还是有数据的commit了,就不能rollback了
      

  25.   

    delete完成以后commit一下,否则再次查询还是有数据的commit了,就不能rollback了
    oracle,刪除數據,未commit,可以回滾數據,刷新一次自動回滾,必須點擊commit,才能真正刪除數據,commit了就不能回滾了,這沒毛病啊
      

  26.   

    delete完成以后commit一下,否则再次查询还是有数据的commit了,就不能rollback了
    oracle,刪除數據,未commit,可以回滾數據,刷新一次自動回滾,必須點擊commit,才能真正刪除數據,commit了就不能回滾了,這沒毛病啊如果你多次delete数据后发现有问题,你想回到3次delete前的状态,如果你每次commit了就不能实现这个操作了。我在别人的教程上看的是delete后,不管怎么select,数据就不会自动回滚,多次删除后确定没问题才commit,一旦发现问题就rollback。
      

  27.   

    delete完成以后commit一下,否则再次查询还是有数据的commit了,就不能rollback了
    oracle,刪除數據,未commit,可以回滾數據,刷新一次自動回滾,必須點擊commit,才能真正刪除數據,commit了就不能回滾了,這沒毛病啊如果你多次delete数据后发现有问题,你想回到3次delete前的状态,如果你每次commit了就不能实现这个操作了。我在别人的教程上看的是delete后,不管怎么select,数据就不会自动回滚,多次删除后确定没问题才commit,一旦发现问题就rollback。
    我是每刪除一次就提交一次,并不是刪除多次再提交,每刪除一次,刪除失敗馬上回滾
      

  28.   

    建议使用toad