Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1148819
  • 博文数量: 231
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-03 16:35
个人简介

学无止境

文章分类

全部博文(231)

文章存档

2014年(7)

2013年(103)

2011年(11)

2010年(53)

2009年(57)

分类: Oracle

2013-10-11 14:25:52

数据库和外部文件导入导出的几种方式:
 
exp/expdp       : 二进制 <--  数据库
imp/impdp       : 二进制  --> 数据库
sqlloader       : 文本    --> 数据库
oracle_loader   : 文本    --> 数据库
oracle_datapump : 二进制 <--> 数据库
sqlplus spool   : 文本   <--  数据库
 

外部表有2种TYPE,ORACLE_LOADER和ORACLE_DATAPUMP
1.默认的访问驱动是ORACLE_LOADER。这个允许使用Oracle loader技术从外部文件读取数据。ORACLE_LOADER访问驱动提供数据匹配能力,类似于SQL*Loader工具控制文件语法的子集。
2.第二种访问驱动是ORACLE_DATAPUMP.这个可用让你卸载数据,从数据库中读数据,插入到外部表,变成一个或多个外部文件,可以用来重新加载到数据库中
 
外部表不支持DML操作,也不能在表上建立索引,但是可以通过外部表创建视图以及同义词。
外部表只支持以下几种DDL操作
Creating External Tables
Altering External Tables
Dropping External Tables
System and Object Privileges for External Tables
 

1.ORACLE_LOADER类型的外部表
利用外部表,可以将如alert log这类的文本文件导入到数据库中。
 
文件empxt1.dat包含以下数据:
360,Jane,Janus,ST_CLERK,121,17-05-2001,3000,0,50,jjanus
361,Mark,Jasper,SA_REP,145,17-05-2001,8000,.1,80,mjasper
362,Brenda,Starr,AD_ASST,200,17-05-2001,5500,0,10,bstarr
363,Alex,Alda,AC_MGR,145,17-05-2001,9000,.15,80,aalda
 
文件empxt2.dat包含以下数据:
401,Jesse,Cromwell,HR_REP,203,17-05-2001,7000,0,40,jcromwel
402,Abby,Applegate,IT_PROG,103,17-05-2001,9000,.2,60,aapplega
403,Carol,Cousins,AD_VP,100,17-05-2001,27000,.3,90,ccousins
404,John,Richardson,AC_ACCOUNT,205,17-05-2001,5000,0,110,jrichard
 
 
CONNECT  /  AS SYSDBA;
-- 创建目录,并分配权限给test用户
CREATE OR REPLACE DIRECTORY dir1 AS 'E:\oracle\dir1';
GRANT READ,WRITE ON DIRECTORY dir1 TO test;
 
-- 连接test用户
CONNECT test/test
 
-- 创建外部表
CREATE TABLE loader_ext_employees
 (employee_id       NUMBER(4),
  first_name        VARCHAR2(20),
  last_name         VARCHAR2(25),
  job_id            VARCHAR2(10),
  manager_id        NUMBER(4),
  hire_date         DATE,
  salary            NUMBER(8,2),
  commission_pct    NUMBER(2,2),
  department_id     NUMBER(4),
  email             VARCHAR2(25)
 )
 ORGANIZATION EXTERNAL
 (
   TYPE ORACLE_LOADER
   DEFAULT DIRECTORY dir1
   ACCESS PARAMETERS
   (
     records delimited by newline
     badfile dir1:'empxt%a_%p.bad'
     logfile dir1:'empxt%a_%p.log'
     fields terminated by ','
     missing field values are null
     ( employee_id, first_name, last_name, job_id, manager_id,
       hire_date char date_format date mask "dd-mm-yyyy",
       salary, commission_pct, department_id, email
     )
   )
   LOCATION ('empxt1.dat', 'empxt2.dat')
 )
 PARALLEL
 REJECT LIMIT UNLIMITED;
 
-- 激活并行,更好地装载大量数据
ALTER SESSION ENABLE PARALLEL DML;
-- 将外部表装载到数据库的关系表中
CREATE TABLE employees AS SELECT * FROM loader_ext_employees;
 

2.ORACLE_DATAPUMP类型的外部表
 
从数据库,将表导出到外部二进制文件中。这里建立的外部表,字段没有带类型,并且最后有带上AS SELECT,这就是从数据库导出。
 
create table manager_ext
(
  employee_id,
  first_name,
  last_name,
  job_id,
  manager_id,
  hire_date,
  email
)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY dir1
LOCATION('TEST_EMP.DMP')
)
AS SELECT employee_id,
first_name,
last_name,
job_id,
manager_id,
hire_date,
email FROM employees;
 

从外部二进制文件导入到数据库中。和loader方式类似,需要带字段类型声明,最后没有AS SELECT子句。
 
CREATE TABLE dump_ext_employees
 (employee_id       NUMBER(4),
  first_name        VARCHAR2(20),
  last_name         VARCHAR2(25),
  job_id            VARCHAR2(10),
  manager_id        NUMBER(4),
  hire_date         DATE,
  email             VARCHAR2(25)
 )
   ORGANIZATION EXTERNAL
   (
     TYPE ORACLE_DATAPUMP
     DEFAULT DIRECTORY dir1
     LOCATION ('TEST_EMP.DMP')
 );
 


 

阅读(1215) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~