MSSQL数据库高版本迁移到低版本
起因是因为客户要把系统从阿里云迁移到本地服务器,阿里云上的数据库版本是MSSQL2016,客户提供的服务器是Server2008R2的,问题就来了,Server2008不支持2016版本,最后只能装的2012版本,那就需要从2016迁移到2012.
过程是一波三折,网上流传选择一下兼容模式,如下图
然后再去备份,不知道别人是怎么成功的或者是他们自己也没有成功,我反正最后还是报错,低版本不支持高版本。
最后没本法只能采用生成架构跟数据的脚本来进行导入了
好吧,好在我们数据量还不是很大,sql文件导出来也就不到1g。
貌似100M以上的sql文件在manager studio里面是会报内存不足的,解决的办法其实很简单,使用cmd下的osql命令,多大都不怕,唯一担心的只是时间长短而已。
osql –S localhost –d mydb –E –i D:\bf.sql 搞定
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'
DROP DATABASE UDS