2013-04-03 80 views
3

我的問題涉及如何在SQL Server中處理事務。SQL Server事務,其中未提交的數據保存在哪裏?

假設我有一個包含大量數據的用戶定義事務,那個數據在那個過程中被存儲在哪裏?它只在數據庫文件中承諾,如果事務成功但事先駐留在哪裏。

  • 這是否留在程序創建事務
  • 到SQL Server存儲過程
  • 被它寫入數據庫的事務日誌的內存?
  • 臨時文件或其他磁盤位置?

回答

1

未提交的數據寫入有問題的表中,直到事務提交時纔將其標記爲已提交。如果事務回滾,那麼在下一次寫入需要受影響的頁面時,數據將被覆蓋。一旦事務提交,表中的數據就被提交併且不能被覆蓋。該日誌包含數據庫中正在發生的事件的一個持續記錄,以便事務可以在系統崩潰後回滾或轉發,或者事務回滾。

1

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