01.Oracle存储结构深入分析与管理的课程内容介绍

课程概述:

1.上章课程内容回顾

2.本章课程内容介绍

3.学习本套课程前言

 

学习完上章节部分后,应能掌握以下内容:

Oracle网络相关概念与常用配置文件

熟悉监听管理工具

创建与管理监听服务

使用tnsping测试Oracle Net的连接

监听静态注册与动态注册

如何增加数据库service

生产环境如何配置第二个监听优化数据传输

Oracle服务器 进程中的LOCAL=NO和LOCAL=YES

Oracle监听与客户端配置要点分析

配置文件listener.ora和tnsnames.ora详解

Oracle客户端安装及PL/SQL连接服务端

Oracle 11G中的ADR工具和日志

Oracle监听日志配置与日常维护规范

监听日志文件名的修改

监听日志文件备份与重命名的规范做法

Oracle监听安全与密码管理

通过两个数据库之间使用DB_LINK进行网络连接

关于共享服务器以及专用服务器

Oracle监听的防火墙功能限制客户端访问Oracle

Oracle监听与客户端连接故障检查分析流程

Oracle如何使用trace跟踪问题深入分析网络故障

 

学完本部分后,应能掌握以下内容:

熟悉表空间与数据文件之间的关系

表空间的定义与默认表空间介绍

段(segments)的定义/类型/了解段的创建与分配情况

区(Extent)的介绍及区是如何分配的?

数据库块(Database Block)的介绍及Oracle是如何管理数据存储的

数据库块(Database Block)的基本结构与数据块深入分析

BBED分析数据库块(Database Block)结构与修改数据块

BBED处理断电后数据块不一致的ORA报错

表的概念、类型、创建、使用规则

Rowid字段类型与结构的分析

临时表的功能与应用

表的行迁移与链接

 

数据库块是数据库的最小存储单元

01.数据结构与表空间的概念及段的类型

数据库的结构关系

第一层:系统表空间,用户表空间,回滚表空间,临时表空间

第二层:各种数据文件

第三层:段,索引,表

第四层:区

第五层:块

 

表空间是数据库的逻辑划分,一个表空间只能属于一个数据库,数据库对象是放在表空间里的

段是表空间的重要组织结构,段是指占用数据文件空间的一个统称,数据库对象使用的集合,段可以有表段,索引段,回滚段,临时段,高速缓存段(比较少使用)

区是数据库存储空间分配的一个逻辑单元,由连续的多个块组成

段是由一个或多个区组成,当一个段中所有空间用完以后,oracle就会为该段分配一个新的范围

块就是数据库管理数据文件中的基本单元,也就是我们数据库使用IO的最小单元,不是操作系统的块大小,数据库的和操作系统的块是两回事

 

表空间

这张图就是数据库里面有表空间,表空间里面有数据文件,数据文件一般是物理文件,表空间其实就是一个逻辑概念,物理上并不存在,实际就是把一堆的数据文件组合起来,放在一起的统称。

一个数据库里面可以有多个表空间,但是一个表空间里面只能属于一个数据库。

一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。

数据库中的Schema,为数据库对象的集合。

一个表可能占一个段,一个索引可能也占一个段。

数据块在物理磁盘上可能是分散的,但在逻辑上是连续的。

 

02)表空间的定义与默认表空间介绍

五个默认的表空间:

1)system:管理数据库的,这个表空间包含数据库数据字典和数据库的一些管理信息,用来管理数据库的。并且只有sys用户才有权限去管理访问

2)sysaux:是system表空间的一个辅助表空间,最早在8i/9i的时候是没有这个表空间的,当时只有system表空间,现在系统表空间的组件和产品都放在这个表空间里了,如果这个表空间不可以,那么系统表空间核心功能还是可用的,只是存放在这个表空间的一些功能有限制而已。这个表空间平时也不能删除和重命名,但你可以往里面增加数据文件,其实这个表空间的功能就是为了解放system表空间,第一是性能,第二是安全

3)temp:临时表空间就是我们要执行sql语句要创建一些临时段,比如说我大规模排序,创建索引都是需要临时表空间的,临时表空间的主要用途就是在数据库进行排序运算,管理索引,访问视图等一些操作的时候,提供临时的运算空间,当他运行完成以后就会自动清楚,其实oracle临时表空间创建之后是不会占用表空间的,只是放在那里10个G,用的时候再不断增长,临时表空间会越来越大,因为排序是很耗资源的,临时表空间满了以后要不你就加临时表空间,要不你就优化程序,尽量示排序减少,

4)undo:默认是undotbs1,Oracle的回滚技术很厉害,靠这个技术解决了回滚不一致的问题,打下了半壁江山。

作用:用于存储,还原信息的一个还原表空间,如果数据库使用了自动还原管理,那么数据库在任何一个时间点都可以还原,数据库在任何指定时间只能使用一个undo表空间,这个表空间一般都是在创建库的时候创建的,undo类型表空间当你对一张表或一条记录进行修改的时候,它会对你修改之前的信息进行保存,这样就可以保证数据的回滚,作用就是回滚,恢复还原,undo只包含undo类型的对象,不包含其他对象,只适合于数据文件和区管理,即如果操作没执行完出问题了这个时候就会回滚,保证你的数据一致性。

