SQL Server儲存 7 8 理解BCM頁

2021-07-25 16:28:55 字數 2066 閱讀 5911

今天我們來討論下批量更改對映(bulk changed map:bcm)頁,還有大容量日誌恢復模式( bulk logged recovery model )如何運作的。

批量更改對映(bulk changed map:bcm):sql server使用bcm頁來跟蹤自上次完全備份後,被大容量日誌操作修改的區。在資料庫檔案裡,bcm頁是第7頁。bcm對每個跟蹤的頁都有乙個位。如果這個位標記是1,表示對應區在上次日誌備份後因為大容量日誌操作而修改。如果這個位標記為0,表示在上次日子備份後因為大容量日誌操作而未被修改。乙個bcm頁可以儲存近64000個區的資訊。bcm頁在每511232頁重複一次。乙個bcm頁可以跟蹤63904個區的資訊。第2個bcm頁會出現在第511239頁。

在所有資料庫裡你都可以找到bcm頁,但只有資料庫進行大容量日誌恢復模式時才會用到。在這個恢復模式裡,當進行日誌備份時,sql server會掃瞄bcm頁,在裡面查詢在使用事務日誌進行日誌備份時標記為已經更改的區。這讓sql server進行大容量日誌恢復是可回滾的,如果是資料庫是從資料庫備份中還原,並且有一系列的事務日誌備份。在大容量日誌恢復模式裡,大容量日誌操作包括bcp,bulkinsert, select into等在事務日誌裡是最低程度寫入日誌的,並通過bcm頁對修改過的區進行跟蹤。這讓sql server 進行大容量操作時有更好的效能。

bcm頁在簡單還原和完整還原模式裡不涉及任何操作。在簡單和完整還原模式裡,大容量日誌操作被當作完全日誌操作。簡單來說,在簡單和完整還原模式裡,bcm頁不會對通過大容量日誌操作產生的改變進行跟蹤。

我們用乙個例子來理解下:新建乙個空資料庫,修改資料庫還原模式為大容量日誌恢復模式,將資料庫進行備份,最後用dbcc page來檢視bcm頁的資訊。

可以清楚看到,沒有看到因大容量日誌操作而造成的分割槽改變。我們來執行乙個大容量日誌操作。

可以看到,有2條被標記為min_logged 。第1條是因為iam頁中的改變,第2條是因為select into插入的資料操作。現在當我們進行日誌備份,sql server會備份事務日誌,就是bcm頁裡標記為改變的區對應的事務日誌。日誌備份後,bcm頁的相關區,因大容量日誌操作而打上改變的標記,會打上未改變的標記。我們來進行下日誌備份。

注意,bcm頁不會因為完整或差異備份做相應改變。事務日誌備份是剛才事務日誌的基礎。sql server應該知道2個事務日誌之間所發生的改變。如果差異或完整備份清空了bcm頁裡的標記,下個事務日誌備份就不能跟蹤或還原上乙個日誌備份和完整或差異備份之間的改變。簡而言之,乙個完整或差異備份不會打斷事務日誌備份鏈。

SQL Server儲存 6 8 理解DCM頁

差異變更頁 differential change map dcm sql server使用差異變更頁來跟蹤自上次完全備份後修改過的區。dcm頁在資料檔案裡是第6頁。dcm頁用來跟蹤完全備份後修改過的區。dcm為每個跟蹤的區使用每一位來記錄。如果這個位是設定為1,那麼自上一次完全備份後,這個區是被修...

7 8 程式儲存問題 (90 分)

7 8 程式儲存問題 90 分 設有n 個程式要存放在長度為l的磁帶上。程式i存放在磁帶上的長度是 li,1 i n。程式儲存問題要求確定這n 個程式在磁帶上的乙個儲存方案,使得能夠在磁帶上儲存盡可能多的程式。對於給定的n個程式存放在磁帶上的長度,計算磁帶上最多可以儲存的程式數。第一行是2 個正整數...

sql server儲存過程

建立表的語句 create table student sno int primary key,sname nvarchar 30 sgentle nvarchar 2 sage int,sbirth smalldatetime,sdept nvarchar 30 drop table studen...