Bisakah saya memiliki cadangan penuh pada banyak disk?

8

Saat ini, saya hanya punya satu file cadangan, IMTDB.bak, dan itu pada HDD yang sama dengan Database itu sendiri. Saya ingin meningkatkan redundansi cadangan DB ini dengan dasarnya "menyalin" ke disk lain, tetapi saya mendapatkan kesalahan "Pencadangan gagal untuk Server, media diformat untuk mendukung 2 keluarga media". Saya pikir ini berarti bahwa ketika saya membuat cadangan, itu hanya dimaksudkan untuk menempatkan cadangan pada satu drive, dan saya tidak dapat secara retroaktif menambahkan lebih banyak. Saya ingin memigrasikan cadangan ke drive lain ini (benar-benar salin saja), tetapi saya tidak ingin menghapus cadangan saat ini untuk melakukannya.

Apa yang saya lakukan? Apakah saya aman hanya menyalin IMTDB.bak ke folder di drive lain?

ijustlovemath
sumber
Tentu. Menggunakan explorer untuk menyalin file dari satu lokasi ke lokasi lain, tidak masalah sama sekali. Anda mungkin ingin melihat proses otomatis, mungkin dengan Windows Scheduler.
Max Vernon
Di mana / bagaimana Anda melihat kesalahan ini: "Cadangan gagal untuk Server, Media diformat untuk mendukung 2 keluarga media"
Max Vernon
Ketika pergi ke Tugas -> Cadangkan dan coba lakukan "Tambah" dan pilih disk yang saya miliki.
ijustlovemath
Menambahkan disk lain hanya akan menyebarkan cadangan ke beberapa disk, lebih lanjut mengurangi keandalan file cadangan, karena jika salah satu dari dua disk gagal, file cadangan tidak dapat digunakan. Lakukan seperti yang disarankan @Kin dalam jawabannya, dan gunakan perintah T-SQL BACKUP DATABASEuntuk membuat cadangan ke dua lokasi secara bersamaan.
Max Vernon

Jawaban:

12

Karena Anda tidak terbiasa dengan perintah T-SQL BACKUP DATABASE, saya pikir saya akan menambahkan beberapa detail tentang itu.

Anda mungkin ingin menjalankan sesuatu di sepanjang baris pernyataan berikut melalui layanan Penjadwal Tugas Windows, karena Anda tidak memiliki akses ke SQL Server Agent (saya melihat dari pertanyaan Anda yang lain, Anda menggunakan SQL Server Express).

BACKUP DATABASE [xyz]
TO DISK = 'C:\somepath\mybackupfile.bak'
MIRROR TO DISK = 'D:\somepath\myotherbackupfile.bak'
WITH FORMAT
    , INIT
    , SKIP
    , STATS = 1;

Anda mungkin ingin sangat mempertimbangkan untuk memiliki MIRROR TOtitik klausa ke beberapa lokasi yang tidak pada mesin lokal Anda, karena jika Anda kehilangan mesin lokal Anda sepenuhnya, Anda mungkin tidak dapat mengakses file cadangan. Menentukan MIRROR TOklausa mengharuskan Anda untuk menentukan FORMATkata kunci dalam WITHklausa saat pertama kali Anda menjalankan pernyataan cadangan itu.

Anda dapat menggunakan nama Windows Share, seperti \\SomeServer\SQLBackups\MyBackupFile.bakselama izin keamanan pada share memungkinkan akses layanan Penjadwal Windows.

Bagian WITH FORMAT, INITmemberitahu SQL Server untuk menimpa cadangan yang ada yang mungkin ada di file cadangan. Anda dapat mengubah ini menjadi WITH NOINITsetelah Anda menyelesaikan cadangan mirror pertama jika Anda ingin beberapa cadangan (yaitu cadangan dari berbagai titik waktu) disimpan dalam file-file tersebut. NOSKIPmemberitahu SQL Server untuk tidak memeriksa kedaluwarsa cadangan, antara lain. STATS = 1akan menampilkan output dalam 1persen kenaikan. Anda dapat mengubah nomor ini menjadi apa pun yang Anda suka. Saya menggunakan 1untuk database yang sangat besar karena memberikan beberapa indikasi kemajuan.

