我的问题涉及如何在SQL Server中处理事务。
假设我有一个包含大量数据的用户定义事务,该数据在该过程中会在哪里存储?如果事务成功但它事先驻留在哪里,它只对数据库文件提交。
答案 0 :(得分:2)
未提交的数据被写入有问题的表中,在事务提交之前,它不会被标记为已提交。如果事务被回滚,则下次发生需要受影响页面的写入时将覆盖数据。事务提交后,表中的数据将被提交,并且不能被覆盖。该日志包含数据库中正在发生的事件的持续记录,以便在系统崩溃后或事务回滚时可以向后或向前滚动事务。
答案 1 :(得分:2)
SQL Server使用ARIES预写日志记录。详细信息在How It Works: Bob Dorr's SQL Server I/O Presentation中描述。预写日志记录要求对日志记录描述的数据进行每次更改,以便崩溃恢复可以重建数据库。要回滚事务,所有人必须做的是向后遍历日志并为事务生成的每条记录生成补偿操作。这实际上将撤消事务所做的一切。 Two phase locking将确保补偿操作始终可以自由进行。
另请参阅Inside the SQL Server Transaction Log,当然还有ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging。