[Oracle] 逻辑结构实验与总结

一. 逻辑体系结构图


  

二. 逻辑结构图组成介绍


  从上表可以看出,一个数据库是由多个表空间(tablespace)组成,一个表空间又由多个段(segment)组成,一个段又由多个区(extent)组成,一个区则由多个块(block)组成。

  一个数据库中,UNDO和SYSTEM表空间是必须存在的。

  举个例子:

  话说张三是大坝县的一个农民,每年秋收的稻谷都必须放到县里的粮仓里统一管理。跟他一同去的还有李四、王五等以种稻谷为主的农民。

  刚开始的时候县里粮仓给他分配了一块5㎡的地方(block块)给他存放。后来不够用了,他又向管粮仓的领导申请了5㎡。谁知道今年大丰收,这10㎡的地方根本就不够他用,下次又申请了5㎡。这三两天就要了几次地方放稻谷,领导觉得烦了,这样下去岂不把我忙死?于是领导批准张三可以一次性申请90㎡(extent区),这样的话张三就可以少去烦领导要地方放稻谷了。可是随着张三的地一年一年地增多,收获的稻子也一年比一年多,90㎡也不够他用了,于是他再向领导申请,但这次他轻松多了,只去了一次,90㎡就到手了。。。但是很快,张三的业务发展迅速,已经不止种稻谷了,还种了苹果!他又用同样的方式申请了一块90㎡的地方放苹果,再下一年业务增加了种植菠萝。。。就这样一直发展,张三靠起家了,他这次真正的大丰收,县里的粮仓给他分配的地方又不够用了,张三就直接把整个粮仓(segment段)买了下来,正好储备所有的农作物。但第二年,张三已经发展到养殖业了,于是直接在旁边自己建了几个仓库,并且给这些仓库(包括之前的粮仓)起了个名字,张生仓库(tablespace)。

  而李四、王五也几乎同时,也跟张三一样发家致富,各自也建了自己的仓库,李生仓库(tablespace1)、王生仓库(tablespace2)。。。

  他们几十个发家致富的农民的仓库共同组成了大坝县的粮食仓库(database)。

三. 实践出真知 ([x] - 2015/12/30)


实验一:创建测试表TEST_A,插入数据并查看数据块分布情况。

实验过程:

[sql] view
plain
 copy

  1. -- 1.创建一个有1000条记录的表
  2. CREATE TABLE TEST_A AS SELECT * FROM dba_objects do WHERE rownum<=1000;
  3. -- 2.查看表中的数据块存储位置
  4. SELECT a.ROWID ,b.file_name ,dbms_rowid.rowid_block_number(a.rowid) block_number,
  5. dbms_rowid.rowid_row_number(a.rowid) row_number
  6. FROM test_a a ,dba_data_files b
  7. WHERE b.file_id=dbms_rowid.rowid_to_absolute_fno(a.rowid,user,‘TEST_A‘);
  8. -- 3.查看每个数据块分布情况(每个实验都用到此SQL)
  9. SELECT dbms_rowid.rowid_block_number(a.rowid) as block_number,count(*) AS record FROM test_a a ,dba_data_files b
  10. WHERE b.file_id=dbms_rowid.rowid_to_absolute_fno(a.rowid,user,‘TEST_A‘)
  11. GROUP BY rollup(dbms_rowid.rowid_block_number(a.rowid));

数据块位置结果(样本):

....

数据块分布情况统计:

-----数据块-----   ----数据行数---

  
 

实验结论:当我们在数据库中创建表时,系统会自动分配连续的N块数据块存放数据,由于块大小固定,插入数据时,每个块里面有大致相当的数据量,因为具体每行数据字节数都会不一样,所以块存储的数据量大致一样。

实验二:在实验一基础上删除数据再重新查询数据在块中的分布情况

实验过程:

[sql] view
plain
 copy

  1. -- 4.删除表TEST_A在数据块931中的数据
  2. DELETE FROM TEST_A a WHERE
  3. dbms_rowid.rowid_block_number(a.rowid)=931;

删除后数据块分布情况:

-----数据块-----   ----数据行数---

   

插入数据,再观察块中数据量分布情况:

[sql] view
plain
 copy

  1. -- 5.插入数据,再观察数据分布情况
  2. INSERT INTO TEST_A SELECT * FROM dba_objects do WHERE rownum<=80;

-----数据块-----   ----数据行数---

实验结论:删除表数据时,之前数据库向系统申请的数据块空间并不会一同删除。而当我们再次插入数据的时候,会优先填补之前为此表分配过的块,如空间不够再扩展。

实验三: 创建表TEST_B,跟TEST_A一样的数据。

实验过程:

[sql] view
plain
 copy

  1. -- 1.创建一个有1000条记录的表
  2. CREATE TABLE TEST_B AS SELECT * FROM dba_objects do WHERE rownum<=1000;
  3. -- 2.查看每个数据块分布情况
  4. SELECT  dbms_rowid.rowid_block_number(a.rowid) as block_number,count(*) AS record FROM test_b a ,dba_data_files b
  5. WHERE b.file_id=dbms_rowid.rowid_to_absolute_fno(a.rowid,user,‘TEST_B‘)
  6. GROUP BY rollup(dbms_rowid.rowid_block_number(a.rowid));

-----数据块-----   ----数据行数---

实验总结:

1. 创建新表会分配新块。

2. 留意TEST_A,创建后终结块号为943,而在创建TEST_B的时候开始块号已经是947,中间的一段944~946去了哪?答案体现在对区(EXTEND)的理解上了,区是系统分配的最少单位(虽然块是最小存储单位),所以可以推测944~946块也是分配给了TEST_A。

