Bagaimana saya bisa membuat cadangan database SQL Server jarak jauh ke drive lokal?

241

Saya perlu menyalin database dari server jauh ke yang lokal. Saya mencoba menggunakan SQL Server Management Studio, tetapi hanya mencadangkan ke drive di server jauh.

Beberapa poin:

  • Saya tidak memiliki akses ke server jauh dengan cara yang saya bisa menyalin file;
  • Saya tidak memiliki akses untuk mengatur jalur UNC ke server saya;

Ada ide bagaimana saya bisa menyalin database ini? Apakah saya harus menggunakan alat pihak ke-3?

Fernando
sumber
1
Saya pikir jika Anda tidak memiliki akses ke struktur direktori sama sekali, Anda akan ditantang untuk mencoba melakukan ini.
JNK
3
Anda hanya mencoba menyalin database daripada secara khusus mendukungnya? Jika demikian, Anda dapat menggunakan Salin Basis Data Salin atau (dalam SQL Server 2008) gunakan opsi "Buat Skrip" untuk skrip Skema dan Data. Redgate SQL Compare dan Data Compare juga bisa bermanfaat di sini.
Martin Smith
1
@ MartinSmith Menurut saran Anda, saya membuat skrip menggunakan Generate and Publish Scriptsopsi. Saya mendapatkan semua tabel dan skema. Tapi saya tidak mendapatkan data dengan tabel. Bagaimana saya bisa memperbaikinya?
benar-benar teman

Jawaban:

182

Di Microsoft SQL Server Management Studio Anda dapat mengklik kanan pada database yang ingin Anda backup dan klik Tugas -> Hasilkan Script.

Pops ini membuka wizard di mana Anda dapat mengatur yang berikut untuk melakukan backup yang layak dari database Anda, bahkan pada server jauh :

  • Pilih database yang ingin Anda backup dan tekan berikutnya,
  • Dalam opsi yang disajikan kepada Anda:
    1. Pada 2010: di bawah Tabel / Opsi Tampilan, ubah 'Data Skrip' dan 'Indeks Skrip' menjadi Benar dan tekan berikutnya,
    2. Pada 2012: di bawah 'Umum', ubah 'Jenis data ke skrip' dari 'Skema saja' menjadi 'Skema dan data'
    3. Pada tahun 2014: opsi untuk skrip data sekarang "tersembunyi" di langkah "Tetapkan Opsi Skrip", Anda harus mengklik "Advanced" dan mengatur "Jenis data ke skrip" ke "Skema dan data" nilai
  • Di empat jendela berikutnya , tekan 'pilih semua' dan kemudian berikutnya,
  • Pilih skrip ke jendela kueri baru

Setelah selesai, Anda akan memiliki skrip cadangan di depan Anda. Buat database lokal baru (atau jarak jauh), dan ubah pernyataan 'USE' pertama dalam skrip untuk menggunakan database baru Anda. Simpan skrip di tempat yang aman, dan lanjutkan dan jalankan melawan database kosong baru Anda. Ini akan membuat Anda menjadi (hampir) duplikat database lokal yang kemudian dapat Anda backup sesuai keinginan.

Jika Anda memiliki akses penuh ke basis data jauh, Anda dapat memilih untuk memeriksa 'skrip semua objek' di jendela pertama wizard dan kemudian ubah opsi 'Database Skrip' ke True di jendela berikutnya. Berhati-hatilah, Anda harus melakukan pencarian penuh & mengganti nama database dalam skrip ke database baru yang dalam hal ini Anda tidak perlu membuat sebelum menjalankan skrip. Ini harus membuat duplikat yang lebih akurat tetapi kadang-kadang tidak tersedia karena pembatasan izin.

