表空间的管理

文章内容:

表空间是数据库的逻辑组成部分,而表空间物理上由一个或多个数据文件组成,本章主要讲解表空间和数据文件的概念及关系,并介绍表空间的创建方法和基本的管理操作。

摘要:

创建表空间

修改表空间的属性

删除表空间

目录

表空间和数据文件

表空间类型和常用的表空间

表空间类型

使用表空间优势:

表空间和数据文件的关系:

创建表空间

创建表空间要考虑的因素

创建本地管理表空间

创建AUTOALLOCATION本地化管理表空间

其他表空间操作

数据文件的自动扩展(autoextend)

开启数据文件地自动扩展方式

手动为表空间增加数据文件

手动修改数据文件大小

修改表空间读写属性

修改表空间的ONLINE/OFFLINE属性

数据文件的脱机与联机

数据文件的移动

删除表空间

获取表空间的相关信息


表空间和数据文件

表空间类型和常用的表空间

将数据库比喻成一块大空地,为了方便管理,划分出的不同小块空间用于不同的用途,例如用于种植水果,种植蔬菜,开发房地产。这些小空地可以看作表空间,在不同的表空间中存放着不同类型的数据,有专门存放表和索引的表空间。这些不同类型的表空间,既便于数据库管理,也可以提高数据库系统的运行性能。

表空间类型

表空间根据类型的不同,分为SYSTEM和非SYSTEM表空间两种。

①SYSTEM表空间:在创建数据库时,oracle数据库会自动创建SYSTEM表空间(其中包括数据库所需的数据字典信息)和SYSTEM回滚段(存储虽有对数据库所做修改的旧值)。

②非SYSTEM表空间:除了SYSTEM表空间之外的所有表空间,在数据库管理中允许多种灵活性。

使用表空间优势:

  1. 不同类型的数据存入不同的表空间中,可以灵活地管理数据库。
  2. 可将还原段、临时段、应用程序数据段和应用程序索引段分开存储到不同的表空间中。
  3. 可根据备份要求将数据分开存储。
  4. 可将动态数据和静态数据分别存储在不同的表空间中,以利于备份和恢复。
  5. 可通过分配给用户表空间上地配额,避免某用户占用表空间太多的存储空间。

实例①:查询数据库包含的表空间信息。

# 以管理员身份登录
conn / as sysdba
# 查询表空间
select name from v$tablespace;

表空间和数据文件的关系:

  • 数据库、表空间和数据文件之间紧密相连,但又有重要的区别。
  • Oracle数据库由一个或多个称为表空间的逻辑存储单元组成,一个表空间只能属于一个数据库,数据库的大小时改数据库中所有表空间大小的总和。
  • 从物理上看,Oracle每个表孔概念由一个或多个数据文件组成,一个数据文件只能属于一个表空间,表空间的大小是其中所有数据文件大小的总和。和其他操作文件具有一样的物理结构。
  • 数据库所有的数据都存储在数据文件中,数据库中的每个表空间都由这些数据文件组成。

实例②:查询表空间及数据库文件的信息。

# 以管理员身份登录
conn / as sysdba
# 查询数据文件
select file_name,tablespace_name from dba_data_files;

表空间的管理方式

在表空间中区是最小的空间分配单位,对表空间的管理是以区为单位进行。在表空间内,通过诸位图管理区。这种管理方式称为本地管理,每个数据文件内都维护一个位图,以及时了解该数据文件内块的空闲或使用状态。

创建表空间

创建表空间要考虑的因素

在创建表空间时,除了考虑空间数量、对应的数据文件大小等基本因素外,还要考虑表空间存储管理方式、默认存储参数位置,块大小等因素。

创建本地管理表空间

实例③:创建UNIFORM本地化管理表空间

# 以管理员身份登录
conn / as sysdba
# 创建表空间
create tablespace tbs1
datafile '/opt/oracle/oradata/db01/tbs1a.dbf' size 1M
extent management local
uniform size 128k;

执行以上语句,创建表空间tbs1,含有一个数据文件tbs1a.dbf,大小为1M,表空间大小也为1M,分配的区尺寸全部为128kb。

创建AUTOALLOCATION本地化管理表空间

实例④:使用AUTOALLOCATION创建一个本地化管理表空间tbs2

# 以管理员身份登录
conn / as sysdba
# 创建表空间
create tablespace tbs2
datafile '/opt/oracle/oradata/db01/tbs2a.dbf' size 1M
extent management local
autoallocate;

