Saya akan memiliki database SQL Server 2012 dan tabel dengan 3 juta baris dan mungkin 50 kolom. Apa yang akan menjadi cara tercepat untuk proses .net tanpa dijaga latar belakang (mungkin mengeluarkan beberapa perintah SQL atau Powershell) untuk mengekspornya ke file teks, satu baris untuk setiap baris data? Proses .net harus tahu kapan ekspor telah selesai atau jika ada kesalahan. Tipe data akan semua int
atau nvarchar
.
Saya mengasumsikan bahwa kode C # murni menggunakan ado.net untuk menjalankan select *
perintah dan mengulang datareader dan menulis ke file untuk setiap catatan akan lambat dan tidak ada cara saya bisa memparalelkan ini.
Idealnya ekspor akan ke folder jaringan bersama jarak jauh dan bukan folder lokal pada mesin SQL Server. SQL Server akan menjadi cluster HA. Apakah SSIS lebih cocok untuk ini, tidak perlu transformasi data?
Proses .Net akan berjalan pada Mesin A, SQL Server pada Mesin B dan tujuan file akhir adalah berbagi jaringan. Salah satu opsi adalah SQL server menulis file langsung ke jaringan berbagi. Opsi lainnya adalah SQL Server menulis ke mesin A dan kemudian ketika file ditulis proses .net menyalinnya ke jaringan berbagi. Saya tidak memiliki SLA formal tetapi mengharapkan 30 menit - 1 jam untuk file tulis.
sumber
"Ideally the export will be to a remote shared network folder and not a local folder on the SQL Server machine."
- dari mana aplikasi .NET dijalankan? Kasus terburuk, ini bisa berarti data harus bergerak melalui 2 jaringan hop, yang mungkin akan menjadi hambatan terbesar. Juga, jumlah baris agak tidak relevan - berapakah perkiraan ukuran total data? Apakah Anda memiliki SLA kinerja yang harus Anda penuhi untuk proses ini?Jawaban:
Melongok melalui semua artikel tersebut adalah opsi jika Anda ingin menjadi tua menontonnya.
Beberapa opsi berbeda yang harus Anda coba adalah:
Dan Anda dapat mencoba semua opsi ini sambil mengulang di sesi lain, hanya untuk bersenang-senang :-).
sumber
Saya hanya akan menggunakan Wisaya Ekspor Impor. Pada akhirnya Anda diberi opsi untuk menyimpan tugas, yang kemudian dapat Anda jadwalkan dengan SQL Server Agent. Tambahkan diri Anda sebagai operator dan konfigurasikan DB Mail di server, dan itu dapat mengirim email kepada Anda ketika pekerjaan selesai atau gagal.
Serius, mengapa menciptakan kembali kemudi?
http://msdn.microsoft.com/en-us/library/ms140052.aspx
sumber
Yang lain telah menyatakan bahwa bcp harus menjadi cara tercepat tetapi saya tidak melihat adanya keuntungan dibandingkan solusi CLR. Pada sisipan ke tabel database, berbagai implementasi salinan massal akan selalu menang. Ini terutama karena cara mereka meminimalkan logging dan mengaktifkan penulisan multi-threaded. Anda tidak memiliki kendala ini saat menulis ke file datar.
Di tempat kerja saya, kami menggunakan CLR untuk membuang output permintaan ke file. Kami juga memasukkan Ionic.Zip.dll sehingga file tersebut dapat di-zip secara otomatis setelah dibuat.
Berikut ini adalah contoh yang diklaim oleh op dua kali lebih cepat dari bcp pada blob: /programming/10325338/fastest-way-to-export-blobs-from-table-into-individual-files
sumber
Anda dapat membuat paket SSIS sederhana:
Berikut cara tingkat tinggi:
Noob mana pun harus bisa memikirkan hal ini. Orang Anti-GUI tidak akan menyukai solusi ini, jadi simpan komentar tentang hal itu, itu hanya sebuah alternatif untuk individu yang kurang teknologi yang berjuang menggunakan BCP ...
Anda memiliki sedikit lebih banyak fleksibilitas dalam bagaimana file data diformat. Anda dapat melakukan ini di BCP dan semua itu, tetapi ini menghilangkan kompleksitas darinya. Tetapi ada keuntungan kecil karena Anda dapat memasukkan header file khusus, dan membuat "Nama Kolom" sebagai baris pertama, yang membuat file flat lebih dapat dikonsumsi manusia.
Jangan lupa untuk menyimpannya, jika Anda membuatnya sekali, Anda kemungkinan akan ditanya lagi! Semoga ini membantu..
sumber
Saya pikir bcp.exe dari commandline harus menjadi cara tercepat.
http://msdn.microsoft.com/en-us/library/ms162802.aspx
sumber