当前位置:文档之家› Oracle外部表 索引表 嵌套表

Oracle外部表 索引表 嵌套表

Oracle外部表 索引表 嵌套表
Oracle外部表 索引表 嵌套表

Oracle外部表

External Table Example The following statement creates an external table that represents a subset of the sample table hr.departments. The opaque_format_ spec is shown in italics. Please refer to Oracle Database Utilities for information on the ORACLE_LOADER access driver and how to specify values for the opaque_format_ spec.

CREATE TABLE dept_external (

deptno NUMBER(6),

dname VARCHAR2(20),

loc VARCHAR2(25)

)

ORGANIZATION EXTERNAL

(TYPE oracle_loader

DEFAULT DIRECTORY admin

ACCESS PARAMETERS

(

RECORDS DELIMITED BY newline

BADFILE 'ulcase1.bad'

DISCARDFILE 'ulcase1.dis'

LOGFILE 'ulcase1.log'

SKIP 20

FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'

(

deptno INTEGER EXTERNAL(6),

dname CHAR(20),

loc CHAR(25)

)

)

LOCATION ('ulcase1.ctl')

)

REJECT LIMIT UNLIMITED;

Index-Organized Table Example The following statement is a variation of the sample table hr.countries, which is index organized:

CREATE TABLE countries_demo

( country_id CHAR(2)

CONSTRAINT country_id_nn_demo NOT NULL

, country_nameVARCHAR2(40)

, currency_nameVARCHAR2(25)

, currency_symbolVARCHAR2(3)

, region VARCHAR2(15)

, CONSTRAINT country_c_id_pk_demo

PRIMARY KEY (country_id ) )

ORGANIZATION INDEX

INCLUDING country_name

PCTTHRESHOLD 2

STORAGE

( INITIAL 4K

NEXT 2K

PCTINCREASE 0

MINEXTENTS 1

MAXEXTENTS 1 )

OVERFLOW

STORAGE

( INITIAL 4K

NEXT 2K

PCTINCREASE 0

MINEXTENTS 1

MAXEXTENTS 1 );

Nested Table Example The following statement shows how the sample table

pm.print_media was created with a nested table column ad_textdocs_ntab:

CREATE TABLE print_media

( product_id NUMBER(6)

, ad_idNUMBER(6)

, ad_composite BLOB

, ad_sourcetext CLOB

, ad_finaltext CLOB

, ad_fltextn NCLOB

, ad_textdocs_ntabtextdoc_tab

, ad_photo BLOB

, ad_graphic BFILE

, ad_headeradheader_typ

) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab;

Oracle外部表就好像是一张视图,在数据库中可以像试图一样进行查询等操作。这个试图允许用户在外部数据上运行任何的SQL语句,而不需要先将外部表中的数据装载进数据库中。

外部表是指不在数据库中的表,如操作系统上的一个按一定格式分割的文本文件或者其

他类型的表。这个外部表对于Oracle数据库来说,就好像是一张视图,在数据库中可以像试图一样进行查询等操作。这个试图允许用户在外部数据上运行任何的SQL语句,而不需要先将外部表中的数据装载进数据库中。不过需要注意是,外部数据表都是只读的,不能够更改。不过在使用外部表时仍然有不少的限制。

限制一:需要先建立目录对象。

在使用外部数据表的时候,需要先建立目录对象。也就是说,要想Oracle数据库系统访问操作系统文件,就必须在数据库中建立指向这个操作系统文件的目录对象,然后通过这个目录对象访问相应的操作系统文件,即用目录对象存储操作文件的保存位置。不过需要注意,这个目录对象普通用户是无权创建的。一般情况下只有特权用户或者数据库管理员角色才可以创建目录对象。如果允许其他用户也可以创建目录对象的话,就需要授权给其他用户。

其实这个目录对象就是操作系统中文件或者表格的存储位置。不过在建立对象的时候,需要小心,Oracle数据库系统不会去确认这个目录是否真的存在。如果在输入这个目录对象的时候,不小心把路径写错了,那可能这个外部表仍然可以正常建立,但是却无法查询到数据。由于建立目录对象时,缺乏这种自我检查的机制,为此在将路径赋予给这个目录对象时,需要特别的注意。另外需要注意的是路径的大小写。在Windows操作系统中,其路径是不区分大小写的。而在Linux操作系统,这个路径需要区分大小写。故在不同的操作系统中,建立目录对象时需要注意这个大小写的差异。最好数据库管理员可以养成一个习惯,无论在什么操作系统中,都采用小写的目录名与文件名。那么在不同的操作系统中,就不用受到这个大小写的困扰了。最后需要注意的是,目录对象名必须唯一。如果目录对象名字有重复的话,系统会提示错误信息:“名称已有现有对象引用”,而不会自动覆盖原有的对象名设置。

虽然这个对象名设置比较简单,但是其是数据库寻找操作系统上文件的唯一途径。所以这个目录对象的创建必须确保准确。否则的话,外部表就可能无法正常使用。

限制二:对于操作系统文件的限制。

其实外部表简单的说,就是跟操作系统上固定格式的文件或者表格的一个连接。为了Oracle数据库系统能够正确链接外部表,对于外部表的格式就提出了比较严格的要求。如果不符合这些要求的话,数据库系统就无法正确读取外部表中的数据。如对于分隔符有比较严格的要求。虽然在外部文件或者表格中,可以使用多种分隔符,如英文状态下的逗号或者分号等等。但是有一个限制,即在同一个操作系统文件中只能够使用一个分割符号,要么逗号或者分号等等。因为在建立外部表时,必须指定操作系统文件所使用的分隔符号。如果有多种分隔符号的话,数据库系统将无法识别。

