Tworzenie kopii zapasowej wszystkich baz danych w SQL Server
13
Mam serwer DB Microsoft SQL Server 2005. Na serwerze DB mam około 250 baz danych użytkowników. Muszę wykonać kopię zapasową wszystkich tych baz danych. Ponieważ ręczne tworzenie kopii zapasowej zajmuje dużo czasu, szukam skryptu Batch lub skryptu DB, który automatycznie wykona kopię zapasową wszystkich 250 baz danych. Czy ktoś może w tym pomóc?
Uwaga: najpierw utwórz folder na D:dysku. (np. D:\User_DataBackup\)
Krok 1: Utwórz procedurę podaną poniżej.
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
Krok 2: Wykonaj powyższą procedurę.
EXEC[UserDataBaseBackUp]
Możesz również zaplanować tę procedurę. Mam nadzieję, że ta procedura zostanie przetestowana.
Uwaga: Expressowe wersje SQL Servera nie oferują funkcji planu konserwacji.
Alan B
8
Wiem na pewno, że prowadzenie wielu baz danych za pomocą SSMS może być nieco mylące, ale jest proste.
Mogę polecić bardziej skuteczny sposób, czyli użycie skryptu konserwacji Oli Hallengren . To jest bardzo fajne i bardzo skuteczne. I możesz zrobić znacznie więcej niż tylko tworzenie kopii zapasowych wszystkich baz danych, możesz wykonywać wszystkie rodzaje procedur konserwacyjnych.
Na przykład możesz wykonać kopię zapasową wszystkich baz danych, skompresować je i zaszyfrować za pomocą wybranego przez siebie certyfikatu, za pomocą takiego polecenia (i wszystkie są opcjonalne, a szyfrowanie i kompresja nie będzie działać na SQL Server 2005, ale myślę, że to będzie pokaż elastyczność i siłę skryptu Oli):
Pracując nad odpowiedzią JP, dodałem parametr, aby przekazać katalog docelowy (i całkiem możliwe, że dodam więcej opcji):
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
Możesz użyć instrukcji SELECT lub kursora w następujący sposób:
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
LUB
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
Opracuj plan konserwacji
SQL Server ma tę niesamowitą funkcję, dzięki której stworzy skrypt i zadanie dla Ciebie
Krok 1:
Kliknij prawym przyciskiem myszy
Maintenance Plan
podManagement
Krok 2:
Nazwij swój plan
Krok 3:
Wybierz zadanie kopii zapasowej bazy danych
Krok 4:
Skonfiguruj zadanie, wybierz bazy danych, lokalizację folderu, typ kopii zapasowej (pełny, różnicowy, dziennik transakcji) itp.
Krok 5:
Skonfiguruj harmonogram zadań
Polecam konieczności oddzielnego planu systemowych baz danych i swoich klientów użytkownika bazy danych , aby uniknąć jakiegokolwiek problemu
Linki pomocnicze:
źródło
Wiem na pewno, że prowadzenie wielu baz danych za pomocą SSMS może być nieco mylące, ale jest proste.
Mogę polecić bardziej skuteczny sposób, czyli użycie skryptu konserwacji Oli Hallengren . To jest bardzo fajne i bardzo skuteczne. I możesz zrobić znacznie więcej niż tylko tworzenie kopii zapasowych wszystkich baz danych, możesz wykonywać wszystkie rodzaje procedur konserwacyjnych.
Na przykład możesz wykonać kopię zapasową wszystkich baz danych, skompresować je i zaszyfrować za pomocą wybranego przez siebie certyfikatu, za pomocą takiego polecenia (i wszystkie są opcjonalne, a szyfrowanie i kompresja nie będzie działać na SQL Server 2005, ale myślę, że to będzie pokaż elastyczność i siłę skryptu Oli):
źródło
Pracując nad odpowiedzią JP, dodałem parametr, aby przekazać katalog docelowy (i całkiem możliwe, że dodam więcej opcji):
Więc wtedy:
źródło
Możesz użyć instrukcji SELECT lub kursora w następujący sposób:
LUB
źródło
Możesz także użyć programu PowerShell, jak pokazano w sekcji Używanie programu PowerShell do tworzenia kopii zapasowych wszystkich baz danych użytkownika przez Buck Woody:
źródło