百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

Oracle 逻辑结构篇 之逻辑结构(二)表空间和数据文件

sinye56 2024-09-16 14:33 5 浏览 0 评论

二、表空间和数据文件

Oracle 数据库(tablespace)是由若干个表空间构成的。

任何数据库对象在存储时都必须存储在某个表空间中。表空间对应于若干个磁盘文件,即表空间是由一个或多个磁盘文件构成的。表空间相当于操作系统中的文件夹,也是数据库逻辑结构与物理文件之间的一个映射。每个数据库至少有一个表空间,表空间的大小等于所有从属于它的数据文件大小的总和。

(一)、常用表空间

在 Oracle 11g 中有以下几种比较特殊的表空间:

1. 系统表空间

系统表空间(system tablespace)是每个 Oracle 数据库都必须具备的。

SYSTEM 表空间是 Oracle 数据库最重要的一个表空间,存放了一些 DDL 语言产生的信息以及 PL/SQL 包、视图、函数、过程等,称之为数据字典。

1) 系统表空间的特性

  • ? 不能脱机 offline
SQL> alter tablespace system offline;
alter tablespace system offline
*
ERROR at line 1:
ORA-01541: system tablespace cannot be brought offline; shut down if necessary
  • ? 不能置为只读 read only
SQL> alter tablespace system read only;
alter tablespace system read only
*
ERROR at line 1:
ORA-01643: system tablespace can not be made read only
  • ? 不能重命名
SQL> alter tablespace system rename to system2;
alter tablespace system rename to system2
*
ERROR at line 1:
ORA-00712: cannot rename system tablespace
  • ? 不能删除
SQL> drop tablespace system including contents and datafiles;
drop tablespace system including contents and datafiles
*
ERROR at line 1:
ORA-01550: cannot drop system tablespace

总结:普通表空间所具有的更名、删除、只读、脱机不为 system 表空间所拥有。

2) 系统表空间的管理

  • ? 使用下面的视图来获取表空间的相关状态,使用空间等等
  • ? dba_data_files
  • ? dba_tablespaces
  • ? dba_free_space
  • ? v$datafiles
  • ? v$tablespace
  • ? 保证空间可用,一般存放单个数据文件。设置为自动扩展
  • ? 如果 SYSTEM 表空间数据文件很大,可以考虑使用 bigfile
  • ? 为防止由于用户错误引起的 SYSTEM 表空间不可用,为系统设置默认表空间
//为数据库设定默认表空间
SQL>ALTER DATABASE DEFAULT TABLESPACE tablespace_name;
//修改 property_value 参数格式长度为 30
SQL> col property_value format a30
//查询系统默认表空间
SQL> SELECT property_name,property_value2 FROM database_properties3 WHERE property_name like 'DEFAULT%';
PROPERTY_NAME PROPERTY_VALUE
---------------------------------------------------- ------------------------------ 
DEFAULT_TEMP_TABLESPACE TEMP
DEFAULT_PERMANENT_TABLESPACE USERS //应为非 SYSTEM 表空间
DEFAULT_TBS_TYPE SMALLFILE
//查询某用户默认表空间
SQL> SELECT username,default_tablespace2 FROM dba_users WHERE username='SCOTT';
USERNAME DEFAULT_TABLESPACE
------------------------------------------------ ------------------------------
 SCOTT USERS

2. SYSAUX 表空间

SYSAUX 表空间是随着数据库的创建而创建的,由 Oracle10g 引入,充当 SYSTEM 的辅助表空间,主要存储除数据字典以外的其他对象。

以前一些使用独立表空间或系统表空间的数据库组件现在在 SYSAUX 表空间中创建,通过分离这些组件和功能,SYSTEM 表空间的负荷得以减轻.反复创建一些相关对象及组引起 SYSTEM 表空间的碎片问题得以避免。

如果 SYSAUX 表空间不可用,数据库核心功能将保持有效;使用 SYSAUX 表空间的特点将会失败或功能受限。

  • ? 不能删除
  • ? 不能重命名
  • ? 不能置为 read only

结论:这是一个管理及规划上的改进,进一步独立 SYSTEM 表空间,保证其存储及性能。

我们在做数据库规划时大可借鉴 Oracle 这个改进,分离重要数据及次要数据,分离稳定结构及频繁变化结构,尽量减少对重要数据及结构的影响。

3. 临时表空间

1) 临时表空间的作用

相对于其他表空间而言,临时表空间(temp tablespace)主要用于存储 Oracle 数据库运行期间所产生的临时数据。数据库可以建立多个临时表空间。当数据库关闭后,临时表间中所有数据将全部被清除。除临时表空间外,其他表空间都属于永久性表空间。

Oracle 临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。

在 Oracle 数据库中进行排序、分组汇总、索引等到作时,会产生很多的临时数据。

通常情况下,Oracle 数据库会先将这些临时数据存放到内存的 PGA((程序全局区)内。在这个程序全局区中有一个叫做排序区的地方,专门用来存放这些因为排序操作而产生的临时数据。但是这个分区的容量是有限的。当这个分区的大小不足以容纳排序后所产生的记时,数据库系统就会将临时数据存放到临时表空间中。

看起来好像这个临时表空间是个临时工,但其实临时表空间对数据库的影响非常大。在用户进行数据库操作时,排序、分组汇总、索引这些作业是少不了,其会产生大量的临时数据。为此基本上每个数据库都需要用到临时表空间。而如果这个临时表空间设置不当的话,则会给数据库性能带来很大的负面影响。为此管理员在维护这个临时表空间的时候,不能够掉以轻心。要避免因为临时表空间设置不当影响数据库的性能。

2) 临时表空间的维护和管理

  • ? 为用户创建默认临时表空间

可以利用 temporary table space 子句为用户指定默认临时表空间。9i 之前,如果没有为用户创建默认的临时表空间,数据库系统就会“自作聪明”的利用系统表空间 SYSTEM 来创建临时段。由于临时表空间中的数据是临时的,为此数据库系统需要频繁地分配和释放临时段。这些频繁的操作会在系统表空间中产生大量的存储碎片。当这些存储碎片比较多时,就会影响系统读取硬盘的效率,从而占用系统表空间的空间和影响其性能。

9i 和以后的版本,可以使用'alter database default temporary tablespace'为数据库指定默认临时表空间。如果没有为用户指定默认临时表空间,则会使用数据库的默认临时表空间。但如果曾经为用户指定默认临时表空间,而该表空间被删除又未重新指定,当该用户需要用到临时表空间时,会报错 ORA-00959。

  • ? 合理设置 PGA,减少临时表空间使用的几率

