在异步数据库镜像中,移动主数据库文件实战
某数据库部署为异步数据库镜像,主数据库所在磁盘空间不足,我得移动主数据库文件到新的磁盘上。
在异步数据库镜像中,应用程序连接到主数据库访问。我们这里要根据你的线上环境考虑选择哪种方式合适:
1. 手动故障转移到镜像库,然后再移动新的镜像数据库文件。
2. 直接移动主数据库文件。
我个人认为,如果业务无法容忍长时间停机,建议先手工故障转移到镜像库,业务切换连接串。如果此时,新的镜像库所在实例上还有其他线上业务数据库,以业务第一,建议重做镜像,将数据库文件放到新的位置。待镜像搭建完成后,再重新手工故障转移回来,业务也指向回来。
由于我们线上业务恰好有停机维护时间窗口。在此期间,我直接移动主数据库。下面,我们先来尝试在业务停机期间,直接移动主数据库文件。
1. 在主数据库上做完整备份,避免出现问题。
2. 在主库上点击“Pause”,暂停镜像会话。
3. 在主库上使用Alter Database指向一个新的位置。
a) 确定WMS数据库的逻辑文件名称以及这些文件在磁盘上的当前位置。
SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID(‘WMS‘); GO
b) 使用 ALTER DATABASE更改每个文件的位置。
USE master; GO ALTER DATABASE WMS MODIFY FILE (NAME = FLUXWMS_DEMO, FILENAME = ‘ H:\SQL-LOG\WMS.mdf‘); GO
4. 重启主数据库所在实例的SQL Server服务。(这里对于主数据库所在实例上还有其他业务数据库,务必得考虑对其他业务的影响,我们选择移动镜像数据库文件的第二种方法)
5. 移动主数据库文件到一个新位置,并确保文件上的权限也还在。
6. 使WMS数据库 OFFLINE 再 ONLINE,以实施更改。(当然,此时重启SQL Server服务应该也可以,但如果操作的主库所在实例上有其他业务数据库,会受到影响,建议还是在数据库级别操作)
USE master GO ALTER DATABASE WMS SET OFFLINE ALTER DATABASE WMS SET ONLINE GO
这时,我们再来看看数据库状态。
在主库上:
发现状态已经正常。
7. 在主库上点击“RESUME”,恢复镜像会话。验证镜像状态已同步。
这样也验证了Alter Database移动数据库文件的操作是修改了master系统数据库,而不会被同步到镜像数据库。