当前位置: 首页 > news >正文

整理oracle数据字典,oracle结构梳理---数据字典

数据字典(datadictionary)是 Oracle数据库的一个重要组成部分,这是一组用于记录数据库信息的表

u 数据库中所有方案对象(schemaobject)的定义(包括表,视图,索引,簇,同义词,序列,过程,函数,包,触发器等等)

u 数据库为一个方案对象分配了多少空间,以及该对象当前使用了多少空间

u 列的默认值

u 完整性约束(integrityconstraint)信息

u 数据库用户信息

u 每个用户被授予(grant)的权限(privilege)与角色(role)

u 审计(audit)信息,例如哪个用户对某个方案对象进行了访问或更新操作

u 数据库中的其他概要信息

数据字典,分为数据字典表(视图)和动态性能表(视图)

--数据字典:

基表(以$结尾):用于存放所有数据库对象信息

--数据字典视图:

DBA_  数据库中所有对象的信息。

ALL_  用户有权限访问的所有的对象.

USER_  用户自己创建的

---常用的数据字典视图:

user_tables: 该用户表的信息

all_tables

dba_tables

user_indexes: 该用户索引的信息

all_

dba-_

user_views: 该用户视图的信息

user_users : 当前用户的信息

dba_constraints  约束信息

dba_extents、dba_segments区,段的信息

dba_sys_privs,dba_roles 权限角色信息等

dba_data_files 数据文件信息

1. Oracle server使用它来获取用户、schema对象、存储结构信息

2. 执行DDL语句时,oracle server会去修改它

3.用户和DBA把它作为只读查询来获取数据库的信息

--基表(以$结尾):用于存放所有数据库对象信息

基于数据字典基表的数据字典视图(DBA_, ALL_, USER_)

数据字典表 由$ORACLE_HOME/rdbms/admin/sql.bsq 脚本创建,

数据字典视图 由脚本$ORACLE_HOME/rdbms/admin/catalog.sql 创建

动态性能表并不是真正的表,由SYS用户所拥有,它是内存表

动态性能表

--- 动态性能表(X$开头)

--动态性能视图(V_$开头或GV_$开头)

动态性能视图的结构信息在v$fixed_view_definition

v_ 单个实例

gv_所有的实例,RAC

v$session

gv$session

--- 动态性能视图的同义词(V$开头或GV$开头)

动态性能视图也叫v$视图,它包含如下内容:

(1)system和session的数据

(2) 内存的使用和分配

(3) 文件的状态,包括RMAN备份文件

(4) Jobs和task(任务)的进程

(5) 执行的SQL

(6) 统计信息

-----数据字典的使用1:

-----chain_row

ANALYZETABLELISTCHAINEDROWS;

这一个临时表的意思 首先我们进行一个analyze的分布 其次: 数据就进了CHAINED_ROWS临时表里面

---dba_segments

select*fromdba_segments;

数据库大小就在dba_segments中的bytes或size,blocks和dba_tables里面的是有区别的,dba_tables中的是假的,是评估的。。。

object_id 和data_object_id,当表被truncate之后,data_object_id会改变,object_id不会变

----dba_indexes

select*fromdba_indexes;

dba_indexs中有一个cluster_factor

---dba_tables

dba_tables中的compression字段表示的是这个表是否是压缩表

---v$session

select*fromv$session;--其中的Paddr(v$process)TADDR(V$TRANSACTION)

---V$TRANSACTION

SELECT*FROMV$TRANSACTION;

---v$process

select*fromv$process;

1. 如何通过数据字典从sql_text里面找到存储过程?

select*fromdba_sourcewhereupper(text)like'%xxx%';

SELECT*fromDba_SourceASOFTIMESTAMPsysdate-2/1440WHERENAME='FLASH_BACK';-----sql_test修改之前的文本

对于正在运行的sql,v$sql里面有个program_id,可以通过program_id,可以通过其查找正在运行到sql属于哪个对象

selecta.program_id,

c.spid,

b.sid,

b.USERNAME,

a.child_number,

a.sql_id,

a.SQL_TEXT,

a.SQL_FULLTEXT,

a.EXECUTIONS ex,

trunc( a.ROWS_PROCESSED/casewhena.EXECUTIONS =0then1elsea.EXECUTIONSend)as"rows/exe" ,

a.FIRST_LOAD_TIME,

a.LAST_ACTIVE_TIME,

b.MACHINE,

b.MODULE,

AUDSID,

d.EVENT,

d.STATE,

d.WAIT_TIME,

d.SECONDS_IN_WAIT,

c.PGA_ALLOC_MEM,

b.service_name,

'alter system kill session '''|| to_char(b.SID) ||','||

