Frage

Ich habe zu lax mit DB-Backups auf unseren internen Servern durchführen.

Gibt es ein einfaches Kommandozeilen-Programm, das ich Backup bestimmte Datenbanken in SQL Server 2005 verwenden kann? Oder gibt es ein einfaches VBScript?

War es hilfreich?

Lösung

Zur Sicherung einer einzigen Datenbank über die Befehlszeile, verwenden Sie osql oder sqlcmd .

"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe" 
    -E -Q "BACKUP DATABASE mydatabase TO DISK='C:\tmp\db.bak' WITH FORMAT"

Sie wollen auch die Dokumentation zu BACKUP lesen und RESTORE und allgemeine Verfahren .

Andere Tipps

Ich benutze ExpressMaint .

Um ein Backup aller Benutzerdatenbanken ich zum Beispiel so tun:

C:\>ExpressMaint.exe -S (local)\sqlexpress -D ALL_USER -T DB -BU HOURS -BV 1 -B c:\backupdir\ -DS

Planen Sie die folgenden Backup aller Datenbanken:

Use Master

Declare @ToExecute VarChar(8000)

Select @ToExecute = Coalesce(@ToExecute + 'Backup Database ' + [Name] + ' To Disk =     ''D:\Backups\Databases\' + [Name]   + '.bak'' With Format;' + char(13),'')
From
Master..Sysdatabases
Where
[Name] Not In ('tempdb')
and databasepropertyex ([Name],'Status') = 'online'

Execute(@ToExecute)

Darüber hinaus gibt es weitere Informationen auf meinem Blog. Wie href="http://gatekiller.co.uk/Post/Automate_SQL_Server_Express_Backups" rel="noreferrer"> Automate SQL Server Express Backups

Das fand ich auf einer Microsoft-Support-Seite http://support.microsoft.com/kb/2019698 .

Es funktioniert großartig! Und da es von Microsoft kam, ich fühle mich wie es ziemlich echt ist.

Grundsätzlich gibt es zwei Schritte.

  1. Erstellen Sie eine gespeicherte Prozedur in Ihrem Master-db. Siehe MSFT Link oder wenn es gebrochen versuchen hier: http://pastebin.com/svRLkqnq
  2. Planen Sie die Sicherung von Ihrem Task-Scheduler. Vielleicht möchten Sie in eine .bat oder .cmd-Datei zuerst setzen und diese Datei dann planen.

    sqlcmd -S YOUR_SERVER_NAME\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='C:\SQL_Backup\', @backupType='F'"  1>c:\SQL_Backup\backup.log            
    

Natürlich ersetzen Your_Server_Name mit Ihrem Computernamen oder optional versuchen. \ SQLEXPRESS und stellen Sie sicher, dass die Backup-Ordner vorhanden ist. In diesem Fall wird es versucht, es in c zu setzen: \ SQL_Backup

Sie können die Backup-Anwendung von ApexSQL. Obwohl es eine GUI-Anwendung ist, hat sie alle ihre Funktionen in CLI unterstützt. Es ist möglich, entweder eine einmalige Backup-Operationen durchführen, oder einen Job zu erstellen, die angegebenen Datenbanken auf dem regelmäßig sichern würde. Sie können die Schaltregeln überprüfen und exampled in den Artikeln:

Ich verwende Tsql auf einem Linux / UNIX-Infrastruktur MSSQL-Datenbanken zuzugreifen. Hier ist ein einfacher Shell-Skript eine Tabelle in eine Datei zu speichern:

#!/usr/bin/ksh
#
#.....
(
tsql -S {database} -U {user} -P {password} <<EOF
select * from {table}
go
quit
EOF
) >{output_file.dump}

Eventual, wenn Sie nicht über eine gesicherte Verbindung haben als der -E-Schalter erklärt

Verwenden Sie folgende Befehlszeile

"[program dir]\[sql server version]\Tools\Binn\osql.exe" -Q "BACKUP DATABASE mydatabase TO DISK='C:\tmp\db.bak'" -S [server] –U [login id] -P [password]

Wo

[Programm dir] ist das Verzeichnis, in dem die osql.exe existiert

On 32bit OS c:\Program Files\Microsoft SQL Server\
On 64bit OS c:\Program Files (x86)\Microsoft SQL Server\

[SQL-Server-Version] SQL Server-Version 110 oder 100 oder 90 oder 80 beginnt mit der größten Zahl

[Server], um Ihre Server oder Server ip

[login id] Ihre MS-SQL-Server-Benutzer-Anmeldenamen

[Passwort] das erforderliche Login-Passwort

Im Folgenden ist die einfache Skript-Datenbank-Backup zu machen.

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


-- specify database backup directory
SET @path = 'C:\Backup\'  


-- specify filename format
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 


DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb')  -- exclude these databases


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

Sie könnten eine VB-Skript schrieb ich genau für diesen Zweck: https://github.com/ezrarieben/mssql-backup-vbs/

Planen Sie eine Aufgabe in der „Task Scheduler“, um das Skript auszuführen, wie Sie möchten und es wird die gesamte Backup-DB auf eine BAK-Datei und speichern Sie sie überall dort, wo Sie angeben.

SET NOCOUNT ON;
declare @PATH VARCHAR(200)='D:\MyBackupFolder\'
 -- path where you want to take backups
IF OBJECT_ID('TEMPDB..#back') IS NOT NULL

DROP TABLE #back

CREATE TABLE #back
(
RN INT IDENTITY (1,1),
DatabaseName NVARCHAR(200)

)

INSERT INTO #back 
SELECT       'MyDatabase1'
UNION SELECT 'MyDatabase2'
UNION SELECT 'MyDatabase3'
UNION SELECT 'MyDatabase4'

-- your databases List

DECLARE @COUNT INT =0 ,  @RN INT =1, @SCRIPT NVARCHAR(MAX)='',  @DBNAME VARCHAR(200)

PRINT '---------------------FULL BACKUP SCRIPT-------------------------'+CHAR(10)
SET @COUNT = (SELECT COUNT(*) FROM #back)
PRINT 'USE MASTER'+CHAR(10)
WHILE(@COUNT > = @RN)
BEGIN

SET @DBNAME =(SELECT DatabaseName FROM #back WHERE RN=@RN)
SET @SCRIPT ='BACKUP DATABASE ' +'['+@DBNAME+']'+CHAR(10)+'TO DISK =N'''+@PATH+@DBNAME+ N'_Backup_'
+ REPLACE ( REPLACE ( REPLACE ( REPLACE ( CAST ( CAST ( GETDATE () AS DATETIME2 ) AS VARCHAR ( 100 )), '-' , '_' ), ' ' , '_' ), '.' , '_' ), ':' , '' )+'.bak'''+CHAR(10)+'WITH COMPRESSION, STATS = 10'+CHAR(10)+'GO'+CHAR(10)
PRINT @SCRIPT
SET @RN=@RN+1
END

 PRINT '---------------------DIFF BACKUP SCRIPT-------------------------'+CHAR(10)

  SET  @COUNT  =0 SET  @RN  =1 SET @SCRIPT ='' SET @DBNAME =''
 SET @COUNT = (SELECT COUNT(*) FROM #back)
PRINT 'USE MASTER'+CHAR(10)
WHILE(@COUNT > = @RN)
BEGIN
SET @DBNAME =(SELECT DatabaseName FROM #back WHERE RN=@RN)
SET @SCRIPT ='BACKUP DATABASE ' +'['+@DBNAME+']'+CHAR(10)+'TO DISK =N'''+@PATH+@DBNAME+ N'_Backup_'
+ REPLACE ( REPLACE ( REPLACE ( REPLACE ( CAST ( CAST ( GETDATE () AS DATETIME2 ) AS VARCHAR ( 100 )), '-' , '_' ), ' ' , '_' ), '.' , '_' ), ':' , '' )+'.diff'''+CHAR(10)+'WITH DIFFERENTIAL, COMPRESSION, STATS = 10'+CHAR(10)+'GO'+CHAR(10)
PRINT @SCRIPT
SET @RN=@RN+1
END

Wenn Sie die DB-Dateien finden können ... "cp DBFiles Backup /"

Fast sicher nicht ratsam, in den meisten Fällen , aber es ist einfach, wie alle getup.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top