从 Oracle 导出数据
从 Oracle 导出现有数据通常是最便宜的迁移形式之一,但它可能涉及更多的手动输入,并且比使用迁移工具慢。
从 Oracle 导出数据的最流行工具之一是 Oracle SQL Developer。
Oracle SQL Developer 工具能够以多种格式从 Oracle 表中导出数据,例如 Excel、SQL 插入语句、SQL 加载器格式、HTML、XML、PDF、TEXT、固定文本等。
我们可以使用 SQL*Plus 来选择和格式化数据,然后将其假脱机到一个文件中。
此示例假脱机输出一个 CSV(逗号分隔值)文件,该文件可以通过 LOAD DATA INFILE 导入,也可以通过创建 CSV 表以供立即访问。
set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on spool oradata.txt select col1 || ',' || col2 || ',' || col3 from tab1 where col2 = 'XYZ'; spool off
如果我们不想手动输入逗号,也可以使用“set colsep”命令。
这节省了大量打字。
例子:
set colsep ',' set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on spool oradata.txt select col1, col2, col3 from tab1 where col2 = 'XYZ'; spool off
使用 PL/SQL
PL/SQL 的 UTL_FILE 包也可用于卸载数据。
例子:
declare fp utl_file.file_type; begin fp := utl_file.fopen('c:\oradata','tab1.txt','w'); utl_file.putf(fp, '%s, %sn', 'TextField', 55); utl_file.fclose(fp); end; /
迁移工具
有许多第三方工具,其中一些是开源的。
例如:
http://kettle.pentaho.com/
http://www.convert-in.com/ora2sql.htm
http://www.ispirer.com/products/oracle-to-mysql-migration
将数据导入 MySQL
一旦数据从 Oracle 导出到平面文件中,就可以将其加载到 MySQL 中。
此步骤继续,期望在 MySQL 数据库中创建一个相同的模式结构来接受数据。
将平面文件读入 MySQL 的最常用方法是使用 LOAD DATA INFILE 命令。
这是形式:
LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;
这将使用指定的分隔符将导出的数据从 'data.txt' 文件读取到表 'tbl_name' 中。
另一种可能更快加载的方法是使用 CSV 存储引擎功能。
这需要使用适当的架构和指定为 CSV 的存储引擎再次创建表。
例如:
CREATE TABLE mytable ( name varchar(50) NOT NULL, address varchar(100) NOT NULL, zipcode CHAR(5) NOT NULL ) ENGINE=CSV;
创建表后,.csv 文件将出现在与准备存储数据的表对应的数据目录中。
将导出的 CSV 文件复制到现有的“mytable.csv”数据文件上并执行 FLUSH TABLES 以更新表信息。
现在我们可以访问数据并且可以使用 INSERT INTO new_table ... SELECT 将数据从 CSV 表中快速读取到更适合生产系统的表中。
将完整模式从一个数据库迁移到另一个数据库的任务并不总是那么简单。
除了将数据从一台机器传输到另一台机器甚至不同地理位置的物理方面之外,一些更复杂的任务是在不同的数据类型、存储过程和两个数据库之间可能发生的简单不兼容的差异之间进行转换。
MySQL Migration Toolkit 最初是首选软件包,但已被 MySQL Workbench 取代。
但此时,MySQL Workbench 的迁移能力仍在开发中,甚至是针对主流商业数据库的完整迁移解决方案。