临时表空间主要用途是在数据库进行排序运算、管理索引、访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理。当 oracle 里需要用到 sort 的时候,PGA 中 sort_area_size 大小不够时,将会把数据放入临时表空间里进行排序,同时如果有异常情况的话,也会被放入临时表空间,正常来说,在完成 Select 语句、create index等一些使用 TEMP 表空间的排序操作后,Oracle 是会自动释放掉临时段的。注意这里的释放,仅仅是将这些空间标记为空闲,并可重用,真正占用的磁盘空间并没有释放。所以 Temp 表空间可能会越来越大。排序是很耗资源的,Temp 表空间满了,关键是优化你的语句,尽量使排序减少才是上策。

当排序操作产生临时数据时,数据库并不是马上将其存储在临时表空间中。通常情况下,会先将这些临时数据存储在内存的 PGA 程序全局区内。只有当这个程序全局区无法容纳全部数据时,数据库系统才会启用临时表空间中的临时段来保存这些数据。

众所周知,操作系统从内存中读取数据要比从硬盘中读取数据块几千倍。为此比较理想的情况是,这个程序全局区足够的大,可以容纳所有的临时数据。此时数据库系统就永远用不到临时表空间了。从而可以提高数据库的性能。

但是这毕竟只是一个理想。由于内存大小等多方面的限制,这个 PGA 程序区的大小往往是有限制的。所以在进行一些大型的排序操作时,这个临时表空间仍然少不了。

数据库管理员可以通过合理设置这个 PGA 程序全局区的大小,尽量减少临时表空间使用的几率。如在实际工作中,数据库管理员可以根据需要来设置初始化参数SORT_AREA_SIZE 参数。这个参数主要控制这个 PGA 程序全局区内排序区的大小。通常情况下,如果这个数据库系统主要用来查询并且需要大量的排序、分组汇总、索等操作时,那么可以适当调整这个参数,来扩大 PGA 分区的大小。相反,如果这个系统主要用于更新操作,或者在这个数据库服务器上还部署由其他的应用程序,那么这个PGA 分区就不能够占用太多的内存,以防止对其他应用程序产生不利的影响。

  • ? 为临时表空间预留足够的硬盘空间

其他表空间对应的数据文件,在其创建时就会被完全分配和初始化,即在其创建就会被分配存储空间。但是临时表空间对应的临时文件则不同。如在 Linux 操作系统中,临时表空间创建时系统是不会分配和初始化临时文件的。也就是说,不会为临时文件分配存储空间。只有临时数据出现需要用到临时文件的时候,系统才会在硬盘上分配一块地方用来保存临时文件。此时就可能会产生一个问题,即当需要用到临时文件系统为其分配空间的时候,才会先系统分区中没有足够的存储空间了。此时就会产生一些难以预料的后果。

为此对于这些临时文件,数据库管理员最好能够预先为其保留足够的空间。

如在 Linux 操作系统中,可以将其放置在一个独立的分区内,不允许其他应用程序使用。如此的话,就不用担心临时文件没有地方存储了。

另外,由于临时表空间主要用来存放一些排序用的临时文件。为此如果能够将这个临时表空间存放在性能比较好的分区中,还可以提高数据库系统读取临时表空间中数据的速度。

再者,由于系统需要频繁分配临时表空间中的数据,为此临时表空间所在的分区会出现比较多的碎片。此时如果将临时表空间存放在一个独立的分区内,那么数据库管理员就可以单独对这个分区进行碎片整理,从而提高这个分区的性能。

所以无论出于什么原因,将临时表空间放置在一个独立的分区内,是一个不错的法。不仅可以保证临时文件有存储的空间,而且还可以提高数据库的性能。对于临时表空间最后需要说明的是,默认情况下这个临时表空间对各个用户都是共享的。也就是说每个连接到数据库的用户都可以使用默认的临时表空间。数据库管理员可以为其指定其他的临时表空间。一般来说,只需要一个临时表空间即可。

3) 临时表空间组

从 oracle 10g 开始,可以创建多个临时表空间,并把它们组成一个临时表空间组,这样应用数据用于排序时可以使用组里的多个临时表空间,一个临时表空间组至少有一个临时表空间,其最大个数没有限制,组的名字不能和其中某个表空间的名字相同。临时表空间组是在创建临时表空间时通过指定 group 字句创建的,如果删除组中的全部临时表空间,那么这个组也将消失。

  • ? 数据库层面可以同时指定多个临时表空间,避免当临时表空间不足时所引起的磁盘排序问题;
  • ? 当一个用户同时有多个会话时,可以使得它们使用不同的临时表空间;
  • ? 并行操作中,不同的从属进程可以使用不同的临时表空间
创建临时表空间组:
SQL> create temporary tablespace tempts1 tempfile2 '/home/oracle/temp1_02.dbf' size 2M tablespace group group1;
SQL> create temporary tablespace tempts2 tempfile2 '/home/oracle/temp2_02.dbf' size 2M tablespace group group2;
查询临时表空间组
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------ 
GROUP1 TEMPTS1
GROUP2 TEMPTS2
将表空间从一个临时表空间组移动到另外一个临时表空间组:
SQL> alter tablespace tempts1 tablespace group GROUP2 ;
Tablespace altered
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------ 
GROUP2 TEMPTS1
GROUP2 TEMPTS2
把临时表空间组指定给用户
SQL> alter user scott temporary tablespace GROUP2;
在数据库级设置临时表空间
SQL> alter database <db_name> default temporary tablespace GROUP2;
删除临时表空间组 (删除组成临时表空间组的所有临时表空间)
SQL> drop tablespace tempts1 including contents and datafiles;
Tablespace dropped
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------ 
GROUP2 TEMPTS2
SQL> drop tablespace tempts2 including contents and datafiles;
Tablespace dropped
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME

4) 临时表空间的特性

  • ? 诸如“表”等的永久对象不能存放在临时文件中
  • ? 临时表空间通常被设置为 NOLOGGING 模式,这意味着他们不产生 redo,临时文件不能做介质恢复
  • ? 临时文件不能够只读
  • ? 不能使用 ALTER DATABASE 语句创建临时文件
  • ? 当你创建或修改临时文件时,不能保证磁盘一定能分配给它指定的空间。在 Linux 等 Unix 系统中,磁盘空间不会在文件创建时被分配,而是文件第一次被访问是分配,临时文件分配到的可能不是连续的磁盘空间。
  • ? 相关视图 dba_temp_files、V$TEMPFILE、DBA_DATA_FILES。

5) 释放临时表空间

  • ? 重启数据库,这时 smon 进程会完成临时段的释放清理 temp 表空间的操作。
  • ? 可以修改一下 temp 表空间的 storage 参数,让 smon 进程关注一下临时段,从而达到清理表空间的目的。
