本文目录一览

1,如果在程序中 就一个sql语句出错处理是否有必要加 回滚

如果一个,可以考虑不用回滚,回滚一般发生在insert update之类操作,如果你这个sql失败,你整个语句都失败,所以不会影响数据库。个人赞成不用回滚。
对,不用回滚。一个sql语句对于数据库引擎来说就是原子操作。
哪要看你需不需要放弃事务开始到出错之前执行的语句啊,如果要,就要回滚了,否则不需要也行

如果在程序中 就一个sql语句出错处理是否有必要加 回滚

2,数据库回滚

没有commit不不是说数据没有更新到数据文件,而只是说没有确定最终的修改,但数据可能已经写到数据库中了,这时就需要执行回滚,利用undo日志把数据恢复成执行前的状态。
简单的来说,我给你举两个例子:1、对数据库做了ddl的操作,但是没有进行提交操作,此时就会提示受影响行数,如果最后没有进行提交操作,数据就会回滚。2、对数据进行操作时,如果数据报错,如批量插入数据,其中有一条无法插入,那么此次的操作就会被视为无效,数据库就会回滚,以保证数据的完整性。3、在程序开发时,是以事务为原子性操作的,此时可能因为一个业务操作会对数据库的多个表进行增删改,如果中间出现问题,那么对已操作部分的数据怎么办呢? 数据库的回滚就可以解决。

数据库回滚

3,事务回滚Oracle 和 SQL Server

建立保存点比较好savepoint point_name----s所做的操作--回滚rollback to point_name
sql server很优秀,问题是, 你能知道他们优秀在什么地方吗? oracle也很优秀,你又能知道它在什么方面能够超越其他数据库吗? oracle如果真的在什么地方都比sql server强,那其他数据库早就不存在了。 软件工程,不是想当然的东西。
Oracle:begin insert into t1 values(1,1); insert into t1 values(2,2); update t1 set num2=3 where num1=1; delete from t1 where num1=2; exception when others then rollback;end;

事务回滚Oracle 和 SQL Server

4,Oracle回滚段和重做日志的区别联系

回滚段的作用:事务隔离并保证读一致性、事务rollback时恢复数据  事务隔离:事务A和B同时运行,A修改了一行数据但未提交,此时Oracle有可能已经将该数据更新到数据文件中了。但此时事务B不应该看到新数据,因此Oracle应该在执行事务A时将数据的旧值放入回滚段,供事务B读取。  事务rollback时恢复数据:由于时间效率、空间等原因,oracle可能在事务还未提交之前就将数据更新到数据文件中,当用户rollback时,应该回滚。  重做日志的作用:数据库崩溃时恢复未写入数据文件中的数据。  当用户修改数据时,Oracle首先将回滚信息和新数据写入重做日志,不管事务是否已经提交。当用户提交一个事务,Oracle也可能没有及时的将事务写入数据文件。当数据库崩溃后重启,Oracle根据重做日志,将所有可能已经提交的、或未提交的数据重新应用到数据文件中(包括回滚信息和新数据)。然后再根据回滚段回滚未提交的事务。
回滚段里写什么?redo log里写什么?a1:先undo 再redoundo肯定是a=1这个值(前镜像嘛)redo就是当前设a置为0的操作记录。redo里写的是整句sql语句么还是只有一个结果?a2: redo里更准确地说是存贮一个操作记录。具体物理存储过程肯定不是你想象成的一个结果或者sql语句,这里会涉及到ckpt以及rba等内部的过程。简单举个例子,比如说,用户发出了一条update命令,更新了块a,块a现在变成了脏块,oracle会为他生成一条重做记录.这条重做记录在重做日志文件中的位置就是rba(redo block address).相对而言是些internal的东西了。希望对你有所帮助。

5,oracle回滚段和重做日志的小问题

回滚段的作用:事务隔离并保证读一致性、事务rollback时恢复数据  事务隔离:事务a和b同时运行,a修改了一行数据但未提交,此时oracle有可能已经将该数据更新到数据文件中了。但此时事务b不应该看到新数据,因此oracle应该在执行事务a时将数据的旧值放入回滚段,供事务b读取。  事务rollback时恢复数据:由于时间效率、空间等原因,oracle可能在事务还未提交之前就将数据更新到数据文件中,当用户rollback时,应该回滚。  重做日志的作用:数据库崩溃时恢复未写入数据文件中的数据。  当用户修改数据时,oracle首先将回滚信息和新数据写入重做日志,不管事务是否已经提交。当用户提交一个事务,oracle也可能没有及时的将事务写入数据文件。当数据库崩溃后重启,oracle根据重做日志,将所有可能已经提交的、或未提交的数据重新应用到数据文件中(包括回滚信息和新数据)。然后再根据回滚段回滚未提交的事务。
回滚段里写什么?redo log里写什么?A1:先undo 再redoundo肯定是a=1这个值(前镜像嘛)redo就是当前设a置为0的操作记录。redo里写的是整句sql语句么还是只有一个结果?A2: redo里更准确地说是存贮一个操作记录。具体物理存储过程肯定不是你想象成的一个结果或者SQL语句,这里会涉及到ckpt以及rba等内部的过程。简单举个例子,比如说,用户发出了一条update命令,更新了块A,块A现在变成了脏块,oracle会为他生成一条重做记录.这条重做记录在重做日志文件中的位置就是rba(redo block address).相对而言是些internal的东西了。希望对你有所帮助。

文章TAG:数据库重装和回滚哪个好  如果在程序中  就一个sql语句出错处理是否有必要加  回滚  
下一篇