学无止境
分类: 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')
);