alter tablespace temp increase 1;
alter tablespace temp increase 0;
  • ? 用语句查询谁在使用临时段
SELECTse.username,sid,serial#,sql_address,machine,program,tablespace,segtype,contentsFROM v$session se, v$sort_usage suWHERE se.saddr = su.session_addr;
杀掉正在使用临时段的进程
Alter system kill session 'sid,serial#';
把 temp 表空间回缩一下
alter tablespace temp coalesce;
  • ? 使用诊断事件的一种方法:

首先,确定 temp 表空间的 ts#

select ts#,name from sys.ts#;

注:temp 表空间的 ts#是 3,所以 ts#+1=4执行清理操作:

alter session set events 'immediate trace name DROP_SEGMENTS level 4';

4. 撤销表空间

用于保存 Oracle 数据库撤销信息,即保存用户回滚段的表空间称之为回滚表空间(或简称为撤销表空间(undo tablespace))。在 Oracle8i 中是 rollback tablespace,从 Oracle9i开始改为 undo tablespace。在 Oracle 10g 中初始创建的只有6个表空间 sysaux、system、temp、undotbs1、example 和 users。其中 temp 是临时表空间,undotbs1是 undo 撤销表空间。

使用多个表空间有以下好处:

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

数据库至少包含以下几个表空间:SYSTEM 表空间,临时表空间(TEMPORARY)用于存放临时数据,UNDO 表空间用于存入数据修改后的旧值。

查询数据库包含的表空间信息:

1)以管理员身份登录

SQL> CONN / AS SYSDBA

2)查询表空间

SQL> SELECT name FROM V$TABLESPACE;
NAME
------------------------------ 
EXAMPLE
INDX
SYSTEM
UNDO
TBS1
USERS
XDB
TEMP
已选择 8 行。

其中 SYSTEM 是系统表空间、UNDOTBS1 是 UNDO 表空间、TEMP 是临时表空间。

(二)、表空间和数据文件的关系

数据库、表空间和数据文件是紧密相关的,但它们之间又有着重要区别,关系如图P1-1 所示:

  • ? Oracle 数据库由一个或多个称为表空间的逻辑存储单元成,表空间作为一个整体存储数据库中的所有数据,并且一个表空间只能属于一个数据库。数据库的大小是该数据库中所表空间大小总和。
  • ? 从物理讲,Oracle 数据库内的每个表空间由一个或多数据文件组成,并且一个数据文件只能属于一个表空间。表空间大是所有数据文件大小的总和。这些数据文件与 Oracle 运行所在的操作系统的文件有一样的物理结构。
  • ? 数据库的所有数据都存储在数据文件中,数据库的每个表空间都由这些数据文件组成。例如,最简单的 Oracle 数据库只有一个表空间和一个数据文件。

查询表空间及数据文件的信息

1)以管理员身份登录

SQL> CONN /AS SYSDBA

2)查询数据文件

SQL> SELECT FILE_NAME,TABLESPACE_NAME FROM DBA_DATA_FILES;
FILE_NAME TABLESPACE_NAME
--------------------------------------------------------- ----------------------------- 
D:\ORACLE\ORADATA\DB01\SYSTEM01.DBF SYSTEM
D:\ORACLE\ORADATA\DB01\UNDOTBS01.DBF UNDOTBS1
D:\ORACLE\ORADATA\DB01\CWMLITE01.DBF CWMLITE
D:\ORACLE\ORADATA\DB01\DRSYS01.DBF DRSYS
D:\ORACLE\ORADATA\DB01\EXAMPLE01.DBF EXAMPLE
D:\ORACLE\ORADATA\DB01\INDX01.DBF INDXD:\ORACLE\ORADATA\DB01\ODM01.DBF ODM
D:\ORACLE\ORADATA\DB01\TOOLS01.DBF TOOLS
D:\ORACLE\ORADATA\DB01\USERS01.DBF USERS
D:\ORACLE\ORADATA\DB01\XDB01.DBF XDB

已选择 10 行。在查询结果中,FILE_NAME 列为数据文件的位置和名称,TABLESPACE_NAME 列为对应的表空间名称。

(三)、Oracle 管理文件(OMF)

1. 什么是 OMF(Oracle-Managed Files)

如果使用 OMF,则不需要直接管理构成 Oracle 数据库的操作系统文件。

SQL> DB_CREATE_FILE_DEST = '/u01/oradata';
SQL> CREATE TABLESPACE tbs_1;

可以根据数据库对象而不是文件名指定操作。对于以下数据库结构,可以按需要在数据库内部使用标准文件系统接口来创建和删除文件:

  • ? 表空间
  • ? 重做日志文件
  • ? 控制文件
  • ? 归档日志
  • ? 块更改跟踪文件
  • ? 闪回日志
  • ? RMAN 备份

在数据库中可以混合包含 Oracle 管理文件和非管理文件。由其中任一个参数制定的文件系统目录必须已存在:数据库不会创建文件系统目录。该目录还必须拥有允许数据库在其中创建文件的权限。上面的示例显示设置 DB_CREATE_FILE_DEST 后,可在 CREATE TABLESPACE 语句中省略 DATAFILE 子句。这样,会在 DB_CREATE_FILE_DEST 指定的位置创建数据文件。

2. 启用 OMF

(四)、数据字典管理和本地管理方式

在表空间中区是最小的空间分配单位,对表空间的管理是以区为单位进行的。根据管理方式的不同,表空间分为本地管理表空间和字典管理表空间:

? 本地管理方式的表空间:在表空间内通过位图管理区。在本地管理的表空间中,个数据文件内都维护一个位图,以了解该数据文件内块的空闲或使用状态。位图中的每个位对应于一个块或一组块。其特点是分配了的某个区或释放的某个区可被重新使用时,Oracle 服务器更改位图值以显示块的新状态。因为表空间的存储管理信息保存在表空间的数据文件的头部,而不是保存在表空间外部的数据字典中,以被称为“本地管理方式”。从 Oracle9i 开始,在本地管理已成为缺省设置。

? 字典管理的表空间:由数据字典管理区。数据字典的信息存储在 system 表空间中Oracle 服务器将在分配或回收区时更新数据字典中对应的表。字典管理的表空间内的段可具有自定义的存储设置,因此每个段都可以有不同的存储子句, 但是需要手动合并空闲区。这比本地管理的表空间更灵活,但效率要低得多。

由于本地管理表空间是采用位图对区进行管理的,相对于字典管理有如下优点:

? 本地管理可以避免循环空间管理操作。在字典管理表空间上分配和释放区会导致问回滚段和数据字典基表,而在本地管理表空间上的分配和释放区只需要修改其数据文件对应的位图值。

