Mám databázový server Microsoft SQL Server 2005. Na serveru DB mám asi 250 uživatelských databází. Musím si zálohovat všechny tyto databáze. Vzhledem k tomu, ruční zálohování vyžaduje hodně času, hledám Batch skript nebo DB skript, který automaticky vezme zálohu všech 250 databází. Může mi někdo v tom prosím pomoci?
Poznámka: Nejprve vytvořte složku na
D:
řídit. (např.D:\User_DataBackup\
)
Krok 1: Vytvořte postup, který je uveden níže.
Create PROCEDURE [dbo].[UserDataBaseBackUp]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
SET @path = 'D:\User_DataBackup\' -- as same as your created folder'
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),104)
DECLARE db_cursor CURSOR FOR
SELECT name
FROM MASTER.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb','ReportServer','ReportServerTempDB')
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
END
Krok 2: Proveďte výše uvedený postup.
EXEC [UserDataBaseBackUp]
Tento postup můžete také naplánovat. Tento postup je doufejme testován, že pomůže.
Vypracujte plán údržby
SQL Server má tuto úžasnou funkci, kde pro vás vytvoří skript a úlohu
Krok 1:
Klikněte pravým tlačítkem na Maintenance Plan
pod Management
Krok 2:
Pojmenujte svůj plán
Krok 3:
Vyberte úlohu zálohování databáze
Krok 4:
Nakonfigurujte úlohu, vyberte Databáze, Umístění složky, Typ připojení (Plná, diferenciální, Protokol transakcí) atd.
Krok 5:
Nakonfigurujte plán úloh
Doporučuji mít samostatný plán pro systémové databáze a vaše uživatelské databáze, abyste se vyhnuli jakémukoli problému
Pomocné odkazy:
Vím, že udržování mnoha databází pomocí SSMS by mohlo být trochu matoucí, ale je to přímo vpřed.
Mohu doporučit efektivnější způsob, který používá Ola Hallengrenův skript pro údržb . Je to velmi cool a velmi efektivní. A můžete udělat mnohem víc, než jen zálohovat všechny databáze, můžete provádět všechny typy procedur údržby.
Například můžete zálohovat všechny databáze, komprimovat je a zašifrovat je pomocí certifikátu podle vašeho výběru, pomocí příkazu jako je tento (a všechny jsou volitelné a šifrování a komprese nebude fungovat na serveru SQL Server 2005, ale myslím, že bude ukázat flexibilitu a sílu Ola skriptu):
EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES',
@Directory = 'C:\Backup',
@BackupType = 'FULL',
@Compress = 'Y',
@Encrypt = 'Y',
@EncryptionAlgorithm = 'AES_256',
@ServerCertificate = 'MyCertificate'
Při práci na odpovědi JP jsem přidal parametr pro předání cílového adresáře (a možná i další možnosti):
Create PROCEDURE [dbo].[UserDataBaseBackUp] (
@OutputDir varchar(255)
) AS
BEGIN
SET NOCOUNT ON;
DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
SET @path = @OutputDir
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),104)
PRINT 'Starting Backups'
DECLARE db_cursor CURSOR FOR
SELECT name FROM MASTER.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb','ReportServer','ReportServerTempDB')
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0 BEGIN
SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
PRINT 'Starting Backup For ' + @name
BACKUP DATABASE @name TO DISK = @fileName WITH FORMAT
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
PRINT 'Backups Finished'
END
GO
Takže:
EXEC UserDataBaseBackUp @OutputDir = 'F:\Backups\SQL Databases\'
Můžete použít příkaz SELECT nebo CURSOR takto:
DECLARE @PathForBackUp VARCHAR(255)
SET @PathForBackUp = 'F:\Backup\User DB\'
SELECT 'BACKUP DATABASE [' + name + '] TO DISK = N''' + @PathForBackUp + '' + name + '.bak''
WITH NOFORMAT, NOINIT, NAME = N''' + name + '_FullBackUp'', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 5'
FROM sys.databases
WHERE database_id > 4
OR
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 = 'BACKUP DATABASE '[email protected]+ ' TO DISK = '''[email protected]+''' WITH COMPRESSION '
PRINT @SQL
EXECUTE sp_executesql @sql
FETCH NEXT FROM BACKUPING INTO @DBName
END
CLOSE BACKUPING
DEALLOCATE BACKUPING