oracle 外部表第一行_oracle外部表的使用

当外部表不用时,需要及时删除外部表或者与之对应的目录对象。不过在删除这些内容时会有一些限制。这些限制主要是管理上的限制,而不是技术上的限 制。也就是说,Oracle数据库系统没有对其进行强制的限制。但是如果数据库管理员不遵守这些限制的话,可能会出现一些问题。如要先删除外部表,然后再 删除目录对象。有时候一个目录对象中可能会包含多个外部表。此时必须要确认所有的外部表都不用了,都已经删除干净了,然后才能够删除目录对象。在创建外部 表时,操作系统会判断一下,与之对应的目录对象是否已经创建。但是在删除对象时,系统不会去判断跟这个目录对象关联的外部表是否已经全部删除。如果目录对 象删除了,但是还有外部表存在。此时查询这个外部表的时候,系统就会提示“对象不存在”的错误信息。所以这个删除目录对象时,数据库系统缺乏一种检查,此 时只有数据库管理员在删除目录对象时,先手工确认一下这个目录对象是否存在其他的外部表。

要了解这个信息,则可以通过查询dba_external_locations。通过查询这张表,系统会反映当前所有的目录对象以及相关的外部 表,还会查询出这些外部表所对应的操作系统文件的名字。先查询这张表格,确定要删除的对象没有其他关联的外部表时,再进行删除。否则的话,需要先确认其他 外部表的可用性。免得因为误删除而导致外部表无法正常使用。

对于操作系统平台的限制:

虽然Oracle数据库是支持跨平台的数据库系统,即同时支持Windows或者Linux等多种操作系统。但是在使用外部表的时候需要注意一个问题,即 在两个操作系统上文本文件的存储方式是不同的。如在Windows操作系统上利用txt文件建立了一个以逗号作为分隔符的文件,其一行一条记录。但是在 Linux操作系统上打开的话,在其就可能使在同一行中显示了。故为了数据库系统能够正确识别操作系统文件,最好这个操作系统文件能够和Oracle数据 库系统部署在同一台服务器上或者同一种操作系统上。否则的话,很可能因为格式的冲突,而导致数据库系统无法正确读取外部文件中的数据。外部表的实例:

--创建目录

create or replace directory dir_bdump as 'D:\oracle\product\10.2.0\admin\fgisdb\bdump';

--查询目录

select * from dba_directories;

--查询外部表的目录

select * from dba_external_locations;

--查询外部表

select * from dba_external_tables;

--创建外部表

create table alert_fgisdb ( text varchar2(400) )

organization external (

type oracle_loader

default directory bdump

access parameters (

records delimited by newline

nobadfile

nodiscardfile

nologfile

)

location('alert_fgisdb.log')

)

reject limit unlimited

--通过外部表查找数据库的运行信息

select to_char(last_time,'dd-mon-yyyy hh24:mi') shutdown,

to_char(start_time,'dd-mon-yyyy hh24:mi') startup,

round((start_time-last_time)*24*60,2) mins_down,

round((last_time-lag(start_time)over(order by r)),2)days_up,

case when (lead(r) over (order by r) is null) --lead函数用于取出后N行数据

then round((sysdate-start_time),2)

end days_still_up

from (

select r,

to_date(last_time,'Dy Mon DD HH24:MI:SS YYYY') last_time,

to_date(start_time,'Dy Mon DD HH24:MI:SS YYYY') start_time

from (

select r,

text,

lag(text,1)over(order by r) start_time,--lag函数用于取出前n行数据

lag(text,2)over(order by r) last_time

from (

select rownum r,text

from alert_fgisdb

where text like'____:_:_20_'

or text like'starting oracle instance%'

)

)

where text like 'starting oracle instance%'

)

lag函数语法:lag(字段,n)

lead函数语法与lag一样。

--更改拒绝限制

ALTER TABLE alert_fgisdb LIMIT 100;

--更改默认目录说明

ALTER TABLE alert_fgisdb DIRECTORY DEFAULT DIRECTORY bdump;

--修改访问参数,如分隔符由","变为"|"

ALTER TABLE alert_fgisdb PARAMETERS ACCESS PARAMETERS (FIELDS TERMINATED BY '|');

--修改文件位置:

ALTER TABLE alert_fgisdb LOCATION('TC_REG_MNGREGIONCODE.txt');

drop table alert_fgisdb;

--删除目录

drop DIRECTORY bdump;

--查询外部表(找出alert中含有ora的所有记录)

select * from alert_fgisdb where text like 'ORA-%';

使用外部表卸载数据--准备一个简单的select语句向这个目录中卸载数据

create table all_objects_unload

organization external

(type oracle_datapump

default directory dir_dp

location('allobjects.dat')) --allobjects.dat文件在dir_dp目录下

as select * from all_objects

--将allobjects.dat文件拷到要加载该表的机器,使用如下语句抽取DDL重建这个表

select dbms_metadata.get_ddl('TABLE','ALL_OBJECTS_UNLOAD') from dual;

--抽取后的DDL语句如下:

CREATE TABLE "GWM"."ALL_OBJECTS_UNLOAD"

(  "OWNER" VARCHAR2(30),

"OBJECT_NAME" VARCHAR2(30),

"SUBOBJECT_NAME" VARCHAR2(30),

"OBJECT_ID" NUMBER,

"DATA_OBJECT_ID" NUMBER,

"OBJECT_TYPE" VARCHAR2(19),

"CREATED" DATE,

"LAST_DDL_TIME" DATE,

"TIMESTAMP" VARCHAR2(19),

"STATUS" VARCHAR2(7),

"TEMPORARY" VARCHAR2(1),

"GENERATED" VARCHAR2(1),

"SECONDARY" VARCHAR2(1)

)

ORGANIZATION EXTERNAL

( TYPE ORACLE_DATAPUMP

DEFAULT DIRECTORY "DIR_DP"

LOCATION

( 'allobjects.dat'

)

)

--重建该表后,执行如下语句就可以加载这个表的信息

insert /*+ append */ into some_table select * from all_objects_unload;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值