Untuk menjalankan ini melalui layanan Penjadwal Tugas Windows, Anda harus menyimpan perintah itu (setelah Anda mengujinya di SQL Server Management Studio) ke file di disk Anda; sebut saja itu C:\somefolder\BackupMyDB.sql. Anda kemudian ingin menambahkan perintah berikut ke Penjadwal Windows:

<path to sqlcmd>sqlcmd -S localhost -E -i C:\somefolder\BackupMyDB.sql

Anda ingin tugas itu "dijalankan sebagai" Anda.

Setelah Anda melakukan semua itu, Anda ingin sangat serius mempertimbangkan untuk mencoba memulihkan cadangan ke komputer lain sehingga Anda mengerti bagaimana melakukannya. Memiliki cadangan hanyalah satu bagian dari rencana pemulihan bencana; bagian yang bisa dibilang lebih penting adalah menguji rencana itu.

Proses pemulihan akan menggunakan perintah seperti:

RESTORE DATABASE [xyz]
FROM DISK = 'D:\somepath\myotherbackupfile.bak'
WITH RECOVERY
    , STATS = 1;

Diperingatkan, berjalan RESTORE DATABASEdi mesin tempat database Anda saat ini dapat menimpa database saat ini tanpa konfirmasi atau peringatan, jadi harap pastikan Anda dengan hati-hati mengevaluasi nama database, [xyz]dalam contoh saya, dan opsi lain yang Anda gunakan. (Ini sebenarnya tidak akan menimpa database yang ada kecuali Anda menambahkan REPLACEkata kunci ke WITHklausa - Saya hanya ingin menekankan hati-hati.)

Max Vernon
sumber
Terima kasih! Karena file .bak saya sudah memiliki beberapa cadangan di dalamnya, akankah mirror yang dibuat secara otomatis menyertakan cadangan itu? Atau hanya yang terbaru?
ijustlovemath
Saya sarankan memindahkan file itu di suatu tempat jika Anda ingin menyimpannya karena MIRRORmengharuskan Anda untuk memformat file cadangan saat pertama kali menggunakannya, yang akan menghapus cadangan apa pun yang ada di file itu.
Max Vernon
1
Sekali lagi terima kasih atas detail di pos Anda. Sangat membantu bagi pemula tanpa sumber daya lain!
ijustlovemath
dengan senang hati. Saya tidak bisa cukup menekankan pentingnya strategi cadangan dan pemulihan yang teruji dan andal . Saya merekomendasikan pengujian pemulihan ke beberapa mesin lain sehingga Anda tidak memiliki kemungkinan untuk menghancurkan basis data Anda yang sudah ada, yang mudah dilakukan ketika Anda sedang belajar.
Max Vernon
5

Anda dapat menggunakannya backup database .... MIRROR TO DISK =untuk membuat cadangan basis data ke lokasi tambahan.

Apakah saya aman hanya menyalin IMTDB.bak ke folder di drive lain?

Ya, Anda bisa melakukannya setelah cadangan selesai.

Catatan: Pastikan Anda menggunakan T-SQL sebagai lawan GUI yang memiliki opsi cadangan terbatas terbuka.

Kin Shah
sumber
Apa opsi yang direkomendasikan di sini? DB saya sangat sederhana, hanya empat tabel, tiga di antaranya hanya memiliki 90.000 baris, yang keempat memiliki ~ 75M. Ini juga ukuran tetap; tidak ada lagi data yang ditambahkan. Saya hanya akan menjalankan kueri menentangnya.
ijustlovemath
5
Saya sarankan Anda untuk menempatkan db Anda dalam read_onlymode dan hanya mengambil satu cadangan terakhir COMPRESSION. Simpan di lokasi yang aman.
Kin Shah