网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  进行logmnr操作时发现空列名的具体原因     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:110次  录入:管理员--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')

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

 
 
上一篇: 在线日志文件都是active或current的现象    下一篇: 实例讲解清除oracle10g rac crs的方法
  相关文档
数据库Oracle 11g Alert Log 的新变化 09-01
Oracle中自动工作负载信息库(AWR)介绍 04-12
解析:学习oracle架构应当掌握哪些知识 (1) 11-20
如何查看"control file"中保存的内容 02-27
Oracle数据库编写PL/SQL代码经验谈 04-11
如何使用exp以传输表空间的方式将其导出 08-12
Oracle数据库不同版本间用exp来导数据 09-01
如何获取或记录Oracle语句执行时间 09-29
深入研究Oracle数据库中空间管理的方法 06-10
红旗linux和Oracle10gr2的冲突 05-27
Oracle数据库字符集转换规律全面剖析 04-11
带你轻松掌握行分链与行迁移的相关概念 03-17
轻松接触分布式数据库全局名与数据库链 01-24
Oracle数据库中利用ASSM改善分段存储 04-12
快速解决"oracle"数据库中的常见问题 (1) 03-17
SQL Server和Oracle并行处理比较分析 04-11
如何在oracle层次查询中给siblings排序 04-28
详细讲解有关"cbo"优化的三个疑难问题 02-03
详细讲解获得当前"scn"的几种有效方式 03-17
数据库维护 01-15
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息