oracle 数据导入和导出

数据入库

  • (直接用PLSQL)

1、建表

2、打开“工具”--点击“文本导入”

3、进入文本导入后,在“来自文本文件”侧加载文件

oracle 数据导入和导出

  1. 在“到Oracle”侧选择已经建好的表

   oracle 数据导入和导出

点击右侧的字段,与你TXT文本相对应

oracle 数据导入和导出

  1. 点击下方“导入”完成数据入库
  • 数据量大(用Oracle服务器)

对于数据量少于100万行的导入(select ... for update)和导出(select)最好用PLSQL查询,然后复制粘贴。

以下方式适合数据量较大(一般是多于100万行的数据)的导入导出,导入导出的数据是txt文本的格式。这种方式一般适合GB级别以及以下的数据文件,否则速度太慢。

数据的导入和导出都可以指定字符集。如果不指定字符集,导入(导出)完以后可以用iconv命令转码:

nohup iconv -f "gbk" -t "utf-8" wsd_201710_lyp.txt>wsd_201710.txt &

文件太大,邮件发不了的时候,可以用Linux上面的命令分割成多个文件:

split -l 1000000 /data02/five/five.txt -d -a 4 five.txt

1准备表已经建好

--登录服务器

[[email protected] zhanglongkun]$ su - oracle

输入密码

[[email protected] ~]$ cd /data02/zhanglongkun/jiangxi2I_innet/

 

--编辑控制文件XXX.CTL

[[email protected] jiangxi2I_innet]$ cat upload.ctl

load data

characterset utf8 --中文字符集:ZHS16GBK

infile '/data02/jiangxi2I_innet/1701-1712.txt'

append into table TEMP_ZLK_JX2IINNET_IN

fields terminated by "," --分割符

TRAILING NULLCOLS

(CARDID,   --表中对应的行

DEVICE_NUMBER)

 

2入库

[[email protected]_innet]$ sqlldr ZBA_CZC/[email protected]=/data02/jiangxi2I_innet/upload.ctl  log=/data02/jiangxi2I_innet/upload.log rows=1000000 direct=true skip_index_maintenance=TRUE

3、核查

--查看字体显示是否正确

select * from TEMP_ZLK_JX2IINNET_IN

 

--查看是否都导入

select count(*) from TEMP_ZLK_JX2IINNET_IN

 

[[email protected] jiangxi2I_innet]$ wc -l 1701-1712.txt

1885158 1701-1712.txt

数据出库

1、数据量小

直接在PLSQL中导出

 

 

2、数据量大

在服务器中编写.sh文件

#!/bin/sh

for prov_id in `cat prov_id.txt`

do

Sqluldr user=ZBA_C/[email protected]

field="||"

charset=ZHS16GBK

log=/bonc/bca/jc_fw/ljt/qrqm/yyyy_${prov_id}.log  file=/bonc/bca/jc_fw/ljt/qrqm/yyyyy_${prov_id}.txt  

query="SELECT DEVICE_NUMBER,CASE      

   and prov_id = '"${prov_id}"'--传参

"

Done

运行命令   nohup sh acpt.sh  > 201802_.log &

不知道什么原因我提取的非常慢后来的做法是,不封装脚本直接在命令界面输入命令

sqluldr

user=ZBA_CZC/[email protected]   --用户和密码

field="||"                                            --分隔符(可以自己定义)

charset=ZHS16GBK                        --编码

log=/bonc/bca/jc_fw/ljt/qrqm/yyyyyy_all.log  file=/bonc/bca/jc_fw/ljt/qrqm/yyyyy_all.txt  查询文件存放位置

 query="SELECT * FROM TEMP_LJT_DN_NET_ALL "  查询语句

分隔符 \r=0x0d

           \n=0x0a

            |=0x7c

            ,=0x2c

            \t=0x09

            :=0x3a

           #=0x23

           "=0x22 

          '=0x27