NO.75 Infomix库向Oracle移植的一般步骤
2012-02-01 11:16
288 查看
[此部分内容为本人借鉴,仅对部分内容调整]
【工具准备】(版本仅为本人实际操作时使用,仅供参考)
DbVisualizer V6(提取informix数据)
PowerDesigner V12.5(informix数据文件向oracle转换)
PL.SQL.Developer.v7(向oracle中导数)
Oracle 10g(客户端即可)
UltraEdit(编辑informix数据文件中的非法格式及字符)
注:如果需要操作很大的文本文件,机器内存最好大一些,运行会比较顺畅。
【数据导出】
在DbVisualizer中建立informix连接(步骤从略)
数据库连接成功后,右单击“Data Base”,选择导出按钮,选择导出格式为“sql”,同时勾选下边的表结构、数据、索引、约束等;按需要我们分别导出一套含数据和一套不含数据的sql文件。
【数据库转换】
打开 PowerDesigner 12,File -> Reverse Engineer -> Database;
DBMS选择INFORMIX SQL 9.x(版本根据informix数据库实际版本而定)然后点击【确定】按钮;
选择要导入的数据结构sql文件,点击【确认】按钮,这样我们从informix数据库中导出的数据结构便导入到PowerDesigner中了;
数据结构导入后,我们进行数据库变更操作 Datebase -> Change Current DBMS;
在new DBMS里选择oracle 10g,点击确定后,PowerDesigner会将informix中导出的数据结构文件转换成oracle可用的语法;
数据结构转换完成后,我们要生成oracle可用的执行sql,并生成相应脚本文件Database -> Generate Database;
在【General】标签输入选择生成脚本路径及脚本文件名;
在【Options】标签中将所有物理选项(Physical Options)勾选框去掉,这样在导出文件中指定表空间的语句就会自动被去掉;
生成建库sql,将【Preview】标签下sql复制出来,做成sql文件。
【完善数据结构sql】
(以下批量替换是指:利用UltraEdit编辑器,CTRL+R,并且勾选只匹配整个词语替换。)
CHAR数据类型替换为VARCHAR2;
SMALLINT数据类型替换为NUMBER(20);
INTEGER数据类型替换为NUMBER(20);
DATETIME数据类型替换为DATE;
由于“level”为oracle保留字,需要调整字段名,比如将level字段批量替换为****Level;
Informix中自增序号字段转换之后会变成非法数值,通过正则表达式替换文档中非法数据类型,例如NUMBER(16,255)替换为NUMBER(16,2),搜索用到的正则表达式:”^(number(^)^(*^)^(,^)^(255)^)”;
建表sql中的“CONSTRAINT CHECK…”调整,举例如下:
改为:
核心数据结构中的dual表需要删除或者修改表名,因为dual为oracle系统表。
【在Oracle中导入数据结构及数据】
创建Oracle用户等操作从略。
Informix导出的sql文件完善;
由于informix中的null与oracle中null的定义存在差异,在导入时,需要根据执行情况,将一些在数据结构中定义为非空的字段暂时设置为可空:
Informix中非空的定义为:notnull,表示空值('')或非空值(not '')
Oracle中非空的定义为:notnull,表示非空值(not '')
则有类似操作
[以下是个人实践中碰到问题的处理]
1.脚本整理
1.1结构替换
将类似 NUMBER(10,255) 替换为 NUMBER(10)
将varchar 替换为 varchar2
1.2数据替换
将类似TO_DATE('2010-04-07 09:41:59', '%Y-%m-%d %H:%M:%S'中的
%Y-%m-%d %H:%M:%S 替换为 YYYY-MM-DD HH24:MI:SS
%Y-%m-%d 替换为 YYYY-MM-DD
将 & 替换为 '||'&'||'
2.在库上执行注意点
2.1 禁用所有外键
执行此语句生成的脚本即可
2.2 执行脚本:如果数据量较大,建议在服务器上执行SQL脚本。
2.3 启用所有外键
执行此语句生成的脚本即可
3.部分数据处理
由于部分数据值中尾部有多余空格,需要做类似清理,下例是一般基础数据表的清理:
【工具准备】(版本仅为本人实际操作时使用,仅供参考)
DbVisualizer V6(提取informix数据)
PowerDesigner V12.5(informix数据文件向oracle转换)
PL.SQL.Developer.v7(向oracle中导数)
Oracle 10g(客户端即可)
UltraEdit(编辑informix数据文件中的非法格式及字符)
注:如果需要操作很大的文本文件,机器内存最好大一些,运行会比较顺畅。
【数据导出】
在DbVisualizer中建立informix连接(步骤从略)
数据库连接成功后,右单击“Data Base”,选择导出按钮,选择导出格式为“sql”,同时勾选下边的表结构、数据、索引、约束等;按需要我们分别导出一套含数据和一套不含数据的sql文件。
【数据库转换】
打开 PowerDesigner 12,File -> Reverse Engineer -> Database;
DBMS选择INFORMIX SQL 9.x(版本根据informix数据库实际版本而定)然后点击【确定】按钮;
选择要导入的数据结构sql文件,点击【确认】按钮,这样我们从informix数据库中导出的数据结构便导入到PowerDesigner中了;
数据结构导入后,我们进行数据库变更操作 Datebase -> Change Current DBMS;
在new DBMS里选择oracle 10g,点击确定后,PowerDesigner会将informix中导出的数据结构文件转换成oracle可用的语法;
数据结构转换完成后,我们要生成oracle可用的执行sql,并生成相应脚本文件Database -> Generate Database;
在【General】标签输入选择生成脚本路径及脚本文件名;
在【Options】标签中将所有物理选项(Physical Options)勾选框去掉,这样在导出文件中指定表空间的语句就会自动被去掉;
生成建库sql,将【Preview】标签下sql复制出来,做成sql文件。
【完善数据结构sql】
(以下批量替换是指:利用UltraEdit编辑器,CTRL+R,并且勾选只匹配整个词语替换。)
CHAR数据类型替换为VARCHAR2;
SMALLINT数据类型替换为NUMBER(20);
INTEGER数据类型替换为NUMBER(20);
DATETIME数据类型替换为DATE;
由于“level”为oracle保留字,需要调整字段名,比如将level字段批量替换为****Level;
Informix中自增序号字段转换之后会变成非法数值,通过正则表达式替换文档中非法数据类型,例如NUMBER(16,255)替换为NUMBER(16,2),搜索用到的正则表达式:”^(number(^)^(*^)^(,^)^(255)^)”;
建表sql中的“CONSTRAINT CHECK…”调整,举例如下:
CONSTRAINT CHECK((endhour >= 0 ), constraint pk_** primary key (quotationno), constraint CKT_*** check (r <= 24), constraint Rule_11 check (24)
改为:
CONSTRAINT CKT_****_ENDHOUR CHECK((endhour >= 0 ), constraint pk_**** primary key (quotationno)
核心数据结构中的dual表需要删除或者修改表名,因为dual为oracle系统表。
【在Oracle中导入数据结构及数据】
创建Oracle用户等操作从略。
Informix导出的sql文件完善;
由于informix中的null与oracle中null的定义存在差异,在导入时,需要根据执行情况,将一些在数据结构中定义为非空的字段暂时设置为可空:
Informix中非空的定义为:notnull,表示空值('')或非空值(not '')
Oracle中非空的定义为:notnull,表示非空值(not '')
则有类似操作
alter table tablename modify columnname null;
[以下是个人实践中碰到问题的处理]
1.脚本整理
1.1结构替换
将类似 NUMBER(10,255) 替换为 NUMBER(10)
将varchar 替换为 varchar2
1.2数据替换
将类似TO_DATE('2010-04-07 09:41:59', '%Y-%m-%d %H:%M:%S'中的
%Y-%m-%d %H:%M:%S 替换为 YYYY-MM-DD HH24:MI:SS
%Y-%m-%d 替换为 YYYY-MM-DD
将 & 替换为 '||'&'||'
2.在库上执行注意点
2.1 禁用所有外键
执行此语句生成的脚本即可
select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R';
2.2 执行脚本:如果数据量较大,建议在服务器上执行SQL脚本。
2.3 启用所有外键
执行此语句生成的脚本即可
select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R';
3.部分数据处理
由于部分数据值中尾部有多余空格,需要做类似清理,下例是一般基础数据表的清理:
update tablename set columnname=replace(columnname,' ','') ;
相关文章推荐
- 移植开源库到嵌入式开发板的一般步骤
- ORACLE: 替换现有的temp表空间的一般步骤
- RHEL5 x64 安装 oracle 10g x64 的一般步骤
- 在Windows Server 下安装 Oracle 11G 的一般步骤
- [oracle]利用rman恢复控制文件的一般步骤
- Linux下安装Oracle的一般步骤
- 嵌入式软件的移植的一般步骤
- linux系统中设置oracle启停服务操作步骤
- oracle 9i内存配置为动态分配的步骤
- Oracle 自动备份详细步骤
- oracle 10g RAC重启步骤
- RT5350原厂SDK及AP移植步骤详解
- 一般导入数据到Oracle有几种方法!这可是经验之谈哦!
- 关于数据库由DB2移植到Oracle
- ORACLE 10G 使用全文索引步骤
- Oracle 学习步骤
- Oracle建立DBLINK的详细步骤记录
- 实现Oracle跨服务器的具体步骤
- linux 2.6.32.2内核移植(MINI2440)步骤
- 用Windows API进行串口编程的一般步骤及相关函数讲解