是否有可能有一个数据库文件附加到两个不同的SQL实例?
考虑到MDF位于NAS上,我想在两台不同的服务器上使用MS SQL的主要和次要实例(不考虑这个问题中的集群),我希望两个实例都引用这个相同的MDF。
一次只能将一个实例连接到MDF,或者两者都可以。 附加SQL实例“A”,解除连接,然后附加实例“B”到这个MDF是否有问题?
感谢您的input。
在MSSQL中有一个冷备用服务器的正确方法是SQL日志传送 。 这涉及在两台服务器上拥有两个数据库副本,A会定期将日志文件还原到B.
在MSSQL 2008 R2或更低版本中使用热备份服务器的正确方法是SQL数据库镜像 。 在SQL Server 2012中是AlwaysOn 。 这涉及到两台服务器上的数据库的两个副本与另一台服务器同步。
在MSSQL 2008 R2或更低版本中使用热备份服务器的正确方法是SQL Clustering (2012年,这也是AlwaysOn的一部分)。 这涉及SAN上的单个数据库副本(不是NAS,除非您的NAS可以暴露支持集群的iSCSI卷;有些则可以),Windows Server 2008 R2 Enterprise(或2012 Datacenter),SQL Server Enterprise以及正确configurationWindows故障转移群集。
没有任何版本的SQL Server将允许存储在CIFS / NFS / SMB共享上的MDF / LDF文件。 它们必须存储在块存储中,这使您可以select本地磁盘或SAN卷(例如iSCSI或FC暴露卷)。
从我所做的阅读中,MS SQL在MDF文件上使用文件级locking。 因此,如果它们都在运行,则不能使用同一文件的两个MS SQL实例。 但是,如果您有一种机制确保一次只运行一个,则可以让两个MS SQL实例使用相同的MDF。
如果您正在寻找一种您准备好运行备份SQL服务器的方法,则可以select定期备份主服务器上生成的数据库。 然后,您可以创build一个将备份复制到辅助服务器的进程。 然后,只需创build一个脚本,便可在需要时将备份导入辅助服务器。
如果每台服务器都有自己的存储空间,这也可以避免外部NAS设备成为单点故障。 此技术适用于旧版本的SQL Server。 但是,如果您有最新版本,则SQL Server 2012 Standard Edition(及更高版本)支持更稳健的数据库镜像方法。 请参阅下面的链接:
SQL Server 2012数据库镜像
使用这种scheme,不能保证服务器A失败时MDF不会被破坏。 或者NAS失败。
该scheme忽略LDF文件。 人们通常认为LDF不重要,但事实并非如此。 LDF用作预写日志,当实例重新启动(或另一个实例在群集中启动)时,更改将“重放”。 您需要LDF,否则您将丢失数据。
另一件需要考虑的事情是,基于SMB的NAS设备往往具有糟糕的性能。 如果设备支持iSCSI,情况可能不会那么糟糕。 如果你使用SMB,使用映射驱动器是一件麻烦事。 您将不得不调整SQL Server将文件存储在networking共享上。
如果你想避免集群,只要做其他人做的事情,看看数据库镜像(这是在SQL Server 2005中引入的)或日志传送(它可以使用几乎任何SQL Server版本,虽然官方支持直到SQL Server 2000)。
人群往往是最安全的事情,尽pipe这可能不是最有趣的事情。 当你处理客户的数据时,你需要“安全”而不是“有趣”。
无论使用哪种策略,还有其他一些细节需要担心,例如确保作业,login名,密码,用户ID等在两个实例上都保持最新状态,确保您保持备份的正确性等。