使用的工具:mysqldump,sqlldr,ftp,crontab
A服务器:MYSQL
B服务器:ORACLE
实现过程:
A服务器:MYSQL ==通过mysqdump或者select into output语句==>平面文件(.txt,.csv等)===ftp传输====>B服务器====>sqlldr 导入到ORACLE中
步骤:
A服务器:
1.导出建表语句
- mysqldump –uroot –p123456 -d test w_site --no-data >/home/test/w_site.sql
mysql的sql语法和oracle还是有区别的,所以将建表语法改成oracle语法。
修改建表语句
- CREATE TABLE w_site (
- id int,
- siteid int NOT NULL,
- siteurl varchar(200) default NULL,
- content varchar(800) default NULL,
- classid int default NULL,
- hits int default NULL,
- hits_to int default NULL,
- sortid int default '0',
- flag int default '0',
- webid int default '0',
- diantime date default NULL,
- createtime date default NULL,
- PRIMARY KEY (id,siteid)
- ) ;
然后建表在B服务器oracle中建表
2.导出test.w_site数据到平面文件w_site.txt中,有两种方式,推荐第一种,相对灵活,可以指定导出字段。
- select * from test.w_site into outfile '/home/test/w_site.txt' fields terminated by ',' optionally enclosed by '"' ;
- mysqldump -uroot -p123456 -t -T/home/test test w_site
导出的文件中可能包含\N,用下面的方法去掉
- cat w_site.txt |tr '\\N' ' '>w_site2.txt
B服务器:
w_site2.txt 和w_site.ctl放在/home/oracle下
1.登录A服务器的FTP
2.建立w_site表
- CREATE TABLE w_site (
- id int,
- siteid int NOT NULL,
- siteurl varchar(200) default NULL,
- content varchar(800) default NULL,
- classid int default NULL,
- hits int default NULL,
- hits_to int default NULL,
- sortid int default '0',
- flag int default '0',
- webid int default '0',
- diantime date default NULL,
- createtime date default NULL,
- PRIMARY KEY (id,siteid)
- ) ;
3.控制文件
- load data
- infile '/home/oracle/w_site2.txt'
- truncate into table download.w_site
- fields terminated by ","
- optionally enclosed by '"'
- (id,siteid,SITEURL,CONTENT,CLASSID,HITS,HITS_TO,SORTID,FLAG,WEBID,diantime date "yyyy-mm-dd hh24:mi:ss",CREATETIME date "yyyy-mm-dd hh24:mi:ss")
4.通过sqlldr方式导入到oracle
- sqlldr download/neverdown errors=100000 control='/home/oracle/w_site.ctl'
到此结束!
=============================================================================================
有可能每天都将mysql w_site表导入到oracle中,那么可以将这些命令放到shell脚本中;然后用crontab定期执行即可,注意时间差。
A服务器:
out.sh
- #! /bin/bash
- #先删除上次产生的w_site.txt文件
- rm -f /home/test/w_site.txt
- #导出数据
- mysql -uroot -p123456 <<EOF
- select * from test.w_site into outfile '/home/test/w_site.txt' fields terminated by ',' optionally enclosed by '"' ;
- quit
- EOF
B服务器:
in.sh
- sqlldr download/neverdown errors=100000 control='/home/oracle/w_site.ctl'
阅读(4864) | 评论(0) | 转发(0) |