有关复制SQL Server数据库的问题

时间:2010-10-07 00:41:17

标签: sql-server sql-server-2005 sql-server-2008 configuration development-environment

询问[2]

在复制Resource.mdf [1]时,我注意到:
1)
可以在不停止SQL Server实例的情况下复制Resource.mdf(我附加了一个从正在运行的实例中复制的实例,并且在附加后它可以工作)。

1a)的
我应该理解它是所有只读数据库的一般可能性,还是仅在某些版本中(我的是Windows XP Pro Sp3上的2008 R2)? 1b)的
从概念上讲,我无法理解为什么应该停止在隔离/工作组桌面Windows(在我的情况下是XP Pro Sp3)上开发(Dev Ed)SQL Server以复制用户定义的未使用(例如,示例数据库) )数据库。

1C)
当一个人应该将.LDF与.MDF文件一起复制并在复制时.LDF可以被跳过吗? 为什么只读数据库必须(事务日志?据我所知)文件LDF?

2)
Resource.mdf(在我的SQL Server 2008 R2中默认的未命名实例,Windows XP Pro SP3)在

  • %ProgramFiles%\ Microsoft SQL Server \ MSSQL10_50.MSSQLSERVER \ MSSQL \ Binn \

而不是

  • %ProgramFiles%\ Microsoft SQL Server \ MSSQL10.SQL2008 \ MSSQL \ Binn \ [2]

我很好奇 - 由于SQL Server版本,版本或Windows版本的版本,位置是否不同?

[1]
我的问题“如何查看/编写系统视图的定义?” how to see/script definitions of system views?
[2]
马丁史密斯对[1]的答案 how to see/script definitions of system views?

1 个答案:

答案 0 :(得分:3)

如果数据库已打开auto_close,则当数据库不再使用时,引擎将关闭文件句柄。 Express实例将数据库创建为自动关闭ON,并且在将数据库附加到非Express实例时保留此属性。

您必须关闭实例才能复制数据库文件。您所要做的就是放弃SQL Server实例在数据库文件上保留的独占句柄。这可以通过简单地将数据库设置为脱机,执行复制,然后将其重新设置为联机来完成。 (如果我没记错的话)对于只读的数据库,SQL Server持有的句柄允许其他进程在文件上打开共享句柄。这就是为什么 您可以复制在线只读数据库,并且msqlsystemreource在正常操作模式下是只读的。

其他问题:
1c)永远不会。始终复制MDF,所有NDF和LDF。即使有建议单独复制MDF,也要忽略它们并复制LDF 2)资源数据库是二进制文件的一部分。它们将位于安装的binn文件夹中,与sqlservr.exe位于同一位置。每个已安装的实例的路径都不同,您可以在安装过程中更改它。

最后一个考虑因素:为什么你接触资源数据库?如果你以任何方式操纵资源数据库,你可能很容易破坏你的实例。