暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

最近用了一下oracle 外部表,做一个学习笔记2

     外部表基本多用于在数据仓库系统,一般数据仓库接收的数据多为DAT类型的文本文件,并且还会备份这些数据文件,这时候如果采用外部表直接进行数据过滤,那么可以省一些数据库的表所占空间。并且外部表用在跨平台数据迁移也是一个相当好用的方法。
Oracle数据库允许以只读方式访问外部表中的数据。允许对外部数据运行任何SQL查询,而无需将外部数据加载到数据库中。使用外部表卸载数据时,将根据SELECT语句中的数据类型自动创建元数据。我们可以使用SQL直接或者并行(parallel)查询外部表数据。例如,可以对外部表做select, join, 或者sort等一些操作 。但是,无法执行DML操作,也无法创建索引。

实战:

1、使用外部表首先得创建一个directory

create directory DIR1 as '/home/oracle/test';
grant read,write,execute on directory DIR1 to ldx_test;

2、基于ORACLE_LOADER

CREATE TABLE test
(
sname varchar2(10),
cname varchar2(10),
sno number,
cno number,
cname1 varchar2(10),
cname2 varchar2(10),
sdate varchar2(20),
corder number,
sorder number
)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY dir1
ACCESS PARAMETERS
(
records delimited by newline
PREPROCESSOR dir1:'uncompress_test.sh'
fields terminated by ','
OPTIONALLY ENCLOSED BY '"'
missing field values are null
)
LOCATION ('test.dat.gz')
)
REJECT LIMIT UNLIMITED;

其中uncompress_test.sh 是shell脚本,里面存放的是解压test.dat.gz的命令,如gunzip -c test.dat.gz

3、基于oracle_datapump

create table test_external
organization external
(
type oracle_datapump
DEFAULT DIRECTORY dir1
LOCATION ('test_external01.dmp','test_external02.dmp')
) parallel 2
as select * from dba_objects where rownum <=10000;

此处LOCATION 中的dmp个数和,parallel的个数相互呼应。

查询结果进行验证

select count(1) from test_external;


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论