因?yàn)闃I(yè)務(wù)需求,現(xiàn)在需要把 Oracle 中幾千萬(wàn)的數(shù)據(jù)轉(zhuǎn)移到 Mongodb,如果通過(guò) PL/SQL Develop 導(dǎo)出,速度會(huì)比較慢,而且也很占用帶寬。發(fā)現(xiàn)一款軟件 sqluldr2 數(shù)據(jù)導(dǎo)出速度非???,我們后面演示通過(guò) sqluldr2 數(shù)據(jù)導(dǎo)出。
把oracle中的數(shù)據(jù)導(dǎo)入到csv格式,然后在mongodb中使用mongoimport工具導(dǎo)入到mongo數(shù)據(jù)庫(kù)中。
程序放在 oracle 的家目錄,第一次執(zhí)行的時(shí)候會(huì)報(bào)錯(cuò),它回去尋找libclntsh.so
這個(gè)庫(kù)文件,這個(gè)文件沒(méi)有在庫(kù)的環(huán)境變量里面,我們可以在oracle的安裝目錄里面找到,然后我們做個(gè)軟連接就可以了。
ln -s /u01/oracle/11.0.2.4/lib/libclntsh.so /usr/lib64
query參數(shù)如果整表導(dǎo)出,可以直接寫(xiě)表名,如果需要查詢運(yùn)算和where條件,query=“sql文本”,也可以把復(fù)雜sql寫(xiě)入到文本中由query調(diào)用。
默認(rèn)是逗號(hào)分隔符,通過(guò)field參數(shù)指定分隔符。
sqluldr2 testuser/testuser query=chen.tt1 field=";"
對(duì)于大表可以輸出到多個(gè)文件中,指定行數(shù)分割或者按照文件大小分割,例如:
sqluldr2 testuser/testuser@orcl query="select * from test_table2" file=test_table2_%B.txt batch=yes rows=500000
users參數(shù)可以省略不寫(xiě),和expdp username/passwd 方式一樣。
export ORACLE_SID=orclsqluldr2 testuser/testuser query="select * from test" file=test_table1.txt
sqluldr2 user=testuser/testuser@orcl query="select * from test" file=test_table1.txt
sqluldr2 user=testuser/testuser@x.x.x.x:1521/orcl query="select * from test" file=test_table1.txt
嚴(yán)格按照要求寫(xiě)語(yǔ)句,等號(hào)兩邊不能有空格。
四、實(shí)例
[oracle@cookie ~]$ ./sqluldr2linux64.bin user=gather/gapass@orcl query="dmp_user_center" head=yes file=/home/oracle/dmp.csv
1、我是整表導(dǎo)出,所以query只填寫(xiě)了表名。
2、head=yes 保留了表頭。
3、可以看到速度很快,一千萬(wàn)的數(shù)據(jù)一分鐘就導(dǎo)出來(lái)了,如果是新機(jī)器,我相信速度會(huì)更加快很多。
五、Mongodb數(shù)據(jù)導(dǎo)入
[root@mbasic ~]# mongoimport -udmp -p dmp --db dmp --collection dmp_user_center --type csv --headerline --ignoreBlanks --file dmp.csv
聯(lián)系客服