Daniel Gill
sumber
9
Di SQL Server Management Studio 2012 tidak ada opsi seperti 'Data Skrip', jadi dalam versi yang lebih baru lakukan hal berikut untuk langkah 2: di bawah 'Umum', ubah 'Jenis data ke skrip' dari 'Hanya skema' ke 'Skema dan data '.
berezovskyi
1
Saya memeriksanya di SQL Server 2008 R2 dan itu bekerja seperti pesona. Dalam merawat menggunakannya untuk strategi cadangan perlu beberapa pekerjaan tambahan sendiri tapi saya pikir lebih baik daripada menggunakan beberapa alat pihak ketiga seperti RedGate dll. Mungkin saya paranoia tapi saya pikir sebagian besar alat pihak ketiga memiliki kode tambahan dan akan mendapatkan saya mengontrol dan mengurangi kesederhanaan dan klarifikasi naskah. Terima kasih banyak.
QMaster
2
@ShaunLuttin Jika Anda memastikan untuk mengubah 'Jenis data ke skrip' dari 'Skema saja' menjadi 'Skema dan data pada langkah kedua (pada 2012), pernyataan INSERT akan ditampilkan.
Daniel Gill
6
Di SSMS 2014 opsi untuk mengubah dari skema hanya menjadi skema & data sekarang disembunyikan di belakang "Lanjutan" ketika memilih tempat untuk menyimpan skrip.
MushinNoShin
2
Ketika saya mencoba menjalankan skrip menggunakan metode ini, saya mendapatkan kesalahan dari studio manajemen server SQL tentang "Memori tidak mencukupi untuk melanjutkan eksekusi program. (Mscorelib)"
Rob
51

Pertama, berikan izin kontrol penuh ke jalur lokal di mesin Anda (seperti yang ditunjukkan di bawah) dengan Semua Orang. (Atau sebagai alternatif memberikan izin khusus ke akun SQL Server Agent).

Kedua, jalankan yang berikut:

BACKUP DATABASE [dev] TO  DISK = N'\\myMachine\c\dev.bak' WITH COPY_ONLY, INIT;
T. Webster
sumber
14
Ini adalah jawaban untuk pertanyaan itu. Ini akan "mencadangkan basis data SQL Server jarak jauh ke drive lokal", dan bukan "tabel skrip dan data". Seseorang: Harap tandai jawaban ini sebagai diterima dan hapus jawaban yang salah oleh Daniel Gill
Henrik Holmgaard Høyer
sementara saya pikir ini adalah jawaban yang lebih baik, pertanyaannya adalah "Ada ide bagaimana saya bisa menyalin database ini?" tidak secara khusus cadangan.
Oliver Townshend
11
Ini mengasumsikan bahwa mesin jarak jauh memiliki akses ke file mesin lokal Anda, yang bukan kasus umum.
Anders Lindén
Seandainya saya bisa membesarkan Anda lebih dari satu kali. Ini adalah jawaban yang sempurna, dan sesuatu yang ingin saya lakukan selama bertahun-tahun. Sangat sederhana ... sangat sempurna. Itu tidak akan menyelesaikan setiap kasus di dunia, tetapi itu bekerja dengan sempurna untuk saya di mana saya dikirim kembali ke mesin, tetapi bukan mesin yang memiliki SQL Server.
Wade Hatler
Ini punya pekerja untuk saya juga. Cukup bagikan folder lokal sementara dengan semua orang , lakukan pencadangan, lalu nonaktifkan berbagi. Saya juga berpikir bahwa ini harus menjadi jawaban yang benar.
Fred Rogers
51

Untuk menyalin data dan skema saja (tidak akan menyalin prosedur tersimpan, fungsi, dll.), Gunakan SQL Server Import and Export Wizard, dan pilih New ... ketika memilih database tujuan.

Klik kanan Database> Tugas> Impor Data.

Pilih Sumber Data

  • Sumber Data : SQL Server Native Client
  • Nama Server : server jarak jauh
  • Otentikasi :
  • Database : nama db

Pilih Tujuan

  • Sumber Data : SQL Server Native Client
  • Nama Server : server lokal
  • Otentikasi :
  • Basis data :New...

