O que é um programa de linha de comando simples ou script para bancos de dados de servidor SQL de backup?

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

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?

Foi útil?

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.

  1. Criar um procedimento armazenado no seu db mestre. Veja o link msft ou se ele está quebrado tente aqui: http://pastebin.com/svRLkqnq
  2. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top