oracle表空间

oracle数据库是跨平台的,在一个数据库平台上开发的数据库可以不加修改地移植到另一个操作系统平台

上。因为,oracle不会直接操作底层操作系统的文件,而是提供一个中间层,这个中间层就是oracle的逻

辑结构,它与操作系统的平台无关,而中间层到数据文件的映射通过DBMS来完成。

oracle数据库应用系统通过操作中间件来实现逻辑操作,而逻辑操作到数据文件操作之间是通过DBMS来映

射完成的。这样数据文件对于oracle数据应用系统来说就是通明的。


每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件( d a t a f i l e )。一个数据

文件只能属于一个表空间。数据文件创建后可改变大小。创建新的表空间需要创建新的数据文件。
数据文件一旦加入到表空间中,就不能从这个表空间中移走,也不能与其他表空间发生联系。
如果数据库对象存储在多个表空间中,那么可以通过把它们各自的数据文件存放在不同磁盘上来对其进行

物理分割。数据库、表空间和数据文件之间的关系如下图所示。


表空间(Tablespace):在逻辑上一个数据库由表空间组成,一个表空间只能属于一个数据库,一个表空

间包含一个或多个操作系统文件,把这些操作系统文件称为数据文件,表空间包含一个或多个段(数据库

是一个逻辑上的概念,它是所有数据库对象和数据的容器,数据库下面是表空间。实际上,数据库中的数

据都存储在表空间中。数据库由多个逻辑空间组成,这些逻辑空间也称为表空间)。


段(segment):是表空间内的一个逻辑存储空间,一个表空间包含一个或多个段,一个段不能跨越表空间,

即一个段只能在一个表空间里,但是段可以跨越数据文件,即一个段可以分布在同一个表空间的几个数据

文件上,一个段有一个或多个区段组成;


区段(extent):区段是段中分配的逻辑存储空间,一个区段由连续的oracle数据库块组成,一个区段只能

属于一个数据文件中。创建一个段时,该段至少包含一个区段。当段增长时,将分配更多的区段给该段,

同时DBA可以手动地向段中添加区段。


数据库块:oracle block,oracle数据库服务器管理存储空间中的数据文件的最小单位就是数据库块。它

是oracle数据库系统输入、输出的最小单位,一个数据库块由一个或多个操作系统块组成。oracle提供了

标准的数据库块尺寸,该尺寸通过初始化参数DB_BLOCK_SIZE来设置,一般为4k或者8看,在创建数据库时

指定。一个数据库应该是操作系统块的整数倍,这样可以避免不必要的I/O。


上面是oracle的逻辑存储结构


物理结构

数据文件(datafile):数据文件是oracle格式的操作系统文件,即.dbf文件等。数据文件的大小决定了

表空间的大小,当表空间不足时,需要增加新的数据文件或者重新设置当前数据文件的大小,以满足表空

间增长的需求。


操作系统块(OS BLOCK):操作系统块依赖于不同的操作系统平台,它是操作系统操作数据文件的最小单

位,一个或多个操作系统块组成了一个数据库块。


在一个数据库中,表空间的数量没有严格的限制,大小为2G的表空间和大小为20M的表空间可以并存。

有几个表空间是所有oracle数据库必备的表空间,它们是:System表空间、临时表空间、还原表空间和默

认表空间。


oracle数据库表表空间分为两类:系统表空间和非系统表空间
系统表空间:数据库创建时自动创建,是每个数据库必须的表空间,满足数据库系统运行时最低的要求。
在用户没有创建非系统表空间时,系统表空间可以存放用户数据或索引,但是这样做会增加系统表空间的

I/O,影响系统效率。

非系统表空间:用户根据业务需求而创建的表空间,功能独立的表空间可以一定程度上提供系统效率。


表空间的管理

对表空间的管理就是对该表空间区段的管理,但用户增加数据时,就需要分配更多的区段给新增的数据使

用。表空间的管理,分为两种方式:


