Oracle 管理表空间和数据文件

本文永久链接地址: https://www.askmaclean.com/archives/oracle-tablespace-datafile.html

 

表空间和数据文件

Oracle 在逻辑上以表空间存储数据,而实际上以数据文件进行存储(askmaclean.com)。

  • 表空间:

某一时刻只能属于一个数据库

由一个或多个数据文件组成

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

  • 数据文件:

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

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

数据库、表空间和数据文件是紧密相关的,但它们之间又有着重要区别:

  • Oracle 数据库由一个或多个称为表空间的逻辑存储单元组成,表空间作为一个整体
    存储数据库中的所有数据。
  • Oracle 数据库内的每个表空间由一个或多个称为数据文件的文件组成,这些数据文
    件是与 Oracle 运行所在的操作系统一致的物理结构。
  • 数据库的所有数据都存储在数据文件中,数据库的每个表空间都由这些数据文件组
    成。例如,最简单的 Oracle 数据库只有一个表空间和一个数据文件。而另一个数据
    库可具有三个表空间,每个表空间由两个数据文件组成(共有六个数据文件)。

 

tablespace表空间类型

为加强控制和方便维护,DBA 创建了表空间。Oracle 服务器识别两种类型的表空间:SYSTEM 和所有其它表空间。

SYSTEM 表空间:

  • 随数据库创建
  • 所有数据库均需要
  • 包括数据字典(内含存储程序单元)
  • 包含 SYSTEM 还原段
  • 应不包括用户数据,尽管允许这样做

SYSTEM 表空间:

  • 支持更灵活地管理数据库
  • 将还原段、临时段、应用程序数据段和应用程序索引段分开
  • 根据备份要求将数据分开
  • 分开动态和静态数据
  • 控制分配给用户对象的空间量

 

创建表空间

使用 CREATE TABLESPACE 命令可创建表空间:
CREATE TABLESPACE tablespace
[DATAFILE clause]
[MINIMUM EXTENT integer[K|M]]
[BLOCKSIZE integer [K]]
[LOGGING|NOLOGGING]
[DEFAULT storage_clause ]
[ONLINE|OFFLINE]
[PERMANENT|TEMPORARY]
[extent_management_clause]
[segment_management_clause]

 

其中:

Tablespace:是要创建的表空间的名称

DATAFILE:指定组成表空间的一个或多个数据文件

MINIMUM EXTENT:确保表空间内每个占用区的大小是整数 (integer) 的倍数。使用 K 或 M 以千字节或兆字节为单位指定该大小。

BLOCKSIZE:BLOCKSIZE 指定表空间的非标准块大小。要指定该子句,必须具有 DB_CACHE_SIZE,并至少设置一个 DB_nK_CACHE_SIZE 参数,在该子句中指定的整数 (integer) 必须与一个 DB_nK_CACHE_SIZE 参数设置相对应。

LOGGING:指定在缺省情况下,表空间内的所有表、索引和分区的所有更改都写入重做日志文件。LOGGING 为缺省设置。

NOLOGGING:指定在缺省情况下,表空间内的所有表、索引和分区的所有更改都不写入重做日志文件。NOLOGGING 只影响某些 DML 和 DDL 命令,如直接加载。

DEFAULT:DEFAULT 指定表空间内创建的所有对象的缺省存储参数。

OFFLINE:指定表空间从创建后就不可用。

PERMANENT:指定表空间可用于保留永久对象。

TEMPORARY:指定表空间仅用于保留临时对象,如:由 ORDER BY 子句引起的隐式排序所使用的段。不能指定 EXTENT MANAGEMENT LOCAL 或 BLOCKSIZE 子句。

extent_management_clause:该子句指定如何管理表空间内的区。该子句在本课的后续部分中讨论。

segment_management_clause:这只与永久的、且在本地管理的表空间相关。通过它可指定 Oracle 是否应使用空闲列表或位图来跟踪表空间段中的已占用空间和空闲空间。(askmaclean.com)