Sisanya lurus ke depan.

Shaun Luttin
sumber
2
Ini bekerja jauh lebih baik bagi saya daripada jawaban yang diterima. Menangani hubungan antar tabel jauh lebih bersih.
MushinNoShin
7
Welp. Sayangnya, itu tidak menetapkan identitas dan batasan default. :(
MushinNoShin
1
Ini jauh lebih baik daripada menghasilkan skrip. Naskah bisa sangat besar di kali. Pilihan Pribadi. Jangan tersinggung :)
Vikas
Ini cara yang lebih sederhana dan akan menjadi tujuan saya, tetapi jika karena alasan tertentu Anda memerlukan kolom seperti object_id, create_data, ubah tanggal SEBAGAIMANA ADANYA di sys.table, ingat saja bahwa mereka akan dimodifikasi setelah dibuat.
Crismogram
@MushinNoShin Anda dapat membuat skrip terlebih dahulu dan kemudian mengimpor / mengekspor data dengan mengaktifkan penyisipan identitas pada langkah pemetaan.
HasanG
29

Anda tidak dapat membuat cadangan dari server jarak jauh ke disk lokal - tidak ada cara untuk melakukan ini. Dan tidak ada alat pihak ketiga untuk melakukan ini, sejauh yang saya tahu.

Yang dapat Anda lakukan adalah membuat cadangan di mesin server jarak jauh, dan minta seseorang untuk mengirimkannya dan mengirimkannya kepada Anda.

marc_s
sumber
5
Saya tidak setuju. Anda dapat menggunakan perintah 'Generate Script' Studio MS SQL Server Management Studio untuk membuat skrip yang dapat dijalankan untuk menghasilkan database lokal yang kemudian dapat Anda lakukan sesuai keinginan. Lihat jawaban saya di bawah atau komentar Martin Smith tentang pertanyaan itu.
Daniel Gill
19
@Rafid: ya -tapi itu BUKAN CADANGAN yang sebenarnya - ini adalah skrip / ekspor data .....
marc_s
2
@marc_s Apa yang ada tentang "cadangan sebenarnya" yang berbeda dari salinan yang diekspor? Log? Ada yang lain?
Dronz
31
@ Kronz: YA! Ekspor skrip akan mereproduksi struktur dan bahkan mungkin data dalam tabel - tetapi tidak dapat menyertakan hal-hal seperti log transaksi dan statistik dan bagian penting lainnya dari database SQL Server.
marc_s
1
@ShaunLuttin, Anda dapat memasukkan data.
Erwin Rooijakkers
17

Saya tahu ini adalah jawaban yang terlambat tetapi saya harus membuat komentar tentang jawaban yang paling banyak dipilih yang mengatakan untuk menggunakan opsi menghasilkan skrip di SSMS.

Masalahnya adalah opsi ini tidak selalu menghasilkan skrip dalam urutan eksekusi yang benar karena tidak memperhitungkan dependensi.

Untuk database kecil ini bukan masalah tetapi untuk yang lebih besar itu tentu karena diperlukan untuk memesan ulang skrip secara manual. Coba itu pada 500 objek database;)

Sayangnya dalam hal ini satu-satunya solusi adalah alat pihak ketiga.

Saya berhasil menggunakan alat perbandingan dari ApexSQL (Diff dan Data Diff) untuk tugas yang serupa tetapi Anda tidak dapat salah dengan yang lain yang telah disebutkan di sini, terutama Gerbang Merah.

Phill C
sumber
1
saya tidak setuju, bagi saya sql selalu memesan dependancies dengan benar, apakah Anda punya contoh spesifik tentang cara mereproduksi perilaku yang telah Anda sebutkan?
sawe
juga, ada opsi untuk mempertimbangkan hal ini
Gaspa79
13

Anda dapat mencoba SQLBackupAndFTP . Ini akan membuat skrip untuk membuat semua objek dalam database Anda dan pernyataan INSERT untuk semua baris dalam tabel Anda. Di basis data apa pun Anda dapat menjalankan file skrip ini dan seluruh basis data akan dibuat ulang.

