gpt4 book ai didi

c# - 以编程方式分离 SQL Server 数据库以复制 mdf 文件

转载 作者:太空狗 更新时间:2023-10-29 20:51:05 24 4
gpt4 key购买 nike

我有一个小型 SQL Server 数据库,我需要根据命令进行复制——我需要能够在任何给定时刻获取 mfd 和 ldf 文件,复制它们,压缩它们,并让最终用户可以使用它们.

现在这可以手动实现:

1) 通过远程桌面登录SQL Server

2) 通过 SQL Management Studio 分离数据库。我必须摆弄将数据库设置为 single_user 和/或重新启动服务的组合,以便我可以让它分离,因为应用服务器通常已登录到它。

3) 分离时,我遍历文件系统并复制 mdf 和 ldf 文件。

4) 我通过 SQL Management Studio 重新附加数据库

5) 我压缩复制的文件,然后将它们移动到 FTP 服务器,以便需要它们的人可以得到它们。

这是一个可怕的、低效的过程。这不仅仅是需要模式的问题,而是人们需要在他们自己的本地机器上使用真实的生产数据的快照来进行破坏性实验。幸运的是,压缩后的数据库非常小——包含日志可能只有 30 兆字节。

理想情况下,我想在 ASP .NET Web 应用程序中创建一个页面,该页面有一个按钮,用户可以按下该按钮来启动将当前数据库打包到一个 zip 文件中,然后我只提供链接到文件下载。

最佳答案

为什么不进行普通备份(使用 sql 命令很容易做到)并添加一个功能,让用户只需单击一个按钮即可轻松恢复备份文件?

  • 可以用sql命令备份数据库
  • 您可以使用 sql 命令提取和压缩备份文件
  • 如果需要,您还可以自动将备份文件取出并通过 ftp 传输到网络服务器。

最终用户使用什么来使用您的数据库?一个 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!

您必须有一个包含此内容的 movetoftp.bat(将 ftp 服务器更改为您的):
ftp -s:ftpcommands.txt ftp.myftp.net

并且您必须有一个包含此文件的 ftpcommands.txt(您也可以通过 sqlcommands 使用正确的 zip 文件以动态方式创建此文件,但我让您自己这样做):

ftp用户名
ftpp密码
二进制
提示n
mput c:\backups\*.zip
退出

关于c# - 以编程方式分离 SQL Server 数据库以复制 mdf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/757036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com