执行以上语句,创建表空间tbs2,含有一个数据文件tbs2a.dbf,大小为1M,表空间大小也为1M,分配的区尺寸全部为64kb。使用AUTOALLOCATION创建时,区尺寸由Oracle自动分配,不能指定且都为64KB。

注意:也可以不指定extent management 字句创建本地管理表空间,在不指定时,默认为autoallocate,即区的尺寸由Oracle自动分配。

实例⑤:默认式创建表空间

# 创建表空间
create tablespace tbs3
datafile '/opt/oracle/oradata/db01/tbs3a.dbf' size 1M;

执行以上语句,创建表空间tbs3,含有一个数据文件tbs3a.dbf,大小为1M,分配的区尺寸全部为64kb。默认extent management local 和 autoallocate,区尺寸都为64KB。

其他表空间操作

如果给某表插入数据时,总是显示错误信息,但是可以查询该表的数据,在这种情况下可以考虑表空间的大小。表空间物理上表现出为一个或多个数据文件,表空间的尺寸即表空间所有数据文件尺寸的总和,因此,表空间的大小有数据文件的个数和数据文件的大小来决定。可以通过以下的方法进行调整。

  • 更改数据文件的大小,可以使用数据文件AUTOEXTEND(自动扩展)属性调节数据文件的大小,也可以使用ALTER TABLESPACE 手动调整。
  • 使用ALTER TABLESPACE 命令给表空间添加新的数据文件

数据文件的自动扩展(autoextend)

当激活了数据文件的1自动扩展选项后,如果数据占满了数据文件的所有空间,系统就会自动扩展该数据文件。文件指定的增量增加直到达到指定的最大值。优势如下:

  • 当表空间的空间用尽时无需过多地直接干预。
  • 确保应用程序不会由于未能分配区而暂停。

开启数据文件地自动扩展方式

①在创建数据库时指定数据文件地自动扩展属性

②为现有的数据文件指定AUTOEXTEND

tips: 一般不会开启自动扩展属性,因为会导致递归空间操作,从而降低系统性能

实例⑥:修改表空间tbs2的数据文件属性,设置数据文件为自动扩展。

# 查询DBA_DATA_FILES 视图以确定是否启用AUTOEXTEND
select file_name,autoextenksible from dba_data_files where tablespace_name='TBS2';
# 修改表空间数据文件以1M增长,最大为10M
alter database datafile '/opt/oracle/oradata/db01/tbs02.dbf' autoextend on next 1M
 maxsize 10M;
# 再查询DBA_DATA_FILES 视图以确定是否启用AUTOEXTEND

手动为表空间增加数据文件

可以使用ALTER TABLESPACE ADD DATAFILE语句,向表空间增加数据文件以增加分配给磁盘表空间地磁盘空间总量。

实例⑦:为tbs2表空间添加一个数据文件大小为2M。

# 增加数据文件
alter tablespace tbs2 add datafile '/opt/oracle/oradata/db01/tbs02a.dbf' size 2M;
# 查询DBA_DATA_FILES 视图确认是否添加成功
select file_name from dba_data_files where tablespace_name='TBS2';

手动修改数据文件大小

DBA可以使用ALTER DATABASE 命令手动增加或减少数据文件的大小

实例⑧:将tbs2表空间中的数据文件/opt/oracle/oradata/db01/tbs02.dbf 大小改为5MB。

# 修改数据文件大小
alter database datafile '/opt/oracle/oradata/db01/tbs02.dbf' resize 5M;
# 查询以确认修改
select sum(bytes)/1024/1024 from dba_data_files where tablespace_name='TBS2';

修改表空间读写属性

当表空间设置为只读模式时,于该表空间相关的所有事务会自动回滚,过渡状态期间不允许再对该表空间进行任何写入操作,当所有事务处理提交或回退后,只读命令完成。

实例⑨:在表空间tbs2中创建表test,将表空间tbs2更改为只读模式,验证是否能插入数据,能否删除表,再将表空间改为可读可写状态

# 创建表
create table test(name varchar2(20)) tablespace tbs2;
# 将表空间设置为只读
alter tablespace tbs2 read only;
# 向表中插入数据
insert into test values('chen');
# 删除表,查看能否成功
drop table test
# 将表空间改为可读可写状态
alter tablespace tbs2 read write;

插入失败的原因时表空间只读后不能执行DML和DDL操作,有一种DDL除外,可以执行DROP TABLE或DROP INDEX删除表空间或索引。因为DROP命令只影响数据字典,而不更新只读表空间上的物理文件。

