我们搭建了一个试验环境,表明SQL Server在VMWare平台下运行时,停电会给数据完整性带来什么样的影响。我们在物理机和虚拟机上建立了SQL Server 2005的两个实例,分别称之为 ZOOSTATION和VZOO。每个服务器实例都有专门为本次试验创建的VMTest数据库。虚拟服务器使用Linked服务器与物理服务器连接起来。两个VMTest数据库都含有同样的数据表:demotable每个数据表都有81832行),里面的数据一模一样。

为了测试停电后虚拟机数据库的完整性,我们执行了如下操作:在同样的分布式事务中,在物理数据库和虚拟数据库上执行了同样的UPDATE更新)语句。这一更新操作把“2_”添加到了demotable表中每一行的开头。

 


 执行提交语句后,


 立即移除数据/日志所在的外部驱动器,模拟操作系统崩溃。模拟了操作系统崩溃后,我们重新开启两个SQL服务器。在物理机上,一切都正常,数据也按预期的那样更新。遗憾的是,在虚拟机上,我们看到了好多错误。

VMTest数据库状态为“In Recovery”恢复中),如我的SQL Server Management Studio所示。

 

我们将VMTest数据库的状态设为“Emergency”紧急状态),以读取里面的数据。

这样一来,数据库可以访问但只能读取)。我们试图使用SQL Server Management Studio的Open Table打开表)命令,从demotable读取实际的数据。我们看到下列结果: 

SQL Management Studio只能读取demotable里面原始的81832行中的3965行。一些数据丢失了。我们发现,许多TextData值是以“1_”开头,而不是像上一次事务表示的那样以“2_”开头。

手动执行SELECT选择)语句出现了另一个错误。

最后的结论是,要认识到SQL Server在VMWare下无法运行,这点很重要。虽然有时SQL Server似乎会运行,但是会导致数据库不稳定。我们将整个试验重复了无数次,每一次物理机上的数据库都毫发未损,可是虚拟机上的数据库被损坏。没有警告,没有危险信号,也没有警报。到时摆在你面前的可能就是被损坏的数据库。
所以现在该由你自己来决定:扪心自问,让SQL Server与VMWare一起运行带来的优点压倒伴随的潜在风险吗?
 

原文地址:http://www.sqlsolutions.com/articles/articles/SQL_Server_and_VMware-A_Potentially_Fatal_Combination.htm
 


相关内容