如何把高版本的SQLServer还原到低版本的sqlserver

时间:2024-02-20 11:32:28

·

如何把高版本的SQLServer 还原到低版本的 sqlserver

微软的软件设计方案基本上都是新版本兼容旧版本,旧版本不兼容新版本。

所以,直接通过 【数据库备份】的.bak文件,来进行【数据库还原】的方式是不支持的。

 

方案一:直接使用生成的完整数据库sql来还原

                      {   仅用于小数据库(数据库完整导出的.sql文件小于100M)   }

 

整体思路:  通过新版本的SQLServer生成兼容低版本的.sql脚本,然后将sql脚本实现在低版本SQLServer上执行。从而创建数据库。

 

假设:需要实现的功能是 把sqlserver2016(2012)的数据库备份到sqlserver2012(2008),数据库名为Test,并且这两个数据库在不同的服务器上。

 1. 打开SQL Server Management Studio (下方简称SSMS),链接新版本的数据库服务器;

 2.  右键点击需要导出的数据库Test-属性-选项  看到如下图

    

 

 2. 右键Test-任务-生成脚本,下一步-下一步到达下图,点【高级】选项。把【script for sql  version】改成你要降级的那个版本 也就是【sql2008】。确定完成即可。会生成一个【script.sql】脚本文件。

 

 

 

 

3.下一步要把sqlserver2012源文件复制到另外一个电脑上。由于SqlServer正在运行是无法复制的。所以首先要【停止】sqlserver服务。

 

 

4. 找到sql2012数据库在电脑中的位置。 右键【数据库】-【文件】会有路径,复制出这两个文件来。 至此sqlserver2012的电脑操作完成。

 

 

5. 把上面得到的【script.sql】文件和两个数据源文件复制到sql2008所在的电脑中。在sql2008中【新建】-【查询管理器】。把【script.sql】拖进去,会看到代码。

 

   (注意绿色部分。此时显示的数据库文件位置是sql2012电脑的位置。需要把这两个地址改为 sql2008 中 复制过来的那两个源文件的地址即可。按【F5】键执行,即可完成数据库从SQL2012到SQL2008的降级。 )

 

 

 

方案二:使用CMD命令 

        很多时候,我们的数据库比较大,通过数据库生成的.sql脚本(>100M)在SQL Server manager Studio(SSMS)中打开不了,提示“文件太大,无法打开” 。

        这时候,我们就需要通过命令行(cmd命令提示符)来执行sql脚本的还原数据库了。

       特别说明:-d 后面跟的数据库名称,必须是目标数据库中已经存在的数据库!!!请先在SqlServer中创建一个空白数据库。

   在开始菜单上右击,单击 “命令提示符(管理员)”打开  

   注意,如果脚本太大,可以关闭stderr消息,以加快执行速度。

 

前提:  备份数据库,生成sql脚本备用

    1. 右击数据库 --> 任务 --> 生成脚本。

    2. 在生成脚本的“选择对象”步骤选择“编写整个数据库及所有数据库对象的脚本选项”。下一步。

    3. 在生成脚本的“设置脚本编写选项”界面, 点击【高级】按钮进入高级选项。

       ●  设置 “编写USE DATABASE 脚本” 和 “架构限定对象名称” 选项为False;
       ●  并将“服务器版脚本” 选择为你的低版本数据库的版本。生成脚本。

    生成脚本完成。

 

    使用sqlcmd命令还原数据库,要求-d 数据库名 必须要先手工创建这个数据库! 所以在备份时生成sql脚本最好先去掉下方这两项:

     “编写Use Database脚本”  和 “架构限定对象名称” 设置为False 

      

 

    4. 在低版本的数据库中新建数据库,数据库名称随意(与原高版本的数据库名不同即可)。

          CMD命令中的“dbname” 部分,可以在下方替换。

             

 

 

 

    5. 完成,后面就是执行cmd命令了。

 

 

运行CMD命令:  还原数据

2.1 方法一: 标准的sqlcmd命令

SQLCMD -U sa -P 123 -S "172.0.0.1\SQLExpress" -d dbname -r -i d:\dbscript.sql

  说明:SQLExpress是本地数据库服务器(低版本的),dbname 是数据库名称,dbscript.sql 是备份的脚本文件
                  -U 后面是数据库用户名, -P 后面是数据库用户的密码 -S后是服务器名(数据库地址\实例)。

 

2.2 方法2:标准的osql命令

OSQL -U sa -P 123 -S (local)\SQLExpress -d dbname -r -i "d:\dbscript.sql"

  

2.3 方法3:通过Windows身份验证Sqlserver的sqlcmd命令 (通过master来执行创建数据库命令)

SQLCMD -E -d dbname -i d:\dbscript.sql

  (通过master来执行创建数据库命令,没有输入数据库账号密码,需要Windows身份验证且登录的账号是数据库管理员)

        Sqlcmd: The -E and the -U/-P options are mutually exclusive. (-E和 -U / -P 选项是互斥的。)

 

 

sqlcmd工具(或者osql)的命令参数如下

    特别说明:-d 后面跟的数据库名称,必须是目标数据库中已经存在的数据库!!!

sqlcmd    [-U 登录 ID]             [-P 密码]
   [-S 服务器]                [-H 主机名]           [-E 可信连接]
   [-d 使用数据库名称]         [-l 登录超时值]      [-t 查询超时值]
   [-h 标题]                    [-s 列分隔符]         [-w 列宽]
   [-a 数据包大小]           [-e 回显输入]         [-I 允许带引号的标识符]
   [-L 列出服务器]           [-c 命令结束]         [-D ODBC DSN 名称]
   [-q "命令行查询"]         [-Q "命令行查询" 并退出]
   [-n 删除编号方式]          [-m 错误级别]
   [-r 发送到 stderr 的消息]  [-V 严重级别]
   [-i 输入文件]             [-o 输出文件]
   [-p 打印统计信息]          [-b 出错时中止批处理]
   [-X[1] 禁用命令,[退出的同时显示警告]]
   [-O 使用旧 ISQL 行为禁用下列项]
       <EOF> 批处理
       自动调整控制台宽度
       宽消息
       默认错误级别为 -1 和 1
   [-? 显示语法摘要]

  

 扩展阅读: 使用SQLCMD在SQLServer执行多个脚本https://blog.csdn.net/dba_huangzj/article/details/8350829

    SQLCMD -E -dmaster -ic:\Scripts\create_db.sql

 

SQLCMD有一个很重要的命令::r,记住,SQLCMD是大小写敏感的。当:r发现正在运行SQL脚本,它会告诉SQLCMD把这个文件所引用的文件一并放入调用脚本中。这将告诉你,停止目前的单个查询。并重新调整查询,把应该关联的查询放到适当的位置。另外,使用:r命令在一个批处理中执行多个脚本,使得你可以定义一个单独的变量集,用于包含所有脚本,但是不包含GO终结符。

 

方案三: 暂无

 

············