Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2022 (16.x) i nowsze wersje
usługi Azure SQL Database
Azure SQL Managed Instance
Konwertowanie zwykłych tabel na tabele rejestru nie jest możliwe, ale można zmigrować dane z istniejącej tabeli regularnej do tabeli rejestru, a następnie zastąpić oryginalną tabelę tabelą rejestru.
Podczas przeprowadzania weryfikacji rejestru bazy danych proces musi zamówić wszystkie operacje w ramach każdej transakcji. Jeśli używasz instrukcji SELECT INTO lub BULK INSERT do skopiowania kilku miliardów wierszy z regularnej tabeli do tabeli rejestru, wszystkie zostaną wykonane w ramach jednej transakcji. Oznacza to, że wiele danych musi być w pełni posortowanych, co będzie wykonywane w jednym wątku. Ukończenie operacji sortowania trwa długo.
Aby przekonwertować zwykłą tabelę na tabelę księgi, firma Microsoft zaleca użycie procedury składowanej sys.sp_copy_data_in_batches. Operacja kopiowania zostanie podzielona na partie po 10–100 tysięcy wierszy na transakcję. W związku z tym weryfikacja rejestru bazy danych ma mniejsze transakcje, które można sortować równolegle. To znacznie przyspiesza proces weryfikacji rejestru bazy danych.
Uwaga / Notatka
Klient może nadal używać innych poleceń, usług lub narzędzi do kopiowania danych z tabeli źródłowej do tabeli docelowej. Upewnij się, że unikasz dużych transakcji, ponieważ będzie to miało wpływ na wydajność weryfikacji rejestru bazy danych.
W tym artykule pokazano, jak można przekonwertować zwykłą tabelę na tabelę rejestru.
Wymagania wstępne
Tworzenie tabeli rejestru tylko do dopisywania lub aktualizowania
Aby można było użyć procedury składowanej sys.sp_copy_data_in_batches , należy utworzyć tabelę rejestru tylko do dołączania lub tabelę rejestru z możliwością aktualizowania z tym samym schematem co tabela źródłowa. Schemat powinien być identyczny pod względem liczby kolumn, nazw kolumn i ich typów danych.
TRANSACTION IDkolumny , SEQUENCE NUMBERi GENERATED ALWAYS są ignorowane, ponieważ są generowane przez system. Indeksy między tabelami mogą być różne, ale tabela docelowa może być tylko tabelą stert lub indeksem klastrowanym. Indeksy nieklaterowane powinny zostać utworzone później.
Załóżmy, że w bazie danych mamy następującą regularną Employees tabelę.
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
);
Najprostszym sposobem utworzenia tabeli rejestru tylko do dołączania lub tabeli rejestru z możliwością aktualizowania jest wykonywanie skryptów oryginalnej tabeli i dodawanie klauzuli LEDGER = ON . W poniższym skrypcie tworzymy nową aktualizowalną tabelę księgi, o nazwie Employees_LedgerTable, na podstawie schematu tabeli Employees.
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
);
Kopiowanie danych z regularnej tabeli do tabeli rejestru
Procedura składowana sys.sp_copy_data_in_batches kopiuje dane z tabeli źródłowej do tabeli docelowej po sprawdzeniu, czy ich schemat jest identyczny. Dane są kopiowane w partiach w poszczególnych transakcjach. Jeśli operacja zakończy się niepowodzeniem, tabela docelowa zostanie częściowo wypełniona. Tabela docelowa powinna być również pusta.
W poniższym skrypcie kopiujemy dane z zwykłej tabeli Employees do nowej tabeli księgi możliwej do aktualizacji, Employees_LedgerTable.
sp_copy_data_in_batches @source_table_name = N'Employees' , @target_table_name = N'Employees_LedgerTable'