修改表空间的ONLINE/OFFLINE属性

当某一表空间处于脱机状态时,用户无法访问其数据,但可以访问其余正在联机的表空间。当出现以下几种情况时,管理员可以让表空间脱机

  • 使数据库的一部分表空间不可用,但允许正常访问数据库其余表空间
  • 执行脱机表空间备份(尽管表空间可以在联机使用时使用)
  • 在数据库打开时恢复表空间或数据文件
  • 在数据库打开时移动数据文件

实例⑩:将表空间tbs2 改为脱机状态,并向test表中插入数据进行验证。

# 表空间脱机
alter tablespace tbs2 offline
# 查询test表中的数据
select * from test;
# 将表空间联机
alter tablespace tbs2 online

查询数据失败的原因:表空间脱机后不能执行任何操作

tips:不能设为脱机的表空间有SYSTEM表空间,具有活动的还原段的表空间以及默认临时表空间,当希望访问表空间中的数据(表、索引)对象时,表空间必须处于联机状态。

数据文件的脱机与联机

如果数据文件发生损坏时,Oracle会自动将数据文件设置为脱机状态,并且记录在警告文件中,如果损坏的文件恢复后需要手动联机。

数据文件的移动

移动数据文件一方面处于性能方面的考虑,一方面处于安全考虑。因此在实际应用中会有两种方法,使用哪种取决于表空间类型。

①使用ALTER TABLESPACE 命令,仅适用于不含活动还原段或临时段的非SYSTEM 表空间中的数据文件的移动,结合实例分析。

实例11:将tbs2表空间的 /opt/oracle/oradata/db01/tbs01.dbf 数据文件移动 /opt/oracle/oradata/newdb01/tbs02.dbf

# 使表空间脱机
alter tablespace tbs2 offline;
# 使用操作系统命令移动或复制文件,改变物理位置
$ cd /opt/oracle/oradata/
$ mkdir newdb01
$ mv db01/tbs02.dbf newdb01/tbs02.dbf
# 改变数据文件的逻辑位置
alter tablespace tbs2 rename datafile '/opt/oracle/oradata/db01/tbs02.dbf' to '/opt/oracle/oradata/newdb01/tbs02.dbf';
# 使表空间联机
alter tablespace tbs2 online;
# 查询表空间的数据文件
select file_name from dba_data_files where tablespace_name='TBS2';

②使用ALTER DATABASE 命令,一般用来移动SYSTEM表空间对应的数据文件,但是数据库必须处于已装载状态,且目标数据文件必须存在。以实例说明

实例12:将SYSTEM 表空间的数据文件移动到/opt/oracle/oradata/newdb01下。

# 关闭数据库
shutdown immediate;
# 使用操作系统命令SYSTEM表空间对应的数据文件移动到/opt/oracle/oradata/newdb01
$ mv db01/system01.dbf newdb01/system01.dbf
# 将数据库启动至装载状态
startup mount;
# 改变system数据文件的逻辑位置
alter database rename file '/opt/oracle/oradata/db01/system01.dbf' to '/opt/oracle/oradata/newdb01/system01.dbf'
# 打开数据库
alter database open;

tips: 因为SYSTEM表空间无法脱机,必须使用该方法移动到SYSTEM表空间内的数据文件。使用此命令重命名无法脱机的表空间内的文件。

删除表空间

当不再需要表空间及其内容时,可以使用DROP TABLESPACE 命令从数据库中删除表空间。

当表空间中包含有表段时,必须带INCLUDING CONTENTS 子句,即删除表空间的同时删除表空间中的对象,加上 AND DATAFILES 子句可以删除表空间的数据文件。

实例13:删除表空间tbs2,system,查看其现象。

# 删除表空间tbs2
drop tablespace tbs2 including contents and datafiles;
# 删除表空间system
drop tablespace system including contents and datafiles;

表空间tbs2 删除成功,但是system不能删除。

获取表空间的相关信息

可以使用以下的数据字典视图或者动态性能视图获取表空间和数据文件的相关信息。

  • 与表空间相关:DBA_TABLESPACE,V$TABLESPACE
  • 与数据文件相关:DBA_DATA_FILES,V$DATAFILE
  • 与临时文件相关:DBA_TEMP_FILES,V$TEMPFILES

本章内容主要参考《Oracle数据库系统管理实例化教程》第八章,以上是我个人的见解,有问题欢迎提出交流。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值