如何转换SQL Server 2008数据库到SQL Server 2005

简介:
+关注继续查看

    背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档的时 候,坑爹的事情发生了,居然发现有两三个工厂使用的还是SQL SERVER 2005数据库,要命的是这几个工厂没有SQL SERVER 2008的数据库服务器。而其中两个正准备做服务器的迁移升级,但是IBM的存储还没有到,没办法,这么”反人类,阻挡历史进程“的事情就发生了,我以为 这种小概率的事情永远都不会发生在我身上。好在这个数据库不大,才200M。于是才有下面文章的总结。

        由于SQL Server 2008数据库转换到SQL Server 2005上,是不能通过备份还原、分离附加等操作来实现的,只能通过数据的导入导出实现。方法大致有几种:

    1:通过Generate Scripts(包括数据) ,这个方法呢,如果对于很小的数据库,倒是一个非常方便的方法。注意前提是数据库很小,如果数据库很大,那你千万别选这个方法,SQL导入数据的性能会折磨死你。

    2:通过Generate Scripts(生成表、视图等),然后使用SQL Server Import and Export Tool导入数据

    3: Red Gate SQL Compare 工具

     关于性能对比呢,博客园这位老兄的这篇文章"不同版本的SQL Server之间数据导出导入的方法及性能比较 " 已经做了详细的测试,下面只是介绍、总结转换SQL Server 2008数据库到SQL Server 2005的操作步骤。

Generate Scripts

Step 1:  单击某个需要转换的数据库,然后选择任务(Tasks)——生成脚本(Generate Scripts)

clipboard

Step 2: 弹出生成脚本指导界面

clipboard[1]

Step 3:选择需要导出的数据库对象,有导出整个数据库对象和选择指定数据库对象两个选项

clipboard[2]

Step 4:  设置生成脚本选项,例如指定脚本位置,脚本文件的编码等等选择,最重要的是高级选项”Advanced“

clipboard[3]

如下所示,最好在”Script for Server Version“ 里面选择”SQL Server 2005“等选项

clipboard[4]

测试服务器这个版本里面没有'Script Data”(生成数据的脚本)选项,如下所示,如果你要通过脚本插入数据,那么就必须选择这个选项。

clipboard[5]

Step 5: Summray your selections, 点击Next继续

clipboard[6]

Step 6:  执行过程。完成后即生成了相应脚本文件。

clipboard[7]

将生成的脚本在另外一台测试服务器执行,创建相应的数据库以及数据库对象。然后点击”SQL Server Import and Export“工具进行数据导入,操作步骤如下所示:

SQL Server Import and Export

Step 1: 欢迎界面,点击Next跳过。

clipboard[8]

Step 2: 选择数据源(Data Source),我们需要选择“SQL Server Native Client 10”, 输入身份认证信息,我选择Windows 身份认证。选择

需要导出数据的数据库,例如,我选择一个测试数据库TSL

clipboard[9]

clipboard[10]

Step 3:配置需要导入的Destination,选择对应的服务器和数据库

clipboard[11]

Step 4:两个选择,选项1是用于整个表或视图导入导出,选项2用于书写查询SQL或导入导出

clipboard[12]

Step 5: 勾选你需要导数的脚本,单击Source旁边的选项,即可选择全部对象。有时候需要编辑“Edit Mappings"选项,勾选”Enable identity Insert“,否则会导致后面导入导出报错

clipboard[13]

Step 6: 勾选立即执行,点击Next执行下一步

clipboard[14]

Step 7 : 执行过程,需要检查是否执行成功,查看相关出错信息。

clipboard[15]

执行完成后,然后在测试服务器将该数据库备份压缩后,通过FTP上传到各个工厂,进行还原。关于 Red Gate SQL Compare的操作,也非常方便简单,由于测试过程中没有截图,就此略过。

    由于测试用的数据库比较小,不知道比较大的数据库,例如几百G的数据,操作起来是否会遇到性能等杂七杂八的问题。不过相信很多人是不会遇到这么奇葩的案例的。例如使用导入导出工具,其实就会遇到一些小问题(以前遇到的):

   1:在验证时出现错误,错误信息如下所示:

