已备份数据库的磁盘结构版本为611,服务器支持版本为539,无法还原或升级数据库
大家都知道高级版本的数据库文件无法还原或者附加到低版本,因为高版本和低版本文件格式会有不同。如果尝试将低版本的数据库附加或者还原到低版本的数据库会看到类似下面的错误:
已备份数据库的磁盘结构版本为611,服务器支持版本为539,无法还原或升级数据库。RESTORE FILELIST 操作异常结束。(MicrosoftSQL Server,错误:3169)
可以看到这里有两个版本号,不是我们平时看到的服务器版本号(select @@version),而是SQLServer内部数据库版本号。这些版本号是没有官方文档的。不过我们可以使用DATABASEPROPERTYEX ‘Version’选项获得这个版本号。
select DATABASEPROPERTYEX('master','version')
这里我从网上找到了所有SQLServer版本对应的内部数据库版本号的配置表(ternal SQL Server Database Version Numbers):
Target SQL Server Version |
Source SQL Server Version |
Internal Database Version |
SQL Server 2008 R2 |
SQL Server 2008 R2 |
665 |
SQL Server 2008 |
661 |
|
SQL Server 2005 with vardecimal enabled |
612 |
|
SQL Server 2005 |
611 |
|
SQL Server 2000 |
539 |
|
SQL Server 2008 |
SQL Server 2008 |
661 |
SQL Server 2005 with vardecimal enabled |
612 |
|
SQL Server 2005 |
611 |
|
SQL Server 2000 |
539 |
|
SQL Server 2005 SP2+ |
SQL Server 2005 with vardecimal enabled |
612 |
SQL Server 2005 |
611 |
|
SQL Server 2000 |
539 |
|
SQL Server 7 |
515 |
|
SQL Server 2005 |
SQL Server 2005 |
611 |
SQL Server 2000 |
539 |
|
SQL Server 7 |
515 |
|
SQL Server 2000 |
SQL Server 2000 |
539 |
SQL Server 7 |
515 |
|
SQL Server 7 |
SQL Server 7 |
515 |
通过这张配置表可以看到出错原因是尝试将2005的备份文件还原到2000。如果没有2005版本的话,只能将2005的数据库脚本导出在2000上重建然后将数据导入。
MSDN上DATABASEPROPERTYEX‘Version’选项的解释:用于创建数据库的 SQL Server 代码的内部版本号。仅供 SQLServer工具在内部用于升级处理。