to_char(b.SERIAL#) ||''';'killse

fromv$sql a,  v$session b,  v$process c,  v$session_wait d

wherea.SQL_ID = b.SQL_ID

andb.PADDR = c.ADDR

andb.SID = d.SID

andb.STATUS='ACTIVE'

ANDB.SID<>(SELECTSIDFROMV$MYSTATWHEREROWNUM<2)

orderbyb.username, a.SQL_TEXT;

select*fromall_objectswhereobject_id='57473'---代入program_id

通过修改表结构达到硬解析的功能

grantselectona.tttoscott;--权限修改了 执行计划就肯定改了

CREATEORREPLACEVIEWV$SESS_STATAS

SELECTms.SID,

sn.statistic#,

sn.name,

sn.class,

ms.value

FROM

v$sesstat    ms,

v$statname  sn

WHEREsn.statistic# = ms.statistic#

andms.value <>0;

--select * from  V$SESS_STAT where sid='77' and name like '%redo%';

---------------------------------------------------------------

v$sql_plan---SQL的真实 执行计划

dba_hist_sql_plan---如果查询历史数据

v$sql----鉴别创建索引表的效果,寻找cursor包括的存取路径鉴别索引是不是最优的,查看执行计划,监控执行计划

v$sess_stat---自己建立的视图,查看会话层面各种信息

v$sqlstats----sql层面的各种信息

elapsed_time=cputime+ wait_time---消耗的总时间buffer_gets逻辑读plan_hash_value执行计划id,根据这个id+v$sql_plan可以找出执行计划,如果有两个

----plan_hash_value说明执行计划改变了,我们可以比较一下开销,不是有sql_id就可以找到这个sql的绑定变量值 ,

---默认是900秒,才会重新开始捕获。在900内,绑定变量值的改变不会反应在这个视图中

v$active_session_history  dba_hist_active_session_history

v$active_session_history

-----就是大名鼎鼎的ash

ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件。不活动的会话不会采样,采样工作由新引入的后台进程MMNL来完成。

ASH buffers 的最小值为1MB,最大值不超过30MB。内存中记录数据。期望值是记录一小时的内容。

把session_id传进去然后对于sql_id进行group by就可以知道整个会话最耗时的是哪个sql

select*FROMv$active_session_history;

selectsql_id,count(1)fromv$active_session_historygroupbysql_id;

select*fromv$sqlwheresql_id='48wqjkfmkxu2f';

@?/rdbms/admin/awrrpt

@?/rdbms/admin/addmrpt

@?/rdbms/admin/awrsqrpi (查看具体SQL的执行计划)

v$session                                      (当前正在发生)

v$session_wait                            (当前正在发生)

v$session_wait_history              (会话最近的10次等待事件)

v$active_session_history           (内存中的ASH采集信息,理论为1小时)

wrh$_active_session_history    (写入AWR库中的ASH信息,理论为1小时以上)

dba_hist_active_sess_history   (根据wrh$_active_session_history生成的视图)

createorreplaceprocedurep_monit_active_sessionas

--将active_session写入历史表

begin

--当前时间

vCurtime :=sysdate;

deletefromdatasync_prc.Active_Session_History

wheresample_time >= vCurtime -20/ (24*60);

insertintodatasync_prc.Active_Session_History

select*

fromGv$active_Session_History

wheresample_time > vCurtime -20/ (24*60);

commit;

/*p_log('p_monit_active_session', '将active_session写入历史表');*/

EXCEPTION

whenothersTHEN

sendmail(Subject =>'p_monit_active_session',v_Msg =>SQLERRM,Receipint =>'huangchao@richinfo.cn');

end;

相关文章:

  • oracle项目是啥,Oracle 基础知识其中七个主要项目
  • constel matlab,基于MATLAB环境下16QAM调制及解调仿真程序说明.doc
  • oracle 00947,ORA-00947: Not enough values 没有足够的值
  • nginx php 413,Nginx出现413 Request Entity Too Large错误
  • oracle重启配置服务,重启系统的时候自动启动oracle服务-安装配置
  • ORACLE---添加控制文件,Oracle数据库添加和移动控制文件
  • linux mongodb服务启动命令行,liunx 后台启动mongodb服务
  • 英灵神殿服务器linux,Valheim英灵神殿linux版本更新教程 服务器内游戏更新方法
  • Linux获取norflash信息,linux ——Uboot模式下读取NORflash芯片数据
  • sqoop在Linux中环境搭建,sqoop搭建和运行小结
  • linux版的微博客户端,Ubuntu Linux 新浪微博客户端
  • linux下数学公式的编辑器,Linux下的公式编辑器——libreoffice math 使用快速入门
  • 三个数取大 c语言程序,C程序查找三个数字中最大的数字
  • 循环n个字符c语言,while( getchar() != ''\n) continue;这个循环读怎么取首字符
  • c语言数据类型l77,C语言练习题1(分支、循环)1v1.3完整版.docx
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【comparator, comparable】小总结
  • Android交互
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • GraphQL学习过程应该是这样的
  • iOS 颜色设置看我就够了
  • Map集合、散列表、红黑树介绍
  • ng6--错误信息小结(持续更新)
  • node-glob通配符
  • Python利用正则抓取网页内容保存到本地
  • Sequelize 中文文档 v4 - Getting started - 入门
  • SpiderData 2019年2月23日 DApp数据排行榜
  • spring security oauth2 password授权模式
  • SQL 难点解决:记录的引用
  • ubuntu 下nginx安装 并支持https协议
  • Vue 动态创建 component
  • vue学习系列(二)vue-cli
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 对象管理器(defineProperty)学习笔记
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • MyCAT水平分库
  • 阿里云API、SDK和CLI应用实践方案
  • 说说我为什么看好Spring Cloud Alibaba
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #git 撤消对文件的更改
  • #ifdef 的技巧用法
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (02)vite环境变量配置
  • (2)MFC+openGL单文档框架glFrame
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C++)八皇后问题
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (SpringBoot)第二章:Spring创建和使用
  • (八)Flask之app.route装饰器函数的参数
  • (力扣)1314.矩阵区域和
  • (十五)Flask覆写wsgi_app函数实现自定义中间件