WebFuture系统如何从达梦数据库如何迁移到SQLServer
数据库从达梦迁移到SQLServer,一般情况下我们可以使用达梦自带的数据库迁移工具,选择 DM ==> SQLServer 按照提示一步一步来完成就可以了
但如果某些字段的数据类型是 VARCHAR(8188) ,使用达梦数据迁移工具直接迁移到SQLServer就会报错,提示:赋予 列'***'的大小(8188)超出了任意数据类型的最大允许值(8000)。
导致报错的原因是某些字段的数据类型在达梦下是 VARCHAR(8188) ,而SQLServer不支持 VARCHAR(8188) 这个格式,VARCHAR(8188) 在 SQLServer 对应的字段类型是 nvarchar(MAX)
因此,我们需要把数据库从达梦迁移到 SQLServer 可以通过导出SQL文件,再用SQL文件导入到 SQLServer。由于达梦数据库生成的SQL文件只适用于达梦数据库本身,我们还需要进行一番修改,下面是达梦迁移到SQLServer的具体步骤:
一、导出SQL数据文件
打开DM数据迁移工具,新建迁移任务
填写迁移任务名称,随便命名,点击确认,下一步
迁移方式这里,选择 DM ==> SQL
输入数据源的账号 信息
“文件”这里要注意,我们需要把建数据表和导入数据的sql分开导出,后面我们只用到数据导入的sql,所以,这里选择“所有数据脚本使用一个单独的文件”,文件的命名按照自己喜好来写就好了,第一个是创建数据表的sql文件名,第二个是导入数据的sql文件名,文件编码这个看时间情况来选就可以了。
选择需要导出的数据库
选择所以数据表,然后,下一步,下一步,直到导出完成
二、修改sql文件,适合SQLServer使用
由于达梦数据迁移工具生成的sql文件,只适用于达梦数据库的导入,直接在SQLServer上使用会报错的,所以我们要修改下sql语句的语法,使其适合SQLServer使用。
我们通过编辑器打开刚才导出的数据文件,注意:打开文档时要注意当前文档显示的编码格式,要改为你前面所生成的sql文件的编码格式,不修改格式会出现乱码的现象
通过以以下正则查找并替换,注意:要开启查找的正则条件
/* 替换成 SQLServer 可执行的sql语句的搜索正则 */ (insert into|SET IDENTITY_INSERT)[\s*?]"(\w*?)"\."(\w*?)" /* 替换为以下内容 */ $1 [dbo].[$3]
三、创建一个空的数据库
这里的做法有点像当时的SA升级到WT系统,创建一个空白的数据库,然后通过数据库迁移工具把数据库迁移到达梦数据库上,这里刚好反过来,在SQLServer上创建一个空白的数据库,然后把数据重达梦数据库迁移到SQLServer。因为目前没有对应的数据迁移工具,只能通过生成sql文件导入数据的放式。
首先我们创建一个空白的数据库,由于 WF 11.0 以后已经完善了网站的安装流程,无需像 WF 10.0 那样通过命令行代码创建空数据库了。
按照正常的网站搭建流程,搭建一个测试站,把 App_Data目录下的 IndexData 删除或改名(建议改名)
然后执行网站的安装流程,这里的“导入默认数据库”前面的钩去掉
执行到配置文件设置这一步就可以了,这里的信息不用填写
这时我们看下数据库,数据表已经创建成功了,由于我们需要的是一个空的数据库,里面不能有一点数据,通过下面的sql语句查找下哪些数据表里面有数据,如果有数据需要清除掉
SELECT a.name, b.rows FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE (a.type = 'u') AND (b.indid IN (0, 1)) and rows > 0
虽然是不导入默认数据,但还是有几个数据表带数据,通过以下代码把这几个数据表的数据删除(重点注意当前操作的数据库是否正确,如果操作失误可能造成不可挽回的损失!)
DELETE FROM 表名称
根据刚才查询得出的数据表名称进行清除
四、导入数据
由于某些表添加外键约束,所以在数据导入时会有约束,如果数据导入的顺序错了就会报错。但数据导入文件里的数据是工具生成的,数据导入顺序都是按照数据库名称进行排序的,无法根据相关外键约束的条件进行导入,如果手工调整工作量太大,不现实,也不科学~
所以,我们需要先把各个数据表的外键约束临时禁用下,通过下面sql查询语列出当前数据所有的表名称,同时生成相关的外键约束禁用语句
SELECT 'alter table ' + a.name + ' NOCHECK constraint all' FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE (a.type = 'u') AND (b.indid IN (0, 1))
把所有数据表禁用外键约束的查询语句拷贝出来,再执行
通过“文件 - 打开 - 文件”打开上面修改好的sql文件,点击“执行”把数据导入
数据导入完成后,还有最后一步,把刚才禁用的外键约束重新启用,通过以下sql语句生成启用外键约束的查询语句,步骤跟上面禁用外键约束一样
SELECT 'alter table ' + a.name + ' CHECK constraint all' FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE (a.type = 'u') AND (b.indid IN (0, 1))
用户登录
还没有账号?
立即注册