datafile_clause:== filename [SIZE integer[K|M] [REUSE]

[ autoextend_clause ]

filename:是表空间中的数据文件的名称。

SIZE:指定文件大小。使用 K 或 M 以千字节或兆字节为单位指定大小。

REUSE:允许 Oracle 服务器重新使用现有文件。

autoextend_clause:该子句启用或禁用数据文件的自动扩展。

NEXT:以字节为单位指定在需要更多区时自动分配的磁盘空间下一增量的大小。

其中:

MAXSIZE:指定数据文件可以自动扩展到的最大磁盘空间。

UNLIMITED:指定可分配给数据文件或 Tempfile 的磁盘空间是不受限制的。

另请参阅“Oracle9i SQL Reference”和“Oracle9i Concepts”以获取更多信息。

使用以下命令创建表空间:
CREATE TABLESPACE

CREATE TABLESPACE userdata
	DATAFILE '/u01/oradata/userdata01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 5M MAXSIZE 200M;

 

表空间的空间管理

 

  • 本地管理的表空间:

在表空间内管理空闲区

使用位图来记录空闲区

每一位与一个块或一组块相对应

位的数值指明是空闲还是已占用

  • 字典管理的表空间:

由数据字典管理空闲区

在分配或回收区时更新对应的表

表空间以区为单位分配空间。可使用以下两种不同方法来跟踪创建的表空间中的空闲空间和已占用空间:

本地管理的表空间:在表空间内通过位图管理区。位图中的每个位对应于一个块或一组块。分配了某个区或释放了某个区可重新使用时,Oracle 服务器更改位图值以显示块的新状态。从 Oracle9i 开始,在本地管理已成为缺省设置。

字典管理的表空间:由数据字典管理区。Oracle 服务器将在分配或回收区时更新数据字典中对应的表。

 

本地管理的表空间

  • 减少了对数据字典表的争用
  • 分配或回收空间时不生成还原数据
  • 无需合并

 

CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 500M 
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

 

EXTENT MANAGEMENT 子句的 LOCAL 选项指定表空间在本地管理。缺省情况下,表空间在本地管理。

extent_management_clause:

[ EXTENT MANAGEMENT [ DICTIONARY | LOCAL

[ AUTOALLOCATE | UNIFORM [SIZE integer[K|M]] ] ] ]

其中:

DICTIONARY:指定使用字典表来管理表空间。

LOCAL:指定在本地通过位图管理表空间。如果指定了 LOCAL,则不能再指定 DEFAULT storage_clause、MINIMUM EXTENT 或 TEMPORARY。

AUTOALLOCATE:指定表空间由系统管理。用户无法指定区大小。这是缺省设置。

UNIFORM:指定按照大小统一为 SIZE 字节数的各个区来管理表空间。使用 K 或 M 以千字节或兆字节来指定区大小。缺省大小为 1 MB。

 

EXTENT MANAGEMENT 子句可用于各种 CREATE 命令中:

  • 对于非 SYSTEM 的永久表空间,您可以在 CREATE TABLESPACE 命令中指定EXTENT MANAGEMENT LOCAL。
  • 对于临时表空间,您可以在 CREATE TEMPORARY TABLESPACE 命令中指定 EXTENT MANGEMENT LOCAL。

在本地管理表空间的优点:

本地管理的表空间相对于字典管理的表空间有如下优点:

  • 本地管理可以避免循环空间管理操作,但是这种操作在字典管理的表空间中却有可能发生。一旦消耗或释放某个区的空间会产生另一个消耗或释放操作(消耗或释放还原段或数据字典表内的空间)时,它就会发生。
  • 由于本地管理的表空间在数据字典表中不记录空闲空间,从而减少了对这些表的争用。
  • 区的本地管理可自动跟踪邻近的空闲空间,因而无须合并空闲区。
  • 本地管理的区大小可由系统自动确定。
  • 对区的位图进行更改不会生成还原信息,因为它们不更新数据字典中的表(表空间限额信息等特殊情况除外)。

 

字典管理的表空间

  • 在数据字典中管理区
  • 存储在表空间中的每个段都可以有不同的存储子句
  • 需要合并

 

CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' 
SIZE 500M EXTENT MANAGEMENT DICTIONARY
	DEFAULT STORAGE 
(initial 1M NEXT 1M PCTINCREASE 0);

字典管理的表空间内的段可具有自定义的存储设置。这比本地管理的表空间更灵活,但效率要低得多。

 

Undo还原表空间

 

  • 用于存储还原段
  • 不能包含任何其它对象
  • 其中的区要在本地管理
  • 只能使用 DATAFILE EXTENT MANAGEMENT 子句
CREATE UNDO TABLESPACE undo1
DATAFILE '/u01/oradata/undo01.dbf' SIZE 40M;

还原表空间使用“自动还原管理”(Automatic Undo Management) 的方式。有关“自动还原管理”的更多信息,请参考“管理还原数据”一课。
CREATE UNDO TABLESPACE tablespace
[DATAFILE clause]

 

临时表空间

 

  • 用于排序操作
  • 不能包含任何永久对象
  • 建议在本地管理区
CREATE TEMPORARY TABLESPACE temp
TEMPFILE '/u01/oradata/temp01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M;

通过指定专门用于排序段的临时表空间,您可以更有效地管理用于排序操作的空间。在临时表空间内不能驻留永久方案对象。

当一个段由多个排序操作共享时,就使用排序段或者临时段。当多个排序太大而无法装入内存时,使用临时表空间能改进性能。给定临时表空间的排序段在例程首次执行排序操作时创建。排序段通过分配更多的区来扩展,直到段大小等于或者大于该例程上运行的所有活动排序的存储要求总和。(askmaclean.com)

本地管理的临时表空间具有临时数据文件 (Tempfile),它与普通数据文件很相似,只有
以下几点不同:

  • Tempfile 始终设为 NOLOGGING 模式。
  • 无法将 Tempfile 设置为只读。
  • 无法重命名 Tempfile。
  • 无法通过 ALTER DATABASE 命令创建 Tempfile。
  • Tempfile 对于只读数据库是必需的。
  • 介质恢复不恢复 Tempfile。

若要优化临时表空间内的排序性能,可将 UNIFORM SIZE 设置为 SORT_AREA_SIZE
参数的整数倍。

 

缺省临时表空间

 

  • 指定数据库范围内的缺省临时表空间
  • 避免使用 SYSTEM 表空间存储临时数据
  • 可使用以下命令进行创建:

CREATE DATABASE

在本地管理

ALTER DATABASE

ALTER DATABASE 
DEFAULT TEMPORARY TABLESPACE temp;

创建未指定缺省临时表空间的数据库时,分配给任意用户的,未使用 TEMPORARY TABLESPACE 子句创建的表空间是 SYSTEM 表空间。此时,alert_sid.log 中会记录一条警告消息,指出 SYSTEM 表空间是缺省临时表空间。在创建数据库期间创建缺省临
时表空间可防止将 SYSTEM 表空间用作临时空间。

创建数据库后,可通过创建临时表空间然后改变数据库来设置缺省临时表空间。

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

定义后,未显式分配到临时表空间的用户将被分配到该缺省临时表空间。

缺省临时表空间可通过使用 ALTER DATABASE DEFAULT TEMPORARY TABLESPACE
命令随时进行更改。更改缺省临时表空间后,分配到该缺省临时表空间的所有用户将被
重新分配到新的缺省表空间。

 

创建缺省临时表空间

  • 在创建数据库期间:

 

CREATE DATABASE DBA01
 LOGFILE
 GROUP 1 ('/$HOME/ORADATA/u01/redo01.log') SIZE 100M,
 GROUP 2 ('/$HOME/ORADATA/u02/redo02.log') SIZE 100M,
 MAXLOGFILES 5
 MAXLOGMEMBERS 5
 MAXLOGHISTORY 1
 MAXDATAFILES 100
 MAXINSTANCES 1
 DATAFILE '/$HOME/ORADATA/u01/system01.dbf' SIZE 325M 
 UNDO TABLESPACE undotbs 
 DATAFILE '/$HOME/ORADATA/u02/undotbs01.dbf' SIZE 200
 DEFAULT TEMPORARY TABLESPACE temp 
 TEMPFILE '/$HOME/ORADATA/u03/temp01.dbf' SIZE 4M 
 CHARACTER SET US7ASCII


在创建数据库期间:

创建未指定缺省临时表空间的数据库时,分配给任意用户的,未使用 TEMPORARY TABLESPACE 子句创建的缺省表空间是 SYSTEM 表空间。此时,alertSID.log 会
记录一条警告消息,指示出 SYSTEM 表空间是缺省临时表空间。

在创建数据库期间创建缺省临时表空间可防止将 SYSTEM 表空间用作临时空间。使用 CREATE DATABASE 命令创建缺省临时表空间时,其类型是在本地管理。

 

  • 创建数据库后:

 

ALTER DATABASE 
DEFAULT TEMPORARY TABLESPACE default_temp2;

 

 

  • 查询 DATABASE_PROPERTIES 以确定数据库的缺省临时表空间
SELECT * FROM DATABASE_PROPERTIES;

创建数据库后:

缺省临时表空间可通过下列方法创建和设置:

  • 使用 CREATE TABLESPACE 命令创建临时表空间
  • 使用 ALTER DATABASE 命令,如上所述

定义后,未显式分配到临时表空间的用户将被分配到该缺省临时表空间。

缺省临时表空间可通过使用 ALTER DATABASE DEFAULT TEMPORARY TABLESPACE
命令随时进行更改。更改缺省临时表空间后,已分配到该缺省临时表空间的所有用户将被重新分配到新的缺省表空间。

 

缺省临时表空间的限制

不能对缺省临时表空间执行下列操作:

  • 将其删除,除非已经有新的缺省临时表空间
  • 使其脱机
  • 更改为永久表空间

删除缺省临时表空间

您只有指定了一个新的缺省表空间后,才能删除旧的缺省临时表空间。必须使用 ALTER DATABASE 命令才能将缺省临时表空间更改为新的缺省值。旧的缺省临时表空间仅在新的缺省临时表空间可用时才会被删除。分配到旧的缺省临时表空间的用户将被自动重新分配到新的缺省临时表空间。

更改缺省临时表空间的类型

由于缺省临时表空间必须是 SYSTEM 表空间或临时表空间,因此,无法将缺省临时表空间更改为永久类型。

使缺省临时表空间脱机

使表空间脱机后,例如在进行脱机备份、维护或更改使用该表空间的应用程序时,其他用户将无法使用对应的这部分数据库内容。由于上述情况都不适用于临时表空间,因此无法使缺省临时表空间脱机。

 

只读表空间

  • 使用以下命令可将表空间置于只读模式

导致检查点操作

数据仅用于读操作

可从表空间删除对象

 

ALTER TABLESPACE userdata READ ONLY; 

 

ALTER TABLESPACE [tablespace]READ ONLY 命令将表空间置于过渡只读模式。除
了以前修改过该表空间中的块的已有事务处理回退,这种过渡状态不允许再对该表空间进
行任何写入操作。当已有的所有事务处理提交或者回退后,只读命令完成,该表空间置于
只读模式。

您可以删除只读表空间内的表和索引等项,因为这些命令只影响数据字典。之所以可以这样操作,是因为 DROP 命令只更新数据字典,而不更新构成表空间的物理文件。对于本地管理的表空间,删除的段将改为临时段以避免更新位图。要使只读表空间可写,表空间内的所有数据文件都必须联机。将表空间设为只读将导致对表空间的数据文件执行检查点操作。

将表空间设为只读可防止对表空间中的数据文件进行任何写操作。为此,数据文件可驻留在只读介质上,如 CD-ROM 或一次性写入 (WORM) 驱动器。只读表空间可以免去对数据库大量的静态分配执行备份。

在一次性写入 (WORM) 设备上创建只读表空间:

  1. ALTER TABLESPACE…READ ONLY
  2. 使用操作系统命令将表空间的数据文件移动到只读设备上。
  3. ALTER TABLESPACE…RENAME DATAFILE

 

使表空间脱机

  • 无法访问数据
  • 不能设为脱机的表空间:

SYSTEM 表空间

具有活动的还原段的表空间

缺省临时表空间

  • 使用以下命令可使表空间脱机:
  • ALTER TABLESPACE userdata OFFLINE;
  • ALTER TABLESPACE userdata ONLINE;
  • 使用以下命令可使表空间联机:

 

表空间一般是联机的,这样可方便数据库用户使用其中包含的数据。但是,数据库管理员可以让表空间脱机以便:

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

表空间的脱机状态

当表空间脱机后,Oracle 不允许随后有任何 SQL 语句引用该表空间含有的对象。试图对脱机表空间内的对象进行访问的用户将收到一条错误消息。

当表空间脱机或者重新联机后,该事件记录在数据字典和控制文件内。如果关闭数据库时表空间仍然脱机,则当随后数据库装载并重新打开时,该表空间仍保持脱机且不会被检查。

 

如果遇到某些错误(例如,当数据库写入程序进程 DBWn 几次试图向某表空间的数据文件写入都失败时),Oracle 例程自动将表空间从联机切换为脱机。不同的错误情况在 Oracle9i 数据库管理基础 II 课程内有更为详细的讨论。

使表空间脱机

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

ALTER TABLESPACE tablespace

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

其中:

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

TEMPORARY:对表空间内的所有联机数据文件执行检查点操作,即使某些文件无法写入。所有脱机文件可能都需要进行介质恢复。

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

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

 

更改存储设置

  • 使用 ALTER TABLESPACE 命令更改存储设置
  • ALTER TABLESPACE userdata MINIMUM EXTENT 2M;
  • ALTER TABLESPACE userdataDEFAULT STORAGE (INITIAL 2M NEXT 2M MAXEXTENTS 999);
  • 不能更改在本地管理的表空间的存储设置

使用 ALTER TABLESPACE 命令可以改变表空间的缺省存储定义:

ALTER TABLESPACE tablespace

[MINIMUM EXTENT integer[K|M]

|DEFAULT storage_clause ]

 

调整表空间大小

表空间大小可通过以下方法进行调整:

  • 更改数据文件的大小:

使用 AUTOEXTEND 自动调整

使用 ALTER TABLESPACE 手动调整

  • 使用 ALTER TABLESPACE 添加数据文件

您可以通过下面两种方法增大表空间:

  • 选择自动或手动更改数据文件的大小。
  • 向表空间添加数据文件。

 

启用数据文件自动扩展

  • 可使用以下命令自动调整大小:

CREATE DATABASE

CREATE TABLESPACE

ALTER TABLESPACE … ADD DATAFILE

  • 示例:
  • CREATE TABLESPACE user_data DATAFILE  ‘/u01/oradata/userdata01.dbf’ SIZE 200M AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
  • 查询 DBA_DATA_FILES 视图以确定是否启用了 AUTOEXTEND

 

为新数据文件指定 AUTOEXTEND

通过 AUTOEXTEND 子句可启用或禁用数据文件的自动扩展。文件将按指定的增量增加直到达到指定的最大值。

使用 AUTOEXTEND 子句的优点:

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

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

  • CREATE DATABASE
  • CREATE TABLESPACE … DATAFILE
  • ALTER TABLESPACE … ADD DATAFILE

使用 ALTER DATABASE 命令可修改数据文件并启用自动扩展:

ALTER DATABASE DATAFILE 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

使用 SQL 命令 ALTER DATABASE 可对现有数据文件启用或禁用自动文件扩展:

ALTER DATABASE [database]

DATAFILE ‘filename'[, ‘filename’]… autoextend_clause

确定 AUTOEXTEND 已启用还是已禁用

查询 DBA_DATA_FILES 视图以确定是否启用了 AUTOEXTEND 并检查
AUTOEXTENSIBLE 列。

SQL> select tablespace_name, file_name, autoextensible 
 2 from dba_data_files;
TABLESPACE_NAME FILE_NAME AUTOEXTENSIBLE
--------------- ------------------------ --------------
SYSTEM	/home/dba01/ORADATA/u01/system01.dbf 	YES
DATA01 	/home/dba01/ORADATA/u04/data01.dbf 	NO
USERS 	/home/dba01/ORADATA/u03/users01.dbf 	NO
INDX 	/home/dba01/ORADATA/u06/indx01.dbf 	NO
SAMPLE 	/home/dba01/ORADATA/u02/sample01.dbf 	YES
DATA02 	/home/dba01/ORADATA/u03/data02.dbf 	NO
INDEX01 	/home/dba01/ORADATA/u06/index01.dbf 	YES
UNDO2 	/home/dba01/ORADATA/u01/UNDO2.dbf 	NO
8 rows selected.

 

手动调整数据文件的大小

  • 使用 ALTER DATABASE 可手动增加或减少数据文件
    的大小
  • 调整数据文件大小可在无需添加更多数据文件的情况
    下添加更多空间
  • 手动调整数据文件大小将回收数据库中的未用空间
  • 示例:
ALTER DATABASE
	DATAFILE '/u03/oradata/userdata02.dbf'
RESIZE 200M;

DBA 能够更改数据文件的大小,他们可以使用 ALTER DATABASE 命令手动增加或减少数据文件的大小,而不必通过添加数据文件来向数据库添加空间:

ALTER DATABASE [database]

DATAFILE ‘filename’[, ‘filename’]…

RESIZE integer[K|M]

其中: 

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

如果存储的数据库对象超过指定大小,那么数据文件大小只能减少到数据文件内最后一个对象的最后的块为止。

 

向表空间添加数据文件

  • 通过添加其它数据文件来增加分配给表空间的空间
  • 通过 ADD DATAFILE 子句可添加数据文件
  • 示例:
ALTER TABLESPACE user_data 
ADD DATAFILE '/u01/oradata/userdata03.dbf' 
SIZE 200M;

您可以通过 ALTER TABLESPACE ADD DATAFILE 命令,向表空间添加数据文件以增加分配给表空间的磁盘空间总量:

ALTER TABLESPACE tablespace

ADD DATAFILE    filespec [autoextend_clause]

 

 

移动数据文件的方法

  • ALTER TABLESPACE

表空间必须脱机

目标数据文件必须存在

ALTER TABLESPACE userdata RENAME DATAFILE ‘/u01/oradata/userdata01.dbf’ TO ‘/u02/oradata/userdata01.dbf’;

 

  • 重命名数据文件的步骤:

使表空间脱机。

使用操作系统命令移动或复制文件。

执行 ALTER TABLESPACE RENAME DATAFILE 命令。

使表空间联机。

必要时使用操作系统命令删除该文件。

 

 

根据表空间类型的不同,数据库管理员可使用以下两种方法之一来移动数据文件:

ALTER TABLESPACE 命令

下面显示了 ALTER TABLESPACE 命令,它仅适用于不含活动还原段或临时段的非 SYSTEM 表空间中的数据文件:

ALTER TABESPACE tablespace

RENAME DATAFILE ‘filename'[, ‘filename’]…

TO ‘filename'[, ‘filename’]…

源文件名必须与存储在控制文件内的名称匹配。

 

  • ALTER DATABASE

数据库必须已装载

目标数据文件必须存在

ALTER DATABASE RENAME  FILE ‘/u01/oradata/system01.dbf’ TO ‘/u03/oradata/system01.dbf’;

 

ALTER DATABASE 命令

ALTER DATABASE 命令可用来移动任意类型的数据文件:

ALTER DATABASE [database]

RENAME FILE ‘filename'[, ‘filename’]…

TO ‘filename'[, ‘filename’]…

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

使用如下进程重命名无法脱机的表空间内的文件:

  1. 关闭数据库。
  2. 使用操作系统命令移动文件。
  3. 装载数据库。
  4. 执行 ALTER DATABASE RENAME FILE 命令。
  5. 打开数据库。

 

删除表空间

  • 不能删除下列表空间:

SYSTEM 表空间

具有活动段的表空间

  • INCLUDING CONTENTS 将删除段
  • INCLUDING CONTENTS AND DATAFILES 将删除
    数据文件
  • CASCADE CONSTRAINTS 将删除所有引用完整性约束

DROP TABLESPACE userdata INCLUDING CONTENTS AND DATAFILES;

 

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

DROP TABLESPACE tablespace

[INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS]]

