sys.sp_verify_database_ledger (Transact-SQL)
适用于:SQL Server 2022 (16.x) Azure SQL 数据库 Azure SQL 托管实例
验证数据库账本和表账本。 对于视图中的每一行 sys.database_ledger
,存储过程:
- 重新计算存储在行的 previous_block_hash 列中的值。
- 检查重新计算的值是否与当前存储在 previous_block_hash 列中的值匹配。
- 如果指定的摘要列包含行表示的账本块的摘要,它将验证重新计算的值是否与摘要中的哈希相匹配。
- 如果使用参数指定
table_name
账本表名称,则存储过程将验证指定表的表哈希(如果它存在于table_hashes列中sys.database_ledger
)。 否则,它将验证table_hashes列中sys.database_ledger
存在的所有表哈希,但非现有表(已删除)表的表哈希除外。 验证账本表的表哈希时,存储过程:- 扫描账本表的历史记录表以重新计算表哈希,该哈希是由账本表中当前行表示的事务更新的所有行
sys.database_ledger
的哈希。 - 检查重新计算的表哈希是否与给定账本表的table_hashes列中
sys.database_ledger
存储的值匹配。
- 扫描账本表的历史记录表以重新计算表哈希,该哈希是由账本表中当前行表示的事务更新的所有行
此外,存储过程验证所有非聚集索引是否与指定的账本表一致。 如果未指定账本表,它将验证任何行 sys.database_ledger
中table_hashes列中引用的每个现有账本表的所有非聚集索引。
有关数据库账本的详细信息,请参阅账本。
语法
sp_verify_database_ledger
[ @digests = ] 'digests'
[ , [ @table_name = ] 'table_name' ]
参数
[ @digests = ] 'digests'
包含事务摘要列表的 JSON 文档,每个文档都通过查询 sys.database_ledger_latest_digest
视图获得。 JSON 文档必须至少包含一个摘要。
[ @table_name = ] 'table_name'
要验证的表的名称。
返回代码值
0
(成功)或 1
(失败)。
结果集
一行,名为一列 last_verified_block_id
。
权限
需要 VIEW LEDGER CONTENT 权限。