ORACLE工程到SQL SERVER(2008)工程的转移

  这几天由于项目要求,需要把一个用oracle数据库的工程的数据转移到sql server(2008)上,经过几天的摸索研究,终于将整个工程及数据基本移植成功。整个项目的移植主要分两个部分:数据库移植及工程中代码的修改。
  数据库移植:
  数据库方面的移植由于sql server 2008的 “导入导出数据”工具就变得简单多了,我们可以利用它实现数据库表具体字段及数据库表数据的移植。不过在移植过程中,还是有些特殊字段处理起来会出现问题:
  时间字段:在oracle工程里,有个date类型的字段,插入数据的时候是标准的“yyyy-MM-dd hh:mm:ss”格式,程序也是按此格式处理的。在移植过程中,工具会默认将其设成date格式的。由于该格式精确到天,因此不符合我们的要求,还要自己手工改成smalldatetime(虽然这个类型精确到分,但是输出的格式也是我们要求的一致)。当然,具体的需求要具体修改,涉及到时间字段的话都要注意下,在生成过程中可通过编辑mapping来修改要生成sql server表的sql。
  大数据字段:oracle有blob和clob两个可存储如图片之类的大数据字段,在移植过程中,虽然数据结构可以正常生成,但是拷贝数据的时候就会出现问题。因此建议遇到此种字段,还是手动拷贝数据比较好。
  自增长形式:oracle的自增长是通过sequence实现的,而sql server则是通过id自增长的方式。因此,每个表拷贝过来后,都要设置其ID的标示种子和标示增量,一般都设置为1即可。
  代码修改:
  数据库移植过来后,相应地代码也做对应的修改。由于我的工程师通过hibernate连接数据库的,因此修改的地方基本都在配置文件里。
  首先要修改org.hibernate.dialect,将其设置为sql server 支持的配置(org.hibernate.dialect.SQLServerDialect)。其次,修改数据库的连接配置,同时新增sqlserver2008.jar的jar包。接着,在每个实体类对应的hibernate配置文件里,修改id的generator节点,将原来的<generator class="sequence">换成<generator class="identity" />。不过,如果原本是通过hibernate工具生成的配置文件,那么在生成的过程中改下参数就可以了。最后,工程中有的sql涉及到关键字或者关键语法的,这些也都要一一改正过来(如rownum改成top等)。
  至此,整个工程基本移植过来了,也能正常运行了。

猜你喜欢

转载自ping23-student-sina-com.iteye.com/blog/2002372