为运行SQL Server的虚拟机切换装有DB Logs的最佳实践
上一篇说到虚拟机启动不了, 原因是有一块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, 只要有备份在, 你就无敌了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2010-04-16 让你的代码输出exception发生时所在的文件名, 行号, 列号