Oracle-体系架构二

接上篇Oracle-体系架构一,学习Oracle体系架构之数据库文件。

目录

  1. 数据库文件
  2. 数据逻辑和物理结构
  3. 表空间的管理方式
  4. 逻辑存储结构关系图
  5. Block
  6. ROW ID
  7. Compress for OLTP
  8. 链式行
  1. 数据库文件
    数据库文件.png
    相对重要的文件
    control files:data files、online redo log files

    Archive log files 在线数据库都需设置成归档的-保证数据不丢失
    alert and trace log files 可帮助排查问题
  2. 数据库的逻辑和物理结构


    数据库的逻辑和物理结构.png

    1)一个Database中可以有多个schema
    2)一个Database中可以有多个tablespace,对应着多个 data file。
    可以对每个tablespace 设置不同的block
    不同尺寸的数据块需使用不同buffer cache

  1. 一个tablespace中有多个Segment(表、索引)
    4)一个Segment中可以有多个Extent(extent 必须是一群连续的数据块),对应到data file,不跨数据文件;理解extent有助于理解 单块读和多块读。
    5)一个Extent中可以有多个Oracle data block--oracle 逻辑存储的最小单位,对应着多个 os block。
  1. 表空间的管理方式
    UNIFORM
    统一指定每个extent的大小
    能确定空间能用满extent所分的空间时-使用
    AUTOALLOCATE
    分别指定初始extent和后续extent的大小
    这里待学习-因和网上写表空间的管理方式出入较大,当前不知道缘由。
  2. 逻辑存储结构关系图
    extent.png
    记:每个extent是连续的数据块
  3. Block


    block.png

    common and varible header--数据块头信息(块地址、块所属段、段所属类型-表、索引)
    table directory--表目录区,表数据行的信息存放
    Row directory--数据目录区,如:100行数据的目录信息
    Free space--pctfree预留多少空间不用
    row data--存放具体的数据,一个数据块放不下一行数据时分多个数据块存放

  4. ROW ID
    ROW ID 是定位数据块中一条记录的相对唯一地址,通过ROW ID能最快地找到一条记录。(通过ROW ID可减少IO)
    引起Row ID变化的情况有:
  1. 更新分区键--一个分区就是一个单独segment
  2. 导入导出
  3. shrink(压缩空间),move(搬走),flashback(还原后位置已变化)
    Row ID的组成由18位字符组成(AAAO0f AAF AAAAlm AAA)第一个六位:对象号 第二个三位:文件号 第三个六个:块号 第四个三个:行号。
    可通过DBMS_ROWID包来查看。--后续出oracle系统包的学习记录。

补充知识点
数据默认从134块开始写,前128块为初始块-存放数据文件的位图信息。129-133存在段头的信息。134块开始写数据。

  1. Compress for OLTP
    compress1.png
    压缩的过程:Oracle的OLTP表压缩专门设计了一个“唯一”(unique)压缩算法来处理OLTP应用程序。该算法通过消除同一个数据库块内重复的值(这些值可以是跨越不同列的)来达到压缩的目的。压缩过后的块包含一个称为符号表的结构来保持压缩的元数据。当数据库块被压缩的时候,首先在符号表中为重复值添加一个副本,然后将这个重复值删除,这样每一个重复的值都可以被一个指向符号表中对应条目的一个更短的引用所替代。
    压缩的好处:节省空间,减少IO操作、减少备份和恢复的时间
    压缩的触发:当数据量达到之前预设的阈值时-批量对块中已有数据做压缩
    compress2.png
    OLTP表压缩不支持多与255列的表及LONG类型数据
  2. 链式行
    行链接和行迁移
    引起行链接:
  1. 单行超过255字段
  2. 一行数据的字节数操作一个block块大小-需要多个块
    如:每个字段2000字节,共5个字段,一行记录为10000,而一个块8K,则需要两个块。
    可通过select * from chained_rows查看,chained_rows表需通过@?/rdbms/admin/utlchain.sql创建
create table test_row_chain(name1 varchar2(2000),name2 varchar2(2000),name3 varchar2(2000),name4 varchar2(2000),name5 varchar2(2000));
insert into test_row_chain values('x','y','z','e','f');
update test_row_chain set name1=rpad('a',2000,'c');
update test_row_chain set name2=rpad('x',2000,'z');
update test_row_chain set name3=rpad('x',2000,'z');
update test_row_chain set name4=rpad('x',2000,'z');
update test_row_chain set name5=rpad('x',2000,'z');
analyze table test_row_chain list chained rows;
select * from chained_rows;

引起行迁移:
1)pctfree -剩余空间就无法存放多余出来的字节(一次IO变两次IO,行搬家后,新行地址存放在老行上)
实例:表有三个字段,一个字段10字节,一个字段990,一个字段500字节,插入1,2,null,字节为1000,插入10条数据,共10000字节。前7条数据在一个数据块中-剩余空间不到1000字节,后3条数据在一个块中,8k空间预留了5%空间。
往字段3上插入数据,每一行记录多了500字节,7行共3500字节。
第一行、第二行记录放在第一个块中,第三行记录因无多余空间,第三行迁移走。

SQL> CREATE TABLE test_row_chain2 (name1 char(10),name2 char(990),name3 char(500));
SQL> insert into test_row_chain2 values('1','1',null);
SQL> insert into test_row_chain2 values('2','2',null);
SQL> insert into test_row_chain2 values('3','3',null);
SQL> insert into test_row_chain2 values('4','4',null);
SQL> insert into test_row_chain2 values('5','5',null);
SQL> insert into test_row_chain2 values('6','6',null);
SQL> insert into test_row_chain2 values('7','7',null);
SQL> insert into test_row_chain2 values('8','8',null);
SQL> insert into test_row_chain2 values('9','9',null);
SQL> insert into test_row_chain2 values('10','10',null);
SQL> commit;
SQL> select rowid,dbms_rowid.rowid_block_number(rowid)  block,name1 from test_row_chain2;
ROWID           BLOCK NAME1
AAAejzAABAAAcNxAAA     115569 1
AAAejzAABAAAcNxAAB     115569 2
AAAejzAABAAAcNxAAC     115569 3
AAAejzAABAAAcNxAAD     115569 4
AAAejzAABAAAcNxAAE     115569 5
AAAejzAABAAAcNxAAF     115569 6
AAAejzAABAAAcNxAAG     115569 7
AAAejzAABAAAcNyAAA     115570 8
AAAejzAABAAAcNyAAB     115570 9
AAAejzAABAAAcNyAAC     115570 10
SQL> select rowid,dbms_rowid.rowid_block_number(rowid) block ,name1 from test_row_chain2;
ROWID           BLOCK NAME1
AAAejzAABAAAcNxAAA     115569 1
AAAejzAABAAAcNxAAB     115569 2
AAAejzAABAAAcNxAAD     115569 4
AAAejzAABAAAcNxAAE     115569 5
AAAejzAABAAAcNxAAG     115569 7
AAAejzAABAAAcNyAAA     115570 8
AAAejzAABAAAcNyAAB     115570 9
AAAejzAABAAAcNyAAC     115570 10
AAAejzAABAAAcNxAAC     115569 3
AAAejzAABAAAcNxAAF     115569 6
#第三行和第六行数据发生了迁移
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容