另外在外部表格中,不能够带有标题信息。如现在有一张表格,以逗号分隔。而在其第一列数据中有各个列的标题信息。而数据库系统在连接这个表的时候,会将这些标题信息当作普通的纪录来对待。即会将这些信息也显示在外部表中。为此如果这个标题信息与外部表的字段类型不一致(如字段内容是number数据类型,而标题信息则是字符型数据,则在查询时就会出错)。如果数据类型恰巧一致的话,这个标题信息Oracle数据库也会当作普通记录来对待。如在建立外部表的时候,最好确认一下操作系统文件中是否包含标题信息。如果有的话,需要删除。否则的话,可能会出错。

最后需要说明的是,当Oracle数据库系统访问这个操作系统文件的时候,会在这个文件所在的目录自动创建一个日志文件。无论最后是否访问成功,这个日志文件都会如期建立。查看这个日志文件,可以了解数据库访问外部表的频率、是否成功访问等等。

限制三:在建立临时表时的限制。

在建立临时表时,也会有不少的限制。如表中字段的名称有一些特殊字符的话,那么这个表列的名称必须使用英文状态的下的双引号连接起来。如采用”studentno#”。遇到列名字中有特殊符号时,如果不采用双引号括起来,虽然临时表可以正常创建,但是在采用的时候会出现错误,无法正常查询数据。如数据库系统可能会提醒:“数据库插件错误”等信息。为此最好在创建临时表时不要在列名中使用一些特殊的字符。其实不光光是建立临时表有这种限制,建立其他标或者试图都有类似的限制。

其次,这个外部表毕竟与内部表不同。在创建外部表的时候,其实在数据库中跟本没有创建表。也就是说,不会为外部表分配任何的存储空间。创建外部表只是在数据字典中创建了外部表的元数据,以便对应访问外部表中的数据,而不在数据库中存储外部表的数据。简单地说,数据库存储的只是与外部文件的一种对应关系,如字段与字段的对应关系。而没有存储实际的数据。为此在表的操作与管理上,就会受到很大的限制。如在外部表上,是不能够为表创建索引。因为创建索引就意味着要存在对应的索引记录。而外部表其实在数据库不会有存储。故在外部中是无法建立索引的。如果硬要建立的话,则系统会提示“操作在外部组织表上不受支持”的错误提示。同样的道理,在数据库中也不能够更新外部表中的数据,如插入记录、删除记录或者更新信息等等。简而言之,这个外部表对于数据库来说,是只读的,不可更新。

限制四:删除外部表或者目录对象。

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

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

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

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

数据库及Oracle基础知识培训自学教材试题_V1 0

Oracle初级试题 一、选择题(20% 不定项每题2分) 1.对于Oracle用户方案下,根据模式/映像,请选出不属于模式的对象(D) A.表B.索引C.视图D.约束 2.在客户端配置哪个文件,可以使客户端访问oracle server?(A) A.tnsnames.ora B.sqlnet.ora C.listener.ora D.init.ora 3.搜索列中的数据,但只记得部分字符串,通常可以用以下哪种运算?(C) A.in B.between C.like D.exists 4.如从表中删除了一条记录,以下哪个语句可以保存数据库中的改变?(B) A.savepoint B.commit C.rollback D.update 5.下面关于视图的说法,请选出正确的(ABCD) A.一个视图可以创建为只读 B.一个视图可以用来连接两张或更多的表而被创建 C.在视图中不能含有order by子句 D.在视图中不能含有group by子句 6.在select语句中包含了where子句,请问group by子句可以放在哪里?(D) A.where子句前面 B.from子句前面 C.order by子句后面 D.where子句后面 7.关于having子句,以下说法正确的是:(C) A.having与where相同 B.having用于单行条件查询 C.having用于已分组的条件查询 D.having子句必须紧跟在where子句后面使用 8.能够在外部表上进行的操作有:(A) A.select B.update C.insert D.delete 9.在更改索引的操作(alter index)中,以下哪些子句可以定期优化索引?(AC) A.rename B.coalesce C.rebuild D.deallocate unused 10.请选出能够产生锁的操作:(AB) A.select … for update B.commit C.rollback D.lock table 二、填充题(20% 每空4分) 1.数据库最常用的DML操作有SELECT、UPDATE 、DELETE 和INSERT 等(要求写出操作命令)。 2.假设有两个数据N1和N2,请用函数实现如下算法:当N1>N2时,返回“大于”; 当N1=N2时,返回“等于”;当N1N2 then Return ‘大于’;

ORACLE AWR报告生成和分析

ORACLE AWR报告生成和分析 Automatic Workload Repository是10g引入的一个重要组件。在里面存贮着近期一段时间内,默认是7天,数据库活动状态的详细信息。 AWR报告是对AWR视图进行查询而得到的一份自动生成的报告。可以通过下面的脚本手工得到一份AWR报告。 exec dbms_workload_repository.create_snapshot; ... running the specified workload exec dbms_workload_repository.create_snapshot; @?/rdbms/admin/awrrpt 通过AWR和AWR报告,DBA可以容易地获知最近数据库的活动状态,数据库的各种性能指标的变化趋势曲线,最近数据库可能存在的异常,分析数据库可能存在的性能瓶颈从而对数据库进行优化。 AWR报告所有的数据来源于AWR视图,即以DBA_HIST_开头的所有系统表,Database Reference有对所有这些系统表的描述,这应该是Oracle官方对AWR报告的官方注释了。 而对于如何有效地去分析AWR报告,这可能更需要DBA经验的日积月累。 AWR的前身是Statspack,Statspack在10g和11g中也有提供,同时和AWR 一起做了同步更新,而且Statspack是公开源代码的,因此,关于Statspack的资料,还有Statspack的源代码,都是理解AWR的一个有用的辅助。 如果关注数据库的性能,那么当拿到一份AWR报告的时候,最想知道的第一件事情可能就是系统资源的利用情况了,而首当其冲的,就是CPU。 而细分起来,CPU可能指的是 ●OS级的User%, Sys%, Idle% ●DB所占OS CPU资源的Busy% ●DB CPU又可以分为前台所消耗的CPU和后台所消耗的CPU

