-
Recent Posts
Recent Comments
- yangtingkun on 非空字段空值对查询的影响
- Eric Zong on 非空字段空值对查询的影响
- Kamus on Oracle Ace Director
- 设置全局死锁优先级 | yangtingkun on RAC全局死锁检测时间
- ORA-600(krbounotread_noctx)错误 | yangtingkun on ORA-600(krboReadBitmap_badbitmap)错误
Archives
- December 2020
- February 2019
- December 2018
- November 2018
- October 2018
- July 2018
- June 2018
- May 2018
- July 2016
- July 2013
- June 2013
- November 2012
- October 2012
- September 2012
- August 2012
- July 2012
- June 2012
- May 2012
- April 2012
- March 2012
- February 2012
- January 2012
- December 2011
- November 2011
- October 2011
- September 2011
- August 2011
Categories
Meta
Tag Archives: external table
数据泵导出表部分列
看到群里有人提出一个需求,一张表数据量很大,只想导出其中一部分列。 无论是老版本exp还是数据泵expdp,Oracle都提供了QUERY的功能,这使得查询表中部分记录的功能可以实现,但是QUERY只能过滤行,而不能过滤列,Oracle数据泵会读取表中全部列的。 在12c中,Oracle为数据泵提供了VIEW功能,使得导出的时候可以根据视图的定义来导出表中的数据: SQL> select banner from v$version; BANNER ——————————————————————————– Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 – Production SQL> CREATE TABLE T_TABLES AS SELECT * FROM ALL_TABLES; 表已创建。 SQL> create view v_tables as select owner, table_name, tablespace_name from t_tables … Continue reading
查询外部表出现无法打开日志文件的错误
在运行ORACLE_LOADER类型的外部表查询时报错,无法打开外部表的日志文件。 查询外部表出现KUP-4040错误: 数据库安装在操作系统oracle用户下,默认组为oinstall,当前使用的是操作系统用户tingkun.yang,同样是oinstall组,因此当前用户可以用SYSDBA身份登录数据库。 当前用户tingkun.yang运行sqlplus连接数据库,创建目录和外部表,在读取外部表时报错: [tingkun.yang@enmoteam2 ~]$ id uid=505(tingkun.yang) gid=501(oinstall) groups=501(oinstall),502(dba) [tingkun.yang@enmoteam2 ~]$ ps -ef|grep lgwr oracle 1552 1 0 Sep07 ? 00:04:14 ora_lgwr_enmot2 505 28312 28185 0 22:52 pts/0 00:00:00 grep lgwr [tingkun.yang@enmoteam2 ~]$ sqlplus olasuser/olasuser SQL*Plus: Release 11.2.0.3.0 Production … Continue reading
Posted in ORACLE
Tagged directory, external table, KUP-4040, ORA-29400, ORA-29913, ORACLE_LOADER
Leave a comment
查询外部表出现KUP-4040错误
在运行ORACLE_LOADER类型的外部表查询时出现这个错误。 数据库的情况比较复杂,简单描述一下。数据库是安装在操作系统oracle用户下,默认组为oinstall,当前使用的是操作系统用户tingkun.yang,同样是oinstall组,因此当前用户可以用SYSDBA身份登录数据库。 以当前用户tingkun.yang运行sqlplus连接数据库,创建目录和外部表,在读取外部表时报错: [tingkun.yang@enmoteam2 ~]$ id uid=505(tingkun.yang) gid=501(oinstall) groups=501(oinstall),502(dba) [tingkun.yang@enmoteam2 ~]$ ps -ef|grep lgwr oracle 1552 1 0 Sep07 ? 00:04:14 ora_lgwr_enmot2 505 28312 28185 0 22:52 pts/0 00:00:00 grep lgwr [tingkun.yang@enmoteam2 ~]$ sqlplus olasuser/olasuser SQL*Plus: Release 11.2.0.3.0 Production ON … Continue reading
Posted in ORACLE
Tagged directory, external table, KUP-4040, ORA-29400, ORA-29913, ORACLE_LOADER
Leave a comment
外部表的ROWID信息
ROWID是访问数据库中表的物理地址信息,Oracle提供了ROWID伪列,可以通过ROWID直接访问表中的数据。 ROWNUM固化外部表结果集存在问题:https://yangtingkun.net/?p=38 ROWNUM固化外部表结果集存在问题(二):https://yangtingkun.net/?p=103 在测试外部表时,意外发现,外部表同样存在ROWID伪列: SQL> CREATE directory d_alert AS ‘D:\ORACLE\PRODUCT\ADMIN\YTK102\BDUMP’; 目录已创建。 SQL> CREATE TABLE t_alert 2 (text varchar2(1000) 3 ) 4 organization external 5 (TYPE oracle_loader 6 DEFAULT directory d_alert 7 access parameters 8 (records delimited BY newline 9 FIELDS … Continue reading
ROWNUM固化外部表结果集存在问题(二)
在客户的11.2.0.2环境中碰到了这个问题,Oracle在处理包含ROWNUM固化的外部表加载数据时返回错误的结果。 这一篇描述利用ROW_NUMBER来避免错误的产生。 外部表构造描述可以参考:https://yangtingkun.net/?p=35 ROWNUM固化外部表结果集存在问题::https://yangtingkun.net/?p=38 这个例子是在本机上运行,因此只是告警日志的名称发生了变化,其他的语法和上一篇文章中的一致,当然D_ALERT目录需要指向background_dump_dest参数指定的路径: SQL> CREATE TABLE T_ALERT 2 (TEXT VARCHAR2(4000) 3 ) 4 ORGANIZATION EXTERNAL 5 (TYPE ORACLE_LOADER 6 DEFAULT DIRECTORY D_ALERT 7 ACCESS PARAMETERS 8 (RECORDS DELIMITED BY NEWLINE 9 FIELDS (TEXT (1:255) CHAR)) 10 LOCATION (’ … Continue reading
ROWNUM固化外部表结果集存在问题
在客户的11.2.0.2环境中碰到了这个问题,Oracle在处理包含ROWNUM固化的外部表加载数据时返回错误的结果。 外部表构造描述可以参考:利用外部表读取告警日志文件 客户环境中创建的外部表和上面链接中的例子几乎完全一致: SQL> CREATE TABLE T_ALERT 2 (TEXT VARCHAR2(4000) 3 ) 4 ORGANIZATION EXTERNAL 5 (TYPE ORACLE_LOADER 6 DEFAULT DIRECTORY D_ALERT 7 ACCESS PARAMETERS 8 (RECORDS DELIMITED BY NEWLINE 9 FIELDS (TEXT (1:255) CHAR)) 10 LOCATION (’alert_xshdb1.log’)); TABLE created. … Continue reading
利用外部表读取告警日志文件
数据库的告警日志以文本的格式保存到文件系统中,虽然可以很方便的通过操作系统命令进行查看,而且11g中Oracle甚至还提供了专门的adrci工具,但是对于只能通过SQLPLUS或者其他查询工具连接到数据库的人而言,还是非常不方便。 不过其实这个问题可以很容易的通过外部表的方式解决。最简单的办法就是将alert文件中的每一行记录都当做表中一个VARCHAR2(4000)类型列的一行记录,这样就可以轻松的通过SQL的方式来访问告警日志了。 在创建外部表之前,需要创建一个DIRECTORY,这个目录的位置就是background_dump_dest初始化参数指定的位置。 SQL> SHOW parameter background_dump_dest NAME TYPE VALUE ———————————— ———– —————————— background_dump_dest string D:\ORACLE\PRODUCT\ADMIN\YTK102\BDUMP SQL> CREATE directory d_alert AS ‘D:\ORACLE\PRODUCT\ADMIN\YTK102\BDUMP’;SQL> show parameter background_dump_dest NAME TYPE VALUE ———————————— ———– —————————— background_dump_dest string D:\ORACLE\PRODUCT\ADMIN\YTK102\BDUMP SQL> create directory d_alert as ‘D:\ORACLE\PRODUCT\ADMIN\YTK102\BDUMP’; … Continue reading