从oracle导入到MongoDB-csv乱码-MongoDB3.2.x

来源:互联网 发布:.net域名代表什么 编辑:程序博客网 时间:2024/05/18 02:10

一、从Mongo官网下载企业包:

1、解压缩即可

mongodb-linux-x86_64-enterprise-rhel62-3.2.9.tgz

2、rpm的格式需要手工安装
mongodb-enterprise-server-3.2.9-1.el6.x86_64.rpm
mongodb-enterprise-mongos-3.2.9-1.el6.x86_64.rpm
mongodb-enterprise-shell-3.2.9-1.el6.x86_64.rpm
mongodb-enterprise-tools-3.2.9-1.el6.x86_64.rpm

二、这里采用第一种方式,解压缩,位置/opt

tar -zvf  mongodb-linux-x86_64-enterprise-rhel62-3.2.9.tgz

三、配置环境路径

1、修改mongo安装目录
mv mongodb-linux-x86_64-enterprise-rhel62-3.2.9  eemgdb

2、创建数据存储路径
mkdir -p /data/eedb

3、创建启动用户mongo
useradd mongo

4、数据目录所有者为mongo,其他用户不可访问
chown -R mongo /data/eedb
chmod 700 /data/eedb

5、安装所属用户为mongo
chown -R mongo /opt/eemgdb

6、配置好环境变量。
vi .bash_profile
export EEMGDB_HOME=/opt/eemgdb
export PATH=$EEMGDB_HOME/bin:$PATH
source .bash_profile

四、启动mongod并访问mongo

1、使用mongo用户来启动mongod,后台运行
#su - mongo
$numactl --interleave=all mongod --dbpath=/data/eedb/ &
2、登录mongo-shell
$mongo
MongoDB Enterprise >
3、关闭mongod
numactl --interleave=all mongod --dbpath=/data/eedb/ --shutdown

4、还可使用--rest参数启动Web界面方式启动mongod
#su - mongo
$ numactl --interleave=all mongod --dbpath=/data/eedb/ --rest &
2016-09-28T16:50:37.312+0800 I NETWORK  [websvr] admin web console waiting for connections on port 28017  --web访问端口
2016-09-28T16:50:37.312+0800 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/eedb/diagnostic.data'
2016-09-28T16:50:37.312+0800 I NETWORK  [HostnameCanonicalizationWorker] Starting hostname canonicalization worker
2016-09-28T16:50:37.313+0800 I NETWORK  [initandlisten] waiting for connections on port 27017                    --mongo服务端口
5、使用http web访问:http://10.8.37.xx:28017/

五、将oracle中数据导入到mongodb
1、从oracle导出(使用sqluldr2 或者使用plsql 导出为csv格式数据)
2、使用mongoimport 导入到mongodb
3、获取表中列名称
select COLUMN_NAME||',' from user_tab_columns where table_name='SCENE_xx_CASE'

导入到Mongo
$mongoimport --port 27017 -d test --file ~/scene_law_case.csv --type csv -fields ID,RECEPTION_NO,CASE_NO,CASE_TYPE,CASE_CATEGORY,CASE_NAME,CASE_LEVEL,
SCENE_REGIONALISM,SCENE_DETAIL,OCCURRENCE_DATE_FROM,OCCURRENCE_DATE_TO,EXPOSURE_PROCESS,VICTIM_INFO,
INIT_SERVER_NO,TRANSFER_DATE,REMARK,CRACKED_DATE,SECRECY,DELETE_FLAG,CREATE_USER,CREATE_DATETIME,
UPDATE_USER,UPDATE_DATETIME,RESERVER1,RESERVER2,RESERVER3,RESERVER4,RESERVER5,RESERVER6,
RESERVER7,RESERVER8,IFFLAG,REMARKDESC -c scene_xx_case

4、或者使用--headerline参数,就不需要明确指定csv中的列名称,csv默认第一行为表字段名称
mongoimport --port 27017 -d test --file ~/scene_xx_case.csv --type csv --headerline -c scene_xx_case
访问:
$mongo
进入到mongo shell
db.xxx.find()查看集合所有数据(xxx为集合名称)。相当于select * from xxx_tab

六、从Oralce库导出csv导入到MongoDB,解决乱码问题

1、打开pl/sql>工具>首选项

2、选择unix文件格式,字符编码为utf-8

3、使用pl/sql登录到oracle,导出指定表数据为csv格式。
[mongo@wfdb opt]$ file scene_inv.csv
scene_inv.csv: UTF-8 Unicode (with BOM) text, with very long lines, with CRLF, LF line terminators    ---UNIX格式
4、将csv文件到导入到mongo,将Xshell的字符编码修改为UTF-8

使用db.xxx.find()查看数据乱码主要问题在于:

1、导出csv文件为非unix格式的utf-8(平台匹配)

2、xshell字符编码也不是utf-8(字符编码匹配)

3、Mongo内部编码为utf-8(根本原因是要与Mongo内部字符编码相兼容)

经过实验,修正这些问题,就不会有乱码产生。











0 0
原创粉丝点击