linux上的sqlnet.ora限制IP访问

配置sqlnet.ora限制IP访问Oracle 与防火墙类似的功能,Oracle 提供限制与允许特定的IP或主机名通过Oracle Net来访问数据库。这个功能由sqlnet.ora配置文件来实 现。该文件通常$ORACLE_HOME/network/admin/ 目录下,与tnsnames.ora以及listener.ora位于同一路径。用法也比较简单。通过监听器的 限制,实现轻量级访问限制,比在数据库内部通过触发器进行限制效率要高。 1. 实现 通过在sqlnet.ora文件中增加下列记录来实现 tcp.validnode_checking = yes tcp.invited_nodes = (hostname1, hostname2,ip1,ip2) tcp.excluded_nodes = (10.103.11.17,hostname1,hostname2) 当使用invited_nodes时,则所有没有包含在invited_nodes值中的IP或主机将无法通过Oracel Net连接到数据库。而如果使用 excluded_nodes时,除了excluded_nodes值中列出的IP和主机不可访问之外,其余的节点都可以访问数据库。通常情况下,更倾向于使 用excluded_nodes参数。 2. 注意 使用excluded_nodes与invited_nodes的一些特性 不支持通配符的使用(如hostname不能写为svhs0*,IP地址不能写为 10.103.11.*) excluded_nodes与invited_nodes为互斥方式,要么使用前者,要么使用后者 如果tcp.invited_nodes与tcp.excluded_nodes都存在,则tcp.invited_nodes 优先 要将本地地址,或者Cluster群集其他节点的地址都加入到允许列表,否则监听器可能无法启动 修改之后,一定要重起监听或reload才能生效,而不需要重新启动数据库仅提供对TCP/IP协议的支持 3. 实战 -->使用tnsping demo92,连接正常 C:\>tnsping demo92 TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 25-JUN-2011 18:55:39

oracle外部表

外部表介绍 ORACLE外部表用来存取数据库以外的文本文件(Text File)或ORACLE专属格式文件。因此,建立外部表时不会产生段、区、数据块等存储结构,只有与表相关的定义放在数据字典中。外部表,顾名思义,存储在数据库外面的表。当存取时才能从ORACLE专属格式文件中取得数据,外部表仅供查询,不能对外部表的内容进行修改(INSERT、UPDATE、DELETE操作)。不能对外部表建立索引。因为创建索引就意味着要存在对应的索引记录。而外部表其实在没有存储在数据库中。故在外部是无法建立索引的。如果硬要建立的话,则系统会提示“操作在外部组织表上不受支持”的错误提示。 Notice: 外部表是ORACLE 9i后引入的。 外部表特征 (1)位于文件系统之中(一定要在数据库服务器中,而不是其它网络路径),按一定格式分割, 例如@#$等,文本文件或者其他类型的文件可以作为外部表。 (2)对外部表的访问可以通过SQL语句来完成,而不需要先将外部表中的数据装载进数据库中。 (3)外部数据表都是只读的,因此在外部表不能够执行DML操作,也不能创建索引。 (4) ANALYZE语句不支持采集外部表的统计数据,应该使用DMBS_STATS包来采集外部表的统计数据。 (5)可以查询操作和连接。也可以并行操作。 (6)数据在数据库的外部组织,是操作系统文件。 (7)操作系统文件在数据库中的标志是通过一个逻辑目录来映射的。 外部表范例: 1:创建目录对象并授权

从9i开始,ORACLE数据库若需要存取文件系统,就必须使用目录对象,以相对路径方式存取文件,强化数据库的安全性。建立目录对象、授予权限。 SQL>CREATE OR REPLACE DIRECTORY DUMP_DIR AS '/oradata/exterltab'; 给用户授予指定目录的操作权限 SQL>GRANT READ,WRITE ON DIRECTORY DUMP_DIR TO ETL; 2:创建外部表 我创建了一个平面文件作为测试用例,如下所示,总共5条记录,其中一条错误记录[oracle@DB-Server exterltab]$ more student.data 10001@#$kerry@#$male@#$28@#$1 10002@#$jimmy@#$male@#$22@#$1 10003@#$ken@#$male@#$21@#$1 10004@#$merry@#$femal@#$20@#$1 this is a bad file CREATE TABLE EXTER_TEST ( ID NUMBER(5) , NAME VARCHAR(12) , SEX VARCHAR(8) , AGE NUMBER(3) , GRADE NUMBER(1) ) ORGANIZATION EXTERNAL ( type oracle_loader default directory dump_dir access parameters ( records delimited by newline fields terminated by'@#$' ) location ('student.data') );

java工程师课程

