Migrasikan data dari tabel biasa ke tabel ledger
Berlaku untuk: SQL Server 2022 (16.x) Azure SQL Database Azure SQL Managed Instance
Mengonversi tabel reguler ke tabel ledger tidak dimungkinkan, tetapi Anda dapat memigrasikan data dari tabel reguler yang ada ke tabel ledger, lalu mengganti tabel asli dengan tabel ledger.
Saat Anda melakukan verifikasi ledger database, prosesnya perlu memesan semua operasi dalam setiap transaksi. Jika Anda menggunakan SELECT INTO
pernyataan atau BULK INSERT
untuk menyalin beberapa miliar baris dari tabel biasa ke tabel ledger, semuanya akan dilakukan dalam satu transaksi tunggal. Ini berarti banyak data perlu diurutkan sepenuhnya, yang akan dilakukan dalam satu utas. Operasi pengurutan membutuhkan waktu lama untuk diselesaikan.
Untuk mengonversi tabel reguler menjadi tabel ledger, Microsoft merekomendasikan penggunaan prosedur tersimpan sys.sp_copy_data_in_batches . Ini membagi operasi salin dalam batch 10-100 K baris per transaksi. Akibatnya, verifikasi ledger database memiliki transaksi yang lebih kecil yang dapat diurutkan secara paralel. Ini sangat membantu waktu verifikasi ledger database.
Catatan
Pelanggan masih dapat menggunakan perintah, layanan, atau alat lain untuk menyalin data dari tabel sumber ke tabel target. Pastikan Anda menghindari transaksi besar karena ini akan berdampak pada verifikasi ledger database.
Artikel ini memperlihatkan kepada Anda cara mengonversi tabel reguler menjadi tabel ledger.
Prasyarat
Membuat tabel ledger khusus tambahan atau yang dapat diperbarui
Sebelum dapat menggunakan prosedur sys.sp_copy_data_in_batches tersimpan, Anda perlu membuat tabel ledger khusus tambahan atau tabel ledger yang dapat diperbarui dengan skema yang sama dengan tabel sumber. Skema harus identik dalam hal jumlah kolom, nama kolom, dan jenis datanya. TRANSACTION ID
Kolom , SEQUENCE NUMBER
, dan GENERATED ALWAYS diabaikan karena dihasilkan sistem. Indeks di antara tabel bisa berbeda tetapi tabel target hanya bisa menjadi tabel Heap atau memiliki indeks berkluster. Indeks non-kluster harus dibuat setelahnya.
Asumsikan kita memiliki tabel reguler Employees
berikut dalam database.
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
);
Cara term mudah untuk membuat tabel ledger khusus tambahan atau tabel ledger yang dapat diperbarui adalah membuat skrip tabel asli dan menambahkan LEDGER = ON
klausa. Dalam skrip di bawah ini, kami membuat tabel ledger baru yang dapat diperbarui, yang disebut Employees_LedgerTable
berdasarkan skema 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
);
Menyalin data dari tabel biasa ke tabel ledger
Prosedur tersimpan sys.sp_copy_data_in_batches menyalin data dari tabel sumber ke tabel target setelah memverifikasi bahwa skemanya identik. Data disalin dalam batch dalam transaksi individual. Jika operasi gagal, tabel target diisi sebagian. Tabel target juga harus kosong.
Dalam skrip di bawah ini, kami menyalin data dari tabel reguler Employees
ke tabel ledger baru yang dapat diperbarui, Employees_LedgerTable
.
sp_copy_data_in_batches @source_table_name = N'Employees' , @target_table_name = N'Employees_LedgerTable'