sys.sp_verify_database_ledger (Transact-SQL)
適用対象: SQL Server 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
データベース台帳とテーブル台帳を検証します。 ビューの各行に対して 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 ドキュメントには、1 つ以上のダイジェストが含まれている必要があります。
[ @table_name = ] 'table_name'
検証するテーブルの名前。
リターン コードの値
0 (成功) または 1 (失敗)。
結果セット
1 つの行。1 つの列は と呼ばれます last_verified_block_id
。
アクセス許可
VIEW LEDGER CONTENT 権限が必要です。