管理数据库存储结构

表空间和数据文件

Oracle 数据库在逻辑上将数据存储在表空间中,在物理上将数据存储在数据文件中。

表空间:

只能属于一个数据库

包括一个或多个数据文件

可进一步划分为逻辑存储单元

是存储方案对象数据的资料档案库

数据文件:

只能属于一个表空间和一个数据库

是构成表空间的基础文件

存储结构

数据库、表空间、段(segment)、区间(extent)、数据块(block)

1、一个表空间只能属于一个数据库、一个表空间可以包括多个数据文件、一个数据文件只能属于一个表空间

2、一个段可以跨越多个数据文件,普通表就是一个segment、索引也是一个segment

3、segment分配空间的最小单位就是extent,每个segment由一个或者多个extent组成

4、一个extent不能跨越多个数据文件因为一个extent是物理上连续的存储空间

5、一个extent由多个连续的block组成

6、block是oracle I/O的最小单位

创建永久表空间

表空间通过数据量的大小通常分为三类:大表、中表、小表,我们来简单看一下

clip_image002

上图命令创建了一个标准表空间,接下来我们创建一个小表表空间

clip_image004

接下来我们再创建一个大表表空间

clip_image006

通过追加不同的参数值,可以建立不同区大小的表空间,我们来看一下

clip_image008

上图中我们建立了一个区大小为1M的表空间,接下来我们再看看另一种建立方式

clip_image010

可以看到,我们指定了默认的存储方式(初始化区大小为512k、下一个区大小为512k)

我们也可以通过ASSM技术创建一个自动段空间管理的表空间,下面详细看一下

clip_image012

对于建立的Oracle表空间来讲,Oracle9i以后版本为其准备了几种不同的块模式,分别为2k、4k、8k、16k和32k,其中默认建立的表空间为8k,若想使用不同块的表空间,则需要激活不同块的db_cache大小。

clip_image013

我们来具体创建一个4k块大小的表空间,亲自感受一下

clip_image014

首先为4K块大小的表空间分配空间大小(注意:db_Nk_cache_size的大小不能超过其配置的SGA内存总和,且通常为2的N次方倍。)

clip_image016

临时表空间和临时表空间组

临时表空间主要用来存放用户的临时数据,例如排序数据

Oracle10g中引入了临时表空间组的概念

1、临时表空间组是一组临时表空间

2、临时表空间组和临时表空间的名字不能相同

3、不能显式的创建和删除临时表空间组,因为临时表空间组中必须要有成员,当第一个临时表空间被分配给临时表空间组的时候,临时表空间组自动的创建,当最后一个临时表空间从临时表空间组退出的时候,临时表空间组自动删除,这样保证了临时表空间组总是有成员。

使用临时表空间组的好处

1、同一个用户,在不同的session里可以使用不同的临时表空间

每一个用户有一个默认的临时表空间,同一个用户登陆多个session的时候,如果不使用临时表空间组,那么所有的session使用同一个临时表空间,容易产生瓶颈问题。

2、在并行操作中,不同的从属进程可以使用不同的临时表空间

3、在数据库层面可以同时指定多个默认临时表空间

默认临时表空间组的出现,主要是为了分散用户对默认临时表空间的集中使用,通过将对临时表空间的使用分散到多个临时表空间上,提高了性能

创建临时表空间组

下面我们通过命令来创建一个临时表空间组

clip_image018

通过上图可以看到,我们在原有临时表空间temp01的基础上又创建了三个临时表空间,并将所有的临时表空间分配到临时表空间组tmp_grp中,现在我们来查询一下

clip_image019

可以看到,现在的临时表空间组中已经有了四个临时表空间,我们将其配置为数据库的临时表空间

clip_image020

删除表空间

在生产环境中,我们有时候需要删除多余的表空间来回收资源,下面简单看一下基本命令

clip_image021

表空间已经被删除,但是我们通过系统中查询,表空间的数据文件并没有被系统回收并释放,还需要由我们手工删除它

clip_image022

那么,有没有办法直接在删除表空间的时候自动删除数据文件呢,我们来看一下

clip_image023

我们再来查询一下数据文件,看看磁盘空间是否已经被释放。

clip_image024

可以看到small_tbs表空间对应的数据文件已经被删除,磁盘空间已经被回收。

转移表空间

1、只能使用命令行,不能使用OEM工具

2、分为两种(转移非system表空间、转移system表空间)

现在我们先来看一下转移非system表空间

clip_image026

可以看到,我们已经将example表空间进行了转移,接下来我们看一下system表空间的转移

clip_image028

由上图可以看到,所有与system表空间有关的操作,都必须在数据库mount但未open的状态下操作。

联机日志文件

1、联机重做日志文件记录的都是数据块的变化,例如数据块头部的变化也会产生重做记录