课程内容: 一、WEB网页开发 1、HTML语言介绍和标记 2、HTML标记和CSS样式 3、CSS样式属性介绍 4、JAVA Script基础 5、JAVA Script对象 二、Java面向对象编程 1、Java工作原理 2、Java开发环境的搭建 3、标识符、关键字和数据类型 4、运算符号与表示式 5、流程控制 6、数组 7、面对对象的概念 8、类和对象 9、封装和访问控制 10、继承 11、多态 12、抽象类 13、接口 14、嵌套类 15、匿名内部类 16、面向对象与例子 17、异常处理 18、文件系统 19、字节流字符流的转换 20、字节流 21、字符集编码 22、对象流、压缩流、和随机访问流 23、枚举类型 24、集合类 25、多线程 26、AWT和SWING 27、鼠标事件和键盘事件 28、高级组件 29、Eclipse使用 30、Applet 31、网络编程 32、Java安全与反射 33、Java工具类增补 34、MYSQL的应用 35、SQL语句 36、PD数据库设计工具 37、JDBC 三、Java Web开发技术 1、WTP的安装与使用 2、Servlet与Servlet容器 3、Tomcat的安装与使用 4、Servlet容器Servlet API 5、HTTP通信协议 6、web浏览器与HIIP方法 7、Httpservlet与请求处理 8、Http请求分析与响应分析 9、Servlet生命周期 10、ServletConfig分析 11、ServletContext分析 12、请求传送(ServletRequest) 13、web应用与部署 14、监听器 15、过滤器基础 16、过滤器配置 17、过滤器应用与实例 18、使用URL重写管理会话 19、WEB应用安全 20、BASIC验证机制 21、DIGEST验证机制 22、FORM验证机制 23、SERVLETCONTEXT分析 24、SERVLET异常处理机制 25、SERVLET综合应用实例 26、JSP初探 27、JSP标准指令 28、JSP程序代码元素 29、JSP标准动作元素 30、JSP隐含变量 31、JSP与JAVABEAN 32、JSP异常处理机制 33、JSP静态、动态复用 34、自定义标签及其生命周期 35、标签库综合应用实例 36、JSP+SERVLET+JSTL+EL综合应用实例 37、设计模式初探 38、SCWCD涉及的设计模式 四、SSH集成开发技术 1、Oracle的基础 2、PLSQL 3、多表级联 4、JDBC高级数据库编程 5、XML基础 6、XML校验 7、XML解析 8、Struts入门介绍 9、Struts配置 10、Struts国际化 11、Struts验证框架 12、Struts异常处理 13、Struts标签库 14、Struts Tiles框架 15、综合应用实例 16、Web Work介绍 17、Struts2.0介绍 18、Hibernate入门介绍 19、Hibernate配置 20、Hibernate关联关系映射 21、Hibernate事务 22、Hibernate缓存 23、Hibernate高级配置 24、Spring入门介绍 25、Spring Bean和Beanfactory 26、Spring IOC 27、Spring AOP 28、Spring整合Struts 29、Spring+Struts应用实例 30、Spring整合Hibernate 31、声明式事务处理 32、Spring+Hibernate应用实例 33、Spring+Hibernate+Hibernate集成配 置 五、Oracle数据库管理技术 1、Oracle Database 10g:SQL 1)SQL语句的方式 2)基本SQL Select语句 3)过滤和排序 4)单行函数 5)多表查询 6)组函数 7)子查询 8)利用变量交互查询 9)创建和管理表 10)约束介绍 11)创建和管理视图 12)创建和管理序列 13)创建和管理索引 14)创建和管理同义词 15)控制用户访问 16)SET操作符 17)GROUP BY子句的增强 18)高级子查询 19)层次查询 20)Oracle外部表 2、Oracle Database 10g:PL/SQL 1)PL/SQL介绍 2)PL/SQL语句块结构 3)开发和运行环境 4)PL/SQL变量类型 5)变量声明 6)SQL控制结构 7)PL/SQL中的SQL 8)游标 9)错误处理 10)集合 11)创建过程、函数和包 12)创建和管理触发器 3、Oracle Database 10g Administration Workshop I 1)安装Oracle Database 10G软件 2)创建Oracle数据库 3)数据库接口 4)控制数据库 5)存储结构 6)管理用户 7)管理模式对象 8)管理数据 9)PL/SQL 10)Oracle 数据库安全性 11)Oracle Net Services 12)Oracle 共享服务器 13)性能监控 14)积极维护:目标 15)监控和管理撤消 16)监控和解决锁冲突 17)备份和恢复的概念 18)数据库备份 19)数据库恢复 4、Oracle Database 10g Administration Workshop II 1)使用全球化支持 2)确保Oracle 监听程序的安全性 3)启用分布式事务处理 4)配置Recovery Manager 5)使用Recovery Manager 6)诊断来源 7)从非关键性数据丢失中恢复 8)不完全恢复 9)闪回数据库 10)从用户错误中恢复 11)处理数据库损坏 12)优化Oracle 数据库 13)实施物化图 14)管理资源 15)使用计划程序自动执行任务 16)高级工具和技术 5、Oracle Database 10g 数据库Java开发 1)利用JDeveloper 10g进行工程开发 2)JDeveloper 10g中利用JDBC访问数据 库实例 3)利用JDeveloper 10g开发SQL、PL/SQL 和SQLJ 4)利用Java开发存储过程 5)基于JDeveloper 10g的Web应用开发 六、J2EE高级开发技术 1、UML 2、Webservice 3、J2EE设计模式 4、Weblogic开发 5、Jboss开发 6、会话Bean 7、实体Bean 8、消息Bean 9、J2EE服务 10、AJAX

