随笔分类 - Oracle
1
摘要:这篇文章是参考甲骨论老相老师的视频:http://v.youku.com/v_show/id_XNDAwOTY3MTU2.html所做的学习笔记1. LRU chain 和 LRUW chain 和CBC chain 先复习一下: 如上图, 在database buffer cache中, 里面的buffer被若干条链串联在一齐(通过头尾部指针实现) LRU(Least recent used) chain 这是一条用于查找最近最少使用的buffer的链, 当buffer不够用时会从这条链冷端找出buffer来重用. LRUW(Least recent used writed) chain .
阅读全文
摘要:接上文 Oracle 段区块 分配 (1)六, oracle 的行迁移和行链接. (Row Chaining and Migrating) 上面提过了, oracle是允许把多个数据行放到同1个块中的。 而且, oracle会尽量把同1个数据行的所有数据放到同1个块中, 这样避免读取1个数据行要访问2个或以上的块. 而oracle是怎么避免这个问题呢。1个关键就是pctfree 和 pctused 的设置6.1 pctfree 这个参数在新建1个table/cluster的时候可以被指定。 默认是10% 假如 pctfree 的值是10%, 那么当1个block的剩余空间一但只剩下10%时,
阅读全文
摘要:这篇文章是参考甲骨论老相老师的教学视频 http://v.youku.com/v_show/id_XNDAwMzYzODI0.html 所做的学习笔记 关于段区块的定义以前都将过几次了. 视频中介绍了两个知识点: 1. 区(extends)的分配 1个段(segment) 被建立后, oracle 如何为其分配新的extends 2. 段空间管理方式. 1个新的extend 被分配到1个segment后, segment就相当于拥有一些空闲空间了, oracle怎么管理这些空间. 一. 利用em(Enterprise Manager) 演示如何建立1个新的表空间(table spa...
阅读全文
摘要:1.什么是表空间 表空间是Oracle 1个虚拟概念,它用于存放数据文件dbf, 也就是说表空间是oracle表数据存放到数据文件的一个中间结构。一般来讲,oracle 一张表(非分区表)只属于1个表空间, 它的数据可以分散存储在这个表空间内多个数据文件中。 如下图: 当然上图还包括 block, extend, segment的信息,将就看吧..2.查看oracle的表空间 可以用如下视图来查看oracle的表空间: select * from dba_tablespaces; 可以见到有6个表空间。 2.1 System 表空间. system 表空间存放的是Oracle数据库本身的信..
阅读全文
摘要:这篇文章是参考甲骨论老相老师的教学视频http://v.youku.com/v_show/id_XMzk4NjkzMDY0.html所做的学习笔记构成oracle数据库的文件可以包括如下图的几种..其种最重要的是下面这种文件:控制文件, 数据文件, 联机重做文件。因为这3种文件一旦出错, 数据库就会崩溃, 所以这3种文件也统称为联机文件, 也就是支持oracle数据库运行的必须文件。1.控制文件 包含有关数据库本身的数据和物理结构信息。 数据文件对数据库而言至关重要,没有这些文件,就无法打开访问数据库数据的数据文件。 1.1 查看控制文件 可以用如下语句来查看数据库控制文件的位置。 selec
阅读全文
摘要:在Oracle 9i以后 支持两种PGA 管理支持两种管理模式, 一重就是手动管理模式, 另一种就是自动管理模式。1.PGA 手动管理模式 所谓手动管理模式就是手动设置PGA里的各个模块(sort_area_size/ hash_area_size/bitmap_merge_are_size 等)的大小值, 这些值不会根据负荷弹性变化, 而且一旦手动设置为手动模式。 则应用到服务器中每1个server process, 也就是说每个server process所占的PGA将会是一样的。 1.1 设置方法 alter system set workarea_size_policy=manua..
阅读全文
摘要:这篇文章是参考甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzkyMjA5NTEy.html所做的学习笔记1.介绍DBWR写进程.之前介绍过Database buffer cache的作用流程了,参考下图:具体可以参考我之前的学习笔记:http://nvd11.blog.163.com/blog/static/200018312201302695451760/但上面这个流程只提到了用户客户端读取数据的流程, 并没有提到修改数据..1.1 用户修改数据后, 对应buffer会变成1个脏buffer 当用户修改数据,并且提交后, 数据就会写入对应buffe
阅读全文
摘要:这篇文章是参考甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzkyMjA0NDQ0.html所做的学习笔记其实之前已经介绍过shared pool的链式(chain)内存结构了..http://nvd11.blog.163.com/blog/static/200018312201301875752730/1.双向链表其实在Database buffer cache中, 也是用类似的chain结构, 只不过oracle一般是用双向链表.所谓单向链表, 就是指每个内存块(chunk)有1个尾部指针指向1个chunk的头部地址. 除了最后1个chunk,尾部
阅读全文
摘要:Oracle可以分成两种工作模式, 分别是 Dedicated Server 和 Shared Server 1 Dedicated Server 从字面上理解的就是专用服务器模式, 实际上意思就是指每当有1个新的用户客户端提出连接请求. 建立1个session时, Oracle 服务器端都会启动1个对应的服务器进程(server process)与其对接. 那么这个server process就专门为这个session服务了. 简单d来讲 Dedicated Server 模式下, 每1个连接中的session都会有1个server process与其对接. Dedicated Ser...
阅读全文
摘要:这篇文章是参考甲骨论老相老师的教学视频http://v.youku.com/v_show/id_XMzk2NjAxODQ4.html?f=17419200所做的学习笔记.1. 什么是PGA, PGA的作用 PGA的全程是Program global area, 是Oracle数据库系统的进程(包括前台进程server process 和 后台进程各种daemon)的专用的内存空间, 每1个进程都配1个PGA, 不过实在我们说的PGA通常指的是server process的PGA. 每1个server process的PGA都只能被这个server process访问. 2. PGA的构成 1.
阅读全文
摘要:这篇文章是参考甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzk2MjQ5Mzc2.html所做的教学视频1. 触发LGWR 将log buffer里的数据写入日志文件的条件: 下图这个就是lgwr进程了~ 1.1 commit语句 1.2 每隔3秒 1.3 log buffer里面有大于1MB的数据未写入日志文件 1.4 log buffer里面有大于3分1的数据未写入日志文件. 1.5 DBWR需要写入数据的SCN大于LGWR记录的SCN, 就触发LGWR写入. 1 - 4点之前都提过啦,也很容易理解. 现在重点说下第5点: Oracle 有1个机
阅读全文
摘要:这篇文章是参考甲骨论老相老师的教学视频http://v.youku.com/v_show/id_XMzk1MDA3NjA4.html所做的学习笔记1.Oracle有1个重要的原则. 这个原则就是已提交的事务,Oracle保证不会丢失. 除非服务器存储设备出问题了. 也就是说,如果用户在数据库执行一些DML sql语句, 但是并没有提交的话, 这时服务器突然崩溃, 或者断电了. 重启后, 用户的这些修改有可能找不回来了. 但是用户,一但执行commit动作, 即使服务器崩溃, 重启后用户的修改还能找回来.2. 后台进程DBWR 不断将LRUW链(脏buffer) 的冷端写入到dbf文件中. 前面
阅读全文
摘要:这篇文章是参考甲骨论老相老师的教学视频 http://v.youku.com/v_show/id_XMzk0NjYxNzgw.html所做的学习笔记作为1个DBA, 需要学习许多数据库知识, 但是目的无非两大部分.1. 保持数据库数据的一致性2. 优化数据库性能而日志系统只对应第1点,日志系统就是用来保持数据的一致性的.我们先回顾下之前讲过的sql语句执行流程如上图.可以见到:1. 产生日志的原因是Buffer cache里发生的数据改动.2. buffer cache里数据改动产生的日志被写入Redo log buffer(日志缓存)里.3. 后台进程LGWR会将redo log buffe
阅读全文
摘要:这篇文章是参考甲骨论老相老师的教学视频http://v.youku.com/v_show/id_XMzkyMjE3NTA0.html所做的学习笔记。1.什么是Rowid这里的Rowid,并不是1条数据行在表中的编号的意思.而是指Table中某一条数据行在数据文件中的物理地址, 而我们可以根据这个物理地址获得这一行数据行的数据在几号数据文件中的第几个block里面的的第几行等信息.可以用select rowid,* from Table语句来获得rowid的值.下面举个列子2.创建1张表语句如下:create table T_rowid ( a int, b varchar2(4000) def
阅读全文
摘要:这篇文章是参照甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzkyMjE3NTA0.html所做的学习笔记1. 查看某个对象所占用buffer状态:上一章提过了, 使用如下语句:selecto.object_name,decode(state, 0, 'free', 1, 'xcur' , 2, 'scur', 3, 'cr', 4, 'read', 5, 'mrec' , 6, 'irec', 7, 'write', 8,
阅读全文
摘要:这篇文章是参考甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzkyMjA4NDM2.html所做学习笔记1. 什么是buffer之前提过很多次啦, 其实在oracle数据文件中最小的单位就是block, 而用户读取block数据时,oracle就会将block的数据放入缓存,那么缓存中对应block的单位就叫buffer了, block的大小与buffer大小是一样的.2. 关于buffer的动态数据字典x$dh Oracle有一个动态视图x$dh, 里面有很多个数据行, 其中每个数据行对应buffer_cache里的每1个buffer.. x$bh里
阅读全文
摘要:这篇文章是参考甲骨论老相老师所做的教学视频所做的学习笔记.http://v.youku.com/v_show/id_XMzkyMTk3ODM2.html首先简单说明一下Oracle数据库的结构.1. 数据库的作用:1.存储数据2.方便地检索和处理数据.2.Oracle的简单结构1.存储数据( Oracle 文件)2.方便地检索和处理数据. (Oracle 实例)可见对于Oracle数据库来讲, 数据都是存放在Oracle文件中的.而前面章节也提到过, Oracle文件分3大类, 控制文件/ 数据文件/ 重做日志文件 --> 归档日志文件实际上数据库所有数据都存放在数据文件中的, 重做日志
阅读全文
摘要:注意这篇文章只介绍查看sql语句执行计划的方法, 并不是说明如何看懂执行计划.一般来讲, 直接在sqlplus 执行 set autotrace on; 就可以了其前提是登陆用户必须有视图 v_$sesstat, v_$statname, v_$mystat 的select 权限参考:http://nvd11.blog.163.com/blog/static/20001831220130804213161/如图:其实主要系想介绍另一种方法,在之前文章已经见过oracle硬解析过的sql及其执行计划会缓存在shared pool中.其中执行过的sql语句可以在v$sql 查看, 并会分配1个sq
阅读全文
摘要:这篇文章是参考甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzkyMTkzNjg4.html所做的学习笔记.什么是4031错误和4031错误产生的原因:详细请看这里:http://v.youku.com/v_show/id_XMzkyMTkzNjg4.html简单一个句话概括: 由于服务器一直在执行大量的硬解析,导致Oracle 的shared pool Free空间碎片过多,大的chunk不足, 当又一条复杂的sql语句要硬解析时, 缺少1个足够大的Free chunk, 通常就会报4031错误.解决方法:方法1.清空Shared pool缓存.执行
阅读全文
摘要:这篇文章是参考甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzkyMTg4Njg0.html所做的学习笔记前面已经提过shared pool(共享池)的作用和结构了, 详细看这里:http://nvd11.blog.163.com/blog/static/200018312201301875752730/总的来讲: shared pool 就是用来缓存sql语句和对应执行计划的, 当一条sql第二次执行时能找到shared pool的共享sql的执行计划的就避免了硬解析, 大大提高了数据库的运行效率. 而现在内存白菜价, 一般的笔记本都随便上8g内存了
阅读全文
1