起因是因为客户要把系统从阿里云迁移到本地服务器,阿里云上的数据库版本是MSSQL2016,客户提供的服务器是Server2008R2的,问题就来了,Server2008不支持2016版本,最后只能装的2012版本,那就需要从2016迁移到2012.

过程是一波三折,网上流传选择一下兼容模式,如下图

SQL server 2008社区版 升级2014 sql2008升级2016_数据库

然后再去备份,不知道别人是怎么成功的或者是他们自己也没有成功,我反正最后还是报错,低版本不支持高版本。

最后没本法只能采用生成架构跟数据的脚本来进行导入了

SQL server 2008社区版 升级2014 sql2008升级2016_数据库_02

好吧,好在我们数据量还不是很大,sql文件导出来也就不到1g。

貌似100M以上的sql文件在manager studio里面是会报内存不足的,解决的办法其实很简单,使用cmd下的osql命令,多大都不怕,唯一担心的只是时间长短而已。

osql –S localhost –d mydb –E –i D:\bf.sql  搞定

SQL server 2008社区版 升级2014 sql2008升级2016_sql_03

1、使用osql执行单个 Transact-SQL 语句

      在键入cmd与下面这一个类似的命令:

    osql -E -q "Transact-SQL statement"  

    例如:sql -E -q "use myDB select * from myTable"

    其中 -E 表示使用 Microsoft Windows NT 身份验证。

    也可以使用sa账户,具体可以看看上面的命令!

    而-q 表示运行 Transact-SQL 语句,但是在查询结束时不退出 osql。

    如要运行 Transact-SQL 语句并退出 osql,请使用 -Q 参数来代替 -q。

2、使用osql执行一个大脚本文件

     将该工具指向一个脚本文件,步骤:

    a.创建一个包含一批 Transact-SQL 语句的脚本文件(如 myfile.sql)。

    b.打开命令提示符,键入与下面类似的一个命令,然后按 ENTER 键:

    osql -E -i input_file

    其中input_file 是脚本文件及其完整路径。例如,如果脚本文件 myfile.sql 在 C:\users文件夹中,

    请将参数 myfile 替换为 C:\users\myfile.sql。

    该脚本文件的运行结果将出现在控制台窗口中。

    如果您想将运行结果定向到一个文件,请向上述命令中添加 -o output_file 参数。例如:

    osql -E -i input_file -o output_file

    其中output_file 是输出文件及其完整路径。

 

小插曲:过程中遇到无法对 数据库'UDS' 执行 删除,因为它正用于复制。 (.Net SqlClient Data Provider)

解决方案记录一下:

sp_removedbreplication 'UDS'

 UDS