? 由于本地管理的表空间在数据字典表中不记录空闲空间,从而减少了对数据字典的争用。

? 区的本地管理可自动跟踪并合并邻近的空闲空间,因而无须合并空闲区,而字典管理表空间则可能需要手工合并空间碎片。

? 本地管理的区大小可由系统自动确定。

? 对区的位图进行更改不会生成 UNDO 信息,因为它们不更新数据字典中的表(表空间限额信息等特殊情况除外)。

(五)、创建表空间

3. 创建表空间要考虑的因素

在创建数据库完毕后,通常可以立即创建所需的非 SYSTEM 表空间,在创建表空间时,除考虑到空间数量、对应的数据文件的大小等基本因素外,还要考虑表空间存储管理方式、默认存储参数设置、块大小等问题。

Oracle 本身并不能限制表空间的数目,但是受到数据库所能拥有的数据文件数目的限制,只能创建有限数时的表空间。即所有表空间的数据文件的总和不能超过创建数据库时指定的 MAXDATAFILES 参数的限制。创建的表空间在默认情况具有标准的块大小,但是也可以创建具有非标准块大小的表空间。

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]

参数说明如下:

  • ? DATAFILE:用于指定表空间所对应的数据文件。
  • ? SIZE:用于指定数据文件的尺寸。
  • ? EXTENT MANAGEMENT DICTIONARY:表空间中区的管理方式为字典管理方式。
  • ? DEFAULT STORAGE:用于指定默认存储参数设置。当不设置默认存储参数时,系统会自动使用 SYSTEM 表空间的存储参数设置。
  • ? INITIAL:用于指定为数据库对象所分配的第一个区的大小
  • ? NEXT:用于指定为数据库对象所分配的第二个区的大小。
  • ? MINEXTENTS:用于指定为数据库对象所分配的最少区个数。
  • ? MAXEXTENTS:用于指定为数据库对象所分配的最多区个数。
  • ? PCTINCREASE:用于指定从第三个区开始,每个区比前一个区所增长的百分比,并且区尺寸的计算公式如下:
  • ? Size=NEXT *(1+PCIINCREASE/100)(n-2)
  • ? 其中,n 表示第 n 个区,除了第一个区和第二个区以外,其他区尺寸会自动转变为DB_BLOCK_SIZE 的整数倍。

4. 本地管理的表空间中的段空间管理

用户使用 CREATE TABLESPACE 语句创建一个本地管理的表空间(locally managedtablespace)时,可以使用 SEGMENT SPACE MANAGEMENT 子句来设定段(segment)内的可用/已用空间如何管理。可选的方式有:

1).AUTO

在这种设置下,Oracle 使用位图(bitmap)管理段内的可用空间。[注意此处的位图与本地管理的表空间使用的位图不一样]此处的位图用于描述段内每个数据块(data block)是否有足够的可用空间来插入(insert)新数据。随着一个数据块中可用空间的变化,她的状态也被及时地反映到位图中。Oracle 使用位图可以更自动化地管理段内的可用空间。这种空间管理形式被称为自动段空间管理(automatic segment-space management)。一个本地管理的(locally managed),且使用自动段空间管理的表空间,既可以被创建为小文件表空间(传统的)(smallfile tablespace),也可以被创建为大文件表空间(bigfiletablespaces)。在创建本地管理的表空间时,自动段空间管理是默认值。

2).MANUAL

在这种设置下,Oracle 使用可用块列表(free list)来管理段内的可用空间。可用块列表记录了所有可以被用于插入新数据的数据块。

(六)、其他表空间操作调整表空间大小

如果登录到 Oracle 数据库,并给某表插人数据时,发现在插人数据时总是显示错误信息,但是可以查询该表数据,可以考虑查看表空间大小,如果数据已占满了表空间,表空间不能分配新的区时用户不能插入数据记录。理想情况下,在建立表空间时就应该规划好其尺寸,以避免出现以上问题。但是如果表空间不足以存放更多数据,那么 DBA 可以改变表空间的尺寸。但是如果 DBA 等表空间不足时才去扩展表空间的容量,会影响 Oracle 的性能,因此,DBA 需要知道现在的对象多大,对象的增长速度有多快,有规律的检查数据块对象的大小,把注意力集中在快速增长的表上,经常查看表空间中的自由空间,然后主动增加表空间的容量,提高系统的性能。

表空间物理上表现为一个或多个数据文件,表空间的尺寸即表空间所有数据文件尺寸的总和。因此表空间的大小由数据文件的个数和数据文件的大小来决定,可通过以下方法进行调整:

? 重置数据文件的大小:ALTER DATABASE DATAFILE '...' | FileNo RESIZE X

? 更改数据文件的大小:可以使用数据文件 AUTOEXTEND(自动扩展)属性自动调整数据文件的大小,也可以 使用 ALTER TABLESPACE 手动调整

? 使用 ALTER TABLESPACE 命令给表空间添加新的数据文

1)、数据文件的自动扩展属性(AUTOEXTEND)

当激活了数据文件的自动扩展选项之后,如果数据占满了数据文件所有空间,并且该数据 文 件 不 能 容 纳 新 数 据 时 , 系 统 会 自 动 扩 展 该 数 据 文 件 。 可 以 指 定 数 据 文 件 的AUTOEXTEND 子句启用或禁用数据文件的自动扩展。文件将按指定的增量增加直到达到指定的最大值。使用 AUTOEXTEND 子句的优点如下:

? 当表空间的空间用尽时无需过多的直接干预。

? 确保应用程序不会由于未能分配区而暂停。

创建数据文件后,可使用下列 SQL 命令启用数据文件的自动扩展

? CREATE TABLESPACE

? ALTER TABLESPACE

【实例 2-1】创建表空间 mytbs8 并设置数据文件为自动扩展。

1)以管理员身份登录

SQL> CONNECT / AS SYSDBA

2)创建表空间

SQL> CREATE TABLESPACE mytbs8DATAFILE 'd:\oracle\oradata\db01\mytbs08.dbf' SIZE 5MAUTOEXTEND ON NEXT 1M MAXSIZE 50M;
表空间已创建。

3)查询 DBA_DATA_FILES 视图以确定是否启用 AUTOEXTEND

SQL> SELECT FILE_NAME,AUTOEXTENSIBLEFROM DBA_DATA_FILESWHERE TABLESPACE_NAME='MYTBS8';
FILE_NAME AUT
---------------------------------------------
D:\ORACLE\ORADATA\DB01\MYTBS08.DBF YES

说明:可以在创建数据库时指定数据文件的自动扩展属性,命令格式如下

