Oracle数据块原理的深入剖析_第1页
Oracle数据块原理的深入剖析_第2页
Oracle数据块原理的深入剖析_第3页
Oracle数据块原理的深入剖析_第4页
Oracle数据块原理的深入剖析_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Oraclle数据块块原理深入入剖析-入入门基础时时间:2009-03-110 000:00来来源:ITT168 bitssCN编辑辑字体:大 中 小数据据块(Orraclee Datta Bllockss),本文文简称为“块”,是Orraclee最小的存存储单位,OOraclle数据存存放在“块”中。一个个块占用一一定的磁盘盘空间。特特别注意的的是,这里里的“块”是Oraacle的的“数据块”,不是操操作系统的的“块”。 Oraacle每每次请求数数据的时候候,都是以以块为单位位。也就是是说,Orraclee每次请求求的数据是是块的整数数倍。如果果Oraccle请求求的数据量量不到一块块,O

2、raacle也也会读取整整个块。所所以说,“块”是Oraacle读读写数据的的最小单位位或者最基基本的单位位。块的标标准大小由由初始化参参数DB_BLOCCK_SIIZE指定定。具有标标准大小的的块称为标标准块(SStanddard Blocck)。块块的大小和和标准块的的大小不同同的块叫非非标准块(Nonsstanddard Blocck)。同同一数据库库中,Orraclee9i及以以上版本支支持同一数数据库中同同时使用标标准块和非非标准块。Oraccle允许许指定5种种非标准块块(Nonnstanndardd Bloock)。操作系系统每次执执行I/OO的时候,是是以操作系系统的块为为单位

3、;OOraclle每次执执行I/OO的时候,都都是以Orraclee的块为单单位。Oraacle数数据块大小小一般是操操作系统块块的整数倍倍。数据块块的格式(Dataa Bloock FFormaat)块中存存放表的数数据和索引引的数据,无无论存放哪哪种类型的的数据,块块的格式都都是相同的的,块由块块头(heeaderr/Commmon and Variiablee),表目目录(Taable Direectorry),行行目录(RRow DDirecctoryy),空余余空间(FFree Spacce)和行行数据(RRow DData)五部分组组成,如下图图所示。 块头(headder/CCo

4、mmoon annd Vaariabble):存放块的的基本信息息,如:块块的物理地地址,块所所属的段的的类型(是是数据段还还是索引段段)。 表表目录(TTablee Dirrectoory):存放表的的信息,即即:如果一一些表的数数据被存放放在这个块块中,那么么,这些表表的相关信信息将被存存放在“表目录”中。行目录录(Roww Dirrectoory):如果块中中有行数据据存在,则则,这些行行的信息将将被记录在在行目录中中。这些信信息包括行行的地址等等。行数据据(Roww Datta):是是真正存放放表数据和和索引数据据的地方。这部分空空间是已被被数据行占占用的空间间。空余空空间(Frree

5、 SSpacee):空余余空间是一一个块中未未使用的区区域,这片片区域用于于新行的插插入和已经经存在的行行的更新。头部信信息区(OOverhhead):我们把把块头(hheadeer/Coommonn andd Varriablle),表表目录(TTablee Dirrectoory),行目录(Row Direectorry)这三三部分合称称为头部信信息区(OOverhhead)。头部信信息区不存存放数据,它它存放的整整个块的信信息。头部部信息区的的大小是可可变的。一一般来说,头头部信息区区的大小介介于84字字节(byytes)到1077字节(bbytess)之间。数据块块中自由空空间的使用用

6、当往数数据库中插插入(INNSERTT)数据的的时候,块块中的自由由空间会减减少;当对对块中已经经存在的行行进行修改改(UPDDATE)的时候(使记录长长度增加),块中的的自由空间间也会减少少。DELLETE语语句和UPPDATEE语句会使使块中的自自由空间增增加。当使使用DELLETE语语句删除块块中的记录录或者使用用UPDAATE语句句把列的值值更改成一一个更小值值的时候,OOraclle会释放放出一部分分自由空间间。释放出出的自由空空间并不一一定是连续续的。通常常情况下,OOraclle不会对对块中不连连续的自由由空间进行行合并。因因为合并数数据块中不不连续的自自由空间会会影响数据据库的

