Migrieren von Daten aus regulären Tabellen zu Ledgertabellen
Gilt für: SQL Server 2022 (16.x)
Azure SQL-Datenbank
Azure SQL Managed Instance
Es ist nicht möglich, reguläre Tabellen in Ledgertabellen zu konvertieren, aber Sie können die Daten aus einer vorhandenen regulären Tabelle zu einer Ledgertabelle migrieren und dann die ursprüngliche Tabelle durch die Ledgertabelle ersetzen.
Wenn Sie eine Datenbankledgerprüfung durchführen, muss der Prozess alle Vorgänge innerhalb jeder Transaktion ordnen. Wenn Sie mit einer SELECT INTO
- oder BULK INSERT
-Anweisung ein paar Milliarden Zeilen aus einer regulären Tabelle in eine Ledgertabelle kopieren, wird dies in einer einzigen Transaktion erledigt. Dies bedeutet, dass viele Daten vollständig sortiert werden müssen, was in einem einzelnen Thread ausgeführt wird. Es dauert lange, bis die Sortierung abgeschlossen ist.
Zum Konvertieren einer regulären Tabelle in eine Ledgertabelle empfiehlt Microsoft die Verwendung der gespeicherten Prozedur sys.sp_copy_data_in_batches. Dadurch wird der Kopiervorgang in Batches von 10.000-100.000 Zeilen pro Transaktion aufgeteilt. Der Datenbankledgerprüfung stehen daher kleinere Transaktionen zur Verfügung, die parallel sortiert werden können. Dies verkürzt die Dauer der Datenbankledgerprüfung erheblich.
Hinweis
Der Kunde kann weiterhin andere Befehle, Dienste oder Tools verwenden, um die Daten aus der Quelltabelle in die Zieltabelle zu kopieren. Achten Sie darauf, große Transaktionen zu vermeiden, da dies Auswirkungen auf die Datenbankledgerprüfung hat.
In diesem Artikel erfahren Sie, wie Sie eine reguläre Tabelle in eine Ledgertabelle konvertieren können.
Voraussetzungen
Erstellen einer nur Anfügevorgänge unterstützenden oder aktualisierbaren Ledgertabelle
Bevor Sie die gespeicherte Prozedur sys.sp_copy_data_in_batches verwenden können, müssen Sie eine nur Anfügevorgänge unterstützende oder aktualisierbare Ledgertabelle mit demselben Schema wie die Quelltabelle erstellen. Das Schema sollte in Bezug auf die Anzahl der Spalten, Spaltennamen und deren Datentypen identisch sein. TRANSACTION ID
, SEQUENCE NUMBER
und GENERATED ALWAYS-Spalten werden ignoriert, da sie vom System generiert werden. Indizes zwischen den Tabellen können unterschiedlich sein, aber die Zieltabelle kann nur eine Heaptabelle sein oder einen gruppierten Index haben. Nicht gruppierte Indizes sollten danach erstellt werden.
Angenommen, die Datenbank enthält die folgende reguläre Employees
-Tabelle.
CREATE TABLE [dbo].[Employees](
[EmployeeID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
[SSN] [char](11) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[Salary] [money] NOT NULL
);
Die einfachste Möglichkeit, eine nur Anfügevorgänge unterstützende oder aktualisierbare Ledgertabelle zu erstellen wäre, ein Skript der ursprünglichen Tabelle zu erstellen und die LEDGER = ON
-Klausel hinzuzufügen. Im folgenden Skript erstellen wir eine neue aktualisierbare Ledgertabelle mit Namen Employees_LedgerTable
basierend auf dem Schema der Employees
-Tabelle.
CREATE TABLE [dbo].[Employees_LedgerTable](
[EmployeeID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
[SSN] [char](11) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[Salary] [money] NOT NULL
)
WITH
(
SYSTEM_VERSIONING = ON,
LEDGER = ON
);
Kopieren von Daten aus einer regulären Tabelle in eine Ledgertabelle
Die gespeicherte Prozedur sys.sp_copy_data_in_batches kopiert nach der Überprüfung, ob die Schemata identisch sind, Daten aus der Quelltabelle in die Zieltabelle. Die Daten werden in Batches in einzelnen Transaktionen kopiert. Wenn bei dem Vorgang ein Fehler auftritt, wird die Zieltabelle teilweise gefüllt. Die Zieltabelle sollte auch leer sein.
Im folgenden Skript kopieren wir die Daten aus der regulären Employees
-Tabelle in die neue aktualisierbare Ledgertabelle Employees_LedgerTable
.
sp_copy_data_in_batches @source_table_name = N'Employees' , @target_table_name = N'Employees_LedgerTable'
Zugehöriger Inhalt
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für