Esecuzione del backup di tutti i database in SQL Server


13

Ho un server DB di Microsoft SQL Server 2005. Nel server DB, ho circa 250 database utente. Devo fare un backup di tutti questi database. Poiché, prendere manualmente il backup richiede molto tempo, sto cercando uno script Batch o uno script DB che eseguirà automaticamente il backup di tutti i 250 database. Qualcuno può aiutare per favore su questo?

Risposte:


14

Nota: creare innanzitutto una cartella D:sull'unità. (ad es. D:\User_DataBackup\)

Passaggio 1: creare una procedura indicata di seguito.

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

Passaggio 2: eseguire la procedura sopra descritta.

 EXEC [UserDataBaseBackUp]

È inoltre possibile pianificare questa procedura. Speriamo che questa procedura sia utile.


Funziona a meraviglia, potrebbe essere migliorato forse passando nel percorso?
Robin Salih,

11

Sviluppare un piano di manutenzione

SQL Server ha questa straordinaria funzionalità in cui creerà lo script e il lavoro per te

  • Passaggio 1:
    fare clic destro su Maintenance PlansottoManagement

    Fare clic con il tasto destro su Gestione

  • Passaggio 2:
    assegna un nome al tuo piano

    Assegna un nome al piano

  • Passaggio 3:
    selezionare l'attività di backup del database

    Attività di backup del database

  • Passaggio 4:
    Configurare l'attività, selezionare Database, Posizione cartella, Tipo di backup (Completo, differenziale, Registro transazioni) ecc.

    Configurare l'attività di backup

  • Passaggio 5:
    configurare la pianificazione lavoro

    Configurare la pianificazione lavoro


Mi consiglia di avere un piano separato per system-database e il vostro user-database per evitare qualsiasi tipo di problema

Link di aiuto:


Nota: le versioni Express di SQL Server non offrono la funzionalità del piano di manutenzione.
Alan B,

8

So per certo che mantenere un sacco di database con SSMS potrebbe essere un po 'confuso, ma è semplice.

Posso consigliare un modo più efficace, ovvero utilizzare lo script di manutenzione di Ola Hallengren . È molto bello e molto efficace. E puoi fare molto di più oltre al semplice backup di tutti i database, puoi eseguire tutti i tipi di procedure di manutenzione.

Ad esempio, è possibile eseguire il backup di tutti i database, comprimerli e crittografarli con un certificato di propria scelta, utilizzando un comando come questo (e sono tutti facoltativi e la crittografia e la compressione non funzioneranno su SQL Server 2005 ma penso che funzionerà mostrare la flessibilità e la forza della sceneggiatura di Ola):

EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES',
@Directory = 'C:\Backup',
@BackupType = 'FULL',
@Compress = 'Y',
@Encrypt = 'Y',
@EncryptionAlgorithm = 'AES_256',
@ServerCertificate = 'MyCertificate'

2

Lavorando sulla risposta di JP, ho aggiunto un parametro per passare la directory di destinazione (e molto probabilmente aggiungere più opzioni):

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

Allora:

EXEC UserDataBaseBackUp @OutputDir = 'F:\Backups\SQL Databases\'

1

È possibile utilizzare l'istruzione SELECT o CURSOR in questo modo:

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

O

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 '+@DBName+ ' TO DISK = '''+@FileName+''' WITH COMPRESSION ' 
    PRINT @SQL 
    EXECUTE sp_executesql @sql   
    FETCH NEXT FROM BACKUPING INTO @DBName  

END    

CLOSE BACKUPING    
DEALLOCATE BACKUPING 

-2

È inoltre possibile utilizzare PowerShell come mostrato in Usa PowerShell per eseguire il backup di tutti i database utente di Buck Woody:

# Performs a Full backup followed by a transaction log backup on all user databases

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")  | out-null
$s = new-object ('Microsoft.SqlServer.Management.Smo.Server') 'BWOODY1\SQL2K8'
$bkdir = $s.Settings.BackupDirectory
$dbs = $s.Databases
$dbs | foreach-object {
    $db = $_

    if ($db.IsSystemObject -eq $False -and $db.IsMirroringEnabled -eq $False) {
        $dbname = $db.Name
        $dt = get-date -format yyyyMMddHHmmss
        $dbbk = new-object ('Microsoft.SqlServer.Management.Smo.Backup')
        $dbbk.Action = 'Database'
        $dbbk.BackupSetDescription = "Full backup of " + $dbname
        $dbbk.BackupSetName = $dbname + " Backup"
        $dbbk.Database = $dbname
        $dbbk.MediaDescription = "Disk"
        $dbbk.Devices.AddDevice($bkdir + "\" + $dbname + "_db_" + $dt + ".bak", 'File')
        $dbbk.SqlBackup($s)
        if ($db.DatabaseOptions.RecoveryModel -ne 'Simple') {
            $dt = get-date -format yyyyMMddHHmmss
            $dbtrn = new-object ('Microsoft.SqlServer.Management.Smo.Backup')
            $dbtrn.Action = 'Log'
            $dbtrn.BackupSetDescription = "Trans Log backup of " + $dbname
            $dbtrn.BackupSetName = $dbname + " Backup"
            $dbtrn.Database = $dbname
            $dbtrn.MediaDescription = "Disk"
            $dbtrn.Devices.AddDevice($bkdir + "\" + $dbname + "_tlog_" + $dt + ".trn", 'File')
            $dbtrn.SqlBackup($s)
            }
        }     
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.