SQL Server MDF文件 - 如何备份

5
这是情景:
我们有一个公司网站,其中包含三个数据库。它运行的是SQL Server 2005。这三个数据库与MDF文件相关联。有人试图直接复制/粘贴其中一个MDF文件,结果导致了读取只读错误。我们通过分离/重新附加来修复了这个问题。
为了防止再次发生这种情况,我们想要复制这些数据库以降级到我们的QA数据库。
在不将公司网站关闭的情况下,我们该如何最好地进行复制?我尝试搜索Google,但没有找到一个合适的方法。这些数据库相当小,我能想到的最坏的情况就是关闭SQL Server服务,然后复制MDF文件,最后重新启动服务。我假设这最多需要10秒钟的停机时间。
[请注意,任何阅读此文的人,请勿直接复制MDF文件,确保至少将数据库脱机或数据库可以被锁定]

抱歉,我应该补充说明一下,这些数据库不在同一个网络上,因为它们是被远程托管的,所以我们不能简单地移动数据。我们将无法连接到 QA 数据库。 - dave2118
你不能安排备份吗?然后移动备份文件。 - Ste
我们可以简单地强制备份(DataBase > 任务 > 备份),这不会对任何试图访问数据库的用户产生影响,对吗? - dave2118
我把我的回答从评论中移出,这样我可以更好地表达。 - Ste
谢谢。我们希望尽量减少网站的停机时间。幸运的是,这是一个相对低流量的网站。我正在我们的QA数据库上测试不同的情况。基本上,这个网站多年来没有被更新过,我正试图用我有限的SQL Server管理知识将其更新到最新状态。请继续发布答案,我会接受它。 - dave2118
对于小型、低流量的数据库来说,在备份过程中几乎不会有任何影响。 - Ste
2个回答

2

@dave,我认为你是对的,即DataBase > Tasks > Backup可以在不中断用户访问数据库的情况下工作。我在批处理文件中运行以下命令来备份我的数据库,并且在运行时不会阻止访问。需要注意的是,我不是SQL Server专家;这只是适用于我个人的方法。

sqlcmd -S "MyHostName\sqlexpress" -Q "BACKUP DATABASE MyDatabaseName TO DISK = N'C:\path\to\backup.bak' WITH NOFORMAT, NOINIT, NAME = N'MyDatabaseName-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"


感谢David的评论。我和你一样,作为开发人员已经使用SQL Server工作多年,但在管理方面并不多。由于这份新工作是基于Oracle的,他们有一个运行了四年没有被碰过的基于SQL Server的企业站点。我被晋升为SQL Server专家,必须解决这个问题。我认为询问这里比猜测要好。 - dave2118

2
不要试图复制和锁定MDF文件,只需将数据库备份到文件系统中,然后将其复制出来即可。您问是否在备份期间会影响用户...我们不能说不会对用户产生“任何”影响,因为当然我们正在处理数据库。然而,备份活动数据库是常态。通常,您会安排在夜间或低使用期间进行备份,以最小化干扰。请查看这个问题,其中提供了一些很好的信息:https://serverfault.com/questions/100490/what-happens-during-a-live-sql-server-backup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接