3

我的问题与 SQL Server 中的事务处理方式有关。

假设我有一个包含大量数据的用户定义事务,在该过程中这些数据存储在哪里?如果事务成功,它只提交到数据库文件,但它预先驻留在哪里。

  • 是否保留在创建事务的程序的内存中
  • 到 SQL server 内存进程
  • 是否写入数据库的事务日志?
  • 临时文件或其他磁盘位置?
4

2 回答 2

2

未提交的数据被写入有问题的表中,在事务提交之前它不会被标记为已提交。如果事务回滚,则数据将在下一次发生需要受影响页面的写入时被覆盖。一旦事务提交,表中的数据就被提交并且不能被覆盖。该日志包含数据库中正在发生的事情的持续记录,以便在系统崩溃或事务回滚后可以向后或向前回滚事务。

于 2013-04-03T18:56:02.127 回答
2

SQL Server 使用ARIES预写日志记录。工作原理:Bob Dorr 的 SQL Server I/O 演示中描述了详细信息。预写日志记录要求对日志记录描述的 eb 数据所做的每一次更改,以便崩溃恢复可以重建数据库。要回滚事务,只需将日志向后走,并为事务生成的每条记录生成一个补偿操作。这实际上将撤消事务所做的一切。两相锁定将确保补偿操作始终可以自由进行。

另请参阅SQL Server 事务日志内部,当然还有ARIES:使用预写日志支持细粒度锁定和部分回滚的事务恢复方法

于 2013-04-03T18:56:38.413 回答