Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Normal tabloları kayıt defteri tablolarına dönüştürmek mümkün değildir, ancak verileri mevcut bir normal tablodan bir genel muhasebe tablosuna geçirip özgün tabloyu kayıt defteri tablosuyla değiştirebilirsiniz.
Veritabanı kayıt defteri doğrulaması gerçekleştirirken, işlemin her hareket içindeki tüm işlemleri sıralaması gerekir. Normal bir SELECT INTO tablodaki birkaç milyar satırı bir defter tablosuna kopyalamak için bir BULK INSERT deyimi kullanırsanız, bu işlem tek bir seferde tamamlanır. Bu, çok sayıda verinin tam olarak sıralanması gerektiği ve bunun tek bir iş parçacığında yapılması gerektiği anlamına gelir. Sıralama işleminin tamamlanması uzun sürer.
Microsoft, normal bir tabloyu kayıt defteri tablosuna dönüştürmek için sys.sp_copy_data_in_batches saklı yordamının kullanılmasını önerir. Bu işlem, kopyalama işlemini işlem başına 10-100 K satırlık toplu işlemler halinde böler. Sonuç olarak, veritabanı kayıt defteri doğrulamasında paralel olarak sıralanabilir daha küçük işlemler vardır. Bu, veritabanı kayıt defteri doğrulamasının zamanına çok yardımcı olur.
Uyarı
Müşteri, kaynak tablodaki verileri hedef tabloya kopyalamak için diğer komutları, hizmetleri veya araçları kullanmaya devam edebilir. Bunun veritabanı kayıt defteri doğrulamasında performansı etkileyebileceğinden büyük işlemlerden kaçınmaya dikkat edin.
Bu makalede, normal bir tabloyu nasıl kayıt defteri tablosuna dönüştürebileceğiniz gösterilir.
Önkoşullar
Sadece eklenebilir veya güncellenebilir bir kayıt defteri tablosu oluşturma
sys.sp_copy_data_in_batches saklı yordamı kullanabilmeniz için önce, kaynak tabloyla aynı şemaya sahip bir yalnızca ekleme kayıt defteri tablosu veya güncelleştirilebilir kayıt defteri tablosu oluşturmanız gerekir. Şema, sütun sayısı, sütun adları ve veri türleri bakımından aynı olmalıdır.
TRANSACTION ID, SEQUENCE NUMBER ve GENERATED ALWAYS sütunları sistem tarafından oluşturulduğundan yoksayılır. Tablolar arasındaki dizinler farklı olabilir, ancak hedef tablo yalnızca bir Yığın tablosu veya kümelenmiş dizine sahip olabilir. Kümelenmemiş dizinler daha sonra oluşturulmalıdır.
Veritabanında aşağıdaki normal Employees tabloya sahip olduğumuzu varsayalım.
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
);
Yalnızca ekleme yapılabilir bir kayıt defteri tablosu veya güncellenebilir bir kayıt defteri tablosu oluşturmanın en kolay yolu, özgün tablonun betiğini yazmak ve LEDGER = ON ifadesini eklemektir. Aşağıdaki betikte, tablonun şemasını temel alarak adlı Employees_LedgerTableEmployees tablosu oluşturuyoruz.
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
);
Normal bir tablodan kayıt defteri tablosuna veri kopyalama
Saklı yordam sys.sp_copy_data_in_batches , şemalarının aynı olduğunu doğruladıktan sonra verileri kaynak tablodan hedef tabloya kopyalar. Veriler tek tek işlemlerde toplu olarak kopyalanır. İşlem başarısız olursa hedef tablo kısmen doldurulur. Hedef tablo da boş olmalıdır.
Aşağıdaki betikte, normal Employees tablodaki verileri yeni güncelleştirilebilir kayıt defteri tablosuna kopyalayacağız. Employees_LedgerTable
sp_copy_data_in_batches @source_table_name = N'Employees' , @target_table_name = N'Employees_LedgerTable'