Che cos'è un semplice programma da riga di comando o script per il backup dei database del server SQL?
-
02-07-2019 - |
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?
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.
- Crea una procedura memorizzata nel tuo db master. Vedi il link msft o se è rotto prova qui: http://pastebin.com/svRLkqnq
-
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.