7、性能能。只有当当用户进行行数据插入入(INSSERT)或者更新新(UPDDATE)操作,却却找不到连连续的自由由空间的时时候,Orraclee才会合并并数据块中中不连续的的自由空间间。对于块块中的自由由空间,OOraclle提供两两种管理方方式:自动动管理,手手动管理行链接接和行迁移移(Roww Chaaininng annd Miigratting)行链接接(Roww Chaaininng):如如果我们往往数据库中中插入(IINSERRT)一行行数据,这这行数据很很大,以至至于一个数数据块存不不下一整行行,Oraacle就就会把一行行数据分作作几段存在在几个数据据块中,这这个过程叫叫行链接(

8、Row Chaiiningg)。如下下图所示: 如果一一行数据是是普通行,这这行数据能能够存放在在一个数据据块中;如如果一行数数据是链接接行,这行行数据存放放在多个数数据块中。行迁移移(Roww Miggratiing):数据块中中存在一条条记录,用用户执行UUPDATTE更新这这条记录,这这个UPDDATE操操作使这条条记录变长长,这时候候,Oraacle在在这个数据据块中进行行查找,但但是找不到到能够容纳纳下这条记记录的空间间,无奈之之下,Orraclee只能把整整行数据移移到一个新新的数据块块。原来的的数据块中中保留一个个“指针”,这个“指针”指向新的的数据块。被移动的的这条记录录的RO

9、WWID保持持不变。行行迁移的原原理如下图图所示: 无论是是行链接还还是行迁移移,都会影影响数据库库的性能。Oraccle在读读取这样的的记录的时时候,Orraclee会扫描多多个数据块块,执行更更多的I/O。块中自自由空间的的自动管理理Oraacle使使用位图(bitmmap)来来管理和跟跟踪数据块块,这种块块的空间管管理方式叫叫“自动管理理”。自动管管理有下面面的好处:易于于使用更好好地利用空空间可以以对空间进进行实时调调整块中自自由空间的的手动管理理用户可可以通过PPCTFRREE, PCTUUSED来来调整块中中空间的使使用,这种种管理方式式叫手动管管理。相对对于自动管管理,手动动管理

10、方式式比较麻烦烦,不容易易掌握,容容易造成块块中空间的的浪费。PCTTFREEE参数用于于指定块中中必须保留留的最小空空闲空间百百分例。之之所以要预预留这样的的空间,是是因为UPPDATEE时,需要要这些空间间。如果UUPDATTE时,没没有空余空空间,Orraclee就会分配配一个新的的块,这会会产生行迁迁移(Roow Miigratting)。PCTTUSEDD也是用于于设置一个个百分比,当当块中已使使用的空间间的比例小小于这个百百分比的时时候,这个个块才被标标识为有效效状态。只只有有效的的块才被允允许插入数数据。文章转载自自网管网: HYPERLINK ORACLLE块的分分析(一)一直

11、直以来对“块”的概念总总是含混不不清,从字字面意义理理解,只知知道这是OORACLLE存放数数据的最小小单位,然然而它的内内部世界如如何呢,本本人打算从从今天开始始连载几篇篇文档,对对它进行深深度分析。 通过很多多文档、资资料,了解解到了数据据库基本结结构鱼刺图图: 基本上每每个对象对对应一个段段( Segmment),只只有分区对对应多个段段,这里的的对象包括括tablle,inndex,ppartiitionn等等,段段可以跨越越多个数据据文件。 每个段又又有多个区区(exttent)来来组成,这这些区不能能跨越多个个数据文件件,同时在在系统使用用过程中自自动扩展。 最后是块块(blooc

12、k),所所有的数据据都是存放放在块中。为了适应应操作系统统,每个块块在创建数数据库的时时候默认了了一个大小小,这个大大小一般是是8K,同同时在9II及其以 后的版本本中增加了了不同大小小的块参数数,这将在在以后的实实验中体现现。先说说说这个8KK大小的块块,一般来来说,为了了使得orraclee运行读写写数据文件件的时候有有一个合理理 的吞吐量量,这里的的块大小,都都跟操作系系统块大小小设为整数数倍,例如如ntfss格式化的的磁盘文件件,每个物物理块大小小为4,这这里oraacle的的块大小为为8,即是是代表每 读取一个个oraccle块,其其实物理上上也就是读读取了两个个操作系统统块。 这里