adinas
sumber
4
Diperbantukan. Harus menginstal versi baru dari studio manajemen server sql dan tidak bisa skrip seperti dulu. Alat ini merawatnya dengan cepat dan tanpa masalah bahkan tanpa memiliki akses penuh ke server jarak jauh (add-on appharbor sqlserver)
Daniel Gill
1
Harap dicatat perangkat lunak ini banyak menggunakan sumber daya.
Demensik
Di atas menjadi buggy dan tidak sepenuhnya yakin ini berfungsi dengan benar. Dapat menghubungkan tidak ada masalah ke server jauh melalui PHP, tetapi ini tidak bisa? Ketika saya memiliki pengaturan yang tepat di server itu sendiri. BEGITU ya ... pindah.
Shawn Rebelo
7

Lihatlah blog ini untuk deskripsi cara menyalin basis data jauh:

Cadangkan Database SQL Server 2008 Dari Lingkungan Hosting Bersama

Marcel W
sumber
1
Pendekatan ini menjelaskan cara membuat skrip struktur database, membuatnya secara lokal dan kemudian menggunakan alat manajemen SQL untuk menyalin data antara database lokal dan jauh.
Drew Noakes
1
Anda dapat membalik opsi 'Data Skrip' ke True untuk juga skrip data dalam sekali jalan.
Daniel Gill
Salin dan cadangan adalah dua hal yang berbeda.
Anders Lindén
Ini sempurna karena saya perlu bekerja pada database 2016 menggunakan sql server 2012 dan tidak dapat menggunakan cadangan 2016 pada tahun 2012.
majjam
6

Ada solusi 99% untuk mendapatkan file bak dari server sql jarak jauh ke komputer lokal Anda. Saya menggambarkannya di pos saya di http://www.ok.unsode.com/post/2015/06/27/remote-sql-backup-to-local-pc

Secara umum akan terlihat seperti ini:

  • jalankan skrip sql untuk menghasilkan file bak

  • jalankan skrip sql untuk memasukkan setiap file bak ke tabel temp dengan jenis bidang varbinary dan pilih baris ini dan unduh data

  • ulangi sebelumnya. langkah sebanyak yang Anda punya file bak

  • jalankan skrip sql untuk menghapus semua sumber daya sementara

itu saja, Anda memiliki file bak Anda di pc lokal Anda.

okarpov
sumber
5

Anda dapat menggunakan Salin basis data ... klik kanan pada basis data jauh ... pilih tugas dan gunakan salin basis data ... ini akan menanyakan tentang server sumber dan server tujuan. bahwa sumber Anda adalah remote dan tujuan adalah instance lokal Anda dari sql server.

semudah itu

Pouyan
sumber
Menyalin basis data membutuhkan hak istimewa SysAdmin. Ini bukan solusi untuk pengguna biasa dari basis data.
Buggieboy
Dalam masalah saya hari ini, tim dev kami memang memiliki hak istimewa sysadmin. Jadi saya akan menggunakan pendekatan Pouyan.
Kode dengan Hammer
tetapi saya perlu melakukannya setiap hari dan saya perlu skrip untuk melakukan ini
klarifikasi
3

Geng AppHarbor telah berjuang dengan ini dan telah mengembangkan solusi sementara menggunakan objek manajemen server SQL dan SqlBulkCopy.

Lihat posting blog mereka tentang hal itu, atau langsung ke kode .

Mereka hanya mengujinya dengan AppHarbor tetapi mungkin perlu dicoba.

Daniel Gill
sumber
3

Jawaban di atas tidak benar. SQL Script bahkan dengan data bukan cadangan. Cadangan adalah file BAK yang berisi basis data lengkap dalam strukturnya saat ini termasuk indizes.

