Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2882375
  • 博文数量: 200
  • 博客积分: 2413
  • 博客等级: 大尉
  • 技术积分: 3067
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-01 22:07
文章分类

全部博文(200)

文章存档

2018年(2)

2017年(8)

2016年(35)

2015年(14)

2014年(20)

2013年(24)

2012年(53)

2011年(44)

分类: Oracle

2012-03-03 19:20:56

使用的工具mysqldump,sqlldr,ftp,crontab

A服务器:MYSQL
B
服务器
:ORACLE

实现过程
:
A
服务器:MYSQL ==通过mysqdump或者select into output语句==>平面文件(.txt,.csv)===ftp传输====>B服务器====>sqlldr 导入到ORACLE

步骤:

A服务器:
1.
导出建表语句

  1. mysqldump –uroot –p123456 -d test w_site --no-data >/home/test/w_site.sql

mysqlsql语法和oracle还是有区别的,所以将建表语法改成oracle语法。
修改建表语句

  1. CREATE TABLE w_site (
  2.   id int,
  3.   siteid int NOT NULL,
  4.   siteurl varchar(200) default NULL,
  5.   content varchar(800) default NULL,
  6.   classid int default NULL,
  7.   hits int default NULL,
  8.   hits_to int default NULL,
  9.   sortid int default '0',
  10.   flag int default '0',
  11.   webid int default '0',
  12.   diantime date default NULL,
  13.   createtime date default NULL,
  14.   PRIMARY KEY (id,siteid)
  15. ) ;

然后建表在B服务器oracle中建表


 

2.导出test.w_site数据到平面文件w_site.txt中,有两种方式,推荐第一种,相对灵活,可以指定导出字段。

  1. select * from test.w_site into outfile '/home/test/w_site.txt' fields terminated by ',' optionally enclosed by '"' ;    

  2. mysqldump -uroot -p123456 -t -T/home/test test w_site

 

导出的文件中可能包含\N,用下面的方法去掉

  1. cat w_site.txt |tr '\\N' ' '>w_site2.txt


 

B服务器:
w_site2.txt
w_site.ctl放在/home/oracle

 

1.登录A服务器的FTP

  1. get w_site2.txt

2.建立w_site

  1. CREATE TABLE w_site (
  2.   id int,
  3.   siteid int NOT NULL,
  4.   siteurl varchar(200) default NULL,
  5.   content varchar(800) default NULL,
  6.   classid int default NULL,
  7.   hits int default NULL,
  8.   hits_to int default NULL,
  9.   sortid int default '0',
  10.   flag int default '0',
  11.   webid int default '0',
  12.   diantime date default NULL,
  13.   createtime date default NULL,
  14.   PRIMARY KEY (id,siteid)
  15. ) ;

3.控制文件

  1. load data
  2. infile '/home/oracle/w_site2.txt'
  3. truncate into table download.w_site
  4. fields terminated by ","
  5. optionally enclosed by '"'
  6. (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

  1. sqlldr download/neverdown errors=100000 control='/home/oracle/w_site.ctl'

 

到此结束!

 

 

=============================================================================================

有可能每天都将mysql w_site表导入到oracle,那么可以将这些命令放到shell脚本中;然后用crontab定期执行即可,注意时间差。

 

A服务器:

out.sh

  1. #! /bin/bash
  2. #先删除上次产生的w_site.txt文件
  3. rm -f /home/test/w_site.txt
  4. #导出数据
  5. mysql -uroot -p123456 <<EOF
  6. select * from test.w_site into outfile '/home/test/w_site.txt' fields terminated by ',' optionally enclosed by '"' ;    
  7. quit
  8. EOF

 

B服务器:

in.sh

  1. sqlldr download/neverdown errors=100000 control='/home/oracle/w_site.ctl'


 

阅读(4871) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~