四. 总结


  对于我们在数据库里新建数据库(database),在数据库中建立多个表空间(tablespace),在每个表空间内建表。例如我们可以分配多个用户,在user1用户下建立table1,table2,user2下建立table3,table4,user1、user2就等于不同的表空间,table1、table2是建立在表空间下的不同段(segment),而每张表的每个数据就是块(block),一列数据可看做一个区(extent),区满了之后不断扩展就组成了表。

时间: 2024-11-14 13:30:31

[Oracle] 逻辑结构实验与总结的相关文章

Oracle11g温习-第一章 3、ORACLE逻辑结构

2013年4月27日 星期六 10:27 Oracle逻辑结构的相关数据字典: 记录各个表空间的详细信息. SYS @ prod > select tablespace_name,status from dba_tablespaces; TABLESPACE_NAME      STATUS -------------------- --------- SYSTEM               ONLINE UNDOTBS1             ONLINE SYSAUX          

oracle 11g实验五——触发器的使用

实验要求: 实验五 触发器的使用 实验目的 1.  理解触发器的概念.作用及分类: 2.  掌握触发器的创建.使用: 实验内容 1.  建立表orders:用于存储订单列表信息:表order_items:用于存储单个订单的详细信息.其结构分别为: 表1 orders表结构 字段名 字段类型 字段宽度 说明 id NUMBER 20 订单编号(主键) order_date Date 订单日期(非空) user_name VARCHAR2 10 客户名称(非空) city VARCHAR2 20 客

【转】Oracle基础结构认知—进程及逻辑结构 礼记八目 2017-12-17 19:33:21

原文地址:https://www.toutiao.com/i6500477672349499917/ 一. Process Structure进程结构 Oracle有两种类型的进程: 服务器进程和后台进程(server processes and background processes). 1.服务器进程 Oracle 服务器进程是处理用户与实例连接的事务. 任务是: (1)分析和执行应用所发出的SQL语句. (2)从数据文件读必要的数据到SGA区的共享数据区. (3)返回必要信息给应用. 2

九妹带你了解oracle

一.oracle 体系架构 Oracle的体系结构是数据库的组成,工作过程,以及数据库中数据的组织与管理机制,要了解oracle数据库的体系结构,就必须要理解oracle的主要组件和重要的概念.Oracle体系结构包含一系列组件,包括实例.用户进程.服务进程.数据文件及其他文件,如参数文件.口令文件和归档日志文件等.如下图所示:   实例和数据库是oracle数据库体系结构的核心组成部分,也是最重要的两个概念,dba的主要工作就是维护实例和数据库. 1)实例 实例是后台进程和内存的集合,必须启动

【课程分享】Oracle数据库系统project师

对这个课程有兴趣的朋友能够加我的QQ2059055336和我联系 一.本课程是怎么样的一门课程 1.1.课程的背景 该课程是Oracle数据库系统project师培训课程 Oracle Database,又名Oracle RDBMS,或简称Oracle.是甲骨文公司的一款关系数据库管理系统.到眼下仍在数据库市场上占有主要份额. ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是眼下最流行的客户/server(CLIENT/SERVER)或B/S体系

【课程分享】Oracle数据库系统工程师

对这个课程有兴趣的朋友可以加我的QQ2059055336和我联系 一.本课程是怎么样的一门课程 1.1.课程的背景 该课程是Oracle数据库系统工程师培训课程 Oracle Database,又名Oracle RDBMS,或简称Oracle.是甲骨文公司的一款关系数据库管理系统.到目前仍在数据库市场上占有主要份额. ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一

Linux 命令符下安装Oracle

之前都是使用脚本直接安装,这样很容易出现出现问题 不知道排错, 于是尝试在linux 下手动分步安装, 内部有些原理并不是很懂, 待慢慢完善, 最好是多安装几次图形化安装,理解原理. 一.准备安装的环境: 1.硬件: centos 6.5 Oracle database 11g /db  分区大于10G /free  内存大于2G 2.Oracle 的安装的两个软件包: linux.x64_11gR2_database_2of2.zip linux.x64_11gR2_database_1of2

oracle 11g系列 体系结构

1.1. oracle体系结构 图中描述了oracle的结构,oracle结构是比较复杂的,oracle设计这么复杂的体系结构的原因在于:首先oracle是一个关系型数据库管理系统,主要就是为了实现数据存储和管理的,为了让数据库的速度变得更快,尽可能的让90%以上的工作都在内存完成.所以数据库中最稀缺的资源就是内存,其次是磁盘I/O,所以我们要做好内存和I/O的管理,为了解决这个问题oracle这么复杂的一个结构.从图中可以看出来oracle体系结构包含了进程结构.内存结构.存储结构.进程结构包

10gocm-&gt;session5-&gt;数据库管理实验

Oracle数据库管理实验 一 传输表空间 二 创建分区表和分区索引 三 FGA细粒度审计 四 监控索引使用情况 五 创建含特殊字段类型的表 六 Flashback闪回技术 一 传输表空间,将ocmdb库的tstrans表空间迁移到ocmdb02库中 场合:1.适用于OLAP数据仓库应用  2.数据迁移 比exp/imp速度快,不仅迁移数据同时迁移元数据 原理:只导出表空间的元数据(即结构信息),导入目标数据库,把表空间设置为只读,把对应的数据文件复制到目标系统的目标目录,挂载上导入的表空间,在