2、commit的时候会触发LGWR,因为LGWR是顺序写入的,这相对DBWR来说,速度就快得多,因此提交的时候,只要保证LGWR写完即可,这样提高了提交的速度

3、联机重做日志文件最主要的功能是为了进行恢复

创建联机日志文件组

在创建数据库的时候,我们已经创建了三个联机日志文件组,现在我们将每个组添加新的联机日志文件。

clip_image030

接下来让我们创建两个新的联机日志文件组,并进行一次手工的日志切换

clip_image032

Oracle Managed Files(OMF)

如果使用Oracle Managed Files (OMF),则不需要直接管理构成Oracle 数据库的操作系统文件。可以根据数据库对象而不是文件名指定操作。对于以下数据库结构,可以按需要在数据库内部使用标准文件系统接口来创建和删除文件:

l 表空间

l 重做日志文件

l 控制文件

l 归档日志

l 块更改跟踪文件

l 闪回日志

l RMAN 备份

数据库可以混合包含Oracle Managed Files 和非Oracle Managed Files。由上面任一参数指定的文件系统目录必须已经存在:数据库不会创建文件系统目录。该目录还必须拥有允许数据库在其中创建文件的权限。

创建OMF表空间需要首先设置几个重要的参数文件,让我们分别来看一下

clip_image033

首先拥有五个空的联机日志文件存放路径

clip_image035

其次设置闪回区的路径与闪回区空间大小

clip_image036

最后设置OMF的数据文件存储路径,重启数据库后,让我们来尝试创建一个OMF表空间

clip_image037

可以看到,在我们没有指定文件的路径和名称的时候,Oracle会自动为我们创建一个OMF表空间。

如果我们设置了上面的三个参数,那么在创建表空间、创建联机重做日志文件、使用恢复区的时候,Oracle自动的管理这些文件的路径、大小、名称。

表空间中的空间管理

本地管理的表空间:

在表空间中管理空闲区。

使用位图记录空闲区。

每一位对应于一个块或一组块。

位值指示空闲区或占用区。

建议使用本地管理的表空间。

字典管理的表空间:

由数据字典管理空闲区。

分配或取消分配区后会更新相应的表。

支持这些表空间仅仅是为了向后兼容。

查询表空间信息:

DBA_TABLESPACES

clip_image038

V$TABLESPACE

clip_image039

查询数据文件信息:

DBA_DATA_FILES

clip_image040

V$DATAFILE

clip_image041

查询临时文件信息:

DBA_TEMP_FILES

clip_image042

V$TEMPFILE

clip_image043

表空间的脱机与联机

对于表空间,根据生产环境的需请求,可能经常需要对其进行各种操作,在对表空间操作时,有很多情况需要表空间处于脱机状态,我们来简单看一下。

clip_image044

现在我们重新将tbs表空间联机

clip_image045

那么如果tbs表空间的数据文件被误删除,又该如何让他脱机呢,我们来看一下

clip_image046

如上图所示,我们现在已经删除了tbs表空间的数据文件,现在重启一下数据库,看看发生什么情况

clip_image047

可以看到,由于无法找到tbs表空间的数据文件,所以当打开数据库的时候,Oracle会报告错误,那么如何来解决呢,我们来看一下

如上图所示,Oracle会报告无法找到tbs表空间对应的数据文件,那么,我们就需要将此数据文件先进行脱机

clip_image048

注意:在非归档模式下脱机数据文件,需要加上drop参数。

可以看到数据文件已经脱机,我们再来启动一下数据库看一下。

clip_image049

数据库已经开启,我们现在可以重新将表空间tbs脱机。

clip_image050

注意:当数据文件被误删除时,表空间的脱机命令需要加上for recover参数。

只读与读写表空间

有时,当我们不希望用户对表空间中的数据进行改动时,就可以将其变更为只读模式。

clip_image051

可以看到,prod表空间已经被设置为只读模式。

clip_image053

可以看到,我们无法为只读表空间分配空间(11g可以分配空间,无法写入数据,有兴趣的朋友可以对比一下)。如果想对表空间的数据进行改动,则需重新将表空间设置为可读写状态。

clip_image054

改为读写状态后,可以往表中插入数据。

扩展表空间

在生产环境中,随着表中数据的不断增加,如果表空间在之前定义的时候没有设置自动增长模式,或者设定了固定的表空间大小,我们可能会需要扩展表空间,来具体看一下

clip_image056

如图所示,我们将data表空间的数据文件大小扩展到500M,那么,如果有时候一个数据文件无法满足表空间的存储容量,或者磁盘已满,需要存储于其他地方,那么就需要为表空间再增加一个数据文件。

clip_image058

如图所示,我们又为data表空间增加了一个数据文件data02.dbf

clip_image060

查询视图可以看到,表空间data下已经有了两个数据文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值