Che cos'è un semplice programma da riga di comando o script per il backup dei database del server SQL?

StackOverflow https://stackoverflow.com/questions/122690

Domanda

Sono stato troppo rilassato con l'esecuzione di backup DB sui nostri server interni.

Esiste un semplice programma da riga di comando che posso utilizzare per eseguire il backup di determinati database in SQL Server 2005? O c'è un semplice VBScript?

È stato utile?

Soluzione

Per eseguire il backup di un singolo database dalla riga di comando, utilizzare osql o 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"

Ti consigliamo anche di leggere la documentazione su BACKUP e RESTORE e procedure generali .

Altri suggerimenti

Uso ExpressMaint .

Per eseguire il backup di tutti i database degli utenti, ad esempio:

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

Pianifica quanto segue per eseguire il backup di tutti i database:

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)

Ci sono anche maggiori dettagli sul mio blog: come Automatizzare i backup di SQL Server Express .

L'ho trovato su una pagina dell'assistenza Microsoft http://support.microsoft.com/kb/2019698 .

Funziona alla grande! E poiché proviene da Microsoft, mi sembra abbastanza legittimo.

Fondamentalmente ci sono due passaggi.

  1. Crea una procedura memorizzata nel tuo db master. Vedi il link msft o se è rotto prova qui: http://pastebin.com/svRLkqnq
  2. Pianifica il backup dall'utilità di pianificazione. Si consiglia di inserire prima un file .bat o .cmd e quindi pianificare quel file.

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

Ovviamente sostituisci YOUR_SERVER_NAME con il nome del tuo computer o prova facoltativamente. \ SQLEXPRESS e assicurati che la cartella di backup esista. In questo caso sta cercando di inserirlo in c: \ SQL_Backup

È possibile utilizzare l'applicazione di backup di ApexSQL. Sebbene sia un'applicazione GUI, ha tutte le sue funzioni supportate nella CLI. È possibile eseguire operazioni di backup singole o creare un processo che esegua il backup di database specifici su base regolare. Puoi controllare le regole dello switch ed essere esemplificate negli articoli:

Sto usando tsql su un'infrastruttura Linux / UNIX per accedere ai database MSSQL. Ecco un semplice script di shell per scaricare una tabella in un file:

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

Eventuale se non disponi di una connessione affidabile come lo switch & # 8211; E dichiara

Usa la seguente riga di comando

" [dir programma] \ [versione server sql] \ Tools \ Binn \ osql.exe " -Q " BACKUP DATABASE mydatabase TO DISK = 'C: \ tmp \ db.bak' " -S [server] & # 8211; U [ID di accesso] -P [password]

Dove

[dir programma] è la directory in cui esiste osql.exe

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

[versione server sql] la versione 110 o 100 o 90 o 80 del server sql inizia con il numero più grande

[server] il tuo servername o ip server

[ID di accesso] il nome di accesso dell'utente del server ms-sql

[password] la password di accesso richiesta

Di seguito è riportato il semplice script per eseguire il backup del database.

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

Puoi usare uno script VB che ho scritto esattamente per questo scopo: https://github.com/ezrarieben/mssql-backup-vbs/

Pianifica un'attività in " Task Scheduler " eseguire lo script come preferisci e eseguirà il backup dell'intero DB in un file BAK e lo salverà ovunque tu specifichi.

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

Se riesci a trovare i file DB ... " cp Backup dei file DB / "

Quasi sicuramente non consigliabile nella maggior parte dei casi , ma è semplice come tutto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top