Bisakah saya mengembalikan file .bak SQL Server tanpa SQL Server?

16

Saya memiliki beberapa .bakfile besar dari dump SQL Server 2005.

Dapatkah saya mengembalikan ini tanpa menggunakan SQL Server, baik ke PostgreSQL, MySQL, atau untuk flat file teks?

Solusi open source akan sangat berguna.

Abe
sumber
1
"Aku lebih suka tidak harus melakukannya hanya untuk tugas ini." Kenapa tidak? Ini adalah cara untuk melakukan apa yang Anda coba lakukan.
swasheck
Apakah mengembalikan ke sesuatu yang lain bahkan masuk akal? Apa yang ingin Anda lakukan dengan data yang dihasilkan?
Philᵀᴹ
1
@Phil Saya ingin memindahkan data yang dihasilkan ke database PostgreSQL, atau bahkan file teks datar.
Abe
1
@swasheck Saya menghapus baris yang dikutip, karena tampaknya telah mengurangi pertanyaan. Tetapi untuk menjawab pertanyaan Anda, karena saya tidak tahu bagaimana menggunakannya, dan server saya menjalankan Linux. Laptop windows yang tersedia tidak memiliki cukup ruang.
Abe
2
Nah itu informasi yang tidak kami miliki sebelumnya sekarang :). Terima kasih atas informasi tambahan - Saya punya rencana
swasheck

Jawaban:

19

Inilah yang saya sarankan:

  1. membangun mesin virtual yang menjalankan Windows, dengan ruang disk yang cukup untuk menyimpan cadangan. Salin file cadangan di sana. Jika Anda belum memiliki kemampuan untuk membangun mesin virtual, Anda dapat melakukannya dengan produk gratis seperti Oracle VirtualBox .
  2. unduh dan instal edisi evaluasi SQL Server . Pastikan Anda menyertakan mesin basis data dan Alat Manajemen - Lengkap.
  3. jika VM memiliki cukup ruang untuk menyimpan cadangan tetapi tidak cukup ruang untuk juga mengembalikannya, Anda dapat melakukan "pemulihan virtual" menggunakan versi percobaan produk dari Red-Gate dengan nama yang sama (yang memungkinkan Anda untuk berinteraksi dengan file cadangan seolah-olah telah dipulihkan). Jika tidak, pulihkan database dengan cara biasa .

  4. Setelah database tersedia (baik melalui pemulihan normal atau pemulihan virtual), Anda dapat membuat skrip untuk skema dan data dengan cara berikut:

    • Buka Management Studio dan sambungkan ke instance Anda.
    • Buka Penjelajah Objek.
    • Klik kanan basis data yang baru Anda pulihkan, pilih Tugas> Buat Skrip ...
    • Klik Berikutnya, Klik Selanjutnya
    • Pada halaman "Pilih Opsi Skrip", gulir ke bawah dan atur "Data Skrip" ke True
    • Klik Selanjutnya
    • Periksa semua objek yang relevan dan klik Berikutnya
    • Periksa tabel yang Anda inginkan dan klik Next
    • Pilih skrip ke file. Sekarang Anda akan memiliki file yang berisi semua objek dan data Anda menggunakan sintaks sisipan SQL Server, Anda harus bermain dengan output untuk mendapatkannya dalam format yang berfungsi untuk Postgres (Saya tidak mengetahui rahasia perbedaan sintaksis kecil).

