SQL Server 資料庫引擎怎樣記錄完整備份後修改過的資料

pursuer.chen發表於2017-08-30

SQL Server 使用兩個內部資料結構跟蹤被大容量複製操作修改的區,以及自上次完整備份後修改的區。這些資料結構極大地加快了差異備份的速度。當資料庫使用大容量日誌恢復模式時,這些資料結構也可以加快將大容量複製操作記錄至日誌的速度。與全域性分配圖 (GAM) 和共享全域性分配圖 (SGAM) 頁相同,這些結構也是點陣圖,其中的每一位代表一個單獨的區。

  • 差異更改對映表 (DCM)

    這樣便可以跟蹤自上次執行 BACKUP DATABASE 語句後更改過的區。如果擴充套件盤區的位是 1,則自上次執行 BACKUP DATABASE 語句後擴充套件盤區已被修改。如果位是 0,則擴充套件盤區沒有被修改。

    差異備份只讀取 DCM 頁便可以確定已修改的區。這樣大大減少了差異備份必須掃描的頁數。執行差異備份所需的時間與自上次執行 BACKUP DATABASE 語句之後修改的區數成正比,而不是與整個資料庫的大小成正比。

  • 大容量更改對映表 (BCM)

    跟蹤自上次執行 BACKUP LOG 語句後,被大容量日誌記錄操作修改的區。如果某個擴充套件盤區的位是 1,表明自上次執行 BACKUP LOG 語句後,該擴充套件盤區已經被有日誌記錄的大容量複製操作修改。如果位是 0,則該擴充套件盤區未被有日誌記錄的大容量複製操作修改。

    儘管所有資料庫中都顯示 BCM 頁,但只有在資料庫使用大容量日誌記錄恢復模式時,才會與 BCM 頁有關。在此恢復模式中,當執行 BACKUP LOG 時,備份程式將掃描 BCM 查詢已經修改的區。然後,將那些區包括在日誌備份中。如果資料庫從資料庫備份和一系列事務日誌備份恢復,便可以恢復大容量日誌記錄操作。在使用簡單恢復模式的資料庫中,BCM 頁是不相關的,因為大容量日誌記錄操作不記入日誌。在使用完整恢復模式的資料庫中,BCM 頁同樣不相關,因為該恢復模式將大容量日誌記錄操作視為有完整日誌記錄的操作。

DCM 頁和 BCM 頁的間隔與 GAM 和 SGAM 頁的間隔相同,都是 64,000 個區。在物理檔案中,DCM 和 BCM 頁位於 GAM 和 SGAM 頁之後。

相關文章