迁移方式一(navicat)
这种迁移方式主要适合小表的一次性迁移,navicat的同步效率速度一般。
迁移开始之前,我们需要先安装navicat,在一台能访问Oracle源端和MySQL目标端的机器上安装即可。
安装完navicat之后,配置源端Oracle连接
配置目标端MySQL连接
开始进行迁移,选择工具--->数据传输
选择源端Oracle以及目标端MySQL
下一步选择要同步的表TEST,也可以选择同步全部表
传输模式选择自动,点下一步开始进行同步
传输同步完成,整个同步的效率还是较慢的,7.2W的数据,用了1分钟。
迁移方式二(navicat+sqluldr+load data infile)
这种迁移方式主要适合少量大表的一次性迁移,通过navicat工具进行Oracle-->MySQL表结构转化,再通过sqluldr将Oracle数据导出到本地文件,最后再通过load data infile将数据导入MySQL。
注:navicat工具虽然有同步数据的功能,但在实际的操作过程中,同步数据的效率以及成功率都很低,所以这里只作为数据字典转化的工具。
使用navicat工具进行表结构同步,步骤可以参考迁移方式一里面的操作,主要在数据传输同步时,选项里面只同步表结构,不创建记录。
点击开始,完成表结构同步
接下来进行数据的导出导入,先安装导出工具sqluldr
---解压安装包
unzip sqluldr2linux64.zip
./sqluldr2linux64.bin --help
---拷贝sqluldr2linux64.bin到$ORACLE_HOME的bin目录
cp -rp sqluldr2linux64.bin $ORACLE_HOME/bin
---重命名为sqluldr2.bin
mv sqluldr2linux64.bin sqluldr2.bin
测试安装成功
[oracle@rac19a ~]$ sqluldr2.bin --help
SQL*UnLoader: Fast Oracle Text Unloader (GZIP, Parallel), Release 4.0.1
(@) Copyright Lou Fangxin (AnySQL.net) 2004 - 2010, all rights reserved.
License: Free for non-commercial useage, else 100 USD per server.
Usage: SQLULDR2 keyword=value [,keyword=value,...]
Valid Keywords:
user = username/password@tnsname
sql = SQL file name
query = select statement
field = separator string between fields
record = separator string between records
rows = print progress for every given rows (default, 1000000)
file = output file name(default: uldrdata.txt)
log = log file name, prefix with + to append mode
fast = auto tuning the session level parameters(YES)
text = output type (MYSQL, CSV, MYSQLINS, ORACLEINS, FORM, SEARCH).
charset = character set name of the target database.
ncharset= national character set name of the target database.
parfile = read command option from parameter file
for field and record, you can use '0x' to specify hex character code,
\r=0x0d \n=0x0a |=0x7c ,=0x2c, \t=0x09, :=0x3a, #=0x23, "=0x22 '=0x27
使用sqluldr导出为文本类型为MYSQL
sqluldr2.bin user=test/oracle@pdb1 query="select * from test" text=MYSQL field=',' charset=AL32UTF8 head='NO' file=/home/oracle/test_001.csv log=test.log
导出过程很快,58w的数据,只需要7秒
0 rows exported at 2022-10-12 22:18:14, size 0 MB.
583680 rows exported at 2022-10-12 22:18:21, size 108 MB.
output file /home/oracle/test_001.csv closed at 583680 rows, size 108 MB.
再将从Oracle导出的MYSQL文件导入MySQL数据库
LOAD DATA INFILE '/tmp/test_001.csv' INTO TABLE test FIELDS TERMINATED BY ',' ENCLOSED BY '"';
导入过程很快,58w的数据,只需要13秒
test@mysql.sock 22:38: [db1]>LOAD DATA INFILE '/tmp/test_001.csv' INTO TABLE test FIELDS TERMINATED BY ',' ENCLOSED BY '"';
Query OK, 583680 rows affected (13.43 sec)
Records: 583680 Deleted: 0 Skipped: 0 Warnings: 0
整个数据同步过程还是较快的,但操作步骤较为繁琐,不太适合多表操作。