SQL Server05迁移Oracle 10g记录
遇到的问题记录:
1.用什么工具进行数据库迁移?MSSQL DTS进行数据迁移,Pwoer Designer据说不好用,进行正反向工程中间会出问题,而且数据类型对应不好。
2.迁移过程中发现目标数据库表空间不足的情况。在创建表空间的时候没有进行表空间进行具体的编辑,在根据网上的设置进行限定之后表空间不足情况解决。
3.迁移过程中出现若干错误,主要错误有:1)原来数据库中存放了坏数据,比如说该项不为空,但是之前有空数据,在迁移过程中就回报错。2)数据格式不同导致,比如说在MSSQL中nVchar可以存放4000个字符,但是这个类型对应到Oracle中是nVChar2类型只能存放2000个字符,这就需要更改数据库中字段长度限制。
4.MSSQL的DTS工具只能导出表和数据,如果是视图的话它会在oracle中建一个表来代替,这显然不是我们想要的,因此需要在Oracle中自己重新创建视图,因为视图不多而且是用语句创建,这一步不会花太久时间。在网上查询说没有哪个工具可以很好的对视图进行迁移。
5.在Oracle中创建视图出错,因为创建视图是需要dba权限的,而我最初只给用户了resource和connnect权限,因此还得给权限之后才能创建视图。创建视图的过程中需要对视图语句进行改造,比如说MSSQL中的dbo.User AS u这种语句就需要去掉AS,等等。
6.在创建视图的过程中发现,原来MSSQL的创建语句不好用了,因为Oracle在迁移的过程中,把非全大写的表名和表下面的列名都添加了双引号,类似于原来MSSQL中的表名dbo.ApplyUers表会变成"ApplyUser"这种样子,这样的不好首先就是在查询的时候要加"",其次必须严格按照"ApplyUser"的大小写来进行查询,如果写成"applyUser"查询是不行的,这给我们带来了极大的不方便。怎么解决这个问题呢,最简单的方法就是把所有的表名和列名都更改为大写即可。网上有人用Oracle的函数写过,但是鉴于俺才疏学浅,对Oracle函数实在是还看不懂,就只能自己写个工具来进行更改。工具写好后,更改名字成功。
7.更改完名字,记着要把数据重新写一下,因为名字都变了,视图里面也得重新写。
至此,MSSQL中的数据库就完整得迁移到Oracle中了,我们的数据库比较简单,只有表和视图,因此对存储过程,触发器之类的没有接触,不知道迁移起来难不难。
总结一下,期间还是走了弯路的:
开始的时候对初始建立的表空间死抓住不放,因为这个表空间创建的就有问题,因此迁移数据的时候问题非常之多让人无从下手。因为空间不足,重新按照网上的教程创建表空间,再创建用户进行迁移的时候,迁移的问题少了很多,所以说表空间在建立的时候就必须完美呀。
之后的比较大的问题就是迁移之后发现大小写的问题。Oracle中在创建新的数据库表的时候,会强制使表名变成大写,如果不想让表名变成大写就要给表名加上一个双引号,这么做的后果就是你必须在SQL语句中给这个表加上双引号,而且必须严格按照该表名的大小写进行查询。列名和表名是一样的情况。所以本着用起来舒服,我们还是把表名和列名都改成大写比较好。可是怎么修改呢,网上有人用Oracle的upper函数实现,我没用过就没有贸然使用。最终还是自己写了一个工具对表名和列名进行了修改。
最大的弯路在于创建视图了。建视图用的SQL语句在第一次迁移完数据后,就改了一次。发现表名不是大写,把表名改成大写后又改了一次。在第二天对表名列名全更改之后又改了一次。-_-!!其实是我着急了,完全没有必要这么着急弄视图,第一天我已经发现了表名和列名大写的问题,但是当时想大不了就改程序中的SQL语句就行了,后来发现这是一个非常巨大的工作而且要修改的地方太多了。没办法又回头把数据库中的表列名都改成大写。下次一定要考虑好了再做事。

浙公网安备 33010602011771号