Aktifkan SQL Server untuk membuat cadangan pada mesin / drive jarak jauh

8

Saya memiliki SQL Server (2000, 2005 dan 2008) dan saya ingin menggunakan SQL Agent (atau bahkan database cadangan sederhana 'xxx' ke disk = 'yyy'), untuk membuat cadangan ke drive jarak jauh.

Yaitu: saya memiliki drive yang dipetakan di mesin SQL, misalnya: "M:" yang memetakan ke \\ otherbox \ someshare

Secara default SQL Server tidak akan memungkinkan Anda untuk membuat cadangan ke drive seperti itu, tapi saya pikir ada cara untuk mengaktifkannya. Adakah yang bisa mengarahkan saya ke dokumen?

Terima kasih sebelumnya.

Martin Marconcini
sumber
1
Anda cukup menggunakan alat pihak ketiga, seperti SQLBackupAndFTP untuk membuat cadangan SQL Server Anda dari jarak jauh? sqlbackupandftp.com/blog/…
Nick Taylor

Jawaban:

8

Gunakan jalur UNC ketika menentukan tujuan - Agen SQL tidak memiliki konsep "dipetakan" "drive".

Juga, SQL Agent biasanya berjalan sebagai "Layanan Lokal" atau "Sistem Lokal" dan, dengan demikian, tidak memiliki hak untuk berbagi jarak jauh di komputer lain.

Anda memiliki beberapa pilihan:

  • Jalankan SQL Agent sebagai akun peran di domain. Berikan izin akun itu untuk menulis ke direktori / bagikan di mana Anda ingin cadangan disimpan.

  • Jalankan SQL Agent sebagai "Layanan Jaringan". Ini akan mengotentikasi ke server berbagi dengan akun komputer domain dari mesin yang menjalankan layanan. Berikan izin akun itu untuk menulis ke direktori / bagikan di mana Anda ingin cadangan disimpan.

  • Jika Anda tidak memiliki domain, buat akun dengan nama pengguna dan kata sandi yang sama di mesin yang menghosting SQL Agent dan mesin yang menyimpan file cadangan. Ubah SQL Agent untuk dijalankan sebagai akun "peran" ini, dan berikan izin akun itu untuk menulis ke direktori / bagikan di mana Anda ingin cadangan disimpan. ("Domain orang miskin" ...)

Evan Anderson
sumber
Selain menyebutkan jalur UNC, saya akan merekomendasikan pengguna yang sebenarnya MENGHUBUNGKAN ke jalur UNC. Cara cepat / mudah untuk melakukan ini adalah dengan hanya membuka browser web dan mengetiknya. Anda akan diminta untuk nama pengguna / kata sandi dan biasanya dapat mengatakan Anda ingin MENGINGAT bahwa pengguna / pass untuk masa depan. Saya telah melihat terlalu banyak orang yang 99% dari perjalanan ke sana dan tidak tahu mengapa semuanya tidak berhasil. UJI SAMBUNGAN ANDA! LOL! :-)
KPWINC
Itulah yang saya cari (bagian "domain orang miskin");) Terima kasih!
Martin Marconcini
4

Saya sangat setuju dengan kedua jawaban tentang jalur UNC.

Saya juga ingin menambahkan bahwa bahkan dengan drive yang dipetakan Anda memiliki solusi sederhana. Anda dapat menjalankan cadangan ke semua drive normal server Anda. Dan kemudian Anda bisa menambahkan

xp_cmdshell 'XCOPY [source] [destination] \flags'

Perintah SQL untuk pekerjaan atau skrip SQL yang Anda jalankan.

Dengan xp_cmdshell Anda dapat melakukan lebih banyak lagi - misalnya menjalankan alat baris perintah arsip eksternal, seperti 7z untuk mengompres file sebelum Anda akan menyalinnya ke drive yang dipetakan (ketika koneksi jarak jauh terlalu lambat ...)

PS: Lupa menyebutkan bahwa xp_cmdshell dapat diaktifkan dan dinonaktifkan dengan menggunakan alat Konfigurasi Area Permukaan dan dengan menjalankan sp_configure (dan secara default dinonaktifkan)

Bogdan_Ch
sumber
Utilitas ROBOCOPY dari Win2003 Resource Kit menyediakan beberapa opsi tambahan di atas XCOPY, yang berguna dalam jenis operasi ini. Dalam kasus saya, kemampuan untuk tidak menimpa cadangan yang sebelumnya disalin, atau mencerminkan dua direktori cadangan mudah dilaksanakan tanpa skrip tambahan.
kermatt
1

Agen Anda perlu akses ke jaringan yang dibagikan. Mereka tidak perlu dipetakan sebelumnya.

Anda melakukannya seperti ini:

BACKUP DATABASE myDB TO DISK = '\\machine\share\dir\file.bak'

Saya percaya bahwa jika pengguna yang memiliki pekerjaan adalah sysadmin sql, itu berjalan di bawah agen, jika tidak berjalan sebagai pengguna non-sysadmin.

Sam
sumber
1

Jika SQL Server tidak berjalan di bawah akun domain, Anda dapat memetakan drive jaringan untuk akun sqlserver (bukan akun Anda) seperti yang dijelaskan dalam jawaban stackoverflow ini

Pertama, Anda perlu mengaktifkan xp_cmdshell

-- allow changes to advanced options 
EXEC sp_configure 'show advanced options', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
-- To enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO

Kemudian Anda dapat memetakan drive menggunakan:

EXEC xp_cmdshell 'NET USE Z: \\Srv\Path password1 /USER:Domain\UserName'

Akhirnya Anda dapat membuat cadangan ke drive yang dipetakan:

BACKUP DATABASE myDB TO DISK = 'z:\file.bak'
Yepeekai
sumber
0

Perlu diingat di sini bahwa SQL Server sangat tidak toleran terhadap keterlambatan jaringan. Jika terjadi, dan cenderung, cadangan akan gagal. Saya tidak merekomendasikan praktik ini sama sekali untuk lingkungan produksi.

Lebih baik mencadangkan secara lokal lalu salin.

Steve Jones
sumber
0

Cara paling mudah adalah membuat drive .vhd di jaringan berbagi melalui manajemen disk dan menetapkan huruf drive untuk itu. SQL dapat mengakses drive ini tanpa modifikasi apa pun.

Cukup tambahkan skrip diskpart.exe ke penjadwal saat boot untuk melampirkan otomatis saat restart.

contoh pilih file vdisk = "\ {alamat ip / server} {networkshare} {filenamep.vhd}" lampirkan vdisk // ingat huruf drive terakhir yang ditugaskan.

Kimon
sumber