it-swarm.com.de

So erstellen Sie eine tägliche Sicherung mit eindeutigem Namen im SQL-Server

Ich möchte täglich eine vollständige Datenbanksicherung aller Datenbanken meines Servers mit eindeutigem Namen erstellen. Dafür habe ich eine Idee, Zeitstempel aufzubewahren, die die Datenbankkopie getrennt machen. Angenommen, es gibt eine Datenbank mit dem Namen ABCD auf dem Server, dann sollte sie wie folgt gesichert werden:

ABCD_21_03_2013
ABCD_22_03_2013

Wie kann ich das machen. Ich weiß nicht viel über diese Arten von SQL-Sicherungsjobs.

13
Dhwani

Automatische Sicherung aller Datenbanken auf dem Server.

Über Jobs:

http://msdn.Microsoft.com/de-de/library/ms190268.aspx

Abfrage:

SET NOCOUNT ON;

DECLARE 
      @FileName NVARCHAR(1024)
    , @DBName NVARCHAR(256)
    , @PathName NVARCHAR(256)
    , @Message NVARCHAR(2048)
    , @IsCompressed BIT

SELECT 
      @PathName = 'D:\BACKUP\'
    , @IsCompressed = 1 

DECLARE db CURSOR LOCAL READ_ONLY FAST_FORWARD FOR  
    SELECT
          sd.name
        , file_path = @PathName + FileDate + '_' + name + '.bak'
    FROM sys.databases sd
    CROSS JOIN (
        SELECT FileDate = 'ABCD_' + REPLACE(CONVERT(VARCHAR(10), GETDATE(), 103), '/', '_')
    ) fd
    WHERE sd.state_desc != 'OFFLINE'
        AND sd.name NOT IN ('master', 'model', 'msdb', 'tempdb')
    ORDER BY sd.name 

OPEN db

FETCH NEXT FROM db INTO 
      @DBName
    , @FileName  

WHILE @@FETCH_STATUS = 0 BEGIN 

    DECLARE @SQL NVARCHAR(MAX)

    SELECT @Message = REPLICATE('-', 80) + CHAR(13) + CONVERT(VARCHAR(20), GETDATE(), 120) + N': ' + @DBName
    RAISERROR (@Message, 0, 1) WITH NOWAIT

    SELECT @SQL = 
    'BACKUP DATABASE [' + @DBName + ']
    TO DISK = N''' + @FileName + '''
    WITH FORMAT, ' + CASE WHEN @IsCompressed = 1 THEN N'COMPRESSION, ' ELSE '' END + N'INIT, STATS = 15;' 

    EXEC sys.sp_executesql @SQL

    FETCH NEXT FROM db INTO 
          @DBName
        , @FileName 

END   

CLOSE db   
DEALLOCATE db

Ausgabe:

BACKUP DATABASE [AdventureWorks2008R2]
    TO DISK = N'D:\BACKUP\ABCD_24_05_2013_AdventureWorks2008R2.bak'
    WITH FORMAT, COMPRESSION, INIT, STATS = 15;

BACKUP DATABASE [AdventureWorks2008R2_Live]
    TO DISK = N'D:\BACKUP\ABCD_24_05_2013_AdventureWorks2008R2_Live.bak'
    WITH FORMAT, COMPRESSION, INIT, STATS = 15;

BACKUP DATABASE [AdventureWorks2012]
    TO DISK = N'D:\BACKUP\ABCD_24_05_2013_AdventureWorks2012.bak'
    WITH FORMAT, COMPRESSION, INIT, STATS = 15;

Ergebnisse:

2013-05-24 09:54:34: AdventureWorks2008R2
15 percent processed.
30 percent processed.
45 percent processed.
60 percent processed.
75 percent processed.
90 percent processed.
Processed 23416 pages for database 'AdventureWorks2008R2', file 'AdventureWorks2008R2_Data' on file 1.
Processed 1 pages for database 'AdventureWorks2008R2', file 'AdventureWorks2008R2_Log' on file 1.
BACKUP DATABASE successfully processed 23417 pages in 4.052 seconds (45.148 MB/sec).

.....
9
Devart

