将Oracle中的数据导入到Redis缓存中(SqlPlus+Shell)

将Oracle中的数据导入到Redis缓存中(SqlPlus+Shell)

 

准备导出spool文件(具体的配置自己查吧!):

set trimspool on

set linesize 120

set pagesize 2000

set newpage 1

set heading off

set term OFF

spool /sql/exp.txt

select 'ZADD',字段key,字段score(数字类型)||'.0',字段value from 表 where 各字段 is not null;

扫描二维码关注公众号,回复: 348049 查看本文章

spool off

将脚本保存至:/sql/test.sql

 

 

从数据库中导出数据:

sqlplus 账号/密码 @/sql/test.sql

 

安装tofrodos-1.7.13.tar.gz(这个文件可不好找,我放附件里了!)

tar -xvf tofrodos-1.7.13.tar.gz

cd tofrodos-1.7.13/src

make all

make BINDIR=/usr/local/bin MANDIR=/usr/local/man/ install

 

 

查看一下从oracle中导出的文件

head -n5 exp.txt

发现文件头部分有一个空行

tail -10f exp.txt

发现文件尾有导出数据行数的统计:6 rows selected.

 

删除所有空行,再删除最后一行中的统计信息6 rows selected.

sed '/^\s*$/d' exp.txt | sed '/selected/d' >redis_imp.txt

# The character class \s will match the whitespace characters <tab> and <space>.

 

查看处理后的文件一共多少行:

wc -l redis_imp.txt

6

一共就是导出的6行数据

 

使用dos2unix进行格式转换(直接覆盖原文件使用-o选项):

dos2unix -o redis_imp.txt

 

准备向redis数据库中导入数据(使用pipe):

cat redis_imp.txt  | redis-cli --pipe 

 

稍等片刻:

All data transferred. Waiting for the last reply...

Last reply received from server.

errors: 0, replies: 6

 

测试了一下,100万数据,没多大会就导入进去了!

 

你成功啦!

 

附上SQLPLUS的配置:

export ORACLE_SID=实例名

export ORACLE_BASE=/oracle/

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/Db_1

ln -s $ORACLE_HOME/bin/sqlplus /usr/bin

cd $ORACLE_HOME/network/admin

cp tnsnames.ora tnsnames20160101.ora

vi tnsnames.ora

添加:

TEST =  登陆的SID  

(DESCRIPTION =  

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.1)(PORT = 1521))  IP地址和端口号  

    (CONNECT_DATA =  

      (SERVER = DEDICATED)  

      (SERVICE_NAME = orcl)  要链接数据库名  

    )  

)  

 

:wq

 

设置一下配置文件权限,以便其它用户使用

chmod 755 tnsnames.ora

 

sqlplus 用户名/密码@登陆的SID

猜你喜欢

转载自crabdave.iteye.com/blog/2272027
今日推荐