OCP认证考试指南(6):管理Oracle存储结构

来源:互联网 发布:服务器装centos系统 编辑:程序博客网 时间:2024/04/29 06:21

一、基本的Oracle存储结构:表空间与数据文件

Oracle数据库中具有两种类型的存储:物理存储和逻辑存储。

oracle15

上面的Oracle存储结构模型中,可以看出下列要素:

  • 每个数据库(Database)都必须由一个或多个表空间(Tablespace)组成。每个表空间都必须属于并且只属于一个数据库。
  • 每个表空间都必须由一个或多个数据文件(Datafile)组成。每个数据文件都必须属于并且只属于一个表空间。
  • 每个数据文件都必须由一个或多个操作系统块(Operation System Block)组成。每个操作系统块都必须属于并且只属于一个数据文件。
  • 每个表空间都可以包含一个或多个段(Segment)。每个段都必须存在并且只能存在于一个表空间内。
  • 每个段都必须由一个或多个区间(Extent)组成。每个区间都必须属于并且只属于一个段。
  • 每个区间都必须由一个或多个Oracle数据块(Oracle Block)组成。每个Oracle数据块都必须属于并且只属于一个区间。
  • 每个区间都必须被定位并且只能定位在一个数据文件内。数据文件中的空间可以被分配为一个或多个区间。
  • 每个Oracle数据块都必须由一个或多个操作系统块组成。每个操作系统块都可以是并且只能是一个Oracle数据块的部分。

1、物理存储结构

物理结构是操作系统操作Oracle数据库时能够看见的结构。

1.1、Oracle数据文件

数据文件由下列3部分组成:头部、区间(已分配的空间)以及空闲空间(未分配的空间)。

oracle16 

数据文件的头部(Header)将其标识为数据库的一部分,并且存储了该数据文件的细节,细节包括数据文件所属的表空间以及最后执行的检查点。这样,Oracle就能够在启动时检查所有相关文件是否同步。数据文件的剩余部分由区间和空闲空间组成,通过创建、删除和更改Oracle的段(Segment)逻辑存储组件就可以对这些剩余部分进行管理。

每个Oracle数据文件都只属于一个表空间。

1.2、操作系统块

操作系统块(Operating System Block)是文件系统所使用的最小分配单元。

2、逻辑存储结构

2.1、表空间

在数据库中,表空间是最大的存储结构。在Oracle 10G版本中,数据库至少具有下列3个表空间:SYSTEM、SYSAUX以及一个撤销表空间。

在Oracle中创建一个用户时,需要指定默认的表空间,这个默认的表空间能够存储用于该用户创建的所有段的区间。尽管最好使用为数据库定义的全局临时表空间,但还是可以创建一个存储临时段的临时表空间。

所有用户共享DBA所设置的撤销表空间。查看用户的默认表空间和临时表空间,我们可以执行:

?[Copy to clipboard]View Code SQL
SQL> select username, default_tablespace, temporary_tablespace  2  from dba_users;
  • 系统表空间
    系统表空间(system tablespace)是每个Oracle数据库都必须具备的。其功能是在系统表空间中存放诸如表空间名称、表空间所含数据文件等数据库管理所需的信息。系统表空间的名称是不可更改的。系统表空间必须在任何时候都可以用,也是数据库运行的必要条件。因此,系统表空间是不能脱机的。
    系统表空间包括数据字典、存储过程、触发器和系统回滚段。为避免系统表空间产生存储碎片以及争用系统资源的问题,应创建一个独立的表空间用来单独存储用户数据。
  • SYSAUX表空间
    SYSAUX表空间是随着数据库的创建而创建的,它充当SYSTEM的辅助表空间,主要存储除数据字典以外的其他对象。SYSAUX也是许多Oracle 数据库的默认表空间,它减少了由数据库和DBA管理的表空间数量,降低了SYSTEM表空间的负荷。
  • 临时表空间
    相对于其他表空间而言,临时表空间(temp tablespace)主要用于存储Oracle数据库运行期间所产生的临时数据。数据库可以建立多个临时表空间。当数据库关闭后,临时表空间中所有数据将全部被清除。除临时表空间外,其他表空间都属于永久性表空间。
  • 撤销表空间
    用于保存Oracle数据库撤销信息,即保存用户回滚段的表空间称之为回滚表空间(或简称为RBS撤销表空间(undo tablespace))。在Oracle8i中是rollback tablespace,从Oracle9i开始改为undo tablespace。在Oracle 10g中初始创建的只有6个表空间sysaux、system、temp、undotbs1、example和users。其中temp是临时表空间,undotbs1是undo撤销表空间。

2.2、段

表空间内的空间被分配给若干段。段(Segment)是数据库中要求存储的对象,如一个表或一个索引。因为并不存储数据,所以视图(View)不是段。Oracle允许创建多种不同类型的段。对DBA_SEGMENTS视图的查询:

?[Copy to clipboard]View Code SQL
SQL> select distinct segment_type  2  from dba_segments;

2.3、区间

区间(Extent)也称为数据区,是一组连续的数据块。当一个表、回滚段或临时段创建或需要附加空间时,系统总是为之分配一个新的数据区。一个数据区不能跨越多个文件,因为它包含连续的数据块。使用区的目的是用来保存特定数据类型的数据,也是表中数据增长的基本单位。在Oracle数据库中,分配空间就是以数据区为单位的。一个Oracle对象包含至少一个数据区。设置一个表或索引的存储参数包含设置它的数据区大小。