Tentu saja file BAK yang berisi cadangan lengkap dengan semua data dan indikasi dari basis data SQL Server jarak jauh dapat diambil pada sistem lokal.

Ini dapat dilakukan dengan perangkat lunak komersial, untuk secara langsung menyimpan file BAK cadangan ke mesin lokal Anda, misalnya Yang ini secara langsung akan membuat cadangan dari db SQL jarak jauh pada mesin lokal Anda.

Matthias
sumber
Anda memerlukan izin sysadmin untuk melakukan ini.
LarryBud
Baik. Akun (windows atau sql server) yang digunakan untuk melakukan koneksi jarak jauh ke instance sql server memerlukan izin sysadmin untuk mengambil kembali jung cadangan dan menyimpannya di mesin lokal Anda. Alat yang disebutkan dari FIDA Software mengenkripsi dan memampatkan lalu lintas jaringan dari dan ke sql server sambil mengambil jung cadangan. Setelah Anda memiliki file bak di mesin Anda, Anda dapat mengembalikannya di tempat yang Anda inginkan.
Matthias
1

Seperti yang dikatakan Martin Smith, jika Anda tidak memiliki akses ke mesin atau sistem file, Anda harus menggunakan alat pihak ketiga, seperti Red Gate atau Adept untuk melakukan perbandingan pada sistem sumber dan tujuan. Alat Gerbang Merah akan memungkinkan Anda untuk menyalin objek dan skema DAN data.

Vinnie
sumber
1

yone cara Anda bisa mengambil cadangan dari instance SQL Server jarak jauh ke drive lokal Anda, mengingat kondisi berikut terpenuhi:

  1. Anda memiliki folder bersama di drive lokal Anda.
  2. folder bersama dapat diakses dari kotak SQL Server.

Sekarang saat menentukan perintah cadangan, gunakan jalur folder bersama saat menentukan opsi disk.

Naresh
sumber
Dan bagaimana jawaban Anda berbeda dari yang oleh @Vivek?
Martin Schröder
1

coba saja yang ini:

1) Bagikan folder dengan izin penuh di komputer Anda

2) di server SQL Anda: panel kontrol -> alat administrasi -> layanan -> klik kanan pada semua layanan SQL

pada log masuk tab harus dimulai dengan administrator domain Anda

3) di wizard pemeliharaan sql server tempat cadangan lokasi dan folder (\ yourcomputername \ sharedfoldernam)

Saya melakukan backup jarak jauh pada 8 server sql server 2008 di perusahaan kami

Parsaria
sumber
1

Saya heran bahwa tidak ada yang menyebutkan solusi cadangan yang ditawarkan oleh Ola Hallengren yang benar - benar melakukannya memungkinkan Anda untuk membuat cadangan DB dari server jarak jauh ke jalur UNC di jaringan Anda secara gratis (saya sebenarnya menggunakannya saat saya mengetik untuk mencadangkan DB dari server dev yang saya tidak memiliki akses jarak jauh selain melalui SSMS ke share di PC dev saya). Ini telah tersedia sejak 2008 dan bekerja pada SQL Server 2005 hingga 2014.

Anda perlu memastikan bahwa bagian yang Anda setel memiliki akses yang cukup: Saya cenderung mengizinkan baca / tulis penuh ke grup AD 'Semua Orang' selama durasi proses pencadangan karena saya terlalu malas untuk mencari tahu sesuatu yang lebih membatasi tapi itu pilihan pribadi.

Ini digunakan dengan baik, didokumentasikan dengan baik dan sangat fleksibel. Saya cenderung untuk meletakkan procs dan tabel logging di database utilitas kecil mereka sendiri dan kemudian jalankan. Asalkan semuanya ada dalam domain AD Anda dan tidak jauh dalam arti bahwa itu keluar pada server yang terletak bersama atau sesuatu, ini bekerja dengan sangat baik.

Permintaan maaf karena menambahkan ke utas yang sangat lama tetapi saya menemukan ini ketika mencari sesuatu yang lain dan menganggapnya sebagai tambahan yang berharga bagi siapa pun yang mencari topik ini.