5)user:这个表空间就是存储用户对象和数据的,一般创建用户的时候没有指定你的用户表空间,那users就成为该用户创建的所有对象的默认表空间,对于sys/system的用户而言它的默认表空间永远都是system,这两个用户它是操作系统的管理员,其他用户如果不指定默认表空间就是users,但是我们也不建议你把数据放到users里面去。

数据库装好就有这些表空间的。

03.段的定义/类型、了解段是怎么创建的

 表,分区表,簇,索引这些都是属于常见段

还有索引组织表,索引分区,undo 段和临时段。

table:数据量小的时候可能一张表就是一个段,数据量大的时候可能是很多段

cluster:簇,堆表,堆表中的数据是无序存放的,往往使用一段时间后数据就变得乱七八糟的,这个时候如果索引中有一些相同的值对应的数据存放在不同的块当中,这个时候如果你要通过索引查询某一个块的数据就需要访问不同的块,代价非常高,如果我们发现表有关联,那么我们访问一个数据往往访问另一个表里的数据,我们可以把这些数据物理存储在一块儿,这样我们就把这些相关的表建一个cluster,从物理上存储在一块儿。

table partition:数据量大的时候,针对这种表,一个省就是一个区,34个区就是34张表,逻辑上又属于中国一张大表,如果一张表有分区,那可能占用多个段。

index:索引,书的目录,一个索引也可能占多个段,索引可以建立在一张表上,可以一个列或多个列上面,提高对表的一个查询。

index partition:索引组织表,存储在一个索引结果集中的表,存储在堆中的表是无组织的,对于一个应用来说,索引组织表和常规表对它来说是没有区别的,使用堆组织表的时候,我们就必须为表和表主键上索引分别留出一些空间,而索引组织表是不存在主键和空间上的开销的,因为索引就是数据,数据就是索引,索引组织表的好处就是节省磁盘空间的占用,降低io,减少访问缓存池,即节约空间。

index partition:索引分区,比如你有20-30页目录这样你看也很痛苦,所以书就按页分开,分区索引可分为,全局分区索引和本地分区索引,本地分区索引又分为,本地前缀索引和本地非前缀索引,其本地索引分区对应对应的表分区数量都是相等的,就是每个分区对应着相应的索引分区,而本地索引不需要指定分区范围,因为索引对表来说就是本地的,当本地索引创建的时候,oracle自动会为表中的每一个分区创建独立的索引分区,全局索引就是整张表建一个索引,针对全局,而本地就是针对某个分区的,就这么简单。

lob:大只段就是一些大大的对象,对象很大,数据库不但可以存数据还可以保存一些音频,图片啊等等,一般大小几十兆,有些数据不支持大数据块的,可以在表中存一个指针指向外面文件系统,数据库只是建一个索引,对象在文件系统里面不在数据库里面,让他去访问存储了。

nested table:嵌套表。表中表,用指针。

rollback:存储数据修改之前的值,回滚段头一般包含正在使用该回滚段的一些事物的信息,一个事物只能使用一个回滚段用来存储它的回滚信息,一个回滚段可以存放多个事物。

temp segments:临时段主要解决一些排序的问题

还有大对象段,嵌套表,最后一个很少见到

04.了解段是怎么创建的?

在10g的时候,创建一个表一个索引,不管有没有数据,默认都是建一个段,但是11g以后只有插入数据才开始创建段。

实验:

1.创建一个用户

用户名:itpux 

密码:itpux

 2.授个权

可以通过pl&sql,也可以通过sql&plus操作

先创建一张基本表,看看段怎么分配的。

这张表没数据,一行就一个id值。

 

表示执行。

现在看下段的情况。

发现没有段。

现在插一条数据进去。

再看下有没有段

段子类型:自动管理

段类型:表

表空间:默认属于users

大小:64字节

块大小:8k

10g的时候上面三行就会有一个段,自动创建。

11g命令改一下就可以得到10g效果:

执行按F8,选择按shift+home

不加就会在创建数据的时候再加段。

下面创建一个带主键的表,看看段的分配情况:

一个表段,一个索引段,主键其实就是一个索引。

再创建一个大只段的表:

创建表段,索引段,创建两个大只段,索引段,再创建两个大只段段。

就是创建一个表的时候表的信息和数据可能分散在多个段当中,每一个段保存一部分数据,

默认会创建一个区。

8个块,1个块8k,8个是64k.

 

 ASSM:自动存储段管理

 如果插入大量数据会有什么情况。

 

插了10000行数据以后,区变成两个了。

04.段分配情况对比(普通表/分区表/大对象表)

以上已经演示

05.区的介绍及区是如何分配的?

区是段下面的一个存储单元,一个区是一段连续的数据块。

一个文件头其实就是一个区。

这个文件头里面记录了区的分配和释放的信息,一个区由连续的块组成,创建文件,扩展文件就会创建区,删除文件,改小文件就会释放区

建立一个表段,oracle会为该段分配初始区,由于数据插入,初始区装满后,oracle将分配下一个区,初始区大小在表段或更高一级的存储单元中可以指定。

 

extend_id = 0初始区的分配情况

数据增长,段也做扩展,区也做了两个扩展。

把表删掉,区就回收了。

 

删除以后区还在,只是打标记,再truncate table itpux1;再看就没有了

 

posted @ 2016-12-05 01:27  白驼山庄庄主  阅读(315)  评论(0编辑  收藏  举报