CREATE TABLESPACE tablespaceDATAFILE filespec [autoextend_clause]autoextend_clause:== [AUTOEXTEND {OFF|ON[NEXT integer[K|M[MAXSIZE UNLIMITED | integer[K|M]] } ]

其中:

AUTOEXTEND OFF:禁用数据文件的自动扩展

AUTOEXTEND ON:启用数据文件的自动扩展

NEXT:自动扩展时每次分配给数据文件的磁盘空间

MAXSIZE:指定允许分配给该数据文件的最大磁盘空间

UNLIMITED:将分配给数据文件的磁盘空间设为不受限

可以为现有数据文件指定 AUTOEXTEND,格式如下

ALTER DATABASE [database]DATAFILE 'filename'[, 'filename']... autoextend_clause

【实例 2-2】修改表空间 mytbs7 的数据文件为自动扩展。

1)以管理员身份登录

SQL>CONNECT / AS SYSDBA

2)修改表空间

SQL> ALTER DATABASEDATAFILE 'd:\oracle\oradata\db01\mytbs7.ora' AUTOEXTEND ONNEXT 1M MAXSIZE UNLIMITED;

数据库已更改。

3)查询 DBA_DATA_FILES 视图以确定是否启用 AUTOEXTEND。

SQL> SELECT FILE_NAME,AUTOEXTENSIBLEFROM DBA_DATA_FILESWHERE TABLESPACE_NAME='MYTBS7';
结果略

如果想禁用文件的自动扩展属性,只要将 on 改变 off 就可以了。默认情不不允许自动扩展的。如:

SQL> ALTER DATABASEDATAFILE 'd:\oracle\oradata\db01\mytbs7.ora' AUTOEXTEND OFF;

2)、为表空间增加数据文件

可以通过 ALTER TABLESPACE ADD DATAFILE 命令,向表空间添加数分配给表空间的磁盘空间总量。命令格式如下:

ALTER TABLESPACE tablespaceADD DATAFILE filespec [autoextend_clause]

【实例2-3】为 mytbs3 表空间增加一个数据文件,大小为 5MB.

1)以管理员身份登录

SQL>CONNECT / AS SYSDBA

2)增加数据文件

SQL>ALTER TABLESPACE mytbs3 ADD DATAFILE 'd:\oracle\oradata\db01\mytbs3c.dbf' SIZE 5M;

表空间已更改。

3)查询 DBA_DATA_FILES 确认是否增加了数据文件

SQL> SELECT FILE_NAMEFROM DBA_DATA_FILESWHERE TABLESPACE_NAME='MYTBS3';
FILE_NAME
--------------------------------------
D:\ORACLE\ORADATA\DB01\MYTBS3A.DBF
D:\ORACLE\ORADATA\DB01\MYTBS3B.DBF
D:\ORACLE\ORADATA\DB01\MYTBS3C.DBF

通过查询结果可以看到,数据文件由原来的 2 个增加为 3 个。

3)、手工修改数据文件大小

尽管指定自动扩展选项可以使得数据文件在数据写满的情况下自动扩展,但自动扩展导致递归空间操作,从而降低系统性能。例如,当使用 SQL*Loader 给表 EMP 装载大批量据时,在数据写满数据文件之后需要先扩展数据文件,然后才能装载数据,因而会导致系统性能的降低。因此,在执行批量数据装载操作之前,你应该首先确定数据文件是否能够容纳足够数据。如果不足以容纳数据的话,应该首先扩展该数据文件,然后装载数据。DBA 可以使用 ALTER DATABASE 命令手动增加或减少数据文件的大小,而不必通过添加数据文件或更改自动扩展属性更改表空间的大小。命令格式如下:

ALTER DATABASE [database]DATAFILE ‘filename’[, ‘filename’]...RESIZE integer[K|M]

其中:

Integer:以字节为单位表示的结果数据文件的绝对大小

如果更改数据文件的大小比实际存储的数据库对象要小,那么数据文件大小只能减少到数据文件内最后一个对象的最后一个块为止,也就是缩减尺寸后表空间必须能容纳已存在的数据对象,否则会提示出错信息。

【实例 2-4】将 mytbs5 表空间中数据文件的大小改为 10M.

1)以管理员身份登录

SQL> CONNECT / AS SYSDBA

2)创建表空间

SQL> ALTER DATABASEDATAFILE 'd:\oracle\oradata\db01\mytbs05.dbf' RESIZE 10M;

数据库已更改。

3)查询以确认更改

SQL> SELECT BYTES FROM DBA_DATA_FILESWHERE TABLESPACE_NAME='MYTBS5';
BYTES
----------
10485760

5. 修改表空间读写属性

当表空间用于存放静态数据时,因为不会对这些数据进行修改操作,所以可以将这些数据存放到只读设备上,例如存放到光盘上。为了将表空间放到只读设备上,必须将其转变为只读状态。下面的命令将表空间改为只读模式:

ALTER TABLESPACE [tablespace] READ ONLY;

执行这条命令时,与该表空间相关的所有事务会自动回滚,过渡状态期间不允许再对表空间进行任何写入操作。当所有事务处理提交或者回退后,只读命令完成,该表空间置于只读模式。【实例 2-5】在表空间 mytbs3 中创建表 test,将 mytbs3 表空间更改为只读状态,验证能否插入数据,能否删除表

1)以管理员身份登录

SQL> CONNECT / AS SYSDBA

2)创建表

SQL> CREATE TABLE test (name varchar(20))TABLESPACE mytbs3;

表已创建。

3)将表空改为只读状态

SQL> ALTER TABLESPACE mytbs3 READ ONLY;
表空间已更改。

4)向表中插入一条数据,能否成功,为什么?

SQL> INSERT INTO test VALUES ('SHEN');
INSERT INTO test VALUES ('SHEN')
*
ERROR 位于第 1 行:
ORA-00372: 此时无法修改文件 16
ORA-01110: 数据文件 16: 'D:\ORACLE\ORADATA\DB01\MYTBS3C.DBF'

表空间只读后不能执行 DML 操作.

5)删除表,查看能否成功,为什么?

SQL> DROP TABLE test;
表已丢弃。

由上例可以看出执行了上述命令之后,会将表空间 mytbs3 转变为只读状态。此时,用户将只能在该表空间的对象上执行查询操作(SELECT),而不能执行 DML 或 DDL 操作。但大家要注意,有一种 DDL 操作例外,可以执行 DROP TABLE 或 DROP INDEX 删除该表空间上的表或索引,因为这些命令只影响数据字典(数据字典位于 SYSTEM 表空间)。之所以可以这样操作,是因为 DROP 命令只更新数据字典,而不更新只读表空间上的物理文件。对于本地管理的表空间,删除的段将改为临时段以避免更新位图。将表空间设为只读状态之前,将会引发对表空间的数据文件执行检查点操作。将表空间设为只读可防止对表空间中的数据文件进行任何写操作,因此,数据文件可驻留在只读介质上,如 CD-ROM 或一次性写入(WORM) 驱动器。使用只读表空间的好处是可以免去对数据库大量的静态数据执行备份。