其中:

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

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

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

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

 

 

原则:

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

使用 OMF 管理表空间

 

  • 使用下列方法之一定义 DB_CREATE_FILE_DEST 参数:

初始化参数文件

使用 ALTER SYSTEM 命令动态设置

ALTER SYSTEM SET  db_create_file_dest = ‘/u01/oradata/dba01′;

 

  • 创建表空间时:

自动创建数据文件并存放在由 DB_CREATE_FILE_DEST
指定的目录下

缺省大小是 100 MB

AUTOEXTEND 设置为 UNLIMITED

 

配置 OMF 以创建表空间时,需指定一个初始化参数 DB_CREATE_FILE_DEST,这样就不再需要 DATAFILE 子句。所有数据文件都将自动创建,其位置由 B_CREATE_FILE_DEST 定义。数据文件名由 Oracle 服务器自动生成(如:ora_tbs1_2ixfh90q.dbf)。

 

创建 OMF 表空间

使用 OMF 创建表空间时无需使用 DATAFILE 子句。忽略 DATAFILE 子句的表空间的缺省设置是大小为 100M 的数据文件,并且该文件设置 AUTOEXTEND 且不受 MAXSIZE 限制。也可以选择指定文件大小。

CREATE TABLESPACE tablespace

[ DATAFILE [ filename ] [ SIZE integer [K|M] ] ];

OMF 表空间添加数据文件

可向现有表空间添加数据文件。使用 ADD DATAFILE 命令时不再需要文件说明。

动态更改缺省文件位置

应对 DB_CREATE_ONLINE_LOG_DEST_n 进行设置,以确保日志文件和控制文件与数据文件不在同一个目录下。可以通过 ALTER SYSTEM SET 命令对目标位置进行动态更改。

删除 OMF 表空间

对于利用 OMF 创建的表空间内的数据文件,当删除关联的表空间时,将在操作系统一级上删除这些文件。

 

获取表空间信息

通过以下查询可获取表空间和数据文件的信息:

  • 表空间:

DBA_TABLESPACES

V$TABLESPACE

  • 数据文件信息:

DBA_DATA_FILES

V$DATAFILE

  • 临时文件信息:

DBA_TEMP_FILES

V$TEMPFILE

Comment

*

沪ICP备14014813号

沪公网安备 31010802001379号