SQL Server 2016数据库备份恢复:含内存优化表的恢复是否有特殊方法?
恢复包含内存优化表的SQL数据库备份的要点与方法
刚好对这个问题熟得很!恢复带内存优化表的SQL数据库备份,基础逻辑和普通SQL数据库差不多,但因为内存优化表依赖专属的MEMORY_OPTIMIZED_DATA文件组,确实有几个关键细节要注意,给你掰扯清楚:
一、恢复前必做的准备
- 先确认目标SQL Server版本兼容:内存优化表从SQL Server 2014才开始支持,要是跨版本恢复,得确保目标版本能hold住原库的内存优化特性——比如有些高级特性在低版本可能不支持,别到时候恢复一半卡壳。
- 提前规划好存储路径:
MEMORY_OPTIMIZED_DATA文件组里存的是内存优化数据的容器文件,恢复时如果目标服务器没有原备份里的路径,得提前准备好新路径,不然会因为找不到路径直接失败。
二、具体恢复的两种方式(差异点在这里)
1. 用SSMS图形界面恢复
步骤和普通库恢复大致一样,但有个关键步骤别漏:
- 打开「恢复数据库」窗口后,切到【文件】选项卡,仔细检查
MEMORY_OPTIMIZED_DATA文件组的恢复路径。要是目标服务器没这个路径,点击「...」改成已存在的路径,再启动恢复就行,SSMS会自动处理内存优化相关的文件组恢复。
2. 用T-SQL命令恢复
这时候必须明确指定内存优化文件组的存储位置,给你举个实用的例子:
RESTORE DATABASE MemOptDemoDB FROM DISK = 'D:\Backups\MemOptDemoDB_Full.bak' WITH REPLACE, -- 常规数据文件和日志文件的路径指定 MOVE 'MemOptDemoDB_Data' TO 'E:\SQLData\MemOptDemoDB_Data.mdf', MOVE 'MemOptDemoDB_Log' TO 'F:\SQLLogs\MemOptDemoDB_Log.ldf', -- 重点:指定内存优化文件组的容器路径 MOVE 'MemOptDemoDB_MemOptFG' TO 'G:\SQLMemOptData\MemOptDemoDB_MemOptFG';
- 这里的
MemOptDemoDB_MemOptFG是原数据库中内存优化文件组的名称,必须和备份里的一致,不然恢复时会找不到对应的容器,直接报错。 - 如果是恢复差异备份或者日志备份,流程和普通库一样,只要最后一步恢复日志时,内存优化文件组已经正确挂载就行。
三、特殊场景的坑要避开
- 内存不够的情况:内存优化表的数据在恢复时需要全量加载到内存里,如果目标服务器内存不够装下所有内存优化表的数据,恢复可能直接失败,或者数据库进入「恢复挂起」状态。这时候要么加服务器内存,要么先想办法缩小原库内存优化表的数据量再备份恢复。
- 只读模式恢复:要是想把库恢复成只读模式,得注意内存优化表在只读库中也是只读的,但
MEMORY_OPTIMIZED_DATA文件组还是得存在,恢复时同样要指定正确的路径。
内容的提问来源于stack exchange,提问作者Mr. K