要在只读表空间上执行 DML 操作,必须将表空间改为可写状态,可以使用 ALTERTABLESPACE [tablespace] READ WRITE 命令,但是表空间内的所有数据文件都必须联机。

【实例 2-6】将 mytbs3 表空间更改为可读写状态,验证是否能够创建表。

1)以管理员身份登录

SQL>CONNECT / AS SYSDBA

2)改为可读可写状态

SQL> ALTER TABLESPACE mytbs3 READ WRITE;

表空间已更改。

3)创建表 test 验证表空间的状态

SQL> CREATE TABLE test (name varchar(20))TABLESPACE mytbs3;
表已创建。

在这里建表操作成功,也说明上一实例在只读状态下对表的删除是成功的。

6. 修改表空间的 ONLINE/OFFLINE 属性

通过将一个表空间置于联机或脱机状态来控制表空间的可用性。当表空间处于联机状态时,用户可以访问其中的数据。当某一表空间处于脱机状态时,用户无法访问它的数据,但是允许正常访问数据库的其余处于联机的表空间。以下几种情况下数据库管理员可以让表空间脱机:

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

可以使用如下命令对表空间进行脱机和联机操作:

ALTER TABLESPACE tablespace{ONLINE |OFFLINE [NORMAL|TEMPORARY|IMMEDIATE|FOR RECOVER]}

其中:

NORMAL:将该表空间中所有数据文件内的所有块从 SGA 中写入数据文件并将数据文件关闭。这是缺省设置。在使该表空间重新联机之前,无须对其执行介质恢复。尽可能使用 NORMAL 子句。

TEMPORARY:对表空间内的所有联机数据文件执行检查点操作,但是在执行检查点时并不检查数据文件的状态,即使某些文件无法写入检查点,Oracle 也会忽略这些错误。在使用此种表空间重新联机之前,所有脱机文件可能都需要进行介质恢复。

IMMEDIATE:不保证表空间文件可用,而且不执行检查点操作。在使表空间重新联机前,必须对其执行介质恢复操作。

FOR RECOVER:使表空间脱机以进行表空间时间点恢复。

只要数据库打开,数据库管理员就可以使任意一个表空间脱机(SYSTEM 表空间和任何具有活动还原段或临时段的表空间除外)。当一个表空间脱机后,Oracle 服务器将使与之相关联的所有数据文件脱机。

【实例 2-7】将 mytbs3 表空间改为脱机状态,并向 test 表中插入一条数据进行验证。

1)以管理员身份登录

SQL> CONNECT / AS SYSDBA

2)改为脱机状态

SQL> ALTER TABLESPACE mytbs3 OFFLINE NORMAL;
表空间已更改。

3)查询数据

SQL> SELECT * FROM test;
SELECT * FROM test
*
ERROR 位于第 1 行:
ORA-00376: 此时无法读取文件 16
ORA-01110: 数据文件 16: 'D:\ORACLE\ORADATA\DB01\MYTBS3C.DBF'

说明:执行查询操作时用户将收到一条错误消息,因为当表空间脱机后,Oracle 不允许有任何 SQL 语句引用该表空间含有的对象,即用户不能访问该表空间。

当表空间脱机或者重新联机后,该事件记录在数据字典和控制文件内。如果关闭数据库时表空间仍然脱机,则当随后数据库装载并重新打开时,该表空间仍保持脱机状态且不会检查。如果遇到某些错误(例如,当数据库写入程序进程 DBWn 几次试图向某表空间的数据文件写入都失败时),Oracle 实例(Instance)自动将表空间从联机状态切换为脱机状态。

不能设为脱机的表空间:SYSTEM 表空间,具有活动的还原段的表空间,缺省临时表空间。当希望访问表空间中的数据如表、索引等对象时,表空间必须处于联机状态。

【实例 2-8】将 mytbs3 表空间改为联机状态,并向 test 表中插入一条数据进行验证。

1)以管理员身份登录

SQL> CONNECT / AS SYSDBA

2)改为联机状态

SQL> ALTER TABLESPACE mytbs3 ONLINE;
表空间已更改。

3)插入数据

SQL> INSERT INTO test VALUES('SHEN');
已创建 1 行。

说明:插入数据成功,因为表空间处于联机状态。

7. 数据文件的脱机与联机

与表空间类似,联机的数据文件也可以被设置为脱机状态。脱机的数据文件对于数据库来说是不可用的,直到它们被恢复为联机状态为止。如果数据文件发生损坏时,Oracle 会自动将这个数据文件设置为脱机状态,并且记录在警告文件中。如果损坏的文件恢复后,需要以手工方式重新将数据文件恢复为联机状态。

将数据文件设置为脱机状态,不会影响表空间的状态,但是反过来,将表空间设置为脱机状态后,属于该表空间的数据文件同时会进入脱机状态。如果想改变数据文件的状态,可以使用 ALTER DATABASE 命令。

【实例2-9】将数据文件 D:\ORACLE\ORADATA\DB01\MYTBS3C.DBF 改为脱机状态,然后再改为联机状态。

1)以管理员身份登录

SQL> CONNECT / AS SYSDBA

2)改为脱机状态

SQL> ALTER DATABASE DATAFILE'D:\ORACLE\ORADATA\DB01\MYTBS3C.DBF' OFFLINE;
数据库已更改。

3)改为联机状态

SQL> ALTER DATABASE DATAFILE'D:\ORACLE\ORADATA\DB01\MYTBS3C.DBF' ONLINE;
数据库已更改。

8. 数据文件的移动

为了防止数据丢失和减少 I/O 冲突,提高 I/O 性能,应该将数据文件尽可能分布到不同磁盘上,并且尽可能均衡不同磁盘之间的 I/O 操作。移动数据文件一方面是出于性能方面的考虑,另一方面出于安全考虑。因此在实际数据库应用中可能会移动数据文件。移动数据文件有两种方法,一种方法是使用 ALTER TABLESPACE 命令,另一种方法是使用 ALTERDATABASE 命令,具体采用哪种方法取决于表空间类型。

1)、使用 ALTER TABLESPACE 命令

使用 ALTER TABLESPACE 命令格式如下:

ALTER TABESPACE tablespaceRENAME DATAFILE 'filename'[, 'filename']...TO 'filename'[, 'filename']...