Oracle 处理外部表错误

Oracle 处理外部表错误 在将数据文件中的数据转换为表中列数据时,不可避免会现一些错误。当出现错误时,用户就需要收集错误信息,从中找到导致出现错误的原因并加以纠正。在创建外部表时,关于错误处理的子句包括:REJECT LIMIT、BADFILE和LOGFILE子句。 1.REJECT LIMIT子句 如果在创建外部表时,使用了REJECT LIMIT子句,则在将数据文件中的数据转换为表定义的列数据期间,数据库将允许出现特定数量的错误。如果用户在执行一个查询,而Oracle遇到了超过这个转换数量的错误,那么查询将会失败。 在默认情况下,REJECT LIMIT子句指定的数值为0。可以使用REJECT LIMIT子句设置允许出现的错误数为UNLIMITED,这样查询就不会失败。如果外部数据文件中的所有记录都由于转换错误而失败,那么查询这个外部表时将返回0行。 例如,在下面的示例中将重新创建的外部表EMPLOYEES_EXTERNAL,并在指定字段分隔符时使用分号“;”,很显然这在转换数据时将发生错误。但是,由于在其中使用了REJECT LIMIT子句指定错误数为无限UNLIMITED,所以要成功创建外部表: SQL> create table ext_emp 2 ( … ) 10 organization external 11 (type oracle_loader 12 default directory exterior_data 13 access parameters( 14 records delimited by newline 15 fields terminated by ',') 16 location('employees.csv')); 17 reject limit unlimited; 表已创建。 虽然忽略了在创建外部表时发生的错误,但是,这意味着Oracle可能无法读取数据文件中的数据。如果这时用户使用SELECT语句查询该外部表,则无法返回正常的数据。 2.BADFILE和NOBADFILE子句 当读取外部表的数据文件时,数据库可能会遇到数据类型转换错误,不能够将源文件转换成数据库中为外部表定义的列。这时可以在创建外部表时使用了BADFILE子句,将所有不能转换的数值都会被写入BADFILE指定的文件中。 SQL> create table ext_emp 2 (empno number(4), … 9 deptno number(3)) 10 organization external 11 (type oracle_loader 12 default directory exterior_data

Windows中使用Oracle外部表导入数据

Windows中使用Oracle外部表导入数据 Oracle 数据库的外部表,是指不在数据库中的表,也称“虚表”,对外部表可以使用标准SQL 语句进行装载,而不需要先将外部表中的数据装载进数据库中。 只读:由于外部表实际上是磁盘中的文件,所以不能通过SQL语句对外部表文件进行修改。对于外部表,实际使用中可以方便的用来加载数据,比如初始化用户数据,或者将历史数据报表使用外部表加载用来作相关临时性分析,而不需要程序来提供导入支持。 闲话少说,按照下面的例子操练之后,相信大家都掌握外部表的使用原理,在具体使用中融会贯通。(在linux中的使用方法在此文中不作描述,原理相同) --创建目录 create directory test_dir as'E:\external_table'; --sys登录,授权目录给指定用户 grant read,write on directory test_dir to test_user; --使用被授权的用户test_user创建外部表: create table test_table (empno int, ename varchar2(20), sal int, deptno int) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY test_dir ACCESS Parameters ( RECORDS DELIMITED BY NEWLINE badfile 'bad_test.txt' LOGFILE'log_test.txt' FIELDS TERMINATED BY',' MISSING FIELD VALUES ARE NULL (empno,ename,sal,deptno) ) LOCATION('t1.txt') ) ; --查询外部表 select * from test_table; --查看外部表的两个字典视图 select * from dba_external_tables; select * from dba_external_locations; SELECT OWNER, TABLE_NAME, DEFAULT_DIRECTORY_NAME, ACCESS_PARAMETERS

使用Oracle的外部表查询警告日志文件

使用Oracle的外部表查询警告日志文件 从Oracle9i开始,Oracle的外部表技术(Oracle External Tables)被极大的增强,通过外部表访问外部数据增强了Oracle数据库和外部数据源进行数据交互的能力,对于数据仓库和ETL来说,这些增强极大的方便了数据访问。 对于DBA来说,最常见一个例子是可以使用外部表来访问警告日志文件或其他跟踪文件. 以下一个例子用来说明外部表的用途。 首先需要创建一个Directory: [oracle@jumper oracle]$ sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.4.0 - Production on Sun Oct 15 21:42:28 2006 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production With the Partitioning option JServer Release 9.2.0.4.0 - Production SQL> create or replace directory bdump 2 as '/opt/oracle/admin/eygle/bdump'; Directory created. SQL> col DIRECTORY_PATH for a30 SQL> col owner for a10 SQL> select * from dba_directories;

ORACLE连接HDFS有个专项的解决方案

