sql >> Base de Datos >  >> RDS >> Sqlserver

Separe mediante programación la base de datos de SQL Server para copiar el archivo mdf

¿Por qué no hacer una copia de seguridad ordinaria (fácil de hacer con sqlcommand) y agregar una función para que los usuarios restauren fácilmente ese archivo de copia de seguridad con un clic en un botón?

  • Puede hacer una copia de seguridad de la base de datos con comandos sql
  • Puede desembolsar y comprimir el archivo de copia de seguridad con comandos sql
  • También puede desembolsar y ftp el archivo de copia de seguridad automáticamente a un servidor web si lo desea.

¿Qué utilizan los usuarios finales para consumir su base de datos? ¿Un programa winform? Entonces es fácil hacer todo con un clic de botón para el usuario.

Aquí hay un código de ejemplo para eso:

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!

Debe tener un movetoftp.bat que contenga esto (cambie el servidor ftp a su):
ftp -s:ftpcommands.txt ftp.myftp.net

Y debe tener un ftpcommands.txt que contenga esto (puede hacer que este archivo se cree dinámicamente con el archivo zip correcto de sqlcommands también, pero le permito hacerlo usted mismo):

ftpusername
ftppassword
binary
prompt n
mput c:\backups\*.zip
salir