更新老提示 创世西游重启计划/res/entities.bag]失败 我重启了下...

IBatis.Net项目数据库SqlServer迁移至Oracle经验
最近完成了一个(IBatis.Net+MVC)项目的数据库+代码迁移工作,可把我折腾得~~~ IBatis.Net是一个ORM框架,具体介绍可以问度娘。我之前没用ORM框架使用经验,所以这一路我不是走来的,而是爬出一个坑又掉入另外一个坑~~~ 项目原来用的是Sqlserver2008,现在要
& 最近完成了一个(IBatis.Net+MVC)项目的数据库+代码迁移工作,可把我折腾得~~~
&&IBatis.Net是一个ORM框架,具体介绍可以问度娘。我之前没用ORM框架使用经验,所以这一路我不是走来的,而是爬出一个坑又掉入另外一个坑~~~
&&项目原来用的是Sqlserver2008,现在要转到Oracle,所以我先完成数据迁移,然后是代码迁移。
&&数据库迁移
& 1、数据库***与配置
&&2、表结构迁移
&&&&& 1)用PowerDesigner创建一个PhysicalDataModel,DBMS选择Sqlserver2008;
&&&&& 2)选择DataBase-&Connect& ,连上Sqlserver数据库;
&&&&&&3)选择DataBase-&Update Model from DataBase&,获取Sqlserver数据库的表结构和视图,不获取约束关系等(会影响数据导入);
&&&&& 4)选择DataBase-&Change Current DBMS&,选择new DBMS为Oracle10gR2 ;
&&&&& 5)修改用户,将原始dbo,修改成我们oracle的方案名(用户名)。
&&&&& 90%的工作PowerDesigner已经为我完成了,剩下来就是修改字段类型和长度工作了。
&&&&& 修改字段类型和长度的部分,主要包括:
&&&&&&1)将转换后的NUMBER和INTEGER类型都改成NUMBER(10)。sqlserver自增序列转化后默认是NUMBER(6),这个肯定是不够的;
&&&&& 2)将转化后的FLOAT类型改为NUMBER(12,2);
&&&&&&3)将VARCHAR2长度都增加1倍,如sqlserver中的varchar(50),在oracle中就设置为varchar2(100)(注意:varchar(50)与varchar2(50)是有区别的)。
&&&&& 表字段类型和长度都修改完毕后,就是表的批量创建了。
& 3、数据导入
&&&&& 通过Sqlserver2008的DTS进行数据导入,数据导入失败一般有以下几种情况:
&&&&&&1)目标表中字段类型长度不够;
&&&&& 2)表之间存在约束关系,如先在子表中导入数据,而主表又没数据。
&&&&&DTS导入完毕后,没有返回到上一步功能,除非导入出错。这个太不人性化了,太不厚道了~~~
& 4、主要工作已经完成,剩下就是创建序列和存储过程的事情了。数据库这部分基本搞定。在类型字段长度上,我返工了1次-_-有100多张表,坑啊~~~
& 项目的代码迁移
&& 1、IBatis的配置文件修改
&&&&&&&providers.config文件中加入
description=
assemblyName=connectionClass=
commandClass=
parameterClass=
parameterDbTypeClass=
parameterDbTypeProperty=
dataAdapterClass=
commandBuilderClass=
usePositionalParameters=
useParameterPrefixInSql=
useParameterPrefixInParameter=
parameterPrefix=
allowMARS=/&
&&&&& 注意enable="true",并设置其余的provider节点 enable=&false&。
&&&&& SqlMap.config文件中的连接字符串设置
&database&
&provider name=/&
&dataSource name=connectionString=/&
&/database&
&&&&&&&这个oracleClient1.0的连接字符串找了很久,,开始一直以为是USER ID=用户名。
&&&2、Oracle客户端的***
&&&&& 开始一直以为Oracle9i精简版客户端就可以搞定,结果老提示:Unable to open connection to "Oracle, Microsoft provider V1.0.5000.0"。于是下载并***了oracle10gR2的客户端,还是不行。于是我在网上找了个ibatis.net+oracle的winform版demo,测试正常,可以确认不是配置文件和连接字符串的问题了。可将代码移植到web项目上就不行了,即使部署到IIS上并模拟32位运行(开发机是win7x64系统)也是出错。32位模式运行的时候会提示要求更高的客户端版本。难道是新***的客户端的时候在环境变量中新增加的Path没生效?于是抱抱试试看的心态,重启了电脑,终于老天是眷顾程序猿的~~~搞定。
&&&3、SQL语句代码修改
&&&&& 1)dbType=Int 都换成dbType=Number
&&&&& 2)遇到&等会破坏XML文件格式的符号,将其放在&![CDATA[&&]]&中
&&&&&&3)Oracle的自增序列
&insert id=parameterClass=&
&selectKey property=resultClass=type=&
SELECT SEQ_ACCOUNT_ID.NEXTVAL AS VALUE FROM DUAL
&/selectKey&
INSERT INTO Account (
, AccountNo
, MobileNo
, Password
) VALUES (
,#Name,dbType=VarChar#
, #AccountNo,dbType=VarChar#
, #MobileNo,dbType=VarChar#
, #Password,dbType=VarChar#
&&&&& 注意:自增序列的值,上面代码段中我用的是UserId,这个要与XML中向对应,我之前都用了ID,结果踩到坑了。
&resultMaps&
&resultMap id==&
&result property=column=dbType=/&
&&&&& 4)select top的实现&&&&
你最喜欢的

参考资料

 

随机推荐