使用ORACLE连接HDFS有个专项的解决方案[O]racle [D]irect [C]onnector for [H]adoop Distributed Files System,简称ODCH。 该软件包可以到Oracle官网下载:https://www.doczj.com/doc/9a2052016.html,/technetwork/bdc/big-data-connectors/downloads/index.html 选择第一项:Oracle SQL Connector for Hadoop Distributed File System Release 2.1.0 我们这里使用2.1版本,下载到安装包后,解压即可: [root@ora11g ~]# unzip oraosch-2.1.0.zip 变态呀,压缩包里还有压缩包: [root@ora11g ~]# unzip orahdfs-2.1.0.zip -d /usr/local/ [root@ora11g ~]# chown -R oracle install /usr/local/orahdfs-2.1.0 在解压缩文件的bin中,hdfs_stream有两个环境变量需要手动指定,编辑该文件: [root@ora11g ~]# vi /usr/local/orahdfs-2.1.0/bin/hdfs_stream 增加两行环境变量: OSCH_HOME=/usr/local/orahdfs-2.1.0 HADOOP_HOME=/usr/local/hadoop-0.20.2 再次编辑grid用户环境变量: [root@ora11g ~]$ vi /home/grid/.bash_profile 增加下列内容: export DIRECTHDFS_HOME=/usr/local/orahdfs-2.1.0 export OSCH_HOME=${DIRECTHDFS_HOME} export ORAHDFS_JAR=${DIRECTHDFS_HOME}/jlib/orahdfs.jar export HDFS_BIN_PATH=${DIRECTHDFS_HOME}/bin 以oracle用户身份登录,创建两个目录,分别用于保存ODCH的操作日志和位置文件(location files): [oracle@ora11g ~]$ mkdir /data/ora11g/ODCH/{logs,extdir} -p [oracle@ora11g ~]$ chmod -R 777 /data/ora11g/ODCH/ 而后以sysdba身份登录到ORACLE,创建3个directory对象: SQL> create or replace directory ODCH_LOG_DIR as '/data/ora11g/ODCH/logs'; grant read, write on directory ODCH_LOG_DIR to SCOTT; create or replace directory ODCH_DATA_DIR as '/data/ora11g/ODCH/extdir'; grant read, write on directory ODCH_DATA_DIR to SCOTT; create or replace directory HDFS_BIN_PATH as '/usr/local/orahdfs-2.1.0/bin'; grant read,write,execute on directory HDFS_BIN_PATH to SCOTT; Directory created. SQL> Grant succeeded. SQL> Directory created. SQL> Grant succeeded.

如何分析AWR

如何分析AWR Automatic Workload Repository是10g引入的一个重要组件。在里面存贮着近期一段时间内,默认是7天,数据库活动状态的详细信息。 AWR报告是对AWR视图进行查询而得到的一份自动生成的报告。可以通过下面的脚本手工得到一份AWR报告。 exec dbms_workload_repository.create_snapshot; ... running the specified workload exec dbms_workload_repository.create_snapshot; @?/rdbms/admin/awrrpt 通过AWR和AWR报告,DBA可以容易地获知最近数据库的活动状态,数据库的各种性能指标的变化趋势曲线,最近数据库可能存在的异常,分析数据库可能存在的性能瓶颈从而对数据库进行优化。 AWR报告所有的数据来源于AWR视图,即以DBA_HIST_开头的所有系统表,Database Reference有对所有这些系统表的描述,这应该是Oracle官方对AWR报告的官方注释了。而对于如何有效地去分析AWR报告,这可能更需要DBA经验的日积月累。 AWR的前身是Statspack,Statspack在10g和11g中也有提

供,同时和AWR一起做了同步更新,而且Statspack是公开源代码的,因此,关于Statspack的资料,还有Statspack的源代码,都是理解AWR的一个有用的辅助。 本系列文章准备着重对AWR中的一些要点进行剖析,欢迎一起讨论AWR相关的问题。 如果关注数据库的性能,那么当拿到一份AWR报告的时候,最想知道的第一件事情可能就是系统资源的利用情况了,而首当其冲的,就是CPU。 而细分起来,CPU可能指的是 OS级的User%, Sys%, Idle% DB所占OS CPU资源的Busy% DB CPU又可以分为前台所消耗的CPU和后台所消耗的CPU 如果数据库的版本是11g,那么很幸运的,这些信息在AWR 报告中一目了然: OS级的%User为75.4,%Sys为2.8,%Idle为21.2,所以%Busy 应该是78.8。 DB占了OS CPU资源的69.1,%Busy CPU则可以通过上面

oracle 外部表

-- Oracle外部表 --================= 外部表只能在Oracle 9i之后来使用。简单地说,外部表,是指不存在于数据库中的表。通过向Oracle提供描述外部表的元数据,我们 可以把一个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来进行访问。外部表是对数据库表的延伸。 一、外部表的特性 位于文件系统之中,按一定格式分割,如文本文件或者其他类型的表可以作为外部表。 对外部表的访问可以通过SQL语句来完成,而不需要先将外部表中的数据装载进数据库中。 外部数据表都是只读的,因此在外部表不能够执行DML操作,也不能创建索引。 ANALYZE语句不支持采集外部表的统计数据,应该使用DMBS_STATS包来采集外部表的统计数据。 二、创建外部表的注意事项 1.需要先建立目录对象 2.对于操作系统文件的要求 文件要有固定的格式、不能有标题列、访问时会自动创建一个日志文件 3.在建立临时表时的相关限制 对表中字段的名称存在特殊字符的情况下,必须使用英文状态的下的双引号将该表列名称连接起来。如采用”SalseID#”。 对于列名字中特殊符号未采用双引号括起来时,会导致无法正常查询数据。 建议不用使用特殊的列标题字符 在创建外部表的时候,并没有在数据库中创建表,也不会为外部表分配任何的存储空间。 创建外部表只是在数据字典中创建了外部表的元数据,以便对应访问外部表中的数据,而不在数据库中存储外部表的数据。 简单地说,数据库存储的只是与外部文件的一种对应关系,如字段与字段的对应关系。而没有存储实际的数据。 由于存储实际数据,故无法为外部表创建索引,同时在数据使用DML时也不支持对外部表的插入、更新、删除等操作。 4.删除外部表或者目录对象 一般情况下,先删除外部表,然后再删除目录对象,如果目录对象中有多个表,应删除所有表之后

