Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Trennen Sie die SQL Server-Datenbank programmgesteuert, um die MDF-Datei zu kopieren

Warum nicht ein gewöhnliches Backup erstellen (einfach mit sqlcommand) und eine Funktion hinzufügen, mit der die Benutzer diese Backupdatei einfach mit einem Klick auf eine Schaltfläche wiederherstellen können?

  • Sie können die Datenbank mit SQL-Befehlen sichern
  • Sie können die Sicherungsdatei mit SQL-Befehlen auspacken und komprimieren
  • Sie können die Sicherungsdatei auch automatisch berappen und per FTP auf einen Webserver übertragen, wenn Sie möchten.

Was verwenden die Endbenutzer, um Ihre Datenbank zu konsumieren? Ein Winform-Programm? Dann ist es einfach, alles mit einem Knopfdruck für den Benutzer zu erledigen.

Hier sind einige Beispielcodes dafür:

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!

Sie müssen eine movetoftp.bat haben, die Folgendes enthält (ändern Sie den FTP-Server auf Ihren):
ftp -s:ftpcommands.txt ftp.myftp.net

Und Sie müssen eine ftpcommands.txt haben, die Folgendes enthält (Sie können diese Datei auch dynamisch mit genau der richtigen Zip-Datei von sqlcommands erstellen lassen, aber ich lasse Sie das selbst tun):

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