OracleServer总结进阶之系统分析(进阶完结)
个人原创,转载请在文章头部明显位置注明出处:https://www.cnblogs.com/sunshine5683/p/10080102.html
在上一篇进阶中大概讲解了一些关于进阶方面的知识,今天就将进阶内容做个总结!
一、OracleServer实例DB的概念:
1、Oracle关系数据库管理系统(RDMS)
- 集成了开放的、全面的、集成的信息管理方法.
- 一个实例对应一个OracleServer,要查询oracleServer,直接查询后台进程就可以了
- 查看实例个数:
ps -ef|grep ora_|cut -d '_' -f3|uniq
ps -ef|grep ora_|cut -d '_' -f3|sort|uniq(有几条就几个oracleServer)
- 后台进程是在实例启动的时启动的,时将文件写到磁盘上的
访问实例:V$instance,访问数据库: v$database
语句:select instance_name from v$instance_name;
select db_unique_name from v$database;
show parameter service_name (查看服务名)
一个实例返回一个数据库
注意:查看实例或数据库名时,保证数据库启动到mount(此阶段仅仅物理阶段可用)阶段或者open(此阶段打开物理机构和逻辑结构)阶段,在nomout阶段不可以查询
注意:所有的12c跑应用程序都在pdb里面跑,而不再cdb里面跑
- 实例名跟库名不一定相同,这是允许的
二、如何连接到数据库
1、连接到服务器:
所有连接数据库都需要有相应的翻译工具或者相应的客户端工具,eg:Java访问工具:jdbc等。
- 10g里面连接工具:ojdbc14.jar classes12.jar ojdbc14.jar
- 11g 里面的连接工具:ojdbc6.jar ojdbc7.jar
所以要访问数据库,只需要安装以上任意连接工具的驱动包就可以
2、oracle中的客户端工具:
- sqlplus:
- sqldevelop:
- toad:
- pl/sql develop:
以上客户端实现的时候都是通过ORACLE NET实现的
查看服务名:
也可以通过以下命令查看服务名
>show parameter dispathcer
3、windows上面访问数据库:
三、Oracle DB体系结构概览
1、用户进程
用户进程要连接数据库,有本地连接,有远程连接,但都会在服务器端产生用户进程
- 连接到数据库实例:
连接:用户进程和实例之间的通信
会话:用户通过用户进程与实例建立的特定连接
- 远程连接:tcp三次握手
- 本地连接:数据库和客户端在同一台电脑:通过套接字连接
本地远程连接数据库,然后进入服务端,desc v$session 就可以看到连接用户客户端信息
- 专有连接:一个用户进程对应一个服务进程,连接模式为NONE:共享连接
- 共享连接:一个服务进程对应多个用户进程, 连接模式DEDICATED:专有连接
2、服务器进程
1>访问服务器进程在v$process视图中查看,服务器进程是接收用户进程请求并做相应的处理的。
2>用户进程产生会话之后,该会话将保留在内存当中,每个用户进程都有自己的独立的PGA区。
3>查看访问数据库的操作系统进程id语句:
Select spid from v$process where addr in(select paddr from v$session where username=’SCOTT’);
4>看操作系统进程:
- ho ps –ef|grep 2036
- ho ps –ef|grep 4407
5>查看该进程消耗资源情况:top –p 4407
每一个视图都可以进程跟踪,使用desc v$process可以看到TRACEFILE(跟踪文件)文件。
6>只要dba的用户,在Oracle里面都可以使用:show parameter pga_a查看pga的内存大小,pga的值本身是自动管理的,但在11g中,可以通过权值修改其大小。
7>修改pga的大小:
- alter system set pga_aggregate_target=5g;
- show parameter pga
8>对于耗资源的进程,可以杀掉(假如是4406进程):kill -9 4406
四、sga
在10g中可以用show parameter sga_target查看sga大小,在11g和12c中可能看到的大小
查看sga的信息:select * from v$sgainfo;
1、共享池
1>库高速缓存:用来接收pga传递过来的hashvalue,如果该值存在,做软分析,否则,做硬分析,定义语句是全标扫描还是索引扫描
2>数据字典高速缓存:提供访问的对象是表还是索引还是同义词,表空间、数据文件等,进行递归调用
3>服务器进程用来读取数据文件到数据高速缓存区中,然后进行的读取
2、数据库高速缓冲区
有两种block,读的block和写的block,与块的读取有关
3、重做日志缓冲区
与块的更改有关,其大小需要手工设置。
五、后台进程
1、CKPT
- 只要在用户进程里面执行除了查询之外的的任何操作,都会触发CKPT,触发后,CKPT除了通知控制文件和数据文件外,还会通知DBWn将在数据库缓冲区高速缓存区执行过的DDL或者DCL的操作写到数据文件中去(注意:通知DBWn去写,但是DBWn未必就立马去写)。
- 当CKPT触发了,LGWR也写完了,大师DBWn还没写完,在下次启动时候,会自动将LGWR记录在联机重做日志文件中保存的undo内容写到数据文件中。
- SGA里面的操作由SMON(系统监视进程)和PMON(进程监视进程)协调。
- Oracle中最重要的5个进程:SMON ,PMON,DBWn,CKPT,LGWR。
- 显示相应的视图:desc v$process,查看后台进程:desc v$bgprocess视图中:
- 查看当前正在使用的后台进程:select paddr,name from v$bgprocess where paddr<>’00’;
- 查看数据文件:select name from v$datafile;
- 查看日志文件位置:select member from v$logfile;
- 查看控制文件位置:select name from v$controlfile;
- 参数文件:show parameter spfile
1>数据文件:表空间、表、索引都在数据文件中
六、sga的其他组件
1、数据高速缓冲区
2、重做日志缓冲区
3、大型池
4、Java池和流池
5、程序全局区(PGA)
6、系统全局区(SGA)
7、数据库写进程(DWRn)
将数据库缓冲区高速缓存区中经过修改的缓冲区写入磁盘:有两种写入方式:
1>在执行其它处理时异步执行
2>推进检查点
- 查看:show parameter db_wr;
- 数据库写进程是可以修改的:alter system set db_writer_processes=30; a scope=spfile; /(表示执行)
8、日志写进程(LGWR)
1>将重做日志缓冲区中的内容写入磁盘上的重做日志文件中
2>在以下情况下执行写操作:
- 用户进程提交事务处理时
- 重做日志缓冲区的三分之一已满时
- 在DBWn进程将经过修改的缓冲区写入磁盘之前
- 每隔3秒
9、检查点进程(CKPT)
1>将检查点信息记录在以下位置
- 控制文件
- 每隔数据文件头
10、系统件事进程(SMON)
1>在实例启动时候执行恢复
2>清除不使用的临时段
11、进程监器视进程(PMON)
在用户进程失败时候执行进程恢复
1> 清楚数据库缓冲区高速缓存
2> 释放该用户进程使用的资源
3> 监视会话是否发生空闲会话超时
4> 将数据库服务动态注册到监听程序
12、恢复器进程:
1> 用于分布式数据库配置
2> 自动连接到其它那些与有问题的分布式处理有关的数据库
3> 自动解决所有有问题的事务处理
4> 删除对应于所有有问题的事务处理所有行
13、归档进程(ARCn)
是一个可选进程。
1> 在发生日志切换之后,将重做日志文件复制到指定的存储设备
2> 可以手机事务处理重做数据,并将该数据传输到备用目标位置
14、告警日志
1>查看告警日志的路径:show parameter background_dump_dest;
3> 读该告警日志:ho ls /u01/oracle/admin/wyzc10g/bdump/alert_wyzc10g.log
在任何的版本都可以通过以上路径去访问,只是不同的版本可能路径不一样,如:在11g当中查看路径:show parameter backgr; 可以看到路径为:/u01/oracle/diag/rdbms/wyzc11g/wyzc11g/trace/alert_wyzc11g.log
同样可以读该日志:
ho ls / u01/oracle/diag/rdbms/wyzc11g/wyzc11g/trace/alert_wyzc11g.log
七、逻辑结构
1、逻辑和物理数据库结构:
- 方案:语句、表、索引、函数、过程、包等
- 数据库:一个数据库可以放32272个表空间
- 表空间:一个表空间可以放1023个数据文件
- 段;自动管理后,空间分配等都可自动管理,减少dba的工作量。一个表空间可以放多个段。
- 区:区里面存放的都是block,如果采用的是10g及其以后的版本,都采用的是本地管理,字典管理已经不使用了。
- Oracle数据块:Oracle最大的block只有32k
- 数据文件:
- 操作系统块:
2、物理结构:
3、SYSTEM和SYSAUX表空间
1> SYSTEM和SYSAUX表空间是在创建数据库时创建的必须存在的表空间,这些表空间必须联机。
2> SYSTEM表空间用于核心功能(例如数据字典表)
3> 辅助的SYSAUX表空间用于附加的数据库组件(如Oracle Enterprise Repository)
4> 数据块会映射到磁盘块,不建议使用SYSTEM和SYSAUX表空间来存储应用程序的数据。
4、自动存储管理
1> 是可移植的高性能集群文件系统
2> 管理Oracle DB文件
3> 通过ASM集群文件系统(ACFS)管理应用程序文件
4> 将数据分配到各个次盘中以平衡负载
5> 建立数据镜像以防范故障
6> 解决存储管理挑战
5、ASM存储组件
ASM最终调的是硬盘
八、12c体系结构的不同之处
Oracle中的三大容器:CDB$ROOT容器、PDBSEED容器和PDBContainer容器
九、DML语句:
注意:在写sql语句时候如:selet * from aaa ;此时发现报错’selet’,返回重新纠正就都的重写,此时只需要替换一下就可以,’c/selet/select’然后回车,就会将错误字符改正并正常执行。
1.buffer cache --undo block
修改前的data block 数据进行镜像
2.undo 变化 所有redo记录undo变化的过程
3.buffer cache --data block 修改
4.data block 变化 redo记录变化过程
5.Insert操作成功
Insert执行时候1,2,3,4,5执行完成后,Oracle数据要进行:提交 回退|不提交。
不提交>此时undo数据属于修改后的状态,未提交,undo数据只能被当前的事务所在的会话调用,其他会话不能看到DML修改后的结果,看到的是上次提交的状态
回退>此时使用修改前的undo镜像,覆盖修改的data block,这样就撤销了修改的信息,标记undo事务数据不需要
提交>标记ITL信息为新的SCN,undo数据为提交状态,变为历史undo数据,写到磁盘上,将块数据标记为脏数据,该脏数据需要下次dbwr写到磁盘上,该数据也将成为其他会话看到的提交的数据
长时间不提交,DML事务达,很长时间没有结束,可能影像其他的会话执行所在行的DML
DML在对一张表进行操作的时候,会将该表锁定,到commit或着collback后释放
十、DDL语句:
1、其中上面1、2看到DDL是否修改数据字典 ,若修改字典, 1,2执行,2、4都要执行
2、DDL操作成功
十一、执行计划
1、EXPLAIN PLAN 命令模拟sql执行跟踪
2、查询V$sql_plan视图
3、查询AWR
4、SQL*PLUS AUTOTRACE:统计信息
取当前的执行计划:在内存中已经存在一个sql情况:
1> 找到对应sql语句的游标id:select sql_id from v$sql where sql_text like 'select * from t1%';
2> 使用嵌套表查询当前语句的执行计划:
select * from table(dbms_explan.display_cursor('alln3qb4qvzrt')); 得到执行计划
常用查看执行计划语句:1>ls /u01/oracle/11g/sqlplus/admin/
5、执行计划的缩进执行顺序:
1、缩进不同,少的为父亲,多的为儿子。父子关系执行时候:先儿子后父亲
2、缩进相同,上面的为哥哥,下面的为弟弟,执行时候:先哥哥后弟弟
3、缩进是可以嵌套的:以父亲/祖父同级的为一个家族
6、SQL跟踪工具:
1>通常在会话级启用
2>收集按照会话分组的sql语句的会话统计信息
3>产生可通过tkprof格式化输出
4>方法:对于当前会话:EXEC dbms_monitor(待完成)
7、SQL 优化器:
rule:表示使用rule优化器,现已被淘汰,用与10g 使用rbo
choose:有统计信息的优化器,使用cbo不使用rbo
10gr2 :开始统计信息,可以动态采样,没有统计信息,也不使用rbo
all_rows first_rows first_rows_n
其中 rule基于规则,
如果没有统计信息,将采用rbo
8、生成优化程序跟踪
1>设置一个事件-10053优化程序跟踪
建索引:
Create index emp_d_i on emp(deptno);
create index emp_s_d_i on emp();
create index emp_s_d_i on emp(sal,deptno);
2>执行相关语句
十二、Oracle中的函数—单行函数之字符函数
单行函数:不管输入几行,返回的只有一行。
1、Character:字符函数
大小写:
- LOWER(String):全部转换为小写
- upper(String):全部转换为大写
- initcap(String):将首字母转换为大写
字符处理函数:
- concat(String,String):字符串连接函数,要连接三个字符串,需用嵌套,其嵌套为:concat(concat(StringValue,StringValue),StringValue)
- substr(expr,m,n):截取字符串expr,其中m表示从哪里开始,m可为负数,表示反向截取,n表示取多少个,省略n表示从第m个字符把后面所有的字符都截取出来。应用场景:如找到第二个字符是A的员工:select ename from emp where substr(ename,2,1)=’A’;
- length():该函数有四种形式,lengthc、lengthb、length2、length4
- instr(StringValue,’a’):返回字符在第一个字符串中的位置,若找到,返回位置,没找到,返回0,应用场景:找到第一个字符是A开头的员工,select ename from emp where instr(ename,’A’)=1。
2、Gerneral:通用函数
3、Numbers:数字函数
4、Conversion:转化函数
5、DateValue日期函数
以上空着的部分将在后续总结中进行填补!
OracleServer总结进阶之系统分析(进阶完结)的更多相关文章
- Python:什么是进阶,如何进阶?
目录 Python:什么是进阶,如何进阶? 1. 什么是进阶? 2. 如何进阶? 3. 除此之外呢? Python:什么是进阶,如何进阶? 1. 什么是进阶? 一门编程语言的基础部分,往往非常简单.如 ...
- 【 D3.js 进阶系列 】 进阶总结
进阶系列的文章从去年10月开始写的,晃眼又是4个多月了,想在年前总结一下. 首先恭祝大家新年快乐.今年是羊年吧.前段时间和朋友聊天,聊到十二生肖里为什么没猫,我张口就道:不是因为十二生肖开会的时候猫迟 ...
- Ionic APP-Web SPA开发进阶(二)Ionic进阶之路由去哪了
Ionic进阶之路由去哪了 项目需求 在查看药品时,从药品列表中可以通过点击药品列表获取某一药品详情.提交订单时,同样可以查看药品详情.两种情形下,从药品详情返回后,应分别返回至原来的页面.如下图所示 ...
- NodeJS学习笔记 进阶 (13)Nodejs进阶:5分钟入门非对称加密用法
个人总结:读完这篇文章需要5分钟,这篇文章讲解了Node.js非对称加密算法的实现. 摘录自网络 地址: https://github.com/chyingp/nodejs-learning-guid ...
- NodeJS学习笔记 进阶 (12)Nodejs进阶:crypto模块之理论篇
个人总结:读完这篇文章需要30分钟,这篇文章讲解了使用Node处理加密算法的基础. 摘选自网络 Nodejs进阶:crypto模块之理论篇 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速 ...
- iOS进阶路线以及进阶书籍
第一,熟悉ARC机制:首先要了解ARC的前世今生.假设了解不清楚会导致两种可能,1,一个对象的引用莫名奇异为空.或失效了.这个一般都能在开发阶段及时发现,由于会导致应用异常.2.导致内存溢出:不了解A ...
- 汇编语言进阶和Makefile进阶---第二天
摘要: 原创博文:转载请标明出处:http://www.cnblogs.com/zxouxuewei 首先加载启动代码: ; hello-os ; TAB=4 ORG 0x7c00 ; 指明程序装载地 ...
- SpringBoot进阶之web进阶
1.表单验证: 实体类添加: @Min(value = 18 ,message = "未成年少女禁止入内!")最小值限制为18,如果小于18则返回message中的信息 注入校验, ...
- 2小时学会spring boot 以及spring boot进阶之web进阶(已完成)
1:更换Maven默认中心仓库的方法 <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirr ...
随机推荐
- JQuery Mobile - 如何让listview不显示向右的箭头?
先看一下有向右箭头的截图吧 这个listview第二个项目,就有向右的箭头,如果单纯显示具体数据,没有扩展显示的内容,那么这个向右的箭头就是多余的,在这种情况下,最好是去掉这个向右箭头,程序中已经在第 ...
- CRUD组件的高阶使用
1.list页面自定列显示: class PermissionConfig(sites.AryaConfig): def dabo(self, obj=None, is_header=Fa ...
- 简单的卷积神经网络(CNN)的搭建
卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现.与普通神经网络非常相 ...
- js面试题——找到数组中的重复元素并判断重复次数且输出重复元素
var countArr = [1,2,3,4,5,6,3,4,3,3,7,8,9,32,1,11,2,3,3,3]; var res = {}; var maxnum=0; var max; fun ...
- 如何让IE 低版本下支持 css3属性
依赖源 该文件为 ie-css3.htc (特别提示.htc为二进制文件,只会在ie中识别,让IE浏览器支持CSS3的一些属性) 以下为依赖文件源码 通过源码我们可以看到 该文件在一定程度上 ...
- 2019年北航OO第一次博客总结
一.基于度量对程序结构的分析 1. 第一次作业 1.1 基于类的分析的度量 首先,基于类的属性个数,方法个数,每个方法的规模,每个方法的控制分支数目,类总代码规模等特征对本次作业的结构进行分析. 1. ...
- crop和resize操作区别
crop:对图像进行剪切 resize:对图像进行伸缩 实践代码 import cv2 bb2d = [30, 30, 72 ,42] image = cv2.imread('car.png') pt ...
- 【xsy3423】党² 线段树+李超线段树or动态半平面交
本来并不打算出原创题的,此题集CF542A和sk的灵感而成,算个半原创吧. 题目大意: 给定有$n$个元素的集合$P$,其中第$i$个元素中包含$L_i,R_i,V_i$三个值. 给定另一个有$n$个 ...
- uiautomatorviewer 双击闪退问题解决
最近在学习app自动测试,结果在打开uiautomatorviewer查看app界面元素时,就出现了闪退的问题,找了很多很多方法,最后终于可以解决了,详情请继续往下看 首次安装adt的步骤 将下载的压 ...
- Mac 10.12连接iSCSI硬盘软件iSCSI Initiator X
Mac下的iSCSI协议苹果一直以来没有集成,而网络上流传的最好用支持iSCSI硬盘的软件是globalSAN,但是这个软件是收费的,当然有破解版,只不多不太好找,因为现在用iSCSI的用户已经很少了 ...