Sicherung aller Datenbanken in SQL Server

13

Ich habe einen Microsoft SQL Server 2005 DB-Server. Im DB-Server habe ich rund 250 Benutzerdatenbanken. Ich muss all diese Datenbanken sichern. Da die manuelle Sicherung viel Zeit in Anspruch nimmt, suche ich ein Batch- oder DB-Skript, das automatisch die Sicherung aller 250 Datenbanken erstellt. Kann mir bitte jemand dabei helfen?

Taryn
quelle

Antworten:

14

Hinweis: Erstellen Sie zuerst einen Ordner auf dem D:Laufwerk. (zB D:\User_DataBackup\)

Schritt 1: Erstellen Sie eine Prozedur, die unten angegeben ist.

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

Schritt 2: Führen Sie das oben beschriebene Verfahren aus.

 EXEC [UserDataBaseBackUp]

Sie können diesen Vorgang auch einplanen. Dieses Verfahren wird hoffentlich getestet, es wird helfen.

JP Chauhan
quelle
Funktioniert ein Leckerbissen, könnte es vielleicht durch Überschreiten des Pfades verbessert werden?
Robin Salih
11

Entwickeln Sie einen Wartungsplan

SQL Server verfügt über diese erstaunliche Funktion, mit der das Skript und der Auftrag für Sie erstellt werden

  • Schritt 1:
    Klicken Sie mit der rechten Maustaste Maintenance PlanunterManagement

    Klicken Sie mit der rechten Maustaste auf Verwaltung

  • Schritt 2:
    Nennen Sie Ihren Plan

    Nennen Sie den Plan

  • Schritt 3:
    Wählen Sie die Aufgabe Datenbanksicherung

    Datenbank-Backup-Task

  • Schritt 4:
    Konfigurieren Sie die Aufgabe, wählen Sie Datenbanken, Speicherort des Ordners, Art der Sicherungsverbindung (vollständig, differenziell, Transaktionsprotokoll) usw. aus.

    Konfigurieren Sie die Sicherungsaufgabe

  • Schritt 5:
    Konfigurieren Sie den Auftragszeitplan

    Konfigurieren Sie den Job-Zeitplan


Ich empfehle, einen separaten Plan für Systemdatenbanken und Ihre Benutzerdatenbanken zu haben, um Probleme jeglicher Art zu vermeiden

Hilfreiche Links:

AmmarR
quelle
Hinweis: Express-Editionen von SQL Server bieten keine Wartungsplanfunktionalität.
Alan B
8

Ich weiß, dass die Pflege vieler Datenbanken mit SSMS etwas verwirrend sein kann, aber es ist ganz einfach.

Ich kann einen effektiveren Weg empfehlen, nämlich das Wartungsskript von Ola Hallengren . Es ist sehr cool und sehr effektiv. Und Sie können viel mehr als nur alle Datenbanken sichern, Sie können alle Arten von Wartungsprozeduren durchführen.

Sie können zum Beispiel alle Datenbanken sichern, komprimieren und mit einem Zertifikat Ihrer Wahl verschlüsseln, indem Sie einen Befehl wie diesen verwenden (und alle sind optional, und Verschlüsselung und Komprimierung funktionieren unter SQL Server 2005 nicht, aber ich denke, dass dies der Fall ist zeigen die Flexibilität und Stärke von Olas Skript):

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

Bei der Antwort von JP habe ich einen Parameter hinzugefügt, um das Zielverzeichnis zu übergeben (und möglicherweise weitere Optionen hinzuzufügen):

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

Also dann:

EXEC UserDataBaseBackUp @OutputDir = 'F:\Backups\SQL Databases\'
Jerry Dodge
quelle
1

Sie können SELECT-Anweisung oder CURSOR wie folgt verwenden:

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

ODER

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 
Filip Holub
quelle
-2

Sie können PowerShell auch wie in Verwenden von PowerShell zum Sichern aller Benutzerdatenbanken von Buck Woody gezeigt verwenden:

# 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)
            }
        }     
    }
Emito
quelle