它仅适用于不含活动还原段或临时段的非 SYSTEM 表空间中的数据文件的移动。源文件名必须与存储在控制文件内的名称匹配,表空间必须脱机,并且 TO 子句后的目标数据文件必须存在。

ALTER TABLESPACE 命令重命名数据文件的步骤:

  • ? 使表空间脱机。
  • ? 使用操作系统命令移动或复制文件。
  • ? 执行 ALTER TABLESPACE RENAME DATAFILE 命令。
  • ? 使表空间联机。
  • ? 必要时使用操作系统命令删除原来的数据文件

【实例2-10】将 mytbs3 表空间的第三个数据文件由 D:盘移动到 E:盘。

1)以管理员身份登录

SQL> CONNECT / AS SYSDBA

2)使表空间脱机

SQL> ALTER TABLESPACE mytbs3 OFFLINE;
表空间已更改

3) 使用操作系统命令移动或复制文件复制 mytbs3 表空间的第三个数据文件到 E:盘相同目录下(需要先创建目录)。如果不能确定 mytbs3 表空间包含的数据文件,请查询 dba_data_files。

4)执行 ALTER TABLESPACE RENAME DATAFILE 命令

SQL> ALTER TABLESPACE mytbs3 
RENAME DATAFILE 'd:\oracle\oradata\db01\mytbs3c.dbf' 
TO 'e:\oracle\oradata\db01\mytbs3c.dbf'; 
表空间已更改 

5) 使表空间联机

SQL> ALTER TABLESPACE mytbs3 ONLINE; 
表空间已更改 

6) 查询表空间的数据文件

SQL> SELECT FILE_NAME FROM DBA_DATA_FILES 
WHERE TABLESPACE_NAME='MYTBS3'; 
FILE_NAME 
----------------------------------------------------------------- 
D:\ORACLE\ORADATA\DB01\MYTBS3A.DBF 
D:\ORACLE\ORADATA\DB01\MYTBS3B.DBF 
E:\ORACLE\ORADATA\DB01\MYTBS3C.DBF 

可见第三个数据文件已经由 D:盘移动到了 E:盘。

说明:必要时使用操作系统命令删除原来的数据文件。

2)、使用 ALTER DATABASE 命令

ALTER DATABASE 命令可用来移动任意类型的数据文件,但是数据库必须处于已装载

状态,且目标数据文件必须存在。步骤如下:

? 关闭数据库。

? 使用操作系统命令移动文件。

? 装载数据库。

? 执行 ALTER DATABASE RENAME FILE 命令。

  • ? 打开数据库。

【实例 2-11】将 system 表空间由 D:盘移动到 E:盘。

1)以管理员身份登录

SQL>CONNECT / AS SYSDBA 

2) 关闭数据库

SQL> SHUTDOWN NORMAL; 
数据库已经关闭。 
已经卸载数据库。
ORACLE 例程已经关闭。

3)使用操作系统命令将 system 表空间对应的数据文件移到 E:盘相同目录下。

4)将数据启动至装载状态

SQL> STARTUP MOUNT;
ORACLE 例程已经启动。
Total System Global Area 34675092 bytes
Fixed Size 453012 bytes
Variable Size 29360128 bytes
Database Buffers 4194304 bytes
Redo Buffers 667648 bytes
数据库装载完毕。

5)执行 ALTER DATABASE RENAME FILE 命令

SQL>ALTER DATABASE RENAMEFILE 'd:\oracle\oradata\db01\system01.dbf'TO 'e:\oracle\oradata\db01\system01.dbf';
数据库已更改

6) 打开数据库

SQL> ALTER DATABASE OPEN;
数据库已更改。

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

(七)、删除表空间

当不再需要表空间及其内容时,可以通过下面的 DROP TABLESPACE 命令从数据库中删除表空间,格式如下:

DROP TABLESPACE tablespace[INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS]]

其中:

tablespace:指定要删除的表空间的名称

INCLUDING CONTENTS:删除表空间内的所有段

AND DATAFILES:删除关联的操作系统文件

CASCADE CONSTRAINTS:如果要删除的表空间之外的表引用了该表空间内表的主键和唯一键,则删除这种引用完整性约束。

【实例2-12】删除表空间 mytbs3, system,查看出现什么现象。

1)以管理员身份登录

SQL>CONNECT / AS SYSDBA

2) 删除表空间 mytbs3

SQL> DROP TABLESPACE mytbs3;
DROP TABLESPACE mytbs3
*
ERROR 位于第 1 行:
ORA-01549: 表空间非空,请使用 INCLUDING CONTENTS 选项

3) 删除表空间 mytbs3,增加选项

SQL> DROP TABLESPACE mytbs3 INCLUDING CONTENTS AND DATAFILES;
表空间已丢弃。

4) 删除表空间 system

SQL> DROP TABLESPACE systemINCLUDING CONTENTS AND DATAFILESCASCADE CONSTRAINTS;
DROP TABLESPACE system
*
ERROR 位于第 1 行:
ORA-01550: 无法删除系统表空间

说明:表空间 mytbs3 中包含一个表段,因此必须带 INCLUDING CONTENTS 子句,即删除表空间的同时删除表空间中的对象,加上 AND DATAFILES 子句可以删除表空间的数据文件。SYSTEM 表空间中包含了多种段且可能引用其它表空间中的主键,因此加了ASCADE CONSTRAINTS 子句,但是 SYSTEM 表空间是不能删除的。

使用 DROP TABLESPACE 命令须遵守如下原则:

  • ? 如果表空间中包含数据段,必须使用 INCLUDING CONTENTS 选项。当表空间包含许多对象时,该选项可能会生成许多 Undo 数据。
  • ? 删除表空间后,其数据将不再包含在数据库内。
  • ? 在删除表空间时,只删除关联数据库控制文件内的文件指针。操作系统文件仍然存在,如果未使用 AND DATAFILES 子句或数据文件是 OMF,则必须使用适当的操作系统命令明确删除这些文件。
  • ? 即使将表空间切换到只读状态,仍可以删除该表空间以及其中的段。
  • ? 删除表空间之前,建议将表空间脱机,以确保没有事务处理访问该表空间内的任何段。
  • ? 不能删除下列表空间:SYSTEM 表空间和具有活动段的表空间。

(八)、获取表空间的相关信息

可以使用下列数据字典视图和动态性能视图获取表空间和数据文件的相关信息。与表空间相关:DBA_TABLESPACE,V$TABLESPACE。与数据文件相关:DBA_DATA_FILES,V$DATAFILE。与临时数据文件相关:DBA_TEMP_FILES,V$TEMPFILE。【实例 2-13】查询数据文件的基本信息。

