Contoh paket menggunakan SSIS 2008 R2 yang disisipkan atau diperbarui menggunakan operasi batch:
Berikut adalah contoh paket yang ditulis dalam SSIS 2008 R2
yang menggambarkan cara melakukan penyisipan, pembaruan antara dua database menggunakan operasi batch.
- Menggunakan
OLE DB Command
akan memperlambat operasi pembaruan pada paket Anda karena tidak melakukan operasi batch. Setiap baris diperbarui satu per satu.
Sampel menggunakan dua database yaitu Source
dan Destination
. Dalam contoh saya, kedua database berada di server tetapi logikanya masih dapat diterapkan untuk database yang berada di server dan lokasi yang berbeda.
Saya membuat tabel bernama dbo.SourceTable
di basis data sumber saya Source
.
CREATE TABLE [dbo].[SourceTable](
[RowNumber] [bigint] NOT NULL,
[CreatedOn] [datetime] NOT NULL,
[ModifiedOn] [datetime] NOT NULL,
[IsActive] [bit] NULL
)
Juga, buat dua tabel bernama dbo.DestinationTable
dan dbo.StagingTable
di database tujuan saya Destination
.
CREATE TABLE [dbo].[DestinationTable](
[RowNumber] [bigint] NOT NULL,
[CreatedOn] [datetime] NOT NULL,
[ModifiedOn] [datetime] NOT NULL
)
GO
CREATE TABLE [dbo].[StagingTable](
[RowNumber] [bigint] NOT NULL,
[CreatedOn] [datetime] NOT NULL,
[ModifiedOn] [datetime] NOT NULL
)
GO
Menyisipkan sekitar 1,4 juta baris dalam tabel dbo.SourceTable
dengan nilai unik ke dalam RowNumber
kolom. Tabel dbo.DestinationTable
dan dbo.StagingTable
kosong untuk memulai. Semua baris dalam tabel dbo.SourceTable
memiliki bendera IsActive
disetel ke false.
Membuat paket SSIS dengan dua manajer koneksi OLE DB, masing-masing terhubung ke Source
dan Destination
database. Merancang Aliran Kontrol seperti yang ditunjukkan di bawah ini:
-
Execute SQL Task
pertama mengeksekusi pernyataanTRUNCATE TABLE dbo.StagingTable
terhadap database tujuan untuk memotong tabel staging. -
Bagian selanjutnya menjelaskan bagaimana
Data Flow Task
dikonfigurasi. -
Execute SQL Task
mengeksekusi pernyataan SQL yang diberikan di bawah ini yang memperbarui data didbo.DestinationTable
menggunakan data yang tersedia didbo.StagingTable
, dengan asumsi bahwa ada kunci unik yang cocok di antara kedua tabel tersebut. Dalam hal ini, kunci uniknya adalah kolomRowNumber
.
Skrip yang akan diperbarui:
UPDATE D
SET D.CreatedOn = S.CreatedOn
, D.ModifiedOn = S.ModifiedOn
FROM dbo.DestinationTable D
INNER JOIN dbo.StagingTable S
ON D.RowNumber = S.RowNumber
Saya telah merancang Tugas Aliran Data seperti yang ditunjukkan di bawah ini.
-
OLE DB Source
membaca data daridbo.SourceTable
menggunakan perintah SQLSELECT RowNumber,CreatedOn, ModifiedOn FROM Source.dbo.SourceTable WHERE IsActive = 1
-
Lookup transformation
digunakan untuk memeriksa apakah nilai RowNumber sudah ada di tabeldbo.DestinationTable
-
Jika catatan tidak ada, itu akan diarahkan ke
OLE DB Destination
bernama sebagaiInsert into destination table
, yang menyisipkan baris kedbo.DestinationTable
-
Jika catatan ada , itu akan diarahkan ke
OLE DB Destination
bernama sebagaiInsert into staging table
, yang menyisipkan baris kedbo.StagingTable
. Data dalam tabel staging ini akan digunakan dalam `Execute SQL Task kedua untuk melakukan pembaruan batch.
Untuk mengaktifkan beberapa baris lagi untuk Sumber OLE DB, saya menjalankan kueri di bawah ini untuk mengaktifkan beberapa catatan
UPDATE dbo.SourceTable
SET IsActive = 1
WHERE (RowNumber % 9 = 1)
OR (RowNumber % 9 = 2)
Eksekusi pertama dari paket tampak seperti yang ditunjukkan di bawah ini. Semua baris diarahkan ke tabel tujuan karena kosong. Eksekusi paket di mesin saya memakan waktu sekitar 3 seconds
.
Jalankan kueri jumlah baris lagi untuk menemukan jumlah baris di ketiga tabel.
Untuk mengaktifkan beberapa baris lagi untuk Sumber OLE DB, saya menjalankan kueri di bawah ini untuk mengaktifkan beberapa catatan
UPDATE dbo.SourceTable
SET IsActive = 1
WHERE (RowNumber % 9 = 3)
OR (RowNumber % 9 = 5)
OR (RowNumber % 9 = 6)
OR (RowNumber % 9 = 7)
Eksekusi kedua dari paket tampak seperti yang ditunjukkan di bawah ini. 314,268 rows
yang sebelumnya dimasukkan selama eksekusi pertama dialihkan ke tabel pementasan. 628,766 new rows
langsung dimasukkan ke tabel tujuan. Eksekusi paket di mesin saya memakan waktu sekitar 12 seconds
. 314,268 rows
di tabel tujuan diperbarui di Tugas SQL Jalankan kedua dengan data menggunakan tabel pementasan.
Jalankan kueri jumlah baris lagi untuk menemukan jumlah baris di ketiga tabel.
Saya harap itu memberi Anda ide untuk mengimplementasikan solusi Anda.