usr*_*usr 6 sql-server sql-server-2012
差异备份使用差异更改映射页面来确定要备份的页面。我想研究一种涉及差异备份的备份策略。为此,我想自动跟踪多个数据库随时间变化的数据量。
我想以编程方式查询差异更改映射以确定更改了多少页。
DBCC PAGE
根据http://www.practicalsqldba.com/2013/07/sql-server-understanding-differential.html这似乎是可能的。有没有比这更清洁或“记录更多”的方式?看起来这在实施时会很笨拙且容易出错。
SQL Server 2019 包含新的 DMV sys.dm_db_page_info()
(文档)。
该函数返回一行,其中包含页面的标题信息。
该头信息包括
diff_status bit Bit to indicate if diff status is changed
diff_status_desc nvarchar(64) Description of the diff status bit
Run Code Online (Sandbox Code Playgroud)
干净页的位列为 0,脏页的位列为 1。描述分别为“未更改”或“已更改”。
假设我们创建一个新表并添加一行。
use Sandpit;
create table t(c int);
insert t(c) values(1);
Run Code Online (Sandbox Code Playgroud)
我们可以通过传统方式或使用另一个 DMV来查找页面 id
select t.c, pr.*
from t
cross apply sys.fn_PageResCracker(%%physloc%%) as pr;
Run Code Online (Sandbox Code Playgroud)
对我来说,这恰好返回文件 1,第 240 页。将其插入 DMV 我们得到
select diff_status, diff_status_desc
from sys.dm_db_page_info(db_id(N'Sandpit'), 1, 240, N'DETAILED');
Run Code Online (Sandbox Code Playgroud)
哪个返回
diff_status diff_status_desc
----------- ----------------
1 CHANGED
Run Code Online (Sandbox Code Playgroud)
完整备份应该重置这些标志,果然,它确实如此
backup database Sandpit to disk = N'C:\Dummy\Sandpit.bak'
select diff_status, diff_status_desc
from sys.dm_db_page_info(db_id(N'Sandpit'), 1, 240, N'DETAILED');
diff_status diff_status_desc
----------- ----------------
0 NOT CHANGED
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
445 次 |
最近记录: |