数据字典管理:把每个表空间的使用情况记录在数据字典表中,当分配或撤销表空间的区段时,隐含使用

sql语句对表操作以记录当前表空间区段的使用情况,并且在还原段中就了变化前的区段使用情况,显然这

种方式增加了数据字典的频繁操作,如果一个数据有成千上百个表空间,这样维护起来效率就很低。

本地管理表空间:其思想就是每个表空间管理自己的区段分配,记录区段的使用情况。这种管理方式类似

于一种分布式管理,减轻了数据字典的工作压力。但是创建本地管理的表空间时,不能随意更改存储参数




创建表空间的语句如下(必须具有sysdba的权限才能创建表空间):
create tablespace cxm_tablespace
datafile 'F:\oracle\oradata\test\cxm.dbf' size 100M
(目录必须存在,cxm.dbf这个文件不能存在,负责冲突,表空间名和数据文件名可以不一样)
上面的语句创建了一个表空间名为cxm_tablespace的表空间,该表空间只有一个数据文件。

如果想查看表空间信息,可以通过user_tablespaces这个数据字典视图查看(任何用户都可以查看表空间

的信息)。

如果要想查看表空间对应的数据文件信息,可以通过dba_data_files视图查看,例如:

select * from dba_data_files where tablespace_name like '%CXM%'


创建本地管理的表空间如下:
create tablespace cxm_tablespace2
datafile 'F:\oracle\oradata\test\cxm3.dbf' size 100M,
'F:\testSpace\Test2\cxm6.dbf' size 10M
extent management local
uniform size 1M(区段尺寸统一为1M)
(由于不能随意更改存储参数,所以比起数据字典管理表空间的创建更坚决一些)

创建数据字典管理的表空间如下:
create tablespace cxm_tablespace2
datafile 'F:\oracle\oradata\test\cxm.dbf' size 100M,
'F:\testSpace\Test2' size 10M
minimum extent 20k
extent management dictionary
default storage(initial 20k next 20k maxextents 500 pctincrease 0)
(注意:这个语句可能运行部成功,oracle9i第二版只能创建本地管理的表空间,数据字典管理表空间逐步

的被淘汰出去了)


还原表空间
如果某个用户想更改某个属性,在更改的过程中其他用户要查看该数据时,看到的应该是原来的数据,应

该用户正在更改数据,还没有提交,所以为了保证这种读的一致性,oracle设计了还原段,在还原段中存

放更改前的数据。

还原表空间只能存储还原段,不能存储其他任何对象。在创建还原表空间时,只能使用datafile、extent

management子句。

创建还原表空间的语句如下:
create undo tablespace cxm_undo
datafile 'F:\testSpace\Test2\cxm8.dbf' size 10M


临时表空间

临时表空间用于用户的特定会话活动,如用户的排序,排序的中间结果需要存储在某个区域,这个区域就

是临时表空间。如果在创建数据库时,没有创建临时表空间,数据库服务器默认就使用system表空间,由

于临时表空间使用频繁,会不断出现磁盘碎片,显然这样会影响数据库系统的效率,因为system表空间中

存储了数据字典等数据库系统的重要信息。

oracle9i、oracle10g会自动创建一个临时表空间temp。

临时表空间被当前数据库的多个用户共享使用的。
创建临时表空间的语句为:
create temporary tablespace cxm_tem
tempfile 'F:\testSpace\Test2\cxm_temp.dbf' size 10M
如果想查看临时表空间对应的数据文件,可以通过查看动态性能视图v$tempfile来获得,例如:
select * from v$tempfile


如果想查看当前默认的临时表空间,可以使用如下语句:
select * from database_properties where property_name like 'DEFAULT%'

如果想更改当前的默认表空间,可以使用如下代码:
alter database default temporary tablespace cxm_tem
一旦更改,则所有的用户将自动使用更改后的临时表空间作为默认临时表空间
注意:不能删除一个当前使用的默认表空间;不能把默认表空间设置为脱机状态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值