1)以管理员身份登录

SQL> CONNECT / AS SYSDBA

2) 查询

SQL> SELECT name,file#,status,bytes,checkpoint_change# last_scnFROM v$datafile;
NAME FILE# STATUS BYTES LAST_SCN
---------------------------------------------------------------------------- ------- ---------- ----------
D:\ORACLE\ORADATA\DB01\SYSTEM01.DBF1 SYSTEM 419430400 5083126
D:\ORACLE\ORADATA\DB01\UNDOTBS01.DBF2 ONLINE 209715200 5083126
D:\ORACLE\ORADATA\DB01\CWMLITE01.DBF3 ONLINE 20971520 5083126
字段的含义如下:
Name:数据文件的名称和位置;
File#:数据文件的绝对编号;
Status:数据文件的状态,可以有三种:联机、脱机或者属于 SYSTEM 表空间;
Bytes:数据文件的大小;
Last_scn:数据文件中最后一次写入事务的 SCN。

【实例2-14】查询表空间 users 的大小。

1)以管理员身份登录

SQL> CONNECT / AS SYSDBA

2) 查询

SQL> SELECT sum(bytes) FROM dba_data_files WHERE tablespace_name='SYSTEM';
SUM(BYTES)
----------
419430400

(九)、大表空间

在 Oracle 中用户可以创建大文件表空间(bigfile tablespace)。这样 Oracle 数据库使用的表空间(tablespace)可以由一个单一的大文件构成,而不是若干个小数据文件。这使 Oracle可以发挥 64 位系统的能力,创建、管理超大的文件。在 64 位系统中,Oracle 数据库的存储能力被扩展到了 8 EB(1EB = 1024PB,1PB = 1024TB,1TB=1024GB)。

只有本地管理的(locally managed),且段空间自动管理(automatic segment-spacemanagement)的表空间(tablespace)才能使用大文件表空间(bigfile tablespace)。但是有两个例外:本地管理的撤销表空间(undo tablespace)和临时表空间(temporary tablespace),即使其段(segment)为手工管理(manually managed),也可以使用大文件表空间。

  • ? 使用大文件表空间(bigfile tablespace)可以显著地增强 Oracle 数据库的存储能力。一个小文件表空间(smallfile tablespace)最多可以包含 1024 个数据文件(datafile),而一个大文件表空间中只包含一个文件,这个数据文件的最大容量是小数据文件的1024 倍。这样看来,大文件表空间和小文件表空间的最大容量是相同的。但是由于每个数据库最多使用 64K 个数据文件,因此使用大文件表空间时数据库中表空间的极限个数是使用小文件表空间时的 1024 倍,使用大文件表空间时的总数据库容量比使用小文件表空间时高出三个数量级。换言之,当一个 Oracle 数据库使用大文件表空间,且使用最大的数据块容量时(32K),其总容量可以达到 8EB。
  • ? 在超大型数据库中使用大文件表空间减少了数据文件的数量,因此也简化了对数据文件的管理工作。由于数据文件的减少,SGA 中关于数据文件的信息,以及控制文件(control file)的容量也得以减小。
  • ? 由于数据文件对用户透明,由此简化了数据库管理工作。

(十)、小结

Oracle 数据库在逻辑上由一个或多个表空间组成,每个表空间由一个或多数据文件组成,并且一个数据文件只能属于一个表空间。表空间根据管理方式可以分为本地管理表空间和字典管理表空间两种,前者是 Oracle 9i 默认的管理方式。表空间的大小是构成表空间的数据文件大小的总和,可以通过修改数据文件的大小、增减数据文件或将数据文件设置为自动增长来调整表空间的大小。通过移动数据文件,可以将数据文件分布到不同的磁盘驱动器可以减少 I/O 冲突和防止数据损失。


写在最后的话

感谢各位的支持与阅读,后续会继续推送相关知识和交流,欢迎交流、转发和关注,感谢!

相关推荐

Linux在线安装JDK1.8

首先在服务器pingwww.baidu.com查看是否可以连网然后就可以在线下载一、下载安装JDK1.81、在下载安装的同时做好一些准备工作...

Linux安装JDK,超详细

1、了解RPMRPM是Red-HatPackageManager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux...

Linux安装jdk1.8(超级详细)

前言最近刚购买了一台阿里云的服务器准备要搭建一个网站,正好将网站的一个完整搭建过程分享给大家!#一、下载jdk1.8首先我们需要去下载linux版本的jdk1.8安装包,我们有两种方式去下载安装...

Linux系统安装JDK教程

下载jdk-8u151-linux-x64.tar.gz下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.ht...

干货|JDK下载安装与环境变量配置图文教程「超详细」

1.JDK介绍1.1什么是JDK?SUN公司提供了一套Java开发环境,简称JDK(JavaDevelopmentKit),它是整个Java的核心,其中包括Java编译器、Java运行工具、Jav...

Linux下安装jdk1.8

一、安装环境操作系统:CentOSLinuxrelease7.6.1810(Core)JDK版本:1.8二、安装步骤1.下载安装包...

Linux上安装JDK

以CentOS为例。检查是否已安装过jdk。yumlist--installed|grepjdk或者...

Linux系统的一些常用目录以及介绍

根目录(/):“/”目录也称为根目录,位于Linux文件系统目录结构的顶层。在很多系统中,“/”目录是系统中的唯一分区。如果还有其他分区,必须挂载到“/”目录下某个位置。整个目录结构呈树形结构,因此也...

Linux系统目录结构

一、系统目录结构几乎所有的计算机操作系统都是使用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件,而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树...

Linux文件查找

在Linux下通常find不很常用的,因为速度慢(find是直接查找硬盘),通常我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来搜寻。为什么...

嵌入式linux基本操作之查找文件

对于很多初学者来说都习惯用windows操作系统,对于这个系统来说查找一个文件简直不在话下。而学习嵌入式开发行业之后,发现所用到的是嵌入式Linux操作系统,本想着跟windows类似,结果在操作的时...

linux系统查看软件安装目录的方法

linux系统下怎么查看软件安装的目录?方法1:whereis软件名以查询nginx为例子...

Linux下如何对目录中的文件进行统计

统计目录中的文件数量...

Linux常见文件目录管理命令

touch用于创建空白文件touch文件名称mkdir用于创建空白目录还可以通过参数-p创建递归的目录...

Linux常用查找文件方法总结

一、前言Linux系统提供了多种查找文件的命令,而且每种查找命令都具有其独特的优势,下面详细总结一下常用的几个Linux查找命令。二、which命令查找类型:二进制文件;...

取消回复欢迎 发表评论: