Saya sarankan membaca data dalam potongan:
Alih-alih memuat seluruh tabel, cobalah untuk membagi data menjadi beberapa bagian dan mengimpornya ke SQL Server. Dari beberapa saat, saya menjawab jawaban serupa terkait dengan SQLite, saya akan mencoba mereproduksinya agar sesuai dengan sintaks Oracle:
Panduan langkah demi langkah
Dalam contoh ini setiap potongan berisi 10.000 baris.
- Deklarasikan 2 Variabel bertipe
Int32
(@[User::RowCount]
dan@[User::IncrementValue]
) - Tambahkan
Execute SQL Task
yang mengeksekusiselect Count(*)
perintah dan simpan Kumpulan Hasil ke dalam variabel@[User::RowCount]
- Tambahkan For Loop dengan preferensi berikut:
- Di dalam wadah for loop tambahkan
Data flow task
- Di dalam tugas aliran data, tambahkan
ODBC Source
danOLEDB Destination
- Di Sumber ODBC pilih
SQL Command
pilihan dan tulisSELECT * FROM TABLE
query *(untuk mengambil metadata saja` - Petakan kolom antara sumber dan tujuan
- Kembali ke
Control flow
dan klikData flow task
dan tekan F4 untuk melihat jendela properti -
Di jendela properti, buka ekspresi dan Tetapkan ekspresi berikut ke
[ODBC Source].[SQLCommand]
properti:(untuk info lebih lanjut lihat Bagaimana cara melewatkan variabel SSIS dalam ekspresi ODBC SQLCommand?)"SELECT * FROM MYTABLE ORDER BY ID_COLUMN OFFSET " + (DT_WSTR,50)@[User::IncrementValue] + "FETCH NEXT 10000 ROWS ONLY;"
Di mana MYTABLE
adalah nama tabel sumber, dan IDCOLUMN
adalah kunci utama atau kolom identitas Anda.
Tampilan Layar Alur Kontrol
Referensi
- Sumber ODBC - SQL Server
- Bagaimana cara meneruskan variabel SSIS dalam ekspresi ODBC SQLCommand?
- BAGAIMANA CARA MENGGUNAKAN SUMBER ODBC SSIS DAN PERBEDAAN ANTARA OLE DB DAN ODBC?
- Bagaimana cara membatasi jumlah baris yang dikembalikan oleh kueri Oracle setelah memesan?
- Mendapatkan n hingga n baris teratas dari db2
Pembaruan 1 - Kemungkinan solusi lain
Saat mencari masalah serupa, saya menemukan beberapa solusi tambahan yang dapat Anda coba:
(1) Ubah memori maksimal SQL Server
-
SSIS:Manajer Buffer Gagal Panggilan Alokasi Memori
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'max server memory', 4096; GO RECONFIGURE; GO
(2) Aktifkan pipa Bernama
-
[Tetap] Manajer buffer mendeteksi bahwa sistem kehabisan memori virtual, tetapi tidak dapat menukar buffer apa pun
- Buka Panel Kontrol –> Alat Administratif -> Manajemen Komputer
- Pada Protokol untuk Instance SQL -> Setel Named Pipes =
Enabled
- Mulai ulang Layanan instance SQL
- Setelah itu coba impor data dan itu akan mengambil data dalam potongan-potongan sekarang alih-alih mengambil sekaligus. Semoga berhasil untuk kalian dan menghemat waktu Anda.
(3) Jika menggunakan SQL Server 2008 instal hotfix
- Proses runtime SSIS 2008 lumpuh saat Anda menjalankan paket SSIS 2008 dalam kondisi memori rendah
Pembaruan 2 - Memahami kesalahan
Di tautan MSDN berikut, penyebab kesalahan dijelaskan sebagai berikut:
Memori virtual adalah superset dari memori fisik. Proses di Windows biasanya tidak menentukan mana yang akan digunakan, karena itu akan (sangat) menghambat bagaimana Windows dapat melakukan banyak tugas. SSIS mengalokasikan memori virtual. Jika Windows mampu, semua alokasi ini disimpan di memori fisik, di mana aksesnya lebih cepat. Namun, jika SSIS meminta lebih banyak memori daripada yang tersedia secara fisik, maka memori virtual tersebut tumpah ke disk, membuat paket tersebut beroperasi dengan urutan yang lebih lambat. Dan dalam kasus terburuk, jika tidak ada cukup memori virtual dalam sistem, maka paket akan gagal.