sys.sp_verify_database_ledger (Transact-SQL)

适用于: SQL Server 2022 (16.x) Azure SQL 数据库Azure SQL 托管实例

验证数据库账本和表账本。 对于视图中的每一行 sys.database_ledger ,存储过程:

  1. 重新计算存储在行的 previous_block_hash 列中的值。
  2. 检查重新计算的值是否与当前存储在 previous_block_hash 列中的值匹配。
  3. 如果指定的摘要列包含行表示的账本块的摘要,它将验证重新计算的值是否与摘要中的哈希相匹配。
  4. 如果使用参数指定 table_name 账本表名称,则存储过程将验证指定表的表哈希(如果它存在于table_hashes列中 sys.database_ledger)。 否则,它将验证table_hashes列中 sys.database_ledger存在的所有表哈希,但非现有表(已删除)表的表哈希除外。 验证账本表的表哈希时,存储过程:
    1. 扫描账本表的历史记录表以重新计算表哈希,该哈希是由账本表中当前行表示的事务更新的所有行 sys.database_ledger 的哈希。
    2. 检查重新计算的表哈希是否与给定账本表的table_hashes列中 sys.database_ledger 存储的值匹配。

此外,存储过程验证所有非聚集索引是否与指定的账本表一致。 如果未指定账本表,它将验证任何行 sys.database_ledger中table_hashes列中引用的每个现有账本表的所有非聚集索引。

有关数据库账本的详细信息,请参阅账本

Transact-SQL 语法约定

语法

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 权限