区间是为某个段分配的若干邻近数据块的集合。可以在表空间内本地管理区间(推荐),也可以对区间进行字典管理(向后美容性)。

2.4、数据库块

Oracle数据块(Data Block)是一组连续的操作系统块。分配数据库块大小是在Oracle数据库创建时设置的,数据块是Oracle读写的基本单位。数据块的大小一般是操作系统块大小的整数倍,这样可以避免不必要的系统I/O操作。

二、创建与管理表空间

1、CREATE TABLESPACE命令

CREATE TABLESPACE命令与CREATE TEMPORARY TABLESPACE命令都可以用SQL*Plus或iSQL*Plus创建表空间。(OEM暂不用,因为图形化界面使用简单,学习中不考虑)

CREATE TABLESPACE命令的完整语法有些复杂:

?[Copy to clipboard]View Code SQL
CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace nameDATAFILE datafile spec | TEMPFILE tempfile spec[MINIMUM EXTENT minimum extent size][BLOCKSIZE blocksize][[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)][LOGGING | NOLOGGING][FORCE LOGGING][ONLINE | OFFLINE][EXTENT MANAGEMENT DICTIONARY | LOCAL [AUTOALLOCATE | UNIFORM SIZE size]][SEGMENT SPACE MANAGEMENT MANUAL | AUTO][FLASHBACK ON | OFF]

创建一个表空间:

?[Copy to clipboard]View Code SQL
SQL> create tablespace demo nologging  2  datafile '/ora02/oradata/ocp/demo01.dbf' size 10M; Tablespace created.

创建临时表空间:

?[Copy to clipboard]View Code SQL
SQL> create temporary tablespace tempDemo  2  tempfile '/ora02/oradata/ocp/temp01.ora' size 10M  3  autoextend off; Tablespace created.

2、修改表空间

2.1、使一个表空间脱机

语法:

?[Copy to clipboard]View Code SQL
ALTER TABLESPACE tablespace name OFFLINE;

例:

?[Copy to clipboard]View Code SQL
SQL> alter tablespace demo offline; Tablespace altered.

2.2、使一个表空间联机

语法:

?[Copy to clipboard]View Code SQL
ALTER TABLESPACE tablespace name ONLINE;

例:

?[Copy to clipboard]View Code SQL
SQL> alter tablespace demo online; Tablespace altered.

2.3、使一个表空间只读

语法:

?[Copy to clipboard]View Code SQL
ALTER TABLESPACE tablespace name READ ONLY;

例:

?[Copy to clipboard]View Code SQL
SQL> alter tablespace demo read only; Tablespace altered.

2.4、使一个表空间可读写

语法:

?[Copy to clipboard]View Code SQL
ALTER TABLESPACE tablespace name READ WRITE;

例:

?[Copy to clipboard]View Code SQL
SQL> alter tablespace demo read write; Tablespace altered.

2.5、添加临时表空间的数据文件

语法:

?[Copy to clipboard]View Code SQL
ALTER TABLESPACE temp tablespace name ADD TEMPFILE path and file name SIZE size;

例:

?[Copy to clipboard]View Code SQL
SQL> alter tablespace tempDemo add tempfile   2  '/ora02/oradata/ocp/tempDemo.dbf' size 10M; Tablespace altered.

2.6、调整临时表空间的数据文件,例如大小

语法:

?[Copy to clipboard]View Code SQL
ALTER DATABASE TEMPFILE ADD TEMPFILE path and file name RESIZE size;

例:

?[Copy to clipboard]View Code SQL
SQL> alter database tempfile '/ora02/oradata/ocp/temp01.ora' resize 5M; Database altered.

2.6、将临时表空间脱机

语法:

?[Copy to clipboard]View Code SQL
ALTER DATABASE TEMPFILE path and file name OFFLINE;

例:

?[Copy to clipboard]View Code SQL
SQL> alter database tempfile '/ora02/oradata/ocp/temp01.ora' offline; Database altered.

2.7、将临时表空间联机

语法:

?[Copy to clipboard]View Code SQL
ALTER DATABASE TEMPFILE path and file name ONLINE;

例:

?[Copy to clipboard]View Code SQL
SQL> alter database tempfile '/ora02/oradata/ocp/temp01.ora' online; Database altered.

2.8、表空间重命名

语法:

?[Copy to clipboard]View Code SQL
ALTER TABLESPACE old tablespace name RENAME TO new tablespace name

例:

?[Copy to clipboard]View Code SQL
SQL> alter tablespace demo rename to testdemo; Tablespace altered.

3、删除表空间
3.1、删除表空间,但不删除其文件

语法:

?[Copy to clipboard]View Code SQL
DROP TABLESPACE tablespace name;

例:

?[Copy to clipboard]View Code SQL
SQL> drop tablespace demo; Tablespace dropped.

3.2、删除表空间及其包含的内容

语法:

?[Copy to clipboard]View Code SQL
DROP TABLESPACE tablespace name INCLUDING CONTENTS;

例:

?[Copy to clipboard]View Code SQL
SQL> drop tablespace demo including contents; Tablespace dropped.

3.3、删除表空间及其包含的内容、数据文件以及相关约束一同删除

语法:

?[Copy to clipboard]View Code SQL
DROP TABLESPACE tablespace name INCLUDING CONTENTS CASCADE CONSTRAINT;

例:

?[Copy to clipboard]View Code SQL
SQL> drop tablespace demo including contents cascade constraint; Tablespace dropped.
原创粉丝点击