将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;
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
查看处理后的文件一共多少行:
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