So erstellen Sie eine tägliche Sicherung mit einem Namen wie Dateiname_MM_DD_YYYY:

  1. Klicken Sie im SSMS mit der rechten Maustaste auf die Datenbank, die Sie sichern möchten
  2. Wählen Sie Aufgaben | Zurück nach oben
  3. Wählen Sie im Dialogfeld den Typ und den Ort der Sicherung aus
  4. Wählen Sie oben in diesem Dialogfeld die Option Script Action to Job im Dropdown-Menü Script aus
  5. Ein Neuer Job Dialog wird geöffnet und der erste Schritt erstellt eine Datenbanksicherung Gehen Sie zum ersten Schritt und klicken Sie auf Edit .

Bestehender Code sieht folgendermaßen aus:

BACKUP DATABASE [AdventureWorks2012] TO  DISK = N'E:\Test\AdventureWorks.bak' WITH NOFORMAT, NOINIT,  NAME = N'AdventureWorks2012-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

Ersetzen Sie es zu sein

DECLARE @SQLStatement VARCHAR(2000) 
SET @SQLStatement = 'E:\Test\AdventureWorks_' + CONVERT(nvarchar(30), GETDATE(), 110) +'.bak' 
BACKUP DATABASE [AdventureWorks2012] TO  DISK = @SQLStatement

6 Speichern Sie den Job

Die Datenbanksicherungen werden benannt:

AdventureWorks_07-29-2013

AdventureWorks_07-30-2013

AdventureWorks_07-31-2013

Jetzt müssen Sie nur noch den richtigen Zeitplan festlegen

24
Milena Petrovic

Ich denke, der beste Weg, eine Zeitplansicherung durchzuführen, ist das Erstellen von Job. Fügen Sie Ihren Sicherungsjob hinzu und planen Sie dies an einem bestimmten Datum und zu einer bestimmten Uhrzeit ein.

So erstellen Sie einen Job

2
Ravi

Vielen Dank für die Beiträge Ich möchte nur ein kleines Update freigeben, das ich über das Skript vorgenommen habe, um Log-Datenbank-Backups zu erstellen und automatisch alle Datenbanken mit recovery model = simple zu überspringen, die Log-Backups nicht zulassen. Ich hoffe, es hilft ... Und ja, Mr. Ravi hat Recht. Der beste Ansatz ist, einen Job zu erstellen. Ich habe ein SP erstellt und bin von einem Job losgelaufen.

CREATE PROCEDURE sp_logbackup 
AS
SET NOCOUNT ON;
DECLARE 
  @FileName NVARCHAR(1024)
, @DBName NVARCHAR(256)
, @PathName NVARCHAR(256)
, @Message NVARCHAR(2048)
, @IsCompressed BIT
SELECT 
  @PathName = '\\myServer\...' 
, @IsCompressed = 1 
DECLARE db CURSOR LOCAL READ_ONLY FAST_FORWARD FOR  
SELECT
      sd.name
    , file_path = @PathName + name + '_' + FileDate + '.trn'
FROM sys.databases sd
CROSS JOIN (
    SELECT FileDate = REPLACE(REPLACE(REPLACE(CONVERT(varchar,GETDATE(), 20),'-','_'),':',''),' ','') 
) fd
WHERE sd.state_desc != 'OFFLINE'
    AND sd.recovery_model != 3
    AND sd.name NOT IN ('master', 'model', 'msdb', 'tempdb')
ORDER BY sd.name 
OPEN db
FETCH NEXT FROM db INTO 
  @DBName
, @FileName  
WHILE @@FETCH_STATUS = 0 BEGIN 
DECLARE @SQL NVARCHAR(MAX)
SELECT @Message = REPLICATE('-', 80) + CHAR(13) + CONVERT(VARCHAR(20), GETDATE(), 120) + N': ' + @DBName
RAISERROR (@Message, 0, 1) WITH NOWAIT

SELECT @SQL = 
'BACKUP LOG [' + @DBName + ']
TO DISK = N''' + @FileName + '''
WITH FORMAT, NAME = N''' + @DBName + ''', SKIP, REWIND, NOUNLOAD, STATS = 10;' 

EXEC sys.sp_executesql @SQL
FETCH NEXT FROM db INTO 
      @DBName
    , @FileName 
END   
CLOSE db   
DEALLOCATE db
0

Einige Sicherungsprogramme von Drittanbietern, zum Beispiel: EMS SQL Backup , ermöglichen das Einrichten von Vorlagen für Sicherungsdateinamen. Dem Dateinamen können Zeitstempel, Name der Serverinstanz, Datenbanknamen und andere Informationen hinzugefügt werden.

0
Stropharius