Oracle Database 18c 的10大新特性一览

在2017 Oracle OpenWorld大会上,关于Oracle 18c 的一系列新特性已经被披露出来,借助分散在各个会场的公开分享主题和内容、OOW提供的PPT下载,我们和大家抢鲜分享一下18c 中极具吸引力的新特性。 注意:标题里提到的10仅为约数,文章中提到的新特性不仅10个,分列也只是为了阅读便利,这些特性可能随着版本发布发生改变,仅供参考。 1.自治数据库- Autonomous Database 首先,从最高级别上,Oracle 18c 将是一个『自治数据库- Autonomous Database』,这由Larry Ellison首先发布,而在此框架下,一系列的设计由此展开。 2.云级别可用性增强- Cloud-Scale Availability 这其中包含了一系列的新特性,包括: 支持跨地域和混合云的自动的Sharding能力; RAC Sharding支持; 在ADG中支持Nologging数据的复制同步; ADG自动重定向update操作到主库(这个特性对于读写分离很有用); Grid Infrastructure 打补丁的零影响;

建议的瞬时逻辑备库滚动升级; 3.In-Memory 内存选件增强 内存选件获得了大量的增强,包括: 自动In-Memroy管理,这应该指自动选择适合In-Memory的对象并压缩提速等;支持In-Memory的内存表,这个特性很有用; In-Memory 支持NVRAM 内存架构; 针对数据仓库的特定增强,In-Memory 动态扫描;优化算法等; 4.In-Memory的外部表和InLine外部表支持

db2与oracle差别

db2与oracle差别 1:并发机制 Oracle的默认隔离级是快照(Snapshot),写入事务可不能堵塞读取事务,读取事务能够猎取当前已提交值。DB2默认是游标稳固性(Cursor Stability),写入事务会堵塞读取事务。 2: 数据类型 数据库的核心是数据,类型不匹配或者语义的不同都会阻碍应用是否能够同时在两种数据库中运行。Oracle支持一些非SQL标准的数据类型,例如VARCHAR2,这些是不被D B2支持的;另外,Oracle中的日期、时刻格式和DB2中相应类型在语义上不完全一致;最后Oracle的PL/SQL储备过程所支持的一些标量数据类型在DB2中需要被映射才能被识 别。如右:

3: 隐式类型转换 Oracle使用弱类型转换,而DB2使用强类型转换。隐式类型转换能完成一种类型向另外一种类型的自动转换,关于不匹配的类型,假如数据类型能被合明白得释,比较或者赋值时能够执行隐式类型转换;强类型转换规则,意味着字符串和数字类型之间不能直截了当进行比较,除非显式转换。 4:SQL方言 DB2传统上坚持对SQL标准的支持,但Oracle实现了专门多方言。例如:CONNEC T BY 递归语句、(+)连接操作符、DUAL表、ROWNUM伪列、ROWID伪列、MINUS 操作符、SELECT INTO FOR UPDATE语句、TRUNCATE TABLE等。假如要在DB2数据库上运行使用了上述方言的应用,就需要进行代码级别的翻译,工作量较大。 5:PL/SQL语言 就储备过程和函数开发而言,DB2使用SQL PL语言来开发,Oracle使用PL/SQL 语言来开发。SQL PL和PL/SQL差异庞大,这也是从Oracle到DB2转型最大的工作量所在。 6:内置包 为了方便应用程序开发的需要,Oracle数据库提供了专门多内置包:DBMS_OUTPUT、DBMS_SQL、DBMS_ALERT、DBMS_PIPE、DBMS_JOB、DBMS_LOB、DBMS_UTI LITY、UTL_FILE、UTL_MAIL和UTL_SMTP等。使用了这些包的应用程序要想在DB2上运行,就需要在DB2中重新实现一遍,工作量庞大。 7:客户端编程接口 Oracle和DB2针对不同的编程语言提供了不同的编程接口或者驱动,然而编程接口和驱动在语法上存在较大差异,而且在语义上也有一定区别。例如,Oracle针对Java语言提

详说Navicat for Oracle外部表及栏位

详说Navicat for Oracle外部表及栏位 Navicat for Oracle以简化的工作环境,提高Oracle开发人员和管理员的效率和生产力。凭借精心设计的用户界面,可以简便快捷地以安全且简单的方法创建、组织、访问和共享信息,优化Oracle管理。Navicat for Oracle能连接到版本8i或以上的Oracle数据库服务器,并支持大部分最新版本的Oracle对象功能,包括目录、表空间、同义词、实体化视图、触发器、序列、类型等。本教程将由Navicat官网详细介绍Navicat for Oracle外部表及其栏位。 Oracle 外部表 外部表访问在外部源的数据,就好像它是在数据库中的表。当创建外部表时,实际是创建数据字典的元数据,让用户可以访问外部的数据。需要注意的是,外部表是只读的,DML 操作是不可以创建索引。

