Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op: SQL Server 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
Het converteren van gewone tabellen naar grootboektabellen is niet mogelijk, maar u kunt de gegevens van een bestaande gewone tabel migreren naar een grootboektabel en vervolgens de oorspronkelijke tabel vervangen door de grootboektabel.
Wanneer u een database-grootboekverificatie uitvoert, moet het proces alle bewerkingen binnen elke transactie bestellen. Als u een SELECT INTO of BULK INSERT-instructie gebruikt om enkele miljarden rijen van een gewone tabel naar een grootboektabel te kopiëren, gebeurt dit allemaal in één enkele transactie. Dit betekent dat veel gegevens volledig moeten worden gesorteerd, wat in één thread wordt gedaan. Het duurt lang voordat de sorteerbewerking is voltooid.
Als u een gewone tabel wilt converteren naar een grootboektabel, raadt Microsoft aan de sys.sp_copy_data_in_batches opgeslagen procedure te gebruiken. Hiermee wordt de kopieerbewerking gesplitst in batches van 10-100 K rijen per transactie. Als gevolg hiervan heeft de verificatie van het databaseboek kleinere transacties die parallel kunnen worden gesorteerd. Dit helpt de verificatietijd van het grootboek van de database enorm.
Opmerking
De klant kan nog steeds andere opdrachten, services of hulpprogramma's gebruiken om de gegevens uit de brontabel naar de doeltabel te kopiëren. Zorg ervoor dat u grote transacties vermijdt, omdat dit invloed heeft op de prestaties van de verificatie van het databaseboek.
In dit artikel wordt beschreven hoe u een gewone tabel kunt converteren naar een grootboektabel.
Vereiste voorwaarden
Een alleen-toevoegbare of bijwerkbare grootboektabel maken
Voordat u de sys.sp_copy_data_in_batches opgeslagen procedure kunt gebruiken, moet u een alleén-appendant grootboektabel of een bijwerkbare grootboektabel met hetzelfde schema als de brontabel maken. Het schema moet identiek zijn in termen van het aantal kolommen, kolomnamen en de bijbehorende gegevenstypen.
TRANSACTION ID, SEQUENCE NUMBERen GEGENEREERDE ALWAYS-kolommen worden genegeerd omdat ze door het systeem worden gegenereerd. Indexen tussen de tabellen kunnen verschillen, maar de doeltabel kan alleen een Heap-tabel zijn of een geclusterde index hebben. Niet-geclusterde indexen moeten daarna worden gemaakt.
Stel dat we de volgende normale Employees tabel in de database hebben.
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
);
De eenvoudigste manier om een append-only grootboektabel of bijwerkbare grootboektabel te maken, is door de oorspronkelijke tabel te scripten en de LEDGER = ON clausule toe te voegen. In het onderstaande script maken we een nieuwe updatable grootboektabel, aangeroepen Employees_LedgerTable op basis van het schema van de Employees tabel.
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
);
Gegevens uit een gewone tabel kopiëren naar een grootboektabel
De opgeslagen procedure sys.sp_copy_data_in_batches gegevens uit de brontabel naar de doeltabel kopieert nadat is gecontroleerd of het schema identiek is. De gegevens worden gekopieerd in batches in afzonderlijke transacties. Als de bewerking mislukt, wordt de doeltabel gedeeltelijk ingevuld. De doeltabel moet ook leeg zijn.
In het onderstaande script kopiëren we de gegevens uit de normale Employees tabel naar de nieuwe updatable grootboektabel. Employees_LedgerTable
sp_copy_data_in_batches @source_table_name = N'Employees' , @target_table_name = N'Employees_LedgerTable'