首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux数据库>oracle>正文

进行LOGMNR操作时发现空列名的具体原因

http://www.oklinux.cn  2008-02-27  来源: 赛迪网 林夕  会员收藏  游客收藏  【 】 

在处理一些已经提交的数据时,因为提交的时间超过了可以闪回的时间,所以采用了LOGMNR来处理。在处理的过程中,很多人都会发现得到的SQL语句中,包含了空列的情况。

例子:

SQL> CONN SYS@YTK102 AS SYSDBA输入口令: 已连接。
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

会话已更改。

SQL> SELECT GROUP#, FIRST_TIME FROM V$LOG;

GROUP# FIRST_TIME
---------- -------------------
1 2008-01-18 22:35:57
2 2008-01-20 18:58:37
3 2008-01-16 23:56:50

SQL> SELECT MEMBER FROM V$LOGFILE WHERE GROUP# = 2;

MEMBER
-------------------------------
E:ORACLEORADATAYTK102REDO02.LOG

SQL> ALTER SYSTEM SWITCH LOGFILE;

系统已更改。

SQL> EXEC DBMS_LOGMNR.ADD_LOGFILE('E:ORACLEORADATAYTK102REDO02.LOG', DBMS_LOGMNR.NEW)

PL/SQL 过程已成功完成。

SQL> EXEC DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG)

PL/SQL 过程已成功完成。

SQL> SELECT SQL_UNDO FROM V$LOGMNR_CONTENTS
2 WHERE SEG_NAME = 'T_LOGMNR';

SQL_UNDO
--------------------------------------------------------------------------
insert into "YANGTK"."T_LOGMNR"("ID","NAME","") values ('1','A',NULL);
insert into "YANGTK"."T_LOGMNR"("ID","NAME","") values ('2','B',NULL);
insert into "YANGTK"."T_LOGMNR"("ID","NAME","") values ('3','C',NULL);

在此部分可以看到T_LOGMNR表后面跟了一个空的列,而这个列的值也是NULL。

检查表结构:

SQL> DESC YANGTK.T_LOGMNR
名称 是否为空? 类型
------------------------- -------- ----------------
ID NOT NULL NUMBER
NAME VARCHAR2(30)

SQL> SELECT TABLE_NAME, COLUMN_NAME FROM DBA_TAB_COLUMNS
2 WHERE TABLE_NAME = 'T_LOGMNR'
3 AND OWNER = 'YANGTK';

TABLE_NAME COLUMN_NAME
------------------------------ ---------------------
T_LOGMNR ID
T_LOGMNR NAME

从数据字典中找不到这个空列的信息,直接查询COL$表:

SQL> SELECT OBJECT_ID FROM DBA_OBJECTS
2 WHERE OBJECT_NAME = 'T_LOGMNR'
3 AND OWNER = 'YANGTK';

OBJECT_ID
----------
53636

SQL> SELECT NAME FROM COL$ WHERE OBJ# = 53636;

NAME
------------------------------
ID
NAME
SYS_NC00003$

从COL$中可以看到这个隐藏列了,检查隐藏列:

SQL> SELECT NAME, DEFAULT$ FROM COL$ WHERE OBJ# = 53636;

NAME DEFAULT$
------------------------------ -----------------------
ID
NAME
SYS_NC00003$ DECODE("ID",1,"NAME"||'1',"NAME"||'2')

现在已经可以看出这个列是一个基于基础列的函数表达式,对比函数索引列:

SQL> SELECT INDEX_NAME, INDEX_TYPE, UNIQUENESS FROM DBA_INDEXES
2 WHERE TABLE_NAME = 'T_LOGMNR'
3 AND TABLE_OWNER = 'YANGTK';

INDEX_NAME INDEX_TYPE UNIQUENES
------------------- ---------------- ---------
SYS_C005983 NORMAL UNIQUE
IND_T_LOGMNR_NAME FUNCTION-BASED NORMAL NONUNIQUE

SQL> SELECT COLUMN_EXPRESSION FROM DBA_IND_EXPRESSIONS 
2 WHERE TABLE_NAME = 'T_LOGMNR'
3 AND TABLE_OWNER = 'YANGTK'
4 AND INDEX_NAME = 'IND_T_LOGMNR_NAME';

COLUMN_EXPRESSION
------------------------------------------------
DECODE("ID",1,"NAME"||'1',"NAME"||'2')

至此,我们可以看到,这个隐藏列就是函数索引产生的。


上一篇:系统管理:基于Linux的负载均衡技术介绍   下一篇:实例讲解清除Oracle10g RAC CRS的方法


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·实例讲解清除Oracle10g RAC CRS的方法
·"Oracle"闪回功能恢复偶然丢失的数据
·同时使用数据库链和序列时的注意事项
·如何查看"Control File"中保存的内容
·监控数据库性能的"SQL"语句都有哪些?
·RAC环境中查询不到其他实例执行的SQL
·建库的过程中DBCA报错,错误号为ORA-12547
·使用TYPE方式,解决IN列表过长的问题
·Oracle所进行的回滚仅针对用户发出的事务
·PFILE创建SPFILE后数据库无法启动的问题
·如何利用Oracle的全文索引实现切词功能
·在线日志文件都是active或current的现象
·如何检测Oracle的可用性和表空间容量
·决定用户对全部对象名引用的三种数据库链
·如何对存储过程返回的结果进行条件查询
·版本在9.2.0.3以下时autotrace的设置方法
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·讲解Oracle移动数据文件到新分区的过程
·如何使用Ruby脚本调用Oracle存储过程
·哪些因素可以影响Oracle数据库的性能
·带你深入了解Oracle数据库的进制转换
·讲解V$Datafile_Header相关字段的使用
·探讨基于不绑定变量与绑定变量的柱状图
·pl/sql developer中TIMESTAMP的显示格
·教你快速掌握如何使用"Opatch"打补丁
·如何调整"Oracle"数据库服务器的性能
·视图上含有row_number分析函数没法走索
·Linux自动备份MySQL数据库的实用方法
·如何更改rac的vip地址和集群互联地址
  阅读排行
·如何修改遗失的MySQL的ROOT用户密码
·详解远程SHELL下安装配置RedHat ES 5的
·教你如何将MySQL数据库的密码恢复
·教你在MySQL从口令恢复设置的密码
·在 Oracle Enterprise Linux 上升级到
·oracle9i installation on fedora core
·Oracle Instant client介绍
·Oracle高级复制(同步复制)配置步骤详细
·用Oracle归档日志进行恢复的方法
·Linux下的Oracle数据库编程详解
·Linux下Oracle9i RMAN备份及恢复步骤介
·带你轻松接触一些比较常用的sql*plus命
·Oracle的快照复制
·Oracle HA 在Unix上双机环境的安装指南
·Oracle 数据库存储结构简介
网摘收藏: