上一篇说到虚拟机启动不了, 原因是有一块VHDX的文件找不到了. 解决了这个问题之后, 又遇到了另一个问题, 那就是我的这台SQL Server的虚机启动之后, 我的几个重要database变成了suspect状态.
原因很清楚, 因为切换过了装有DB Logs的VHDX.
[错误做法] 当时是这样做的: 在虚拟机和应用程序都在运行的状态下, 拷贝了存有DB Logs(ldf文件)的VHDX到另一个分区上. 同样在虚机和应用程序都live的情况下, 切换VHDX. 结果, 由于DB的data file和log file不一致, 就发生了suspect的问题.
[修复做法] 正确的做法是从backup中恢复DB. 但我的测试环境没有备份(-_-||), 因为几个T的数据备份就要花好久. 我的做法是先把所有使用这些DB的虚拟机都shutdown掉. 然后切换回原来的VHDX, 这样data和log file就一致了. 出现问题的DB状态正常之后, Trucnk掉transaction log. 之后拷贝ldf文件到别的地方. 再切换回去出问题的那个VHDX. 把ldf文件复制到正确的路径下. 数据库终于恢复了正常.
[正确做法] 痛定思痛, 下次再做这样的事情(更改包含MDF或LDF文件的VHDX)的时候, 应该这么做:
1. shundown运行着应用程序的虚拟机. 抑或是在SQL Server上把DB offline掉.
2. 拷贝VHDX到其他的LUN上.
3. 切换VHDX路径.
4. 启动虚拟机. 或是online掉所有的数据库.
但是, 王道是:"备份数据库"!
不管是suspect还是recovery pending, 只要有备份在, 你就无敌了!