Événements
31 mars, 23 h - 2 avr., 23 h
Le plus grand événement d’apprentissage SQL, Fabric et Power BI. 31 mars au 2 avril. Utilisez le code FABINSIDER pour économiser 400 $.
Inscrivez-vous aujourd’huiCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
S’applique à : SQL Server 2022 (16.x)
base de données Azure SQL
Azure SQL Managed Instance
Le registre de base de données fait partie de la fonctionnalité de registre. Le registre de base de données capture de façon incrémentielle l’état d’une base de données à mesure que celle-ci évolue, tandis que les mises à jour se produisent sur les tables de registre. Il utilise logiquement une blockchain et des structures de données d’arborescence Merkle.
Toutes les opérations qui mettent à jour une table de registre doivent effectuer des tâches supplémentaires pour gérer les données historiques et calculer les synthèses capturées dans le registre de base de données. Plus précisément, pour chaque ligne mise à jour, nous devons :
Le registre y parvient en étendant les plans de requête DML (langage de manipulation de données) de toutes les opérations d’insertion, de mise à jour et de suppression ciblant les tables de registre. L’ID de transaction et le numéro de séquence nouvellement généré sont définis pour la nouvelle version de la ligne. Ensuite, l’opérateur de plan de requête exécute une expression spéciale qui sérialise le contenu de la ligne et calcule son hachage, en l’ajoutant à une arborescence Merkle qui est stockée au niveau de la transaction et qui contient les hachages de toutes les versions de ligne mises à jour par cette transaction pour cette table de registre. La racine de l’arborescence représente toutes les mises à jour et suppressions effectuées par cette transaction dans cette table de registre. Si la transaction met à jour plusieurs tables, une arborescence Merkle distincte est conservée pour chaque table. La figure ci-dessous montre un exemple d’arborescence Merkle stockant les versions de lignes mises à jour d’une table de registre et le format utilisé pour sérialiser les lignes. Outre la valeur sérialisée de chaque colonne, nous incluons des métadonnées concernant le nombre de colonnes de la ligne, l’ordinal des colonnes individuelles, les types de données, les longueurs et d’autres informations qui affectent la façon dont les valeurs sont interprétées.
Pour capturer l’état de la base de données, le registre de base de données stocke une entrée pour chaque transaction. Il capture les métadonnées relatives à la transaction, telles que son horodatage de validation et l’identité de l’utilisateur qui l’a exécutée. Il capture également la racine de l’arborescence Merkle des lignes mises à jour dans chaque table de registre (voir ci-dessus). Ces entrées sont ensuite ajoutées à une structure de données inviolable pour permettre la vérification de l’intégrité à l’avenir. Un bloc est fermé :
Lorsqu’un bloc est fermé, les nouvelles transactions sont insérées dans un nouveau bloc. Le processus de génération de bloc effectue alors les opérations suivantes :
Étant donné qu’il s’agit d’une mise à jour de table ordinaire, sa durabilité est automatiquement garantie par le système. Pour conserver la chaîne unique de blocs, cette opération est à thread unique. Mais elle est également efficace, car elle calcule uniquement les hachages sur les informations de transaction et se produit de façon asynchrone. Elle n’affecte pas les performances des transactions.
Pour plus d’informations sur la façon dont le registre fournit l’intégrité des données, consultez les articles Gestion des synthèses et Vérification de base de données.
Les données relatives aux transactions et aux blocs sont stockées physiquement sous forme de lignes dans deux vues catalogue système :
Pour afficher le registre de la base de données, exécutez les instructions T-SQL suivantes dans SQL Server Management Studio, Azure Data Studio ou Outils SQL Server Développeur.
SELECT * FROM sys.database_ledger_transactions;
GO
SELECT * FROM sys.database_ledger_blocks;
GO
L’exemple de table de registre suivant se compose de quatre transactions qui constituent un bloc dans la blockchain du registre de base de données :
La consultation du registre de la base de données nécessite l’autorisation VIEW LEDGER CONTENT
. Pour plus d’informations sur les autorisations associées aux tables du registre, consultez Autorisations.
Événements
31 mars, 23 h - 2 avr., 23 h
Le plus grand événement d’apprentissage SQL, Fabric et Power BI. 31 mars au 2 avril. Utilisez le code FABINSIDER pour économiser 400 $.
Inscrivez-vous aujourd’hui