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 Commandakan 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 Taskpertama mengeksekusi pernyataanTRUNCATE TABLE dbo.StagingTableterhadap database tujuan untuk memotong tabel staging. -
Bagian selanjutnya menjelaskan bagaimana
Data Flow Taskdikonfigurasi. -
Execute SQL Taskmengeksekusi pernyataan SQL yang diberikan di bawah ini yang memperbarui data didbo.DestinationTablemenggunakan 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 Sourcemembaca data daridbo.SourceTablemenggunakan perintah SQLSELECT RowNumber,CreatedOn, ModifiedOn FROM Source.dbo.SourceTable WHERE IsActive = 1 -
Lookup transformationdigunakan untuk memeriksa apakah nilai RowNumber sudah ada di tabeldbo.DestinationTable -
Jika catatan tidak ada, itu akan diarahkan ke
OLE DB Destinationbernama sebagaiInsert into destination table, yang menyisipkan baris kedbo.DestinationTable -
Jika catatan ada , itu akan diarahkan ke
OLE DB Destinationbernama 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.