【问题标题】:How do I release sql express database?如何发布 sql express 数据库?
【发布时间】:2008-11-26 01:26:18
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: .net sql-server sql-server-express


    【解决方案1】:

    您不想直接复制 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 来完成,而无需完整的数据库服务器。

    【讨论】:

    • 您可以从服务器上分离 db 文件。然后就可以安全地复制了。但是,发生这种情况时数据库不可用。
    【解决方案2】:

    this post 中有一个示例说明如何在程序中备份 SQL Express 数据库。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这不太行,因为我喜欢我的存储过程。但这是一个非常有趣的选择 - 谢谢!
      • 然后使用另一个支持 SP 的进程内引擎。作为服务运行的数据库不适合与本地桌面应用程序一起使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多