Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Desanexar programaticamente o banco de dados SQL Server para copiar o arquivo mdf


Por que não fazer um backup comum (fácil de fazer com sqlcommand) e adicionar um recurso para os usuários restaurarem facilmente esse arquivo de backup com um clique em um botão?
  • Você pode fazer backup do banco de dados com comandos sql
  • Você pode descompactar e compactar o arquivo de backup com comandos sql
  • Você também pode desembolsar e ftp o arquivo de backup automaticamente para um servidor web, se desejar.

O que os usuários finais estão usando para consumir seu banco de dados? Um programa winform? Então é fácil fazer tudo com um clique de botão para o usuário.

Aqui estão alguns códigos de exemplo para isso:
Declare @CustomerID int
declare @FileName nvarchar(40)
declare @ZipFileName nvarchar(40)
declare @ZipComand nvarchar(255)


set @CustomerID=20 --Get from database instead in real life application
SET @FileName='c:\backups\myback'+ cast(@customerID as nvarchar(10))+'.bak'
SET @ZipFileName='c:\backups\myback'+ cast(@customerID as nvarchar(10))+'.zip'

--Backup database northwind
backup database northwind to [email protected]

--Zip the file, I got a commanddriven zip.exe from the net somewhere.
set @ZipComand= 'zip.exe -r '[email protected]+' '[email protected]
EXEC xp_cmdshell @zipcomand,NO_output

--Execute the batfile that ftp:s the file to the server
exec xp_cmdshell 'c:\movetoftp.bat',no_output

--Done!

Você tem que ter um movetoftp.bat que contenha isso (mude ftp-server para o seu):
ftp -s:ftpcommands.txt ftp.myftp.net

E você tem que ter um ftpcommands.txt que contenha isso (você pode ter este arquivo criado dnamicamente com apenas o arquivo zip certo por sqlcommands também, mas eu deixo você fazer isso sozinho):

ftpusername
ftppassword
binário
prompt n
mput c:\backups\*.zip
sair