15.未公开的Oracle数据库秘密笔记——X$固定表介绍
来源:互联网 发布:点云数据 编辑:程序博客网 时间:2024/05/22 15:27
15.未公开的Oracle数据库秘密笔记——X$固定表介绍
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50383214
官方文档对一些X$表有所提及,但是绝大多数在文档中是查不到的。
很多X$表相比于构建在其之上的GV$视图容纳了更多的信息。GV$或V$视图提供的信息就是不充分的,要详查其底层的X$表。很多X$表示不作为GV$视图的基表的。
1. X$固定表与C语言
ORACLE数据库管理系统的内核代码,即使不是全部,至少重要的部分使用C语言编写的。
V$视图背后的基本思路是使数据库管理员了解到C语言数据结构。
通过中间层将V$视图映射到C语言数据结构实现的。
一些X$表示与磁盘存储相关的。例如X$固定表X$KCCDC的列DCNAM,保存了通过RMAN命令COPY DATAFILE创建的数据文件副本的路径名。
任何设计优良的特性都有一个以上的命名方式。例如AUM(自动撤销管理),也称为SMU(系统管理撤销)
2. 分层系统结构
X$表名遵循严格的命名规则,其中几个字母代表了ORACLE内核中的一个层或者模块。例如
KC表示内核缓存(Kernel Cache),KT表示内核事务(KernelTransaction)
如下图1:
3. 从V$视图到X$固定表
V$视图展示的信息是一个限制性因素的情况。
新版本中显示了X$表中越来越多的信息,但有些时间还有必要从X$表中搜集更多的信息。
4. 从V$PARAMETER到X$表
文档中未做说明的参数以下划线“_”开头。
可以通过V$FIXED_VIEW_DEFINITION视图来查看实例中所有V$,GV$视图以及X$表的信息库。
例如探究视图V$PARAMETER得到如下信息:
idle> col view_definition format a80 word_wrapped
idle> select view_definition fromv$fixed_view_definition where view_name='V$PARAMETER';
VIEW_DEFINITION
--------------------------------------------------------------------------------
select NUM, NAME , TYPE , VALUE , DISPLAY_VALUE, DEFAULT_VALUE, ISDEFAULT ,
ISSES_MODIFIABLE , ISSYS_MODIFIABLE ,ISPDB_MODIFIABLE , ISINSTANCE_MODIFIABLE,
ISMODIFIED , ISADJUSTED , ISDEPRECATED,ISBASIC, DESCRIPTION, UPDATE_COMMENT,
HASH, CON_ID from GV$PARAMETER where inst_id =USERENV('Instance')
进一步执行如下:
idle> select view_definition from v$fixed_view_definitionwhere view_name='GV$PARAMETER';
VIEW_DEFINITION
--------------------------------------------------------------------------------
selectx.inst_id,x.indx+1,ksppinm,ksppity,ksppstvl, ksppstdvl, ksppstdfl,
ksppstdf, decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE'),
decode(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,'DEFERRED',
3,'IMMEDIATE','FALSE'), decode(bitand(ksppiflg/524288,1),1,'TRUE','FALSE'),
decode(bitand(ksppiflg,4),4,'FALSE',
decode(bitand(ksppiflg/65536,3), 0,'FALSE', 'TRUE')),
decode(bitand(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE'),
decode(bitand(ksppstvf,2),2,'TRUE','FALSE'), decode(bitand(ksppilrmflg/64, 1),
1, 'TRUE', 'FALSE'), decode(bitand(ksppilrmflg/268435456, 1), 1,'TRUE',
'FALSE'), ksppdesc, ksppstcmnt, ksppihash, x.con_id from x$ksppi x, x$ksppcv y
where (x.indx = y.indx) and bitand(ksppiflg,268435456) = 0 and
((translate(ksppinm,'_','#') not like'##%') and ((translate(ksppinm,'_','#')
not like '#%') or (ksppstdf = 'FALSE')or (bitand(ksppstvf,5) > 0)))
可以看到一些常用的X$表。
5. 参看文档中隐藏参数
查看文档中未作说明的参数(隐藏参数),如下:
-- SET MARKUP HTML ON SPOOL ON HEAD'<title>Oracle10g Hidden Parameters</title>'
set pages 9999
set lines 140
col name format a45
col value format a25 word_wrapped
col description format a45 word_wrapped
set trimspool on
set trimout on
SELECT
x.ksppinmname,
y.ksppstvlVALUE, /*,
decode(ksppity,
1, 'BOOLEAN',
2, 'STRING',
3, 'INTEGER',
4, 'PARAMETER FILE',
5, 'RESERVED',
6, 'BIG INTEGER',
'UNKNOWN')typ,
decode(ksppstdf,
'TRUE', 'DEFAULT VALUE',
'FALSE', 'INIT.ORA') isdefault,
decode(bitand(ksppiflg / 256, 1),
1, 'IS_SESS_MOD(TRUE)',
'FALSE')isses_modifiable,
decode(bitand(ksppiflg / 65536, 3),
1, 'MODSYS(NONDEFERED)',
2, 'MODSYS(DEFERED)',
3, 'MODSYS(*NONDEFERED*)',
'FALSE')issys_modifiable,
decode(bitand(ksppstvf, 7),
1, 'MODIFIED_BY(SESSION)',
4, 'MODIFIED_BY(SYSTEM)',
'FALSE')is_modified,
decode(bitand(ksppstvf, 2),
2, 'ORA_STARTUP_MOD(TRUE)'
'FALSE')is_adjusted,*/
ksppdescdescription
--,ksppstcmnt update_comment
FROM x$ksppi x,
x$ksppcv y
WHERE x.inst_id = userenv('Instance')
AND y.inst_id= userenv('Instance')
AND x.indx =y.indx
and substr(x.ksppinm,1,1)='_'
order by 1
;
Exit
6. X$表和V$视图关系
查看任意X$固定表上层的V$视图?
通过在V$视图上执行SELECT语句从V$SQL_PLAN视图中获取底层X$表的名称。最后任务是在一个表中保存V$视图与X$表的联系。
代码如下:
DROP TABLE x_v_assoc;
CREATE TABLE x_v_assoc (
x_idnumber,
v_idnumber);
*/
set serveroutput on size 1000000
declare
CURSORv_views IS SELECT name, object_id FROM v$fixed_table WHERE name like 'V$%'ORDER BY name;
CURSORplan_curs(p_hash_value number) IS SELECT DISTINCT nvl(object#, -1) object#,object_name
FROMv$sql_plan
WHEREhash_value=p_hash_value
ANDoperation LIKE 'FIXED TABLE%';
prev_hash_value number;
object_name varchar2(30);
v_cursor integer;
resultinteger;
object_id number;
begin
FORv_rec IN v_views LOOP
BEGIN
dbms_output.put_line(v_rec.name);
v_cursor :=dbms_sql.open_cursor;
-- parse and execute astatement that selects from the v$ view but returns no rows
dbms_sql.parse(v_cursor, 'SELECT * FROM '||v_rec.name||' WHERErownum=0', dbms_sql.native);
result:=dbms_sql.execute_and_fetch(v_cursor);
-- get hash value ofprevious statement, i.e. select from v$view
SELECT prev_hash_valueINTO prev_hash_value
FROM v$session
WHEREaudsid=userenv('sessionid')
AND rownum=1; -- justin case several child cursors exist, prev_child_number not available in 9i
dbms_output.put_line('prev_hash_value: '||prev_hash_value);
dbms_sql.close_cursor(v_cursor);
FOR plan_rec INplan_curs(prev_hash_value) LOOP
-- object_namemay have this format: X$KEWMEVMV (ind:1
-- object_id is NULL for fixed tables
result:=instr(plan_rec.object_name, ' ');
IF result >0 THEN
object_name:=substr(plan_rec.object_name,1,result-1);
ELSE
object_name:=plan_rec.object_name;
END IF;
SELECTobject_id INTO object_id FROM v$fixed_table WHERE name=object_name;
IF SQL%NOTFOUNDTHEN
dbms_output.put_line('object_id for '||object_name||' not found inV$FIXED_TABLE');
ELSE
dbms_output.put_line(' '||object_name||': '||object_id);
END IF;
INSERT INTO x_v_assoc(x_id,v_id) VALUES(object_id, v_rec.object_id);
END LOOP;
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line(dbms_utility.format_error_stack);
END;
ENDLOOP;
end;
/
commit;
spool x_views
set lines 140
set trimout on
set trimspool on
break on x_name noduplicates
-- x$ tables used by v$ views
SELECT
f1.name x_name,
f2.name v_name
FROM x_v_assoc a, v$fixed_table f1, v$fixed_table f2
WHERE a.x_id=f1.object_id
AND a.v_id=f2.object_id
ORDER BY x_name;
clear breaks
break on v_name noduplicates
-- v$views and underlying x$ tables
SELECT
f1.name v_name,
f2.name x_name
FROM x_v_assoc a, v$fixed_table f1, v$fixed_table f2
WHERE a.v_id=f1.object_id
AND a.x_id=f2.object_id
ORDER BY v_name;
spool off
会创建表X_V_assoc,然后查询如下:
sys@ORCL> select f1.name x_name,f2.name v_namefrom x_v_assoc a,v$fixed_table f1,v$fixed_table f2 where a.x_id=f1.object_id
anda.v_id=f2.object_id order by x_name;
获得V$视图底层的X$固定表的列表如下:
sys@ORCL> select f1.name x_name,f2.name v_namefrom x_v_assoc a,v$fixed_table f1,v$fixed_table f2 where a.v_id=f1.object_id
and a.x_id=f2.object_idorder by x_name;
7. 常用的X$表
X$KGLLK,X$KSPPI, X$KSPPCV,X$BH,X$KSLED, X$KFFXP
- 15.未公开的Oracle数据库秘密笔记——X$固定表介绍
- 10.未公开的Oracle数据库秘密笔记——X$BH表及LATCH争用
- 16.未公开的Oracle数据库秘密笔记——X$BH表与闩锁争用
- 7.未公开的Oracle数据库秘密笔记——数据字典基表
- 1.未公开的Oracle数据库秘密笔记——参数说明——AUDIT_SYSLOG_LEVEL
- 2.未公开的Oracle数据库秘密笔记——参数说明——PGA_AGGREGATE_TARGET
- 3.未公开的Oracle数据库秘密笔记——参数说明——EVENT
- 4.未公开的Oracle数据库秘密笔记——参数说明——OS_AUTHENT_PREFIX
- 6.未公开的Oracle数据库秘密笔记——隐藏参数——_ASM_ALLOW_ONLY_RAW_DISKS
- 8.未公开的Oracle数据库秘密笔记——模式限制
- 9.未公开的Oracle数据库秘密笔记——10027事件与死锁
- 11.未公开的Oracle数据库秘密笔记——ORADEBUG使用
- 12.未公开的Oracle数据库秘密笔记——10046事件和扩展SQL跟踪
- 14.未公开的Oracle数据库秘密笔记——10079事件和网络数据包
- 未公开的Oracle数据库秘密
- 13.未公开的Oracle数据库秘密笔记——10053事件和基于成本的优化器
- 5.未公开的Oracle数据库秘密笔记——隐藏参数——跟踪文件权限
- 未公开的mustang核心秘密(一):java的FileSystem
- 14.未公开的Oracle数据库秘密笔记——10079事件和网络数据包
- 047 exam c 20-end
- 基于GTID搭建主从
- (九十六)函数和结构
- bzoj3275 Number
- 15.未公开的Oracle数据库秘密笔记——X$固定表介绍
- 实战c++中的vector系列--vector应用之STL的find、find_if、find_end、find_first_of、find_if_not(C++11)
- linux下进程资源的限制——struct rlimit详解
- scala习题(十)——特质
- Android 资源管理 Asset 、Raw 和Drawable
- 图的深度优先遍历算法
- mysql binlog系列(二)----java解析binlog
- 例题5-7 UVA 136 Ugly Numbers丑数(set+优先队列)
- 使用jQuery发送Ajax请求