PHP将数据从Oracle向Mysql数据迁移实例2011-09-25 blogspot John Meng为什么要迁移?首先从运营成本考虑,用Mysql可以节约不少的费用。另一方面,Mysql的稳定性及功能不断地提高与 增强,基本上可以满足客户的需求,如支持多 节点部署,数据分区等。还有就是Mysql使用方便,比 Oracle简单易用。故客户就要求将已有的Oracle数据表与内容迁移到Mysql来。为什么要自己写脚本?迁移的表与数据都蛮多的,有几百张表。因此手工完成不太方便。也尝试了一些免费的迁移工具, 如:MySQLMigrationTool等,发现转移 的字段类型不太符合要求(可能是原来的Oracle表设计得不太好), 会导致数据不太完整,觉得不是太可靠,所以决定自己写迁移脚本放心一些,有不符合要求的也可立即调 整,所以就开始吧。所用到的技术支持1.php52.php oci83.mysql 5.1迁移表结构获取schema所有表用以下语句可以从Oracle中获得schema中所有的表名
SELECT table_name FROM user_tables然后可以遍历所有表向mysql进行表结构的创建与数据的迁移工作。获取单个表的所有字段与类型用以下语句可以从oracle中获得单个表的所有字段与类型
SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_DEFAULT
FROM USER_TAB_COLUMNS WHERE TABLE_NAME = UPPER("{$table_name}") ORDER BY column_id ASC这样可以得知表字段的名称,类型,长度,是否允许为空,默认值。因为oracle与mysql的字段类型并 不完全兼容,故需要建立字段类型的对应关系表。
| Oracle | Mysql |
|---|
| number(<11)> | int |
| number(>11) | bigint |
| varchar | varchar |
| varchar2(<255)> | varchar |
| varchar2(>255) | text |
| clob | text |
| date | date |