Saya memiliki server Microsoft SQL Server 2005 DB. Di server DB, saya memiliki sekitar 250 database pengguna. Saya harus mengambil cadangan dari semua database ini. Karena, mengambil cadangan secara manual menghabiskan banyak waktu, saya mencari skrip Batch atau skrip DB yang akan secara otomatis mengambil cadangan semua 250 basis data. Adakah yang bisa membantu dalam hal ini?
Catatan: Pertama-tama buat folder di D:drive. (misalnya D:\User_DataBackup\)
Langkah 1: Buat prosedur yang diberikan di bawah ini.
CreatePROCEDURE[dbo].[UserDataBaseBackUp]ASBEGINSET NOCOUNT ON;DECLARE@name VARCHAR(50)-- database nameDECLARE@path VARCHAR(256)-- path for backup filesDECLARE@fileName VARCHAR(256)-- filename for backupDECLARE@fileDate VARCHAR(20)-- used for file nameSET@path ='D:\User_DataBackup\' -- as same as your created folder'SELECT@fileDate =CONVERT(VARCHAR(20),GETDATE(),104)DECLARE db_cursor CURSORFORSELECT name
FROM MASTER.dbo.sysdatabases
WHERE name NOTIN('master','model','msdb','tempdb','ReportServer','ReportServerTempDB')OPEN db_cursor
FETCH NEXT FROM db_cursor INTO@name
WHILE@@FETCH_STATUS =0BEGINSET@fileName =@path +@name +'_'+@fileDate +'.BAK'BACKUPDATABASE@name TODISK=@fileName
FETCH NEXT FROM db_cursor INTO@name
ENDCLOSE db_cursor
DEALLOCATE db_cursor
END
Langkah 2: Jalankan prosedur di atas.
EXEC[UserDataBaseBackUp]
Anda juga dapat menjadwalkan prosedur ini. Prosedur ini diuji semoga akan membantu.
Catatan: Edisi Express SQL Server tidak menawarkan fungsionalitas Rencana Perawatan.
Alan B
8
Saya tahu pasti bahwa memelihara banyak basis data dengan SSMS bisa sedikit membingungkan, tapi ini lurus ke depan.
Saya dapat merekomendasikan cara yang lebih efektif, yaitu menggunakan skrip pemeliharaan Ola Hallengren . Ini sangat keren dan sangat efektif. Dan Anda dapat melakukan lebih dari sekadar mencadangkan semua basis data, Anda dapat melakukan semua jenis prosedur perawatan.
Sebagai contoh, Anda dapat membuat cadangan semua database, kompres mereka dan mengenkripsi mereka dengan sertifikat pilihan Anda, dengan menggunakan perintah seperti ini (dan mereka semua opsional, dan enkripsi dan kompresi tidak akan berfungsi pada SQL Server 2005 tapi saya pikir itu akan tunjukkan fleksibilitas dan kekuatan skrip Ola):
Bekerja pada jawaban oleh JP, saya telah menambahkan parameter untuk melewati direktori tujuan (dan sangat mungkin menambahkan lebih banyak opsi):
CreatePROCEDURE[dbo].[UserDataBaseBackUp](@OutputDir varchar(255))ASBEGINSET NOCOUNT ON;DECLARE@name VARCHAR(50)-- database nameDECLARE@path VARCHAR(256)-- path for backup filesDECLARE@fileName VARCHAR(256)-- filename for backupDECLARE@fileDate VARCHAR(20)-- used for file nameSET@path =@OutputDir
SELECT@fileDate =CONVERT(VARCHAR(20),GETDATE(),104)PRINT'Starting Backups'DECLARE db_cursor CURSORFORSELECT name FROM MASTER.dbo.sysdatabases
WHERE name NOTIN('master','model','msdb','tempdb','ReportServer','ReportServerTempDB')OPEN db_cursor
FETCH NEXT FROM db_cursor INTO@name
WHILE@@FETCH_STATUS =0BEGINSET@fileName =@path +@name +'_'+@fileDate +'.BAK'PRINT'Starting Backup For '+@name
BACKUPDATABASE@name TODISK=@fileName WITH FORMAT
FETCH NEXT FROM db_cursor INTO@name
ENDCLOSE db_cursor
DEALLOCATE db_cursor
PRINT'Backups Finished'END
GO
Anda dapat menggunakan Pernyataan SELECT atau CURSOR seperti ini:
DECLARE@PathForBackUp VARCHAR(255)SET@PathForBackUp ='F:\Backup\User DB\'
SELECT 'BACKUPDATABASE[' + name + ']TODISK= N''' + @PathForBackUp + '' + name + '.bak''WITH NOFORMAT, NOINIT, NAME = N''' + name + '_FullBackUp'', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS =5'FROM sys.databases
WHERE database_id >4
ATAU
DECLARE@DBName VARCHAR(255)DECLARE@PathForBackUp VARCHAR(255)DECLARE@FileName VARCHAR(255)DECLARE@DateFile VARCHAR(255)DECLARE@SQL NVARCHAR(2048)SET@PathForBackUp ='F:\Backup\User DB\'
SET @DateFile = REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),120) ,'','T'), ':','')
DECLARE BACKUPING CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases WHERE dbid > 4
OPEN BACKUPING
FETCH NEXT FROM BACKUPING INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @FileName = @PathForBackUp + @DBName + '_' + @DateFile + '.BAK'
SET @SQL = 'BACKUPDATABASE'+@DBName+ 'TODISK='''+@FileName+'''WITH COMPRESSION 'PRINT@SQL
EXECUTE sp_executesql @sql
FETCH NEXT FROM BACKUPING INTO@DBName
ENDCLOSE BACKUPING
DEALLOCATE BACKUPING
Kembangkan Rencana Pemeliharaan
SQL Server memiliki fitur luar biasa di mana ia akan membuat skrip dan pekerjaan untuk Anda
Langkah 1:
Klik kanan di
Maintenance Plan
bawahManagement
Langkah 2:
Beri nama Paket Anda
Langkah 3:
Pilih Tugas Pencadangan Database
Langkah 4:
Konfigurasikan Tugas, pilih Pangkalan Data, Lokasi folder, Jenis Cadangan (Penuh, diferensial, Log transaksi) dll.
Langkah 5:
Konfigurasikan Jadwal Pekerjaan
Saya sarankan memiliki rencana terpisah untuk basis data sistem dan basis data pengguna Anda untuk menghindari masalah apa pun
Tautan Bantuan:
sumber
Saya tahu pasti bahwa memelihara banyak basis data dengan SSMS bisa sedikit membingungkan, tapi ini lurus ke depan.
Saya dapat merekomendasikan cara yang lebih efektif, yaitu menggunakan skrip pemeliharaan Ola Hallengren . Ini sangat keren dan sangat efektif. Dan Anda dapat melakukan lebih dari sekadar mencadangkan semua basis data, Anda dapat melakukan semua jenis prosedur perawatan.
Sebagai contoh, Anda dapat membuat cadangan semua database, kompres mereka dan mengenkripsi mereka dengan sertifikat pilihan Anda, dengan menggunakan perintah seperti ini (dan mereka semua opsional, dan enkripsi dan kompresi tidak akan berfungsi pada SQL Server 2005 tapi saya pikir itu akan tunjukkan fleksibilitas dan kekuatan skrip Ola):
sumber
Bekerja pada jawaban oleh JP, saya telah menambahkan parameter untuk melewati direktori tujuan (dan sangat mungkin menambahkan lebih banyak opsi):
Sehingga kemudian:
sumber
Anda dapat menggunakan Pernyataan SELECT atau CURSOR seperti ini:
ATAU
sumber
Anda juga bisa menggunakan PowerShell seperti yang ditunjukkan di Gunakan PowerShell untuk Membuat Cadangan Semua Database Pengguna oleh Buck Woody:
sumber