it-swarm-eu.dev

Při zálohování všech databází na serveru SQL

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?

13
user1493004

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.

14
JP Chauhan

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

    Right Click on Management

  • Krok 2:
    Pojmenujte svůj plán

    Name the Plan

  • Krok 3:
    Vyberte úlohu zálohování databáze

    Database Backup Task

  • Krok 4:
    Nakonfigurujte úlohu, vyberte Databáze, Umístění složky, Typ připojení (Plná, diferenciální, Protokol transakcí) atd.

    Configure The Backup Task

  • Krok 5:
    Nakonfigurujte plán úloh

    Configure the Job Schedule


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:

11
AmmarR

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'
8
Sina Hassanpour

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\'
2
Jerry Dodge

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 
1
Filip Holub