oracle导入导出数据

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.如何将oracle数据导出到文本文件(.txt):

通常我们在不同的表间进行数据复制或迁移会用到以下几种方式:

1)用pl/sql developer导出insert脚本,批量执行

2)建立数据库间的DBLINK,用create table A as select * from A@dblink; 或insert into A select * from A@dblink

3)利用exp,expdp 再imp,impdp 实现

4)Sql Loader(sqlldr)导入数据

第一种方式:insert 时数据库会记录重作日志,产生大量的redo,通常需要在建表是不记录日志文件,不产生redo 来提高insert into 的性能:

create table brian_t(id number(10),

name varchar2(50),

career varchar2(50),

locate varchar2(100)

)nologging;

Insert /* +append */ into brian_t values (111,’brian’,’IT’,’dalian’);

2.Oracle Sql Loader的用法:

Sql Loader导入的数据文件可以是CSV 文件或者以其他分割符分隔的,数据文件的导出方式:

1)用PL/SQL Developer 或者Toad 导出

2)用SQL *Plus 的spool 格式化产出

3)UTL_FILE 包生成

4)用DCBA的工具ociuldr转储数据到数据文件中

5)oracle erp里利用FORM的text_io导出数据到txt文件

(一)用SQL *Plus 的spool 格式化产出

a)建立导出数据的SQL

conn ODS/ODS@syyb165

set echo off

set term off

set linesize 1000

set pagesize 0

set feedback off

set heading off

set trimspool on

spool E:\ab01.txt

select pany_id || '|' || a.insur_kind || '|' ||

to_char(a.insur_date, 'yyyy-mm-dd hh24:mi:ss') || '|' ||

a.insur_status || '|'||to_char(pany_first_insur_date,'yyyy-mm-dd hh24:mi:ss')||'|'||

a.proportion_type ||'|'||a.via_person||'|'||to_char(a.via_date,'yyyy-mm-dd hh24:mi:ss')

from ods_unit_insur_t a;

spool off

/

b)用SQL Loader导入数据文件

建立控制文件exp_data.ctl如下:

LOAD DATA

INFILE 'E:\ab02.txt'

replace INTO TABLE scott.AB02

FIELDS TERMINATED BY"|" OPTIONALLY ENCLOSED BY'"'

Trailing nullcols

(AAB001,AAE140,AAB050 date 'yyyy-mm-dd hh24:mi:ss',AAB051,AAB131 date 'yyyy-mm-dd

hh24:mi:ss',AAA040,AAE011,AAE036 date 'yyyy-mm-dd hh24:mi:ss')

执行:sqlldr scott/tiger@orcl control=E:\exp_data.ctl log=E:\exp_data.log

建立一个控制文件 users.ctl,内容如下:

01.OPTIONS(skip=1,rows=128) --sqlldr命令显示的选项可以写到这里边来,skip=1用来跳过数据中的第一行

02.LOAD DATA

03.INFILE "users_data.csv" --指定外部数据文件,可以写多个INFILE "another_data_file.csv" 指定多个数据文件

04.--这里还可以使用BADFILE、DISCARDFILE 来指定坏数据和丢弃数据的文件,

05.truncate --操作类型,用truncate table 来清除表中原有记录

06.INTO TABLE users -- 要插入记录的表

07.Fields terminated by "," -- 数据中每行记录用"," 分隔

08.Optionally enclosed by '"' -- 数据中每个字段用'"' 框起,比如字段中有"," 分隔符时

09.trailing nullcols --表的字段没有对应的值时允许为空

10.( virtual_column FILLER, --这是一个虚拟字段,用来跳过由PL/SQL Developer 生成的第一列序号

user_id number, --字段可以指定类型,否则认为是CHARACTER 类型, log 文件中有显示

user_name,

login_times,

last_login DATE "YYYY-MM-DD HH24:MI:SS" --指定接受日期的格式,相当用to_date() 函数转换

16.)

说明:在操作类型 truncate 位置可用以下中的一值:

1) insert --为缺省方式,在数据装载开始时要求表为空

2) append --在表中追加新记录

3) replace --删除旧记录(用 delete from table 语句),替换成新装载的记录

4) truncate --删除旧记录(用 truncate table 语句),替换成新装载的记录

3) 执行命令:

sqlldr dbuser/dbpass@dbservice control=users.ctl

在 dbservice 指示的数据库的表 users 中记录就和数据文件中的一样了。

执行完 sqlldr 后希望能留意一下生成的几个文件,如 users.log 日志文件、users.bad 坏数据文件等。特别是要看看日志文件,从中可让你更好的理解 Sql Loader,里面有对控制文件的解析、列出每个字段的类型、加载记录的统计、出错原因等信息。

并行加载:sqlldr psbc/psbc control=/opt/impora/t1.ctl parallel=true &

sqlldr psbc/psbc control=/opt/impora/t2.ctl parallel=true &

sqlldr psbc/psbc control=/opt/impora/t3.ctl parallel=true &

sqlldr psbc/psbc control=/opt/impora/t4.ctl parallel=true &

如果并行加载还是很慢,直接灌入磁盘,加入direct参数

相关文档
最新文档