clipboard[16]

 

- Validating (Error)

       Messages

         * Error 0xc02020f4: Data Flow Task 1: The column "xxxx" cannot be processed because more than one code page (936 and 1252) are specified for it.

          (SQL Server Import and Export Wizard)

        * Error 0xc02020f4: Data Flow Task 1: The column "xxxx" cannot be processed because more than one code page (936 and 1252) are specified for it.

          (SQL Server Import and Export Wizard)

    解决:检查你源数据库和目标数据库的排序规则是否不一致,如果不一致,就会出现大量上面错误。

  2:在验证时出现下面错误信息

- Validating (Error)

            Messages

                  * Error 0xc0202049: Data Flow Task 1: Failure inserting into the read-only column "xxxxx".

                  (SQL Server Import and Export Wizard)

                  * Error 0xc0202045: Data Flow Task 1: Column metadata validation failed.

                  (SQL Server Import and Export Wizard)

    解决:出现这个错误,是因为这一列是自动增长,需要在”Edite Mappings" 选项里面勾选“Enable Identity Insert”选项,如果数据库里面有大量这类列,是个头疼的问题。

相关实践学习
使用交互方式创建数据表
本次实验主要介绍如何在RDS-SQLServer数据库中使用交互方式创建数据表。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
小数转成百分数,日期字符串互相转换,这几个SQL问题该如何解决?(下)
SQL在使用过程中,经常会遇到一些奇奇怪怪的小问题,今天给大家总结一下常见的几个问题该如何处理。
小数转成百分数,日期字符串互相转换,这几个SQL问题该如何解决?(上)
SQL在使用过程中,经常会遇到一些奇奇怪怪的小问题,今天给大家总结一下常见的几个问题该如何处理。
小数转成百分数,日期字符串互相转换,这几个SQL问题该如何解决?(上)
|
SQL Java 数据库
可将数据库表字段转换为Java代码驼峰字段SQL的实现
经常要将数据库表字段映射到实体对象,除了逆向工程,还可以通过SQL的方式将表字段列转换为Java代码驼峰字段。
1080 0
|
SQL Java 数据库连接
util包下的Date与sql包下的时间类型之间的转换|学习笔记
快速学习util包下的Date与sql包下的时间类型之间的转换
|
SQL JSON 数据处理
DLA SQL技巧:行、列转换和JSON数据列展开
1. 简介 在数据库SQL处理中,常常有行转列(Pivot)和列转行(Unpivot)的数据处理需求。本文以示例说明在Data Lake Analytics(https://www.aliyun.com/product/datalakeanalytics)中,如何使用SQL的一些技巧,达到行转列(Pivot)和列转行(Unpivot)的目的。
4311 0
|
SQL 关系型数据库 PostgreSQL
PostgreSQL datediff 日期间隔(单位转换)兼容SQL用法
标签 PostgreSQL , datediff 背景 使用datediff,对时间或日期相减,得到的间隔,转换为目标单位(日、月、季度、年、小时、秒。。。等)的数值。 DATEDIFF ( datepart, {date|timestamp}, {date|timestamp} ) 周...
12969 0
|
SQL
SQL SERVER-时间戳(timestamp)与时间格式(datetime)互相转换
原文:SQL SERVER-时间戳(timestamp)与时间格式(datetime)互相转换 SQL里面有个DATEADD的函数。时间戳就是一个从1970-01-01 08:00:00到时间的相隔的秒数。
13478 0
|
SQL Go 存储
Lambda 转换 SQL ORM 工具 SqlRepoEx
主要解决: 1、解决拼接语句,使用where以外方法时,缺少Where子句时的错误; 2、解决多条件拼接Where; 3、增加操作时,不再受限于实例必需有Id的自增自段 Example IRepository repository = repositoryFactory.
1942 0
|
SQL
SQL 时间戳转换为日期
原文:SQL 时间戳转换为日期 DATEADD(s, Timestamp + 8*3600, '1970-01-01 00:00:00') 其中Timestamp为10位的时间戳,+8*3600是获取中国北京时间(东八区)
2871 0
推荐文章
更多