Oracle 外部表栏位 在 Navicat“栏位”选项卡中,只需简单地点击栏位就可以编辑,右击显示弹出菜单或使用栏位工具栏,便可以创建新的或删除选定的栏位。要搜索一个栏位名,选择编辑->查找或使用快捷键:CTRL+F。 ●添加栏位:添加一个栏位到表。 ●删除栏位:删除已选择的栏位。 ●复制栏位:可修改现有栏位来添加一个新栏位,右击并在弹出菜单中选择复制栏位。 名编辑框:设置栏位名,栏位名在表的全部栏位中必须是唯一的。 类型下拉列表:可定义栏位数据的类型。 长度编辑框:定义栏位的精度(总位数),使用比例编辑框定义数字列的比例(小数点右边的位数),缩短栏位长度可能会导致数据丟失。 栏位属性 引导栏位精度:设置在引导栏位的位数。 小数秒精度:设置SECOND 日期时间栏位小数部分的位数。 年份精度:设置年份的位数。 单位:设置单位为BYTE 或CHAR。 对象模式:设置栏位类型的对象模式。 对象类型:设置栏位的对象类型。 上面这些选项取决于用户选择栏位的类型。

oracle外部表External table

外部表External table 把一个普通的文本格式的OS文件看作是Oracle数据库的外部表,Oracle可以象普通表一样进行select 操作,可以建视图,可以与其他进行连接等,但不能对其进行DML操作,即该表是只读的!(10g里可借此导出数据至平面dmp文件)。 External table和正规的表很相似,以下的几点需要注意: l 数据在数据库的外部组织,是操作系统文件。 l 操作系统文件在数据库中的标志是通过一个逻辑目录来映射的。 l 数据是只读的。(外部表相当于一个只读的虚表) l 不可以在上面运行任何DML操作,不可以创建索引。 l 可以查询操作和连接,可以并行操作。 假设如下的两个平面文件 1.dat: 7301,SMITH,CLERK,7902,17-DEC-80,100,0,20 7402,ALLEN,SALESMAN,7698,20-FEB-81,250,0,30 7503,WARD,SALESMAN,7698,22-FEB-81,450,0,30 7504,JONES,MANAGER,7839,02-APR-81,1150,0,20 2.dat: 7611,MARTIN,SALESMAN,7698,28-SEP-81,1250,0,30 7612,BLAKE,MANAGER,7839,01-MAY-81,1550,0,30 7913,MILLER,CLERK,7782,23-JAN-82,3500,0,10 创建一个逻辑目录: CREATE DIRECTORY DIR_TEST AS 'D:TEMP'; 定义外部表: CREATE TABLE EXT1 emp_id number(4), ename varchar2(12), job varchar2(12) , mgr_id??number(4) , hiredate date, salary number(8), comm number(8), dept_id number(2)) ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY DIR_TEST ACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINE FIELDS TERMINATED BY ',')

5.3SQL语句的使用-从多张表中查询取出数据

多表连接 国际标准相比于Oracle标准,国际标准语句太过复杂。 在join里可以附加其他条件: 上述两个例子表达的意思是相同的,另外从调优方面来看,上述语句中先执行where比先执行join要快很多

表本身的链接join 如下图,employees表中employee_id为103的managr_id为102,在自身的本张表中就有employee_id为102的人,如果想查103的manager_id为何人,就可以join自身的表,实现过程就是把复制这张表,再和这张表join

国际标准 Oracle标准 不相等的表链接 以上所述都是两个或多个表之间列里面有相同的值,下面学习两个表之间不同的值进行链接,如下图,employees表显示人员的工资,job_grades表为自建表,显示有6个标准,每个标准都代表一个工资段,要把employees表中的人员工资与job_grades表中的工资段对应起来,就是两个表之间的不相等链接。

国际标准 Oracle标准

外部表链接 以上都是两个表之间有值是相同或者包含在里面的(内部表链接inner joins),如下图所示,departments表中的department_id中190值在employees表中的department_id是不存在的,如果两个表进行join的话190值的列与employees表中的列是显示不出来的,现在有一种方法,叫做外部表链接(outer joins)可以进行这样的链接。 没有匹配上的列显示出来,外部表链接会把匹配上的列与没有匹配上的列都显示出来。 外部表链接与内部表连接的区别: 1.内部表链接只把匹配上的列显示出来,外部表连接把匹配上的没有匹配上的都显示出来。 2.外部表链接包含外部左链接与外部右链接,左链接含义为,相互链接的两张表分为左表 与右表,如果显示出所有的匹配列与左表中有的值右表中没有的值,这叫做左链接,如果显示出所有匹配的列,与右表中有的值左表中没有的值,这个叫做右链接 3.全链接,把相互链接的两张表,把两张表中所有匹配的值与所有没有匹配的值显示出来, 这个就叫做全链接(full outer join) 外部左链接(left outer join): 下例中employees表为左表(国际标准)

使用oracle外部表查询警告日志文件

从Oracle9i开始,Oracle的外部表技术(Oracle External Tables)被极大的增强,通过外部表访问外部数据增强了Oracle数据库和外部数据源进行数据交互的能力,对于数据仓库和ETL来说,这些增强极大的方便了数据访问。 对于DBA来说,最常见一个例子是可以使用外部表来访问警告日志文件或其他跟踪文件. 以下一个例子用来说明外部表的用途。 首先需要创建一个Directory: [oracle@jumper oracle]$ sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.4.0 - Production on Sun Oct 15 21:42:28 2006 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production With the Partitioning option JServer Release 9.2.0.4.0 - Production SQL> create or replace directory bdump 2 as '/opt/oracle/admin/eygle/bdump'; Directory created. SQL> col DIRECTORY_PATH for a30 SQL> col owner for a10 SQL> select * from dba_directories; OWNER DIRECTORY_NAME DIRECTORY_PATH ---------- ------------------------------ ------------------------------ SYS BDUMP /opt/oracle/admin/eygle/bdump

相关主题
文本预览
相关文档 最新文档