知识大全 深入了解Oracle数据字典
Posted 视图
篇首语:人生必须的知识就是引人向光明方面的明灯。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 深入了解Oracle数据字典相关的知识,希望对你有一定的参考价值。
深入了解Oracle数据字典 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
首先 Oracle的字典表和视图基本上可以分为三个层次 X$表 这一部分表是Oracle数据库的运行基础 在数据库启动时由Oracle应用程序动态创建 这部分表对数据库来说至关重要 所以Oracle不允许SYSDBA之外的用户直接访问 显示授权不被允许 如果显示授权你会收到如下错误: SQL> grant select on x$ksppi to eygle; grant select on x$ksppi to eygle * ERROR at line : ORA : can only select from fixed tables/views GV$和V$视图 从Oracle 开始 GV$视图开始被引入 其含义为Global V$ 除了一些特例以外 每个V$视图都有一个对应的GV$视图存在 GV$视图的产生是为了满足OPS环境的需要 在OPS环境中 查询GV$视图返回所有实例信息 而每个V$视图基于GV$视图 增加了INST_ID列判断后建立 只包含当前连接实例信息 注意 每个V$视图都包含类似语句 where inst_id = USERENV( Instance ) 用于限制返回当前实例信息 我们从GV$FIXED_TABLE和V$FIXED_TABLE开始 SQL> select view_definition from v_$fixed_view_definition where view_name= V$FIXED_TABLE ; VIEW_DEFINITION select NAME OBJECT_ID TYPE TABLE_NUM from GV$FIXED_TABLE where inst_id = USERENV( Instance ) 这里我们看到V$FIXED_TABLE基于GV$FIXED_TABLE创建 SQL> select view_definition from v_$fixed_view_definition where view_name= GV$FIXED_TABLE ; VIEW_DEFINITION select inst_id kqftanam kqftaobj TABLE indx from x$kqfta union all select inst_id kqfvinam kqfviobj VIEW from x$kqfvi union all select inst_id kqfdtnam kqfdtobj TABLE from x$kqfdt 这样我们找到了GV$FIXED_TABLE视图的创建语句 该视图基于X$表创建 GV_$ V_$视图和V$ GV$同义词 这些视图是通过catalog ql创建 当catalog sql运行时: create or replace view v_$fixed_table as select * from v$fixed_table; create or replace public synonym v$fixed_table for v_$fixed_table; create or replace view gv_$fixed_table as select * from gv$fixed_table; create or replace public synonym gv$fixed_table for gv_$fixed_table; 我们注意到 第一个视图V_$和GV_$首先被创建 v_$和gv_$两个视图 然后基于V_$视图的同义词被创建 所以 实际上通常我们访问的V$视图 其实是指向V_$视图的同义词 而V_$视图是基于真正的V$视图(这个视图是基于X$表建立的) 而v$fixed_view_definition视图是我们研究Oracle对象关系的一个入口 仔细理解Oracle的数据字典机制 有助于深入了解和学习Oracle数据库知识 再进一步 X$表 关于X$表 其创建信息我们也可以从数据字典中一窥究竟 首先我们考察bootstrap$表 该表中记录了数据库启动的基本及驱动信息 SQL> select * from bootstrap$; LINE# OBJ# SQL_TEXT CREATE ROLLBACK SEGMENT SYSTEM STORAGE ( INITIAL K NEXT K MINEXTENTS M CREATE CLUSTER C_FILE#_BLOCK#( TS# NUMBER SEGFILE# NUMBER SEGBLOCK# NUMBER) CREATE INDEX I_FILE#_BLOCK# ON CLUSTER C_FILE#_BLOCK# PCTFREE INITRANS MAXT CREATE TABLE SEG$( FILE# NUMBER NOT NULL BLOCK# NUMBER NOT NULL TYPE# NUMBE CREATE TABLE CLU$( OBJ# NUMBER NOT NULL DATAOBJ# NUMBER TS# NUMBER NOT NULL CREATE CLUSTER C_TS#( TS# NUMBER) PCTFREE PCTUSED INITRANS MAXTRANS CREATE INDEX I_TS# ON CLUSTER C_TS# PCTFREE INITRANS MAXTRANS STORAGE ( 这部分信息 在数据库启动时最先被加载 跟踪数据库的启动过程 我们发现数据库启动的第一个动作就是: create table bootstrap$ ( line# number not null obj# number not null sql_text varchar ( ) not null) storage (initial K objno extents (file block )) 这部分代码是写在Oracle应用程序中的 在内存中创建了bootstrap$以后 Oracle就可以从file block 上读取其他信息 创建重要的数据库对象 从而根据这一部分信息启动数据库 这就实现了数据库的引导 类似于操作系统的初始化 这部分你可以参考biti_rainy的文章 X$表由此建立 这一部分表可以从v$fixed_table中查到 SQL> select count(*) from v$fixed_table where name like X$% ; COUNT(*) 共有 个X$对象被记录 GV$和V$视图 X$表建立以后 基于X$表的GV$和V$视图得以创建 这部分视图我们也可以通过查询V$FIXED_TABLE得到 SQL> select count(*) from v$fixed_table where name like GV$% ; COUNT(*) 这一部分共 个对象 SQL> select count(*) from v$fixed_table where name like V$% ; COUNT(*) 同样是 个对象 v$fixed_table共记录了: + + 共 个对象 我们通过V$PARAMETER视图来追踪一下数据库的架构: SQL> select view_definition from v$fixed_view_definition a where a VIEW_NAME= V$PARAMETER ; VIEW_DEFINITION select NUM NAME TYPE VALUE ISDEFAULT ISSES_MODIFIABLE ISSYS_MODIFIA BLE ISMODIFIED ISADJUSTED DESCRIPTION UPDATE_MENT from GV$PARAMETER wh ere inst_id = USERENV( Instance ) 我们看到V$PARAMETER是由GV$PARAMETER创建的 SQL> select view_definition from v$fixed_view_definition a where a VIEW_NAME= GV$PARAMETER ; VIEW_DEFINITION select x inst_id x indx+ ksppinm ksppity ksppstvl ksppstdf decode(bitand(kspp iflg/ ) TRUE FALSE ) decode(bitand(ksppiflg/ ) IMMEDIATE DEFERRED IMMEDIATE FALSE ) decode(bit and(ksppstvf ) MODIFIED SYSTEM_MOD FALSE ) decode(bitand(ksppstvf ) TRUE FALSE ) ksppdesc ksppstcmnt from x$ksppi x x$ksppcv y where (x i ndx = y indx) and ((translate(ksppinm _ # ) not like #% ) or (ksppstdf = F ALSE )) 在这里我们看到GV$PARAMETER来源于x$ksppi x$ksppcv两个X$表 x$ksppi x$ksppcv 基本上包含所有数据库可调整参数 v$parameter展现的是不包含 _ 开头的参数 以 _ 开头的参数我们通常称为隐含参数 一般不建议修改 但很多因为功能强大经常使用而广为人知 cha138/Article/program/Oracle/201311/17400相关参考
Oracle数据字典与动态性能视图 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 常用的数据字典
如何有效的利用ORACLE数据字典 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!ORACLE的数据
Oracle数据字典的介绍与应用实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle
ORACLE常用数据字典的查询视图 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 用户 查看用
Oracle用户数据字典以及查询表字段 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 查看当前用
ORACLE主要的系统表和数据字典视图 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 系统表
Oracle快速删除数据字典管理的表空间 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我的测试
知识大全 Oracle数据字典(可用它动态获取字段名、长度、类型等)
Oracle数据字典(可用它动态获取字段名、长度、类型等) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
首先了解什么是外部表与其它表的区别建立一个简单的外部表(主要看操作过程)最后我们用外部表查看Oracle报警日志 一了解oracle外部表 外部表定义结构被存放在数据字典而表数据被放在OS文件
Oracle数据块原理深入剖析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数据块(Oracl