O que é um programa de linha de comando simples ou script para bancos de dados de servidor SQL de backup?
-
02-07-2019 - |
Pergunta
Eu tenho sido demasiado permissivo com a realização de backups de banco de dados em nossos servidores internos.
Existe um programa de linha de comando simples que posso usar para certas bases de dados de backup no SQL Server 2005? Ou há uma simples VBScript?
Solução
Para fazer o backup de um único banco de dados a partir da linha de comando, use osql ou 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"
Você também vai querer ler a documentação sobre BACKUP RESTAURAR e procedimentos gerais .
Outras dicas
Eu uso ExpressMaint .
Para backup de todos os bancos de dados usuário que faço por exemplo:
C:\>ExpressMaint.exe -S (local)\sqlexpress -D ALL_USER -T DB -BU HOURS -BV 1 -B c:\backupdir\ -DS
Agendar o seguinte para backup de todos os bancos de dados:
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)
Há também mais detalhes sobre o meu blog:. Como Automatizar SQL Server Express Backups
Eu achei essa mensagem em uma página de suporte da Microsoft http://support.microsoft.com/kb/2019698 .
Ele funciona muito bem! E desde que veio da Microsoft, eu sinto que é muito legal.
Basicamente, existem dois passos.
- Criar um procedimento armazenado no seu db mestre. Veja o link msft ou se ele está quebrado tente aqui: http://pastebin.com/svRLkqnq
-
agendar o backup do seu agendador de tarefas. Você pode querer colocar em um arquivo .bat ou .cmd primeiro e depois agendar esse arquivo.
sqlcmd -S YOUR_SERVER_NAME\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='C:\SQL_Backup\', @backupType='F'" 1>c:\SQL_Backup\backup.log
Obviamente substituir your_server_name com o nome do computador ou, opcionalmente, tentar. \ SQLEXPRESS e certifique-se existe a pasta de backup. Neste caso ele está tentando colocá-lo em c: \ SQL_Backup
Você pode usar o aplicativo de backup por ApexSQL. Embora seja uma aplicação gráfica, ele tem todas as suas características suportadas no CLI. É possível executar qualquer operações de backup de uma só vez, ou para criar um trabalho que iria fazer backup de bancos de dados especificados na base regular. Você pode verificar as regras de comutação e exemplificado nos artigos:
Eu estou usando tsql numa infra-estrutura Linux / UNIX para acessar bancos de dados MSSQL. Aqui está um script simples shell para despejar uma tabela para um arquivo:
#!/usr/bin/ksh
#
#.....
(
tsql -S {database} -U {user} -P {password} <<EOF
select * from {table}
go
quit
EOF
) >{output_file.dump}
Eventual se você não tem uma conexão confiável como a opção -E declara
Use seguinte linha de comando
"[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]
Onde
[dir programa] é o diretório onde existe o osql.exe
On 32bit OS c:\Program Files\Microsoft SQL Server\
On 64bit OS c:\Program Files (x86)\Microsoft SQL Server\
[versão do servidor SQL] seu servidor SQL versão 110 ou 100 ou 90 ou 80 começar com o maior número
[servidor] o nome do servidor ou ip do servidor
[id de login] o nome do servidor de login do usuário MS-SQL
[password] a senha de login necessário
Abaixo está o script simples de backup de banco de dados make.
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
Você pode usar um VB Script eu escrevi exatamente para essa finalidade: https://github.com/ezrarieben/mssql-backup-vbs/
Agendar uma tarefa no "Agendador de Tarefas" para executar o script como você gosta e ele vai fazer backup de todo o banco de dados para um arquivo BAK e guardá-lo onde quer que você especificar.
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 você pode encontrar os arquivos de banco de dados ... "DBFiles cp backup /"
Quase com certeza não é aconselhável na maioria dos casos , mas é simples como todos getup.