ORACLE-存储结构(1)-简介+表空间

来源:互联网 发布:linux版本发布时间 编辑:程序博客网 时间:2024/06/05 18:04

###我所使用的系统为Linux AS 4U6数据库版本为10.2.0.1.0###

ORACLE的数据库(我们所谓的叫法)主要是由以下两部分组成

1。 ORACLE 实例(instance)
2。 ORACLE 数据库(database)

其中,数据库里的存储方式分成下面两种

1。 逻辑存储单元
2。 物理存储单元

下面我们对这两种存储单元了解一下。

1. 逻辑存储单元。

逻辑存储单元分为
--1:数据库(因为数据库本身就是存储数据的地方)(Database)
--2:表空间(Tablespace)
--3:段(Segment)
--4:扩展(Extent)
--5:数据快(Block)--注意,这里的block为ORACLE的block,而不是操作系统的。

1:数据库

一个数据库是由一个或多个表空间组成的。
--物理上还包含控制文件,参数文件,日志文件、数据文件(datafile)等。。在这里暂时不考虑。
--数据文件在下面会讲到

2: 表空间

表空间里存放的是段(Segment)。物理上是多个数据文件组成。
表空间分为永久表空间与临时表空间、还有一个回滚表空间

--永久表空间是存放平常数据的
--临时表空间一般是用来排序用的
--回滚表空间(Undo Tablespace)是用来保证数据一致(具体的,请查阅存储结构之回滚段)

永久表空间还分为系统表空间与非系统表空间。

--系统表空间:里面存储的是数据字典等比较重要的表。sys用户的默认表空间。

由于sys用户的默认表空间为系统表空间,所以最好不要用sys用户做一些非维护操作。
注意:系统表空间里隐含了小的回滚段,即使数据库没有回滚表空间,sys用户还是能正常工作。
--非系统表空间:一般用户存放数据的地方。

创建用户后,没有指定默认表空间的话,默认表空间为USERS(在10G之前为系统表空间)
在创建表空间时,最好按部门等进行创建。这样以后维护时好维护。
简单来说,一个公司的生产,人力,财务部分,各创建一个表空间。
这样以来,当有一个表空间出错,而需要恢复时不会影响到其他的业务。

表空间的管理:

1:数据字典管理(DMT)
2:本地管理(LMT)-- 推荐(非我本人推荐,而是官方强烈推荐)

1。关于数据字典管理简单介绍一下(ORACLE已经开始逐渐放弃这种管理方式)

用两个数据字典表来管理空间
FET$(Free Extents)记录当前表空间中可用的空间(可用的extent)
UET$(Used extents)记录当前表空间中已经使用的空间(已分配的extent)

当分配空间时会去查询FET$表,然后从FET$表删除一行数据,到UET$插入一行数据。
当一个空间被清空时与上面操作正好相反。

由于每次分配或回收extent时,都会更改两个表。这会是数据库性能大大降低。
性能降低原因:
发生两个DML操作引起

--1:锁的等待事件
--2:事务的挣用
--3:产生redo log,占用UNDO表空间

不止如此,还得为维护两张表,系统还得经常监控。
因此ORACLE准备放弃这种方式。官方说是提供这种方式只是为了向下兼容。

2。本地管理表空间

本地管理表空间,是使用表空间里的6个数据块(从第三个到第八个)来代理两张表。
按bit来管理表空间里的extent,一位表示一个extent。
这么一来,上面的几个问题都解决了。
因为没有表,不用去维护,也不会有DML语句,因此更不会有锁或事务。

下面来看下创建表空间的具体方法(EM)

先登陆EM,用sys用户以sysdba权限。

进入"Administration"界面-》
在"Database Administration"项里的"Storage"有个"Tablespaces",点进去。
在这个界面会看到如下图片。



tablespace1.JPG

在这里可以看到现有的表。按"Create"就可以创建一个新的表。

tablespace2.JPG

写上表名称,选择扩展管理方式,选择表的类型,表的状态,下面还有创建数据文件(datafile)。
这里的状态说明一下。

--1。读写:普通状态。正常的状态应该就是读写,这样才能插入,修改,删除和读取数据
--2。只读:只能进行查询,不能进行任何别的修改表空间内容的操作。
--3。脱机:不能访问此表空间。在表空间有问题或者需要恢复当前表空间的时候使用。

在这里,对于永久表空间和临时表空间,有选项为"Set as default ..."。

--当永久表空间选择时,创建用户时没有指定默认表空间,此表就变成默认的表空间。
--当临时表空间选择时,创建用户时没有指定默认临时表空间,此表就变成默认临时表空间。

最后有个是否使用bigfile tablespace,这种方式是在一个表空间建立一个大的,可扩展的数据文件。
具体的,会在数据文件(datafile)里有说明。

点下面的Add来创建数据文件。

tablespace3.JPG

写上数据文件的名称,路径(一般默认会显示),初始大小,是否重复使用已有文件(重名时会发生,不建议使用)。
关于扩展,可以选择自动扩展。当表空间的所有数据文件满了,但没能即使添加数据文件时会发生不能插入数据的现象。
为防止这种现象的出现,会使用自动扩展数据文件。(后面讲数据文件时具体的说明)。

点一下下面的"Storage"看下。

tablespace5.JPG

第一个是选择扩展(extent)每次扩展的方式,有自动和固定大小。推荐使用固定大小。
段空间管理,也有两种方式,一种是ASSM(自动段空间管理),另一种是手动的用free list管理。建议使用ASSM
最后是是否记日志。建议使用日志,以便以后出问题可以很好的查找。

在所有的操作完成之后,点击"Show SQL"会出现上面的语句,你可以直接在SQLPLUS里数据上面语句来达到同样效果。

tablespace6.JPG

这里的语句,直接在SQLPLUS里键入,可以达到跟刚才操作完全一样的效果。
这样,就可以知道怎么用命令行方式创建表空间了。(感觉非常的好用)。

我们用SQLPLUS模式来创建表空间。

SQL> CREATE SMALLFILE TABLESPACE "TEST_TS"  2  DATAFILE '/files/oraData/datafiles/R/TEST_TS_FILE'  3  SIZE 100M  4  AUTOEXTEND ON  5  NEXT 1M  6  MAXSIZE 1000M  7  EXTENT MANAGEMENT LOCAL  8  UNIFORM SIZE 1M  9  SEGMENT SPACE MANAGEMENT AUTO 10  /Tablespace created.SQL> 

这样,跟上面EM操作建立了完全一样的表
EM操作虽然比较简单,但不要忘记命令方式。

Technorati : ORACLE 存储结构
Del.icio.us : ORACLE 存储结构
Zooomr : ORACLE 存储结构
Flickr : ORACLE 存储结构