13、主要要指的是数数据文件存存放在块设设备上,在在实际的生生产环境中中,大部分分情况都是是将数据库库安装在裸裸设备(RRAW)也也叫做原始始分区之上上。关于RRAW将在在以后进行行 讲解。 通过上上面这段文文字,我们们可以了解解到ORAACLE基基本的存储储结构,下下一篇将针针对块的大大小与存放放数据大小小来做实验验。 (二)上一一节了解到到了ORAACLE的的存储结构构,这节讲讲一讲块的的大小与数数据存放之之间的关系系。 大家都知知道了在OORACLLE环境中中,所有的的对象都是是存放在块块中,这个个块大小与与存放的记记录之间到到底存在怎怎样的关系系呢? 做一个实实验看看: 创建一个个表空间tt

14、est creaate ttableespacce teest ddataffile /orraclee/oraadataa/tesst.dbbf ssize 100mm; 创建建一个用户户 creaate uuser testt ideentiffied by ttest defaault tabllespaace ttest; 创建一一个表 creaate ttablee tesst.t11 (a11 nummber,a2 vvarchhar2(100); 检检查段,可可以发现在在这个视图图中出现了了名称为TT的段,段段类型为TTABLEE,这个段段里面分配配了1个区区,其中包包含8个块块

15、,大小为为64K字字节。 seleect ssegmeent_nname,bloccks,eextennts,bbytess,seggmentt_typpe,taablesspacee_namme frrom ddba_ssegmeents wherre owwner=TESST; SEGMMENT_NAMEE BLOOCKS EEXTENNTS BYTEES SEEGMENNT_TYYPE TABBLESPPACE_NAMEE - - - - - -T 8 1 655336 TAABLE TESST 检查查区,可以以发现在这这个视图中中出现了一一个区,区区号为0,包包含8个块块,大小为为64

16、K字字节。 seleect ssegmeent_nname,segmment_typee,exttent_id,bblockks,byytes fromm dbaa_exttentss wheere oownerr=TEEST; SEGGMENTT_NAMME SEEGMENNT_TYYPE EXXTENTT_ID BLOCCKS BYTEES- - - - -TT TAABLE 0 8 655336 检查块块,可以发发现这里没没有载入到到内存的块块,由此断断定,在数数据未写入入的时候,内内存中并没没有存放数数据的块。 seleect fromm v$bbh whhere ts#=12; 未选

17、定行行 插入100行数据,进进行测试。 SQL decclaree2i nnumbeer33;4begiin55foor i in 11.100 looop66exxecutte immmediiate inssert intoo tesst.t valuues (:x,:y) usinng i,i;7eend lloop;8endd;99/ PL/SSQL 过过程已成功功完成。 再次查看看v$bhh视图,检检查内存中中是否使用用到了块。 seleect fromm v$bbh whhere ts#=12; FILLE# BBLOCKK# CLLASS# STAATU XNNC OBJDD-

18、- - - - - 1 280889 44 xcuur 0 1110388 1 280990 11 xcuur 0 1110388 哈哈,果果然出现了了数据,说说明在数据据插入的表表的时候在在内存中已已经载入了了分配的块块,同时在在这些块中中写入了数数据,这里里占用了两两个块,块块号分别为为280889,288090,其其中我们可可以根据CCLASSS#来判断断出他们属属于不同类类型。 (三)这一一节紧接着着上一节来来说。上一一节通过实实验,我们们了解到,块块的创建和和读取流程程,不过只只是针对一一个会话的的,现在我我们来看看看在一个会会话中插入入数据之后后,同时在在另外一个个会话查询询数据,

19、这这样的情况况会对块有有什么影响响。打开一一个新的会会话, 然后执行行如下命令令:查询表表,由于插插入数据的的事务没有有提交,这这里在另外外的会话中中就看不到到任何数据据,深深体体现了ORRACLEE的多版本本一致性sselecct * fromm tesst_gaao.t; 未选定定行 查询视图图v$bhh,看是否否有了变化化seleect fromm v$bbh whhere ts#=12; FILLE# BBLOCKK# CLLASS# STAATU XNNC OBJDD- - - - - - 1 280889 44 xcuur 0 1110388 1 280990 11 cr 0 11

20、10388 1 280990 11 cr 0 1110388 1 280990 11 xcuur 0 1110388 果然和和上一节查查询出来的的结果不同同,多了红红色字体标标识出来的的两行,大大家可以看看到这两行行的STAATUS字字段值为ccr,什么么是cr呢呢?它是CConsiistenncy Readd(一致性性读取)的的缩写。从从这里可以以看出288090这这个块被两两个会话进进行了操作作。 在第一个个会话中回回滚事务会会发生什么么呢?看下下面的操作作:会话11:执行rrollbback SQL rolllbacck;回退退已完成。 再次查询询v$bhh视图,看看看什么情情况ssel

21、ecct ffrom v$bhh wheere oobjd=110338; FFILE# BLOOCK# CLASSS# SSTATUU XNC OBBJD- - - - - - 11 288089 4 xxcur 0 110038 11 288090 1 ccr 0 110038 11 288090 1 ccr 0 110038 11 288090 1 xxcur 0 110038 结结果还是一一样,说明明在事务回回滚之后,块块还是处于于一致读取取的状态。(四)我们们继续上一一节的话题题。 关闭数据据库实例 SQL shuutdowwn immmediiate 数据库已已经关闭。已经卸载载数

22、据库。 重新打开开数据库 SQLstarrtup ORACCLE 例例程已经启启动。Tootal Systtem GGlobaal Arrea25322144992 byytesFFixedd Sizze 4544428 bbytessVariiablee Sizze 11174400512 byteesDattabasse Buufferrs 113421177288 byttesReedo BBuffeers 111018224 byytes数数据库装载载完毕。数数据库已经经打开。 检查v$bh视图图 seleect fromm v$bbh whhere objdd=110038; 未选定

23、行行 说明在没没有进行块块中数据的的相关操作作的时候,并并没有从物物理文件中中提取块到到内存。 执行查询询或者插入入、更新的的SQL语语句 SQL inssert intoo tesst.t valuues (200,200); 已创创建 1 行。 再次检查查v$bhh视图 SQL sellect froom v$bh wwheree objjd=111038; FIILE# BLOCCK# CCLASSS# STTATU XXNC OBJJD- - - - - - 1 280089 4 xccur 0 110338 1 280090 1 xccur 0 110338 总结结:在没有有进行物理

24、理I/O的的时候,vv$bh视视图中不会会出现相关关的块信息息,同时证证明此视图图中存放的的乃是数据据文件块放放到内存中中的“块”信息。 HYPERLINK t _blank seg.JJPG (22.443 KBB)2008-6-177 18:46实例讲解OOraclle 9ii数据坏块块的处理2009-3-177 作者: 编辑:齐瑞瑞 HYPERLINK t _blank 点击进入入论坛关键词: HYPERLINK t _blank OOraclle HYPERLINK t _blank 数据 HYPERLINK t _blank 处理笔者在一台台生产用测测试库上SSELECCT一个表表时

25、出现OORA-0015788,一个块块损坏,以以前学习过过块损坏怎怎么处理,到到还真没遇遇到过,今今天总算让让我遇到了了,还是一一台生产用用测试库,就就不用很紧紧张了。数据库版本本是9.22.0.44,Oraacle99i的RMMAN有一一个bloockreecoveer命令,可可以在线修修复坏块,以以下就是使使用RMAAN修复坏坏块的过程程。SQL connn owii/owiiConnnecteed.SQQL sselecct * fromm dpaa_hisstoryy;sellect * frrom ddpa_hhistoory*ERROOR att linne 1:ORA-01577

26、8: OORACLLE daata bblockk corrruptted (filee # 115, bblockk # 118)ORRA-011110: datta : /d001/appp/orraclee/oraadataa/dpaa/dpaa01.ddbf报ORA-015778数据块块损坏,以以下使用RRMAN命命令查询是是否可以使使用bloockreecoveer命令恢恢复以及怎怎样恢复使用rmaan登录ccatallog数据据库ora99rmaanserrver $ rmann tarrget sys/oraccleddpa ccatallog rrman/rmannRecovv

27、ery Manaager: Relleasee 9.22.0.88.0 - ProoducttionCopyrrightt (c) 19995, 22002, Oraacle Corpporattion. Alll riightss resserveed.conneectedd to targget ddatabbase: DPAA (DBBID=884349950222)connnectted tto reecoveery ccatallog ddatabbase查找最近ddata的的全备份,今今天下午刚刚做了一次次RMANN的全备份份RMAN lisst baackupp of dataa

28、;List of BBackuup Seets=BS Keey TType LV SSize Deevicee Typpe Ellapseed Tiime CComplletioon Tiime- - - - - - -6433 Fulll 64KK DISKK 00:000:277 16-MAR-09 BP KKey: 650 Sttatuss: AVVAILAABLE Taag: TTAG2000903316T11543552Pieece NName: /d002/fuullbaackupp/2000903116_daata_224_1LList of DDataffiless in ba

29、ckkup sset 6643 TType Ckp SCN CCkp TTime Namme- - - - - -115 FFull 1185562500905 16-MMAR-009 /dd01/aapp/ooraclle/orradatta/dppa/dppa01.dbf查找SCNN 11885625509055 以后的的archhivellog是否否有备份RMAN lisst baackupp of archhivellog sscn ffrom 1185562500905LList of BBackuup Seets=BS Key Sizze Deviice TType Elappse

30、d Timee Commplettion Timee- - - - -6680 2265K DIISK 000:00:00 116-MAAR-099 BPP Keyy: 6881 Stattus: AVAIILABLLE Tag: TAGG2009903166T1544731PPiecee Namme: /d02/fulllbackkup/2200900316_archh_28LList of AArchiived Logss in backkup sset 6680Thhrd SSeq LLow SSCN Loow Tiime Nextt SCNN NNext Timee- - - - -

31、-1 1109 11185662508805 116-MAAR-099 11885625514833 16-MAR-091 1110 11185662514483 116-MAAR-099 11885625514877 16-MAR-09查找seqquencce 1110 以后后的arcchiveelog是是否有备份份RMAN lisst coopy oof arrchivvelogg froom seequennce 1110;List of AArchiived Log CopiiesKeey Thhrd SSeq SS Loww Timme NName- - - - - -694 1 1

32、111 A 116-MAAR-099 /d002/arrch/11_1111.dbff695 1 1122 A 116-MAAR-099 /d002/arrch/11_1122.dbff查询onlline archhive logSQL seleect ssequeence#,memmberss,arcchiveed,sttatuss froom v$log;SEQUEENCE# MEMBBERS ARC STATTUS- - - -113 1 NNO CCURREENT1111 11 YESS INAACTIVVE1122 1 YES INACCTIVEE从以上查询询中可以看看出datta有

33、一次次最近的全全备份,有有全备份以以来的所有有archhivellog,oonlinne reedo llog下面面开始bllockrreocvver,其其实命令很很简单RMAN bloockreecoveer daata bblockk 18;Startting blocckreccoverr at 16-MMAR-009alllocatted cchannnel: ORA_DISKK_1chhanneel ORRA_DIISK_11: siid=166 devvtypee=DISSKchannnel OORA_DDISK_1: rrestooringg bloock(ss)chaannell ORAA_DISSK_1: speecifyying blocck(s) to resttore fromm bacckup setrrestooringg bloo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论