Steve Pettifer
sumber
1

Untuk 2019, saya akan merekomendasikan menggunakan mssql-scripter jika Anda menginginkan cadangan lokal yang sebenarnya. Ya itu skrip tetapi Anda dapat menyesuaikannya untuk memasukkan apa pun yang Anda inginkan, yang dapat mencakup semua data. Saya menulis skrip bash untuk melakukan backup harian otomatis menggunakan ini pada mesin linux. Lihat intisari saya:

https://gist.github.com/tjmoses/45ee6b3046be280c9daa23b0f610f407
Tim Moses
sumber
0

Saya bisa melakukannya sekali ... Untuk melakukan ini, Anda harus memiliki saham dibuka di server jauh. maka Anda dapat langsung menempatkan cadangan pada share itu sendiri, daripada lokasi default ...

Biasanya admin mengambil cadangan dan membagikannya kepada kami di beberapa folder bersama. Saya mencoba jika itu akan berhasil jika saya menempatkan cadangan di sana. Itu berhasil.

Vivek
sumber
0

Jika Anda menggunakan Generate Script di bawah SSMS, klik tombol Advanced. Di bawah opsi 'Hasilkan Script untuk objek dependen', klik Benar. Dengan mengklik bahwa setiap dependensi dari setiap objek juga akan dihapus dengan urutan yang benar.

pengguna2684
sumber
True adalah default di SSMS v17.8.1.
Chris Catignani
0

Beberapa program cadangan pihak ketiga memungkinkan pengaturan transfer file dengan izin jaringan tertentu. Ini sangat berguna ketika layanan SQL Server berjalan di bawah akun terbatas dan tidak memiliki izin jaringan yang cukup. Coba gunakan EMS SQL Backup yang menyelesaikan tugas ini.

curandero
sumber
0

saya menggunakan alat cadangan Redgate pro 7 untuk tujuan ini. Anda dapat membuat mirror dari file cadangan di buat ubin di lokasi lain. dan dapat menyalin file cadangan setelah dibuat di jaringan dan di penyimpanan host secara otomatis.

mehdi lotfi
sumber
0

Buat folder bersama lokal, dengan hak istimewa "baca semua orang"

Hubungkan ke database target, mulai cadangan dan arahkan ke bagikan seperti di bawah ini

\ mymachine \ shared_folder \ mybackup.bak

(Mencoba di lingkungan domain Windows)

Rajesh Thampi
sumber
0

Saya tahu ini adalah posting yang lebih lama, tetapi untuk apa nilainya, saya telah menemukan bahwa solusi "paling sederhana" adalah dengan mengklik kanan pada database, dan pilih "Tugas" -> "Ekspor Aplikasi Data-tier". Mungkin saja opsi ini hanya tersedia karena server dihosting di Azure (dari yang saya ingat pernah bekerja dengan Azure di masa lalu, format .bacpac cukup umum di sana).

Setelah selesai, Anda dapat mengklik kanan daftar "Databases" server lokal Anda, dan menggunakan "Impor Aplikasi Data-tier" untuk mendapatkan data ke mesin lokal Anda menggunakan file .bacpac.

Perlu diingat ekspor bisa memakan waktu lama . Butuh sekitar dua jam bagi saya untuk menyelesaikan ekspor. Impor bagian jauh lebih cepat.

Kiran Ramaswamy
sumber
-1

Jika Anda berada di jaringan lokal, Anda dapat membagikan folder di mesin lokal Anda dan menggunakannya sebagai folder tujuan untuk cadangan.

Contoh:

  • Folder lokal:

    C:\MySharedFolder -> URL: \\MyMachine\MySharedFolder

  • Remote SQL Server:

    Select your database -> Tasks -> Back Up -> Destination -> Add -> Apply '\\MyMachine\MySharedFolder'

Tonatio
sumber