Pet*_*aud 6 .net c# sql-server asp.net sql-server-2005
我有一个小的SQL Server数据库,我需要在命令上复制 - 我需要能够在任何给定的时刻获取mfd和ldf文件,复制它们,压缩它们,并使它们可供最终用户使用.
现在可以通过手动实现:
1)通过远程桌面登录SQL服务器
2)通过SQL Management Studio分离数据库.我必须通过将数据库设置为single_user和/或重新启动服务来解决这个问题,因此我可以将其分离,因为应用服务器通常会登录到它.
3)在分离时,我通过文件系统并复制mdf和ldf文件.
4)我通过SQL Management Studio重新附加数据库
5)我压缩复制的文件,然后将它们移动到FTP服务器,以便需要它们的人可以获取它们.
这是一个可怕的,低效的过程.这不仅仅是需要架构的问题,而是需要人们在他们自己的本地机器上处理真实的生产数据的快照,以进行破坏性的实验.幸运的是,压缩数据库非常小 - 可能有30兆的日志.
理想情况下,我想在ASP .NET Web应用程序中创建一个页面,该页面有一个按钮,用户可以按下该按钮以启动将当前数据库打包成zip文件,然后我只提供指向文件下载.
为什么不进行普通备份(使用sqlcommand很容易)并为用户添加一项功能,只需单击按钮即可轻松恢复该备份文件?
最终用户使用db的最终用户是什么?一个winform程序?然后通过按钮单击为用户轻松完成所有操作.
以下是一些示例代码:
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 DISK=@FileName
--Zip the file, I got a commanddriven zip.exe from the net somewhere.
set @ZipComand= 'zip.exe -r '+@ZipFileName+' '+@FileName
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!
Run Code Online (Sandbox Code Playgroud)
你必须有一个包含这个的movetoftp.bat(将ftp-server更改为你的):
ftp -s:ftpcommands.txt ftp.myftp.net
你必须有一个包含这个的ftpcommands.txt(你可以通过sqlcommands只使用正确的zip文件来创建这个文件,但我允许你自己这样做):
ftpusername
ftppassword
二进制
提示n
mput c:\ backups\*.zip
quit
查看您在SQL Management Studio中使用的对话框,每个对话框顶部附近都会生成一个用于执行操作的脚本的按钮.这是一种快速的方法,可以在SQL中发现如何在数据库连接中执行此操作.
例如,分离数据库db1:
EXEC master.dbo.sp_detach_db @dbname = N'db1'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12443 次 |
| 最近记录: |