
ORACLE实战
文章平均质量分 89
Yushan Bai
目前仍热衷于ORACLE数据库,博客内容基本为原创,欢迎指点交流!
展开
-
ORACLE空间管理实验1:探索LMT表空间管理下数据文件头的结构及位图中区的记录方式
新建表空间、数据文件,DUMP数据文件头1号、2号、3号及127/128号块,在其上创建表,DUMP 3号及128号块http://blog.itpub.net/82387/viewspace-1016563/对于LMT本地管理的表空间,ASSM 自动段管理时数据文件的结构是:0号操作系统块,1-2是文件头,3-127是位图信息。 http://blog.itpub.net/原创 2014-01-27 21:49:00 · 3041 阅读 · 0 评论 -
buffer cache实验7-buffer busy waits-完成
这个过程中可以发现和推断:比如进程A在BH上加buffer pin 独占锁时,此时CBC latch已经释放,在高并发环境下,此时如有进程B获取CBC latch,在hash chain上找到BH,准备加锁时,发现bh上已经加了独占锁,就发生了buffer busy waits要注意的是Buffer pin 上的共享锁不会阻塞独占锁,独占锁会阻塞独占锁--即当前读时,再有进程来当前读。独占锁也会阻塞共享锁--即当前读阻塞一致性读原创 2014-02-27 09:17:17 · 1962 阅读 · 0 评论 -
buffer cache实验8-free buffer waits-完成
服务器进程在扫描LRU主列时,将脏块移动到LRUW列。当扫描到一个阀值(10G/11G是40%- _db_block_max_scan_pct参数决定)时会停止扫描同时通知DBWR写脏块-写脏块完后的块重新挂载到辅助LRU列,就得到了空闲buffer。DBWR进程写脏块完成前,服务器进程等待空闲buffer时出现free buffer waits等待事件原创 2014-02-27 09:17:46 · 1819 阅读 · 0 评论 -
转载-Oracle 常用的dump命令
Oracle 跟踪事件 set eventhttp://blog.youkuaiyun.com/tianlesoftware/archive/2009/12/10/4977827.aspx 一.Memory Dumps1).Global AreaALTER SESSION SET EVENTS ‘immediate trace name global_area level n’;原创 2013-11-16 19:22:28 · 2623 阅读 · 0 评论 -
X$BH及V$BH中各字段意义
X$BH SYS用户可查询buffer header数据,可以从数据库的数据字典表中查询得到,这张字典表就是x$bh,其中的bh就是指buffer headers,每个buffer在x$bh中都存在一条记录.buffer header中存储每个buffer容纳的数据块的文件号,块地址,状态等重要信息,根据这些信息,结合dba_extents视图,可以很容易地找到每个buffer对应的原创 2013-12-24 14:20:11 · 7349 阅读 · 0 评论 -
SGA中Latch 的分类和查询--结合v$latch视图
SGA中Latch 的分类和查询SGA中Latch分两类:(1)愿意等的LATCH(willing-to_wait)(2)不愿意等 immediateCBC 多个BH组成 Cache Buffer Chain (CBC)CBC latch出现的原因:1.CBC latch保护不同的链表、不同BH2.CBC latch保护同一链表下同一BH例如:CBC Latch的查原创 2013-12-09 22:10:30 · 1505 阅读 · 0 评论 -
buffer cache实验10-buffer cache优化指标与总结
从原创 2014-03-06 10:11:49 · 1888 阅读 · 0 评论 -
使用数据链时报错ORA-12545/TNS-12545的重现和解决
1. 查看 tnsnames.ora中条目 :bys3_dblk = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = bys3.bys.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = bys原创 2014-01-01 21:33:17 · 28911 阅读 · 0 评论 -
buffer cache实验3-lru和lruw链表
1.Buffer cache中的LRU链表概念:oracle在hash chain中未搜索到所需要的buffer时,ORACEL 服务进程会发出I/O调用,到磁盘的数据文件中读取相应数据块--除了直接路径读外,此时会将数据块的内容拷贝到buffer cache 内存中--同时会构造一个buffer header。在将数据块拷贝到buffer cache中时,假如buffer cache是空的,直接拿一个空的内存数据块来用即可。但是如果buffer cache中的内存数据块全都被用掉了,没有空的内存数据原创 2014-02-26 14:45:46 · 2584 阅读 · 0 评论 -
ORACEL空间管理实验9:空间管理汇总--索引和表的扫描/闪回时的块管理方式
详细描述全表扫描是如何完成的(只描述I/O相关)I. 段头:在段头读取两样信息:高高水点、Extent Map(区地图)(Auxillary Map)II. 根据段头中的Auxillary Map,依次读每个区的数据。23、描述索引Index RANGE SCAN的流程Root块的块号=索引段段头块号+1I. 查找seg$等数据字典,确定索引段段头位置II. 段原创 2014-01-28 13:48:15 · 1411 阅读 · 0 评论 -
buffer cache实验6-latch:cache buffers lru chains
1.working set与Latch:cache buffers lru chain:每个working set都具有它自己的一组LRU和LRUW链表(LRU和LRUW链表总是成对出现的)。ORACLE为了提高buffer cache性能(大内存),使用了多个working set每个working set都由一个名为“Latch:cache buffers lru chain”的latch来保护,每一个lru latch对应一个working set。而每个被加载到buffer cache的bu原创 2014-02-26 21:01:35 · 2989 阅读 · 3 评论 -
buffer cache实验4-ckptq的工作机制与增量检查点及fast_start_mttr_target参数
1.检查点概念--chkpoint检查点是一个数据库事件,存在的意义在于减少崩溃恢复crash recovery时间.检查点事件由后台进程CKPT触发,当检查点发生时,CKPT通知DBWR进程将脏数据库dirtybuffer写出到数据文件上,更新数据文件头及控制文件上的检查点信息。数据文件头的SCN是CHECKPOINT SCN.原创 2014-02-26 18:43:35 · 2418 阅读 · 0 评论 -
默认及非默认端口的动态监听/静态监听实验汇总
1.配置一个非默认的动态监听,运行在1525端口2.默认动态监听同时要运行3.配置一个静态监听,运行在1526端口4.打开这些监听,并使用sqlplus登陆数据库内一些参数:SYS@ bys3>show parameter serviceNAME TYPE VALUE---------原创 2014-01-14 22:47:47 · 2825 阅读 · 0 评论 -
ORACLE空间管理实验8:数据块格式分析--DUMP结合BBED
使用DUMP 数据块格式结合BBED进行查看。####################实验准备步骤:BYS@ bys3>create table test6(aa int,bb varchar2(10));Table created.BYS@ bys3>insert into test6 values(89,'bys');1 row created.BYS@ bys3>in原创 2014-01-28 13:30:23 · 2625 阅读 · 0 评论 -
深入解析Oracle IMU模式下的REDO格式
借老郭的上图,说明一下:UPDATE语句从第一步到第九步的对应是:第一步:将更改的数据存放到PGA 第二步:将BUFFER CACHE中旧数据拷贝到共享池的私有IMU buffer第三步:将PGA中修改后的数据存放到private redo第四步:修改buffre cache中的数据注:我实验了做到这一步,执行update语句后迅速(3秒内)的进行DUMP REDO LO原创 2014-01-09 12:24:43 · 4509 阅读 · 1 评论 -
ORACLE实例恢复过程详细分析--使用dump、BBED等多种工具结合分析
实验思路:1.数据库OPEN,,做DML操作不提交,查看检查点。2.SHUTDOWN ABORT并重启到MOUNT并查询检查点3.DUMP控制文件查看CHECKPOINT_CHANGE#/RBA4.DUMP数据文件查看CHECKPOINT_CHANGE#/RBA,与DUMP控制文件对比5.DUMP REDO日志文件,查看、对比CHECKPOINT_CHANGE#/RBA6.原创 2013-12-02 22:58:40 · 4109 阅读 · 1 评论 -
数据读取之逻辑读简单解析--关于BUFFER CACHE
数据读取之逻辑读简单解析--BUFFER CACHE一、实验数据准备--查出一条数据的ROWID,及FILE_ID,BLOCK_ID等信息BYS@ bys3>select rowid,test.* from test where rownum=1;ROWID OBJECT_NAME OBJECT_ID STATUS------------------原创 2013-12-05 13:55:44 · 3076 阅读 · 0 评论 -
详解Buffer Header--DUMP buffer结合X$BH视图各字段
Buffer Header结构图及简介图1:buffer header:每一个数据块在被读入buffer cache时,都会先在buffer cache中构造一个buffer header,buffer header与数据块一一对应。buffer header包含的主要信息有:1) 该数据块在buffer cache中实际的内存地址。就是上图中的虚线箭头所表示的意思。原创 2013-12-24 13:50:45 · 5076 阅读 · 0 评论 -
buffer cache实验1-内存结构图解
1.为什么要使用buffer cache???buffer cache就是一块含有许多数据块的内存区域,这些数据块主要都是数据文件里的数据块内容的拷贝。从buffer cache中读取一个数据块一般需要100ns左右,从一般的存储硬盘中读取一个数据块需要10ms;所以大概算一下,从内存中读取数据块比从硬盘中快近十万倍。故oracle在读取数据块时,先在buffer cache中查找,如原创 2014-02-17 21:19:19 · 3697 阅读 · 0 评论 -
buffer cache实验5-latch:cache buffers chain
1.CBC latch产生的原理:一次逻辑读时CBC latch锁及Buffer pin锁的获取和释放过程如下:1.加Latch X2.进入hash chain,在相应的BH上加Buffer pin S (0-->1)3.释放Latch X4.进行逻辑读--也就是通过BH中的buffer adderss找到数据块在内存中真实位置 ---假如读了1MS5.加Latch X6.释放Buffer pin S (1-->0) 0:没锁 1:共享锁 2:独占锁7.释放Latch X原创 2014-02-26 18:49:57 · 1945 阅读 · 0 评论 -
buffer cache实验2-详解Buffer Header--DUMP buffer结合X$BH视图各字段
buffer header:每一个数据块在被读入buffer cache时,都会先在buffer cache中构造一个buffer header,buffer header与数据块一一对应。buffer header包含的主要信息有:1) 该数据块在buffer cache中实际的内存地址。就是上图中的虚线箭头所表示的意思。2) 该数据块的类型,包括data、segment header、undo header、undo block等等。3) 该buffer header所在的hash chain,是原创 2014-02-18 11:52:17 · 2134 阅读 · 2 评论 -
dblink概述及创建示例
dblink概述dblink是定义一个数据库到另一个数据库的路径的对象,dblink允许你查询远程表及执行远程程序。在任何分布式环境里,database都是必要的。另外要注意的是db link是单向的连接。在创建dblink的时候,Oracle再数据字典中保存相关的dblink的信息,在使用dblink的时候,Oracle通过Oracle Net用用户预先定义好的连接信息访问相应的远程数据原创 2014-03-07 23:54:06 · 1936 阅读 · 0 评论 -
buffer cache实验9-从buffer caceh中读取数据块解析-从逻辑读到物理读
就以上图为例,文字描述分析一下前台进程发出查询语句时获取所需数据块的过程:注:本文不涉及SQL语句的解析部分、客户端与服务器交互等,只涉及buffer cache。这里的物理读是非直接路径读、非大表全表扫描--此点最后会有介绍。如果发出的是更新语句,只是在buffer pin上所加的锁为X独占锁,其它步骤基本一致。本文的例子只读取了一个数据块。原创 2014-02-27 09:18:20 · 2328 阅读 · 0 评论 -
共享池之九:绑定变量与session_cached_cursors
解析分为硬解析和软解析和软软解析,SQL语句第一次解析时必须进行硬解析还有一种是结果集缓存—无解析,详见:。 一句话说明硬解析与软解析的区别是:硬解析=需要生成执行计划 软解析=不需要生成执行计划在Oracle中存在两种类型的SQL语句,一类为DDL语句,不共享使用,也就是每次执行都需要进行硬解析。还有一类就是DML语句,会进行硬解析或软解析。硬解析变成软解析:绑定变量原创 2014-03-18 10:16:29 · 3020 阅读 · 1 评论 -
11G RAC 权限不对登陆时遇到监听报错:ORA-12537 TNS:connection closed/TNS-12518
一个群友遇到了监听的错误:ORA-12537: TNS:connection closed搜索发现可能原因是:ORA-12537 if Listener (including SCAN Listener) and Database are Owned by Different OS User [ID 1069517.1]也就是说监听器和数据库属于不同的OS用户就可以遇到如下问题。当原创 2013-12-06 14:03:45 · 3569 阅读 · 0 评论 -
v$session/v$process视图涉及的相关会话信息的查询
关于服务器进程与用户进程概念及v$session/V$PROCESS视图简介 ,详见:http://blog.youkuaiyun.com/q947817003/article/details/16922457本文根据性能分析的一般思路来进行:先看OS资源,确定CPU/内存消耗最多的进程,从进程找到会话,再查看会话详细信息:包括会话类型、执行的SQL等等。各种查询1.查当前会话SIDBYS原创 2013-11-24 21:03:39 · 5463 阅读 · 0 评论 -
误删除数据文件、控制文件的非RMAN恢复方法
在Unix/Linux上删除所有的Controlfile控制文件后实例并不会在第一时间crash,相反居然还可以顺利完成FULL checkpoint 。这是为什么呢? ---注意这个问题仅适用于Unix/Linux, 在Windows平台上不允许删除 已经被其他进程打开的文件。究其根本原因是在Linux/Unix上Read 或 Write一个文件,进程都会打开一个与此文件相关联的 打开文件描述符 Open File Descriptors (a file descriptor (FD) is an原创 2014-03-07 12:26:41 · 2142 阅读 · 0 评论 -
ORACLE空间管理实验4:块管理之ASSM三级位图结构
DUMP L1 L2 L3,解读DUMP信息。在表空间中建第一个表(注意,第一个),这个表从数据文件的第几个块开始使用Extent Map和Auxillary Map的区别与作用什么是EMP Block#######################BYS@ bys3>create tablespace test1 datafile '/u01/oradata/bys3/test原创 2014-01-27 21:50:28 · 2947 阅读 · 0 评论 -
LINUX下为ORACLE数据库设置大页--hugepage
在Linux中配置hugepage可以提高oracle的性能,减少oracle sga的页交换,类似于aix中的lagepage。为什么 使用大页?LINUX内存的默认块大小是4K如果SGA为:128Gselect 128*1024*1024/4 from dual;33554432个(三千多万),select 128*1024/2 from dual; 65536个每个内原创 2014-03-07 16:13:00 · 5715 阅读 · 0 评论 -
验证service_names、db_name、db_unique_name在注册动态监听服务名时的作用
监听中动态注册时的服务名:如果没有设定service_names,将拼接db_unique_name和db_domain参数值来注册监听,(service_names优先级高),验证如下:。 ----(很多文档里写的是db_name和db_domain这是不准确的) 本实验的db_domain为空。Oracle Database 10g Enterprise Edition Relea原创 2014-04-09 23:58:30 · 2365 阅读 · 0 评论 -
客户端使用SCNAIP连接11G RAC数据库报错ORA-12545解决
客户端配置及报错:[oracle@bys3 admin]$ cat tnsnames.orabysrac = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.228)(PORT = 1521)) --其中HOST = 192.168.1.228 这里的IP为RAC的SCANIP。 (CO原创 2014-01-01 21:27:46 · 4303 阅读 · 0 评论 -
ORACLE空间管理实验6:块管理之ASSM下插入操作--高水位的影响及大并发插入的性能问题
插入时,默认只能插入到高水位以下的数据块,这在高并发时可能引起热块从而导致性能问题。原创 2014-01-27 21:51:00 · 2654 阅读 · 1 评论 -
10G RAC节点2宕机通过修改listener.ora实现客户端通过节点2VIP连接到数据库
根据周亮ORACLE DBA实战里的一个实验做的。环境描述:两节点10G RAC环境,节点2宕机。此时客户端通过原节点2 VIP地址无法连接至数据库。客户端较多修改不便需要在服务器上进行修改。1.检查节点1监听状态、/etc/hosts 、IP信息[oracle@rac1 admin]$ ifconfigeth0 Link encap:Ethernet HWad原创 2014-04-09 23:24:12 · 2186 阅读 · 0 评论 -
10G RAC无法启动监听:CRS-0215: Could not start resource 'ora.rac2.LISTENER_RAC2.l
故障描述:新装RAC实验,发现ora.rac2.LISTENER_RAC2.lsnr无法启动,检查listner.ora无异常。手动启动后,状态为UNKNOW。crs_stop -f ora.rac2.LISTENER_RAC2.lsnr 再crs_start -f ora.rac2.LISTENER_RAC2.lsnr后正常。贴一下当时情况[oracle@rac1 ~]$ crs_s原创 2014-03-27 12:24:21 · 3192 阅读 · 0 评论 -
共享池之四: row cache--字典缓冲区
字典缓冲区: dictionary cache,也叫row cache;用于保存数据字典信息:如表空间相关信息、用户权限、objects信息、histogram信息等。字典缓冲区在大小无法直接调整,只能通过调整共享池大小来调整字典缓冲区大小。SYS@ bys3>select pool,name ,bytes/1024/1024 MB from v$sgastat where name原创 2014-03-15 17:24:46 · 2255 阅读 · 0 评论 -
共享池之六:shared pool latch/ library cache latch /lock pin 简介
latch:library cache --desc v$librarycache;用于保护hash bucket.library cache lock保护HANDLE。library cache pin保护library cache object--LCO.从10G开始,library cache lock和library cache pin被MUTEX部分取代。暂时不讨论MUT原创 2014-03-16 12:58:33 · 2481 阅读 · 0 评论 -
共享池之七:执行计划的生成过程
--------未完待续生成执行计划的过程:编译器:分为三部分:2.优化器:--包括三个部分查询转换器RBO-->CBO,目前是CBO ,optimizer_mode--ALL_ROWS参数值,适合OLTP。FIRST_ROWS_N适合分页,OLAP。 查询转化器:视图合并--视图时直接用视图SQL语句对应表做基表进行连接。谓词推进,子查询非嵌套化--相关子查询;O原创 2014-03-17 18:50:11 · 1481 阅读 · 0 评论 -
共享池之八:软解析、硬解析、软软解析 详解一条SQL在library cache中解析涉及的锁
先来张大图:结合上图来说明一下解析的各个步骤涉及的锁。软解析、硬解析、软软解析区别的简单说明:为了将用户写的sql文本转化为oracle认识的且可执行的语句,这个过程就叫做解析过程。解析分为硬解析和软解析,SQL语句第一次解析时必须进行硬解析一句话说明硬解析与软解析的区别是:硬解析=需要生成执行计划 软解析=不需要生成执行计划在Oracle中存在两种类型原创 2014-03-17 18:56:25 · 3195 阅读 · 0 评论 -
共享池之十:模拟ORA-4031错误
ORA-4031错误在报ORA-4031错误的时候,有可能使用下面的SQL语句查看,发现可用的内存还是足够大的, SQL> select POOL,NAME,BYTES from v$sgastat where NAME='free memory'; 事实上,在Oracle发出4031错误之前,已经释放了不少recreatable类型的chunk了,因此会产生很多可用内存原创 2014-03-18 10:23:37 · 2684 阅读 · 0 评论 -
共享池之五:Shared Pool子池与结果集缓存技术
SubPool技术及优势:从Oracle 9i开始,Shared Pool可以被分割为多个子缓冲池(SubPool)进行管理,以提高并发性,减少竞争。Shared Pool的每个SubPool可以被看作是一个Mini Shared Pool,拥有自己独立的Free List、内存结构以及LRU List、shared pool latch。同时Oracle提供多个Latch对各个子缓冲原创 2014-03-15 17:22:09 · 2773 阅读 · 0 评论