1

我有一个使用 SQL Express 2005 数据库的简单应用程序。当用户关闭应用程序时,我想通过在另一个目录中制作副本来提供备份数据库的选项。但是,当我尝试这样做时,我得到“该进程无法访问文件'...\Pricing.MDF',因为它正在被另一个进程使用。” 我关闭了连接,处理了连接,将其设置为空,然后使用 GC.Collect(),但没有任何区别。我的连接字符串是“Data Source=.\SQLEXPRESS2005;AttachDbFilename=|DataDirectory|\Pricing.mdf;Integrated Security=True; User Instance=True”,我一直使用相同的连接。我没有看到我可以在哪里分离数据库以对抗连接字符串中的附加。

1 - 我如何释放这个东西?2 - 有没有比复制数据库更好的方法?该应用程序仅供我丈夫使用,因此如果他确实需要从备份中恢复,我将能够处理它。

谢谢!

4

3 回答 3

4

您不想直接复制 mdf,因为 SQL 将大部分更改保留在事务日志中,运行一些查询后查看修改时间,它不会直接写入文件。我在设置 rsync 作业时注意到了这一点。

让 SQL 生成备份更安全,更理想,单用户或多用户。您可以提供一个指向调用 T-SQL 的函数的链接,您可以完全自动化源数据库和目标文件夹:

BACKUP DATABASE [mydatabasename]
TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\Scheduled Task Backups\mydatabasename-backup' WITH NOFORMAT, NOINIT,  NAME = N'mydatabasename-Full Data

SQL 2005 引入了另一种 T-SQL 语法来执行此操作,我终其一生都找不到它。但是有一些方法可以通过 M$$SQL 来完成,而无需完整的数据库服务器。

于 2008-11-26T03:38:44.120 回答
0

这篇文章中有一个示例展示了如何在程序中备份 SQL Express 数据库。

于 2008-11-26T02:55:34.817 回答
0

如果这是单个用户或应用程序或只读数据库,请不要使用 SQL Server Express。这就是 SQL Server Compact 的用途。这将解决您的备份问题并简化部署。

于 2008-11-26T03:19:04.613 回答