Atau Anda dapat mencoba dan bermain dengan utilitas bcp untuk mengekstraksi data ke file CSV atau serupa, tetapi Anda harus melakukan ini tabel-demi-tabel atau menggunakan beberapa skrip cerdas (PowerShell, T-SQL, C # / SMO, dll. ) untuk menghasilkan semua perintah bcp untuk Anda. Setelah berada di file CSV, sepele untuk memuat data ke Postgres secara massal (tetapi Anda masih memiliki beberapa pekerjaan untuk menghasilkan tabel).

Sebagai saran terakhir, jika file .bak tidak ginormous, dan datanya tidak rahasia, saya lebih dari bersedia untuk mencoba dan menghasilkan file untuk Anda dalam format yang Anda butuhkan. Saya memiliki banyak VM Windows dengan ruang, tantangannya adalah mendapatkan file .BAK ke tempat di mana saya dapat mengambilnya - terutama jika lebih besar dari sebagian besar dukungan layanan berbagi file.

Aaron Bertrand
sumber
+1 Saya akan menyarankan metode bcp begitu saya sampai di komputer. Beberapa gotcha adalah pembatas tabel, IDENTITY (urutan, dalam pg), nvarchar, hanya untuk beberapa nama. Kalau tidak, inilah yang akan saya sarankan (tanpa Red-Gate) di bagian edit saya.
swasheck
Ada 8, 20GB .bak file, dan akan lebih bagus jika Anda bisa membantu, tetapi silakan lihat pertanyaan terkait di gis.se, gis.stackexchange.com/q/28281/3218 dan gis.stackexchange.com/q/28257 / 3218 tentang Database Tanah USDA (SSURGO). Saat ini sangat sulit untuk menggunakan akses data ini dengan cara otomatis untuk pemodelan simulasi. Akan sangat bermanfaat bagi sains untuk memiliki data ini dalam struktur yang lebih bisa digunakan. Anda dapat mengunduhnya dari server saya. Data tidak bersifat rahasia, siapa pun dapat memperolehnya dengan $ 50 / CD atau $ 100 / DVD atau mungkin lebih sedikit dari agen ekstensi mereka.
Abe
Sepertinya Anda memiliki jawaban tentang cara mendapatkan data di GIS.SE. Saya telah pergi dan melihat situs-situs tersebut tetapi tidak melihat di mana mereka menentukan bahwa file tersebut adalah cadangan SQL Server. Bagaimana / dari mana Anda mendapatkan file-file ini?
swasheck
7

Sayangnya tidak ada cara untuk mendapatkan akses ke konten file .bak tanpa memiliki pengetahuan mendalam tentang internal file itu sendiri. Saya dapat memikirkan satu orang di sini yang mungkin mengetahui informasi ini, tetapi saya tidak dapat berbicara apakah orang tersebut akan memberitahu Anda bagaimana cara melakukannya.

Jadi, Anda harus menginstal contoh SQL Server. Anda juga perlu memastikan bahwa instance ini dapat berbicara dengan server Postgres Anda (bermain-main dengan pg_hba.conf) Setiba di sana, Anda memiliki beberapa jalur yang bagus untuk memigrasi data.

Jalur pertama adalah menginstal driver Postgres Windows ODBC dan mengatur koneksi ke server pg. Kemudian Anda bisa menggunakan SSIS untuk skrip migrasi data. Jika Anda akan pergi dengan rute ini, saya sarankan Anda menginstal SSIS ketika menginstal server database.

Opsi lain juga melibatkan koneksi driver ODBC, tetapi Anda dapat membuat server yang ditautkan di SQL Server dan menjalankan sisipan pada instance pg melalui SQL Server. Saya telah menjawab pertanyaan yang tepat ini di sini sebelumnya sehingga seharusnya tidak sulit ditemukan.

EDIT

Untuk menggabungkan komentar Aaron, setelah Anda menjalankan dan menjalankan SQL Server, Anda juga dapat mengekspor data ke file datar dalam berbagai cara berbeda. Jika Anda memilih jalur ini, beri tahu saya dan saya akan memposting beberapa cara untuk melakukannya

EDIT (2):

Proses server yang ditautkan mungkin bukan pendekatan terbaik kecuali jika Anda ingin membuat struktur sebelumnya. Ini metode pilihan saya, tetapi saya biasanya sudah memiliki struktur di kedua sisi.

Itu membuat jawaban Aaron Bertrand sebagai jawaban terbaik. Harap dicatat bahwa selain tipe data ( IDENTITYvs. SEQUENCE, postgres tidak tahu apa-apa NVARCHARsejak Anda mengatur encoding pada database itu sendiri). Postgres tidak tahu apa-apa tentang CREATE CLUSTERED INDEX( CLUSTERdapat bekerja untuk Anda). Akhirnya, karena saya melihat di komentar bahwa Anda akan menggunakan data spasial, postgresql tidak tahu apa-apa tentang CREATE SPATIAL INDEXsintaks. Anda harus menginstal postgis dan menggunakan INDEXTYPEkata kunci untuk membuat indeks spasial. Akhirnya, pastikan Anda menangani skema dengan tepat.

Singkat cerita:

  1. Hasilkan skrip dan data menggunakan metode Aaron Bertrand (saya mungkin akan tetap menggunakan level tabel)
  2. Perhatikan indeks DDL (jika masih valid), tetapi jangan sertakan
  3. Buat indeks pada postgres setelah struktur dan data ada
swasheck
sumber
3
Saya tidak berpikir Anda perlu mengkonfigurasi SQL Server untuk berbicara dengan Postgres. Saya yakin begitu Anda menginstal SQL Server, Anda dapat mengekstrak data ke dalam berbagai format yang akan dipahami Postgres.
Aaron Bertrand
Permintaan maaf. Maksud saya, Anda harus mengonfigurasi Postgres untuk menerima koneksi eksternal (SQL Server dalam kasus ini)
swasheck
Jangan minta maaf. :-) Saya baru saja mengklarifikasi bahwa Anda tidak perlu bicara langsung dengan SQL Server ke Postgres atau sebaliknya ..
Aaron Bertrand