表空间的管理,Oracle表空间设置和治本浅析

前言

表空间是数据库的逻辑组织形式,在一个数据库中可以创建多个表空间。

表空间是 Oracle 特有的一种逻辑结构,是管理和组织 Oracle
数据文件一种方式,一个Oracle
数据库能够有一个或多个表空间,而一个表空间则对应一个或多个物理的数据库文件。Oracle
的表空间分为永久空间和临时表空间,同时又分为 smallfile tablespace和
bigfile tablespace。表空间管理是 Oracle dba的一项重要日常工作。

表空间的主要作用是将不同用途的数据分离开来,以提高数据的安全性,并提高系统的性能。
表空间在数据库中起着非常重要的作用。

今天小编就从永久表空间管理和临时表空间管理两个维度,详细介绍
Oracle表空间管理的具体操作。

一方面,表空间在逻辑结构上由多个段组成,数据都存储在表空间的段中,另一方面,表空间在物理结构上对应着多个数据文件,数据库对象中的数据最终存储在这些数据文件中。
表空间的类型较多,根据不同的分类标准,将得到不同的分类结果。

永久表空间管理

根据存储数据类型的不同,表空间可分为系统表空间、UNDO表空间、临时表空间和用户表空间。
根据存储空间方式的不同,表空间可分为字典管理表空间和本地管理表空间。
根据是否支持大文件来划分,表空间可分为大文件表空间和小文件表空间。
表空间的管理主要涉及各种类型表空间的创建、删除、扩展、修改状态等。

1.1 创建表空间

表空间的结构

参数说明:

一个表空间由多个段组成,每个段可能代表一个数据库对象。

EXTENT MANAGEMENT LOCAL AUTOALLOCATE:区大小由系统自动分配。 BLOCKSIZE
8K:块大小为8K。 SEGMENT SPACE MANAGEMENT AUTO:段管理是自动的。
FLASHBACK ON:开启闪回。

当用户创建表、索引、簇等数据库对象时,在表空间中将自动创建一个段,以存储该对象的数据。
一个段占用一个或多个区,当区的空间被写满后,段就会自动扩展。
在创建表空间时就需要指定区的分配方式

1.2 修改表空间

区管理方式

1、修改数据文件大小

区管理方式指的是为一个数据库对象分配存储空间的方式,在创建表空间时需要指定区管理方式。
Oracle支持两种区管理方式,字典管理和本地管理
在创建字典管理的表空间时,需要指定若干存储参数,以后在这个表空间中创建数据库对象时,就按照这些存储参数为数据库对象分配所需要的区,当这些区被写满后,数据库服务器将按照存储参数为数据库对象分配新的区。
表空间的存储参数记录在数据字典中。
在创建字典管理的表空间时,可以指定以下几个存储参数:
INITIAL(初始)
:指定第一个区的大小,即首先要为数据库对象分配的区的大小。
NEXT :指定下一个区的大小。
MINEXTENTS :为数据库对象分配的最少区的个数,默认值为1。
MAXEXTENTS : 最多为数据库对象分配的区个数。
PCTINCREASE
:从第三个区开始,每一个区在前一个区的基础上增长的百分比。
在字典管理表空间中,区的分配和回收都是基于数据字典进行的。

SQL ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/TSH1/users01.dbf'RESIZE 10M;

当为数据库对象分配区时,需要从数据字典中查询存储参数,分配结束后,需要把分配的结果写入数据字典。
这样要在数据字典上执行很多的查询操作和DML操作,并且产生重做日志和回滚数据。
另外,由于数据库对象中的区大小不同,随着数据库服务器的运行,在段中将产生越来越的存储碎片

2、增加表空间数据文件

在本地管理表空间中,区的大小都是相同的。

ALTER TABLESPACE USERS ADD DATAFILE '/u01/app/oracle/oradata/TSH1/users02.dbf' SIZE 20M AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED;

在创建表空间时,可以通过参数指定统一的区大小,或者由数据库服务器根据实际情况自动指定区的大小。
与字典管理方式相比,本地管理方式有以下优点:
·区的分配和回收不再基于数据字典,从而避免了对数据字典的递归访问,也不会产生重做日志和回滚数据。
·所有区的大小都相同,这就减少了存储空间中的存储碎片。
·不需要合并表空间中的存储碎片,数据库服务器自动监视存储空间的使用情况,并合并相邻的空闲存储空间。
Oracle建议大家使用本地管理表空间。

注:日常工作中建议通过增加数据文件的方式给表空间扩容,因为对于在线业务系统来说,通过修改数据文件大小的方式,对业务会产生一定的影响。

在Oracle
11g的数据库中创建的表空间默认就是本地管理的,如SYSTEM表空间目前是字典管理的,可以通过下面的方式,调用PL/SQL程序包中的存储过程,把它转化为本地管理表空间:

1.3 重命名表空间

EXECUTE DBMS_SPACE_ADMIN.tablespace_migrate_to_local(‘SYSTEM’);

1) 设置表空间脱机

段管理方式

SQL ALTER TABLESPACE USERS OFFLINE NORMAL;

当用户向表中写入数据时,这些数据被写入表段中的空闲数据块中,服务器进程查找表中的空闲数据块,然后将数据写入数据块,最后还要修改数据块的状态
对于段空间管理,Oracle提供了两种方式,一种是手工管理,另一种是自动管理
手工管理段空间的方式是这样实现的:在每个头部都有一段保留空间,在保留空间中维护一个空闲列表,在这个列表中记录当前段中所有的空闲块
当用户向表中写数据时,服务器进程在这个空闲列表中查找足够数量的空闲块,将数据写入这些块。
如果一个块已经被写满了,这个块就从空闲列表中被删除
在查找空闲块的过程中为防止其他服务器进程使用同样的空闲块,服务器进程将对空闲列表加锁,只有空闲列表上的锁被释放后,其他服务器进程才可以在空闲列表中查找空闲块。
如果用户在某个表上的事务很频繁,那么空闲列表将成为延缓事务执行的瓶颈。
自动管理方式是Oracle 11g数据库默认采用的段管理方式。

2)
用一个操作系统实用程序重新命名此文件如UNIX的cp或mv,或者windows的copy命令

这种管理方式是这样实现的:在每个段的头部有一个位图,在位图中记录当前段中每个数据块的状态用二进制数0和1表示数据块的状态,每个数据块在位图中只占一位
使用位图的好处首先是节省空间,其次,当用户向表中写入数据时,服务器进程只要扫描位图就可以查找空闲数据块,而且不需要对位图加锁
在创建表空间时,需要为表空间指定段空间管理方式。

$cp /u01/app/oracle/test01.dbf /u02/app/oracle/test01.dbf

数据文件

3) 在数据文件在线之前使用以下命令重命名数据库中的数据文件

表空间中的所有数据都是以数据文件的形式存储在磁盘上的。

SQL ALTER TABLESPACE USERS RENAME DATAFILE'/u01/app/oracle/oradata/TSH1/users01.dbf'TO'/u02/app/oracle/oradata/TSH1/users01.dbf'

一个表空间包含一个或多个数据文件。
在创建表空间时,至少要为表空间指定一个数据文件。
如果表空间只包含一个数据文件,那么表空间中的数据将全部存储在这个数据文件中。

4)设置表空间online

如果表空间中包含多个文件,表空间中的数据将以区为单位分布在各个数据文件中。
假设某个表空间中有三个数据文件,那么在该表空间中创建一个表时,表中的第一、四、七……个区将位于第一个数据文件,第二、五、八、……个区将位于第二个数据文件中,依此类推。

SQL ALTER TABLESPACE USERS ONLINE ;

如果将数据文件存放在不同的磁盘上,那么用户在访问表空间中的数据时,可以同时读写多个数据文件,从而减少了磁盘读写的冲突次数。
当表空间中的存储空间被消耗完时,用户将无法再写入数据。

1.4 设置表空间只读

数据库管理员必须扩展表空间,为其分配新的存储空间。
可以向表空间中增加新的数据文件,也可以手工扩展现有的数据文件,还可以激活数据文件的自动扩展功能,使它能够自动扩展。

1) 设置表空间只读

本地管理表空间的管理

SQL ALTER TABLESPACE USERS READ ONLY;

本地管理表空间是Oracle 11g 中的默认表空间类型。

2) 设置表空间再次可写

对这种表空间的管理主要涉及创建、删除、修改等操作。

SQL ALTER TABLESPACE USERS READ WRITE;

本地管理表空间的创建

1.5 设置表空间脱机、联机

创建表空间的任务一般由SYS
用户完成,普通用户如果希望执行这样的操作,需要具有
CREATE TABLESPACE 系统权限。
在创建表空间时,需要指定表空间的区管理方式、段管理方式以及表空间所包含的数据文件。
在Oracle 11g 中,表空间的默认区管理方式是本地管理( LOCAL )。

1)设置表空间脱机

例如,通过以下语句创建本地管理表空间ts1 :

SQL ALTER TABLESPACE USERS OFFLINE NORMAL;

CREATE TABLESPACE ts1
DATAFILE ‘C:UsersjohnDesktoptbsts1_1.dbf’ SIZE 1M
EXTENT MANAGEMENT local
SEGMENT SPACE MANAGEMENT auto;

2)设置表空间联机

注意:DATAFILE实际SIZE 并不是1M,因为EXTENT的大小是数据块的整数倍。

SQL ALTER TABLESPACE USERS ONLINE;

在上面的语句中, EXTENT MANAGEMENT
LOCAL用于指定表空间的区管理方式为本地管理,这是可以省略的,因为表空间默认的区管理方式就是本地管理。
但是如果在CREATE语句中指定了AUTOALLOCATE或者UNIFORM SIZE ,那么EXTENT
MANAGEMENT LOCAL是不能省略的

AUTOALLOCATE表示这个表空间中的区大小由数据库服务器根据实际情况自动指定,默认为64KB

如果在这个表空间中创建可变大小的数据库对象,而且这个对象需要大小不同的区,那么AUTOALLOCATE是一种很好的选择。
如果希望控制表空间中区的使用,则通过UNIFORM SIZE指定统一的区大小。
SEGMENT SPACE
MANAGEMENT用于指定表空间中段空间的管理方式,目前有两种可选方式,即AUTO
MANUAL
AUTO
使用位图的方式跟踪段中每个数据块的状态,而MANUAL方式是通过空闲列表来记录每个段中的空闲块的。
由于AUTO使段空间管理更加高效,所以Oracle建议为表空间指定这种段管理方式,而且这也是默认方式。

1.6 删除表空间

DATAFILE用于指定表空间所包含的数据文件及其大小,一个表空间包含一个或多个数据文件。
在UNIX/Linux系统中,为了在某个目录下创建数据文件,需要保证操作系统中的oracle用户对该目录具有写权限。

SQL DROP TABLESPACE USERS INCLUDING CONTENTS AND DATAFILES;

下面的语句用于创建表空间TS2 ,表空间中区的统一大小为256KB 。

1.7 修改表空间为默认永久表空间

如果没有通过SIZE子句指定大小,则采用默认值1MB 。

1)修改表空间为默认永久表空间

CREATE TABLESPACE ts2
DATAFILE ‘C:UsersjohnDesktoptbsts2_2.dbf’ SIZE 1M
EXTENT MANAGEMENT local UNIFORM SIZE 256K
SEGMENT SPACE MANAGEMENT auto;

SQLALTER DATABASE DEFAULT TABLESPACE users;

数据库中的数据块大小通过初始化参数DB_BLOCK_SIZE指定,通过这个参数指定的数据块称为标准块。
表空间中的数据块默认也采用标准块大小

2)查询当前数据库默认的永久表空间

如果希望在数据库中定义其他大小的非标准块,那么在创建表空间时需要指定它所采用的数据块大小。
例如,通过下面的语句创建的表空间具有2KB 的数据块:

SQLSELECT property_value from database_properties where property_name='DEFAULT_PERMANENT_TABLESPACE';

CREATE TABLESPACE ts3
DATAFILE ‘C:UsersjohnDesktoptbsts3_3.dbf’ SIZE 1M,
‘C:Usersjohn北京pk赛车官网下载,Desktoptbsts3_4.dbf’ SIZE 1M
BLOCKSIZE 2K;

临时表空间管理

非标准块中的数据是不能被读到一般的数据库高速缓存中的。

2.1 创建临时表空间

为了能够访问这种表空间中的数据,在创建表空间之前,需要通过初始化参数DB_nK_CACHE_SIZE在内存中为非标准块定义相应的数据库高速缓存,缓存也是由许多缓冲区组成,缓冲区的大小与非标准块大小相同。
例如:

SQL CREATE TEMPORARY TABLESPACE TEMP TEMPFILE '/u01/app/oracle/oradata/TSH1/temp01.dbf' SIZE 31M AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITEDEXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

ALTER SYSTEM SET db_2k_cache_size=48M;

参数说明:

表空间信息的查询

EXTENT MANAGEMENT LOCAL UNIFORM SIZE
1M:区管理为本地管理,且区大小为1M。

与表空间有关的相关信息可以从数据字典中获得,与表空间有关的数据字典视图有两个,dba_tablespaces和dba_data_files
从数据字典dba_tablespaces 中可以获得表空间的基本信息

2.2 修改临时表空间

下面是有关数据字典视图dba_tablespaces的信息:

SQL ALTER DATABASE TEMPFILE '/u01/app/oracle/oradata/TSH1/temp01.dbf'RESIZE 60M;

DBA_TABLESPACES describes all tablespaces in the database.

2.3 删除临时表空间

Related View

SQL DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;

USER_TABLESPACES describes the tablespaces accessible to the current
user. This view does not display the PLUGGED_IN column.

2.4 临时表空间组管理

Column Datatype NULL Description

TABLESPACE_NAME

VARCHAR2(30)

NOT NULL

Name of the tablespace

BLOCK_SIZE

NUMBER

NOT NULL

Tablespace block size (in bytes)

INITIAL_EXTENT

NUMBER

 

Default initial extent size (in bytes)

NEXT_EXTENT

NUMBER

 

Default incremental extent size (in bytes)

MIN_EXTENTS

NUMBER

NOT NULL

Default minimum number of extents

MAX_EXTENTS

NUMBER

 

Default maximum number of extents

MAX_SIZE

NUMBER

 

Default maximum size of segments (in Oracle blocks)

PCT_INCREASE

NUMBER

 

Default percent increase for extent size

MIN_EXTLEN

NUMBER

 

Minimum extent size for this tablespace (in bytes)

STATUS

VARCHAR2(9)

 

Tablespace status:

  • ONLINE

  • OFFLINE

  • READ ONLY

CONTENTS

VARCHAR2(9)

 

Tablespace contents:

  • UNDO

  • PERMANENT

  • TEMPORARY

LOGGING

VARCHAR2(9)

 

Default logging attribute:

  • LOGGING

  • NOLOGGING

FORCE_LOGGING

VARCHAR2(3)

 

Indicates whether the tablespace is under force logging mode (YES) or not (NO)

EXTENT_MANAGEMENT

VARCHAR2(10)

 

Indicates whether the extents in the tablespace are dictionary managed (DICTIONARY) or locally managed (LOCAL)

ALLOCATION_TYPE

VARCHAR2(9)

 

Type of extent allocation in effect for the tablespace:

  • SYSTEM

  • UNIFORM

  • USER

PLUGGED_IN

VARCHAR2(3)

 

Indicates whether the tablespace is plugged in (YES) or not (NO)

SEGMENT_SPACE_MANAGEMENT

VARCHAR2(6)

 

Indicates whether the free and used segment space in the tablespace is managed using free lists (MANUAL) or bitmaps (AUTO)

DEF_TAB_COMPRESSION

VARCHAR2(8)

 

Indicates whether default table compression is enabled (ENABLED) or not (DISABLED)

Note: Enabling default table compression indicates that all tables in the tablespace will be created with table compression enabled unless otherwise specified.

RETENTION

VARCHAR2(11)

 

Undo tablespace retention:

  • GUARANTEE – Tablespace is an undo tablespace withRETENTION specified as GUARANTEE

    RETENTION value of GUARANTEE indicates that unexpired undo in all undo segments in the undo tablespace should be retained even if it means that forward going operations that need to generate undo in those segments fail.

  • NOGUARANTEE – Tablespace is an undo tablespace with RETENTION specified as NOGUARANTEE

  • NOT APPLY – Tablespace is not an undo tablespace

BIGFILE

VARCHAR2(3)

 

Indicates whether the tablespace is a bigfile tablespace (YES) or a smallfile tablespace (NO)

PREDICATE_EVALUATION

VARCHAR2(7)

 

Indicates whether predicates are evaluated by host (HOST) or by storage (STORAGE)

ENCRYPTED

VARCHAR2(3)

 

Indicates whether the tablespace is encrypted (YES) or not (NO)

COMPRESS_FOR

VARCHAR2(30)

 

Default compression for what kind of operations:

  • BASIC

  • ADVANCED

  • QUERY LOW

  • QUERY HIGH

  • ARCHIVE LOW1

  • ARCHIVE HIGH1

  • NULL

DEF_INMEMORY

VARCHAR2(8)

 

Indicates whether the In-Memory Column Store (IM column store) is by default enabled (ENABLED) or disabled (DISABLED) for tables in this tablespace

DEF_INMEMORY_PRIORITY2

VARCHAR2(8)

 

Indicates the default priority for In-Memory Column Store (IM column store) population for this tablespace. Possible values:

  • LOW

  • MEDIUM

  • HIGH

  • CRITICAL

  • NONE

  • NULL

DEF_INMEMORY_DISTRIBUTE2

VARCHAR2(15)

 

Indicates how the IM column store is distributed by default for this tablespace in an Oracle Real Application Clusters (Oracle RACE) environment:

  • AUTO

  • BY ROWID RANGE

  • BY PARTITION

  • BY SUBPARTITION

DEF_INMEMORY_COMPRESSION2

VARCHAR2(17)

 

Indicates the default compression level for the IM column store for this tablespace:

  • NO MEMCOMPRESS

  • FOR DML

  • FOR QUERY [ LOW | HIGH ]

  • FOR CAPACITY [ LOW | HIGH ]

  • NULL

DEF_INMEMORY_DUPLICATE2

VARCHAR2(13)

 

Indicates the duplicate setting for the IM column store in an Oracle RAC environment:

  • NO DUPLICATE

  • DUPLICATE

  • DUPLICATE ALL

2.4.1 创建临时表空间组

例如,通过下面的SELECT语句可以获得表空间的名称、区管理方式、段管理方式、内容类型、状态等信息:

SQL CREATE TEMPORARY TABLESPACE TEMP TEMPFILE '/u01/app/oracle/oradata/TSH1/temp01.dbf' SIZE 31M AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITEDTABLESPACE GROUP tmpgrp1;

SELECT tablespace_name, extent_management, segment_space_management,
contents, status FROM dba_tablespaces;

说明:

数据字典dba_data_fies可以获得表空间中数据文件的信息,如文件名称、大小(以MB
为单位)、状态等信息。

增加一个名为tmpgrp1的临时表空间组。

下面是有关数据字典dba_data_fies的信息:

2.4.2 给临时表空间组增加表空间

DBA_DATA_FILES describes database files.

SQL ALTER TABLESPACE temp02 TABLESPACE GROUP tmpgrp2;
Column Datatype NULL Description

FILE_NAME

VARCHAR2(513)

 

Name of the database file

FILE_ID

NUMBER

 

File identifier number of the database file

TABLESPACE_NAME

VARCHAR2(30)

 

Name of the tablespace to which the file belongs

BYTES

NUMBER

 

Size of the file in bytes

BLOCKS

NUMBER

 

Size of the file in Oracle blocks

STATUS

VARCHAR2(9)

 

File status: AVAILABLE or INVALID (INVALID means that the file number is not in use, for example, a file in a tablespace that was dropped)

RELATIVE_FNO

NUMBER

 

Relative(相对的) file number

AUTOEXTENSIBLE

VARCHAR2(3)

 

Autoextensible indicator(指示符)

MAXBYTES

NUMBER

 

Maximum file size in bytes

MAXBLOCKS

NUMBER

 

Maximum file size in blocks

INCREMENT_BY

NUMBER

 

Number of Oracle blocks used as autoextension increment

USER_BYTES

NUMBER

 

The size of the file available for user data. The actual size of the file minus the USER_BYTES value is used to store file related metadata.

USER_BLOCKS

NUMBER

 

Number of blocks which can be used by the data

ONLINE_STATUS

VARCHAR2(7)

 

Online status of the file:

  • SYSOFF

  • SYSTEM

  • OFFLINE

  • ONLINE

  • RECOVER

2.4.3 将一个组设置为默认临时表空间

例如:

SQL ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tmpgrp1;

SELECT file_name, bytes/1024/1024 MB, status FROM dba_data_files
WHERE tablespace_name=’TS1′;

表空间管理涉及的视图

表空间的删除

为了管理ORACLE数据库的表空间,要熟悉几个关键的字典视图:

当一个表空间不再需要时,可以将其从数据库中删除。

DBADATAFILES DBA_TABLESPACES DBAFREESPACE DBA_SEGMENTS

删除表空间的操作一般由SYS用户完成,普通用户如果希望执行这样的操作,需要具有DROP
TABLESPACE系统权限。
删除表空间的命令格式为:

总结

DROP TABLESPACE 表空间名;

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

例如,下面的命令用于删除表空间ts3:

DROP TABLESPACE ts3;

需要注意的是,如果用户已经在这个表空间中创建了表、索引的数据库对象,这个表空间是不能被直接删除的,需要先把表空间中的所有数据库对象删除
例如,下面的DROP语句用于删除表空间以及其中的数据库对象:

DROP TABLESPACE ts2 INCLUDING CONTENTS;

表空间虽然被删除了,但是表空间所包含的数据文件并没有被删除,还占用磁盘上的存储空间,这些文件需要通过手工方式删除
在有些情况下,手工删除数据文件可能不太容易,如在裸设备中或ASM磁盘组中。
下面的DROP语句用于删除表空间以及其中的数据库对象和对应的数据文件:

DROP TABLESPACE ts1 INCLUDING CONTENTS AND DATAFILES;

大文件表空间的管理

大文件( BigFile
)表空间是一种特殊类型的表空间,在每个大文件表空间中只包含一个数据文件,但这个数据文件的大小可以达到4GB
个数据块。

使用大文件表空间的最大好处是可以大大扩展数据库的容量。

假设数据块的大小为8KB,那么一个数据文件的大小就可以达到8KB (
4GB=32TB。另外,使用大文件表空间可以大大减少数据文件的数目,因为一个表空间只有一个数据文件。
Oracle推出大文件表空间的主要目的是支持自动存储管理( ASM )和RAID
、条带状逻辑卷,这些技术结合起来,为数据库提供大容量的、对用户透明的存储空间。

需要注意的是,大文件表空间的区管理方式只能是本地管理,段管理方式只能是自动管理。
UNDO表空间、临时表空间和SYSTEM表空间属于例外情况,如果把它们指定为大文件表空间,它们的区管理方式只能是本地管理,但是段管理方式可以是自动管理或手工管理

大文件表空间的支持

在默认情况下,数据库中表空间的类型为小文件( SmallFile
)表空间,如果要创建大文件表空间,则需要通过关键字BIGFILE指定。
在创建数据库时,可以将默认的表空间类型指定为大文件表空间,这样以后在数据库中创建的表主间默认都属于大文件表空间。
在创建数据库的CREATE DATABASE命令中,如果使用了SET DEFAULT
BIGFILE TABLESPACE子句,那么表空间的默认类型将为大文件表空间。

如果使用了SET DEFAULT SMALLFILE
TABLESPACE子句,或者这两条子句都没有使用,那么表空间的默认类型将为小文件表空间。

例如,以下语句在创建数据库时指定表空间的默认类型为大文件表空间:
CREATE DATABASE test
SET DEFAULT BIGFILE TABLESPACE

在数据库的运行过程中,数据库管理员也可以动态修改表空间的默认类型,修改以后的表空间类型对以后创建的所有表空间起作用。**
例如:
ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE;
ALTER DATABASE SET DEFAULT SMALLFILE TABLESPACE;
从数据字典视图database_properties
中可以获得数据库的属性,包括默认的表空间类型。**
例如:
SELECT property_value, description FROM database_properties WHERE
property_name=UPPER(‘default_tbs_type’);

大文件表空间的删除方法与普通表空间相同。

大文件表空间的创建

在数据库的运行过程中,数据库管理员可以创建一个大文件表空间。

这个表空间的区管理方式为本地管理,段管理方式为自动管理,在创建表空间的语句中可以不指定这些信息。
在创建大文件表空间的语句中,只能指定一个数据文件。
例如:
CREATE BIGFILE TABLESPACE ts1 DATAFILE
‘C:UsersjohnDesktoptbsts1.dbf’ SIZE 1M;
如果数据库中表空间的默认类型已经是大文件表空间,那么在创建大文件表空间的语句中可以省略BIGFILE关键字。
但如果要创建一个小文件表空间,则必须在CREATE
TABLESPACE语句中使用SMALLFILE关键字,反之亦然。

大文件表空间的修改

修改大文件表空间的操作涉及两个方面的内容:重新指定数据文件的大小以及修改数据文件的自动扩展属性
由于大文件表空间只有一个数据文件,所以在修改时不需要指定数据文件的信息。
例如,下面的语句用来把数据文件TS1.DBF的大小改为2M:
ALTER TABLESPACE ts1 RESIZE 2M;
下面的语句用于修改数据文件的自动扩展属性
ALTER TABLESPACE ts1 AUTOEXTEND ON NEXT 1M MAXSIZE 5M;

临时表空间的管理

临时表空间用于存储临时数据。

当用户执行排序创建索引这样的操作时,将产生大量的中间结果,这些临时数据将首先存储在PGA的排序区中。
当排序区的大小不足以容纳这些数据时,将用到临时表空间。

如果没有为用户指定临时表空间,那么用户在执行排序操作时将把SYSTEM表空间作为临时表空间,并在SYSTEM表空间中创建临时段,以存储临时数据。
由于用户的排序操作会在SYSTEM表空间中频繁地产生临时段释放临时段,这样在SYSTEM表空间中将产生大量的存储空间碎片,从而降低数据库的性能。
Oracle建议在数据库中创建专门的临时表空间,并为用户指定一个临时表空间
在临时表空间中只能创建临时段,而不能创建数据段、索引段等永久性的段。

在数据库中第一次执行排序操作时,临时段自动创建,在数据库关闭时临时段被删除
这些临时段为所有用户所共享

临时表空间的创建

就像创建普通表空间一样,在创建临时表空间时需要指定区管理方式、段管理方式、区的大小等信息,也可以创建大文件临时表空间
创建表空间时需要指定关键字TEMPORARY
例如,以下语句用来创建本地管理临时表空间tts1:

CREATE TEMPORARY TABLESPACE tts1
TEMPFILE ‘C:UsersjohnDesktoptbstts1_1.dbf’ SIZE 1M
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 128K;

在创建本地管理临时表空间时,首先要用关键字TEMPORARY指定表空间的类型为临时性的,其次,要通过TEMPFILE子句指定表空间的数据文件,而不是使用DATAFFILE子句。
另外,只能通过UNIFORM子句为临时表空间指定的区大小,而不能使用AUTOALLOCATE子句。
在创建临时表空间时,
Oracle建议将临时表空间的大小设置为排序区的整数倍,以减少存储空间的碎片,使数据库获得最佳性能。
排序区的大小通过初始化参数SORT_AREA_SIZE来确定
临时表空间的作用仅限于存储临时数据,因而与普通表空间相比它有一些特殊的地方。

从数据字典视图dba_tablespaces 中查询临时表空间的信息时,发现LOGGING
列的值为NOLOGGING
,这就意味着对临时空间中的数据所做的任何修改都不会产生重做日志
用户执行排序等操作时,临时文件中的数据是不断变化的,因而临时文件的访问权限不能为只读方式。
另外,还需要注意的是,临时表空间中的数据文件的信息是从数据字典视图dba_temp_files
中获得的

在创建数据库时,默认就创建了一个临时表空间,它就作为数据库的默认临时表空间。

如果更改数据库的临时表空间,可以执行下面的ALTER语句:

 ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tts1;

临时表空间组

在数据库中只有一个默认临时表空间,所有用户都是用这个临时表空间。

如果在数据库中有大量的排序、创建索引,或者以并发方式向表中写入大量数据,这时可以创建多个临时表空间,为每个用户指定不同的临时表空间,每个用户都使用自己的临时表空间,这样做的好处是可以将磁盘I/O分布在不同的磁盘上,减少了磁盘I/O的冲突,从总体上可以提高数据库的性能
例如,下面的ALTER为用户指定临时表空间:

ALTER USER scott TEMPORARY TABLESPACE tts1;

由于不同用户对数据库的访问是不同的,因而对这些临时表空间的使用频率也是不同的。
如果能使所有用户平均地使用数据库中的多个临时表空间,就能进一步提高数据库的性能。

临时表空间组是解决这个问题的最佳途径。
临时表空间组是一组临时表空间的逻辑集合,当为用户指定临时表空间组时,用户可以平均地使用其中的所有临时表空间。
临时表空间组不需要创建,只要在创建或修改临时表空间时为临时表空间组指定一个名称即可。
例如:

ALTER TABLESPACE tts1 TABLESPACE GROUP group1;

CREATE TEMPORARY TABLESPACE tts3 TEMPFILE
‘C:UsersjohnDesktoptbstts3_1.dbf’ SIZE 2M TABLESPACE GROUP
group1;

然后将这个临时表空间组作为数据库的默认临时表空间,或者作为某个用户的默认临时表空间。
例如:

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE group1;

从临时表空间组中删除临时表空间的操作也很简单,只要为临时表空间指定一个空的临时表空间组即可。
临时表空间虽然在逻辑上不再属于任何临时表空间组,但它在数据库中依然存在,还可以作为数据库或者某个用户的默认临时表空间。
下面的语句用于将临时表空间TTS1从临时表空间组中删除。

ALTER TABLESPACE tts1 TABLESPACE GROUP ”;

临时表空间组的信息可以从数据字典视图dba_tablespace_groups 中获得。

例如,下面的语句用于查询一个临时表空间组中所包含的临时表空间:

SELECT tablespace_name FROM dba_tablespace_groups WHERE
group_name=’GROUP1′;

UNDO表空间的管理

当用户在数据库中执行INSERT 、DELETE
、UPDATE等DML操作时,相关的命令集合组成一个事务。
在事务提交之前,用户还有机会回滚事务。

事务回滚之后对数据库所作的修改将被取消,就好像没有发生任何事情一样。
回滚事务的结果是将被修改的数据还原为原状,也就是将回滚数据重新写回原来的地方。
回滚数据也称为UNDO数据,是事务执行以前的数据,这些数据被存储在回滚段中。

当用户提交事务时,回滚数据就失去了存在的意义。
而当用户回滚事务时,数据库服务器将回滚数据从回滚段重新写入数据段,于是数据被恢复为原状。
回滚数据对于维护数据的一致性有非常重要的意义

例如,某个用户要在两个银行账号之间转账,数据库先在第一个账户上减去转账的金额,然后在第二个账户上加上相同的金额。
这两步操作就构成一个事务,作为一整体来执行。
假设在第一步刚执行完时,系统突然断电,结果会怎样呢?

两个账户上的金额就对不上了。

Oracle能够很好地解决这个问题。

当数据服务器重新启动时,这个未提交的事务将被回滚,数据库服务器将回滚数据写入原来的位置,于是这次转账以失败告终,这样就保证了两个银行账户之间不会出现收支不平衡的现象。
回滚数据被存储在数据库中一段特殊的存储区域中。

在Oracle 11 g
中,有两种管理回滚数据的方式,一种是自动方式,这种方式利用专门的UNDO表空间管理UNDO数据。
第二种方法利用回滚段管理UNDO数据,这种方式称为手工方式。
在一个数据库中我们只能选择使用其中一种方式。
手工方式即回滚段方式,是以前的Oracle版本使用的传统方式,这种方式的管理相当复杂,需要数据管理员做大量的工作,如确定回滚段的数量和大小,指定可用的回滚段等。
如果回滚段的数量太少,或者空间太小,用户的事务可能被延缓执行,这时管理员需要回滚段进行手工扩展。
自动方式利用专门的UNDO表空间来管理回滚数据。

如果创建了UNDO表空间,数据库服务器将自动使用UNDO表空间来管理回滚数据,整个过程不需要人工干预,从而大大减轻了管理员的负担。
如果将UNDO表空间设置为可自动扩展,那么当用户的事务太多时,数据库服务器可以根据需要对UNDO表空间进行扩展。
Oracle建议采用自动管理方式。
实际上自动方式也是利用回滚段来管理回滚数据的,回滚段包含在专门的UNDO表空间中,只不过回滚段不需要数据库管理员管理,而是由数据库服务器根据需要自动建立和删除的。
在创建数据库时,将自动创建一个UNDO表空间,表空间的名称为UNDOTBS。

在自动管理方式下,如果没有建立UNDO表空间,数据库服务器将利用SYSTEM表空间中的回滚段管理回滚数据。
虽然数据库服务器也能运行,但这属于一种异常情况,将产生一条警告信息,而且这种情况将导致在SYSTEM
表空间中产生大量存储碎片。

因此, Oracle 强烈建议创建一个UNDO表空间。

UNDO表空间的创建

有两种创建UNDO表空间的方式,一种是在创建数据库的同时创建UNDO表空间,另一种方式是在数据库运行过程中,通过CREATE
UNDO TABLESPACE命令来创建。

创建数据库时,在默认情况下,将自动创建UNDO表空间UNDOTBS1。

通过CREATE命令创建UNDO表空间的命令语也与普通表空间类似,主要的区别在于使用了“
UNDOTABLESPACE”子句。
例如,以下语句用来创建大文件UNDO表空间UNDOTBS2:

CREATE UNDO TABLESPACE undotbs2 DATAFILE
‘C:UsersjohnDesktoptbstbs2_1.dbf’ SIZE 1M REUSE EXTENT
MANAGEMENT LOCAL;

UNDO表空间的切换

数据库服务器可以采用自动方式,也可以采用手工方式管理回滚数据,这取决于初始化参数UNDO_MANAGEMENT
的设置。
如果参数值为AUTO
,则采用自动方式,如果设置为MANUAL ,则采用手工方式。

如果希望从一种方式切换到另一种方式,需要修改初始化参数UNDO_MANAGEMENT的值。

与回滚数据的管理方式有关的初始化参数还有以下几个:
•UNDO_TABLESPACE 用来指定一个可用的UNDO表空间。

这个表空间必须存在。

如果采用手工方式,这个参数的设置无效。
在数据库服务器运行的过程中,这个参数的值可以动态修改。
• UNDO_RETENTION(保留)
指定已经无效的UNDO数据在UNDO表空间中可以保留的时间,默认为900秒。
这个参数的值也可以动态修改。
UNDO表空间在创建之后,为了保证用户能够使用这个表空间首先必须将数据库UNDO管理方式设置为自动管理方式,即确保初始化参数UNDO_MANAGENT的值为AUTO

另外,还需要将初始化参数UNDO_TABLESPACE的值设置为新创建的UNDO表空间。
例如:
ALTER SYSTEM SET UNDO_MANAGEMENT=auto scope=spfile;
ALTER SYSTEM SET UNDO_TABLESPACE=undotbs3;
初始化参数UNDO_MANAGEMENT的值需要在参数文件中修改,并且只有在数据服务器重新启动之后才能起作用。
而初始化参数UNDO_TABLESPACE的值可以在参数文件中修改,也可以动态修改。
在切换UNDO表空间时,如果指定的UNDO表空间不存在,或者指定的表空间不是UNDO表空间,或者有另一个实例正在使用这个表空间,切换操作将无法正常进行。
在切换UNDO表空间之后,新的事务将使用切换后的UNDO表空间。

但是原来的UNDO表空间不会马上失去作用,如果一个事务开始于切换表空间之前,并一直持续到切换之后,那么它还将继续使用原来的表空间,这样原来的UNDO表空间需要一直等待在其中运行的事务都结束后才能失去作用。
UNDO表空间的扩展和删除方法与普通表空间相同

表空间的扩展

在创建表空间时,需要表空间中的数据文件及其大小,表空间中的数据就写在这些数据文件中。
如果数据文件的空间被写满,新的数据将无法写入,用户的事务可能无法顺利执行。

在创建表空间或扩展表空间时应该根据以下原则l指定数据文件:
·尽量使用少量的大文件,而不要使用大量的小文件。
·同一个表空间的不同数据文件应该存放在不同的磁盘上。
·应该将数据文件和重做日志文件分别存放在不同的磁盘上。
在数据库中能够容纳的数据文件数目是有限的,文件数目越多,在打开文件时就需要越多的内存空间。
数据文件的数目受两个因素的制约,一是在创建数据库时指定的MAXDATAFILES永久参数,二是初始化参数DB_FILES

MAXDATAFILES
永久参数指定了一个最大数据文件数目,这个数目将被记录在控制文件中

当使用CREATE DATABASE命令创建数据库,或者执行CREATE
CONTROLFILES命令创建控制文件时,都可以通过这个参数指定数据文件的最大数量。

然而如果实际的数据文件数目超过指定的数目时,数据库服务器将扩展控制文件,以记录更多的数据文件。

初始化参数DB_FILES指定在数据库中可以创建的数据文件的最大数目

当实际的数据文件数目达到这个数目时,将无法创建或添加新的数据文件。
但是初始化参数DB_FILES 的值是可以修改的。
在参数文件中为这个参数指定新值,然后重新启动数据库服务器,新的参数值将起作用。
DB_FILES
的值并不是越大越好,大的参数值固然允许你创建更多的数据文件,也将消耗更多的内存空间。
将数据文件存放在不同的磁盘上,并将其与重作日志文件分开存放,这种做法的目的是将磁盘的读写操作分散在各个磁盘上,从而减少磁盘的I/O
冲突。
扩展表空间的方法有两种,一种是向表空间中添加新的数据文件,另一种方法是扩展现有的数据文件。
扩展数据文件又可以分为两种方法,一种是允许数据文件自动扩展,另一种方法是手工扩展数据文件。

如何添加新的数据文件

在向表空间中添加数据文件时,通过ADD子句指定数据文件的路径和大小。例如:

ALTER TABLESPACE ts2 ADD DATAFILE
‘C:UsersjohnDesktoptbsts2_1.dbf’ SIZE 1M REUSE;

在添加数据文件时,通过SIZE关键字指定文件的大小。

如果在指定的位置已经存在一个同名的数据文件,可通过使用REUSE关键字将其覆盖。
如果要向表空间中添加多个数据文件,由DATAFILE关键字引导多个文件,每个文件分别指定路径和大小。
例如:

ALTER TABLESPACE ts2 ADD DATAFILE
‘C:UsersjohnDesktoptbsts2_3.dbf’ SIZE 1M REUSE,
‘C:UsersjohnDesktoptbsts2_2.dbf’ SIZE 1M REUSE;

对于本地管理的临时表空间,在添加数据文件时需要通过ADD
TEMPFILE子句指定新的临时文件。

例如,以下语句用于向临时表空间TS1中添加临时文件TTS1_2.DBF:

ALTER TABLESPACE ts1 ADD TEMPFILE
‘C:UsersjohnDesktoptbsts1_2.dbf’ SIZE 2M REUSE;

添加后的数据文件信息可以从数据字典dba_temp_files 中得到确认。

如何扩展数据文件

扩展数据文件意味着在磁盘上为数据文件分配新的磁盘空间。

数据文件有两种扩展方式,即手工扩展和自动扩展。
在创建表空间或者向表空间中添加新的数据文件时,如果通过关键字AUTOEXTEND指定数据文件的自动扩展属性为ON
,则该数据文件可以自动扩展。

如果没有指定数据文件的自动扩展属性,那么这个文件是不能自动扩展的,只能手工进行扩展。
如果数据文件以前没有自动扩展功能,可以为其指定自动扩展的功能。

例如,以下语句为表空间TS1中的数据文件TS1_1.DBF指定自动扩展功能:

 ALTER DATABASE TEMPFILE ‘C:USERSJOHNDESKTOPTBSTS1_1.DBF’
AUTOEXTEND ON NEXT 1M MAXSIZE 10M;

在上面的语句中, NEXT用于指定每次对数据文件扩展的空间大小, MAX
SIZE用于指定数据文件最大允许的大小。
对于已经具有自动扩展功能的数据文件,也可以修改它的NEXT和MAX
SIZE属性。

还可以取消数据文件的自动扩展功能。

如:

ALTER DATABASE TEMPFILE ‘C:USERSJOHNDESKTOPTBSTS1_1.DBF’
AUTOEXTEND OFF;

在创建表空间时,或者向表空间中添加数据文件时,可以同时指定数据文件的自动扩展属性。
例如:

CREATE TABLESPACE ts2 DATAFILE
‘C:USERSJOHNDESKTOPTBSTS2_1.DBF’ SIZE 1M AUTOEXTEND ON;

数据文件的自动扩展信息可以从数据字典视图dba_data_files 中获得

例如,下面的语句用于查看表空间TS1
中数据文件的自动扩展信息,包括文件目前的大小、是否可以自动扩展、每次扩展的大小、文件的最大大小。

SELECT BYTES, AUTOEXTENSIBLE, INCREMENT_BY, MAXBYTES FROM
DBA_DATA_FILES WHERE TABLESPACE_NAME=’TS2′;

在上述命令的执行结果中,文件的目前大小和最大大小均以字节为单位,而每次扩展的大小则以数据块数为单位
在手工扩展数据文件时,需要通过RESIZE为数据文件指定新的大小

例如,以下语句用于将数据文件TS2_1 .DBF的大小改为5MB:

 ALTER DATABASE DATAFILE ‘C:USERSJOHNDESKTOPTBSTS2_1.DBF’
RESIZE 5M;

实际上,即使数据文件具有自动扩展属性,我们也可以手工改变文件的大小。

为数据文件指定的大小可以比原来的大,也可以比原来的小。
也就是说,数据文件的大小可以手工扩展,也可以手工缩减。
在缩减数据文件的大小时,必须保证能够容纳已有的数据。

表空间的维护

表空间在创建之后,管理员可能会根据需要修改表空间的状态,或者修改表空间的读写状态,或者修改数据文件的存储位置和名称等。

表空间的状态默认为联机状态,读写权限为可读可写。

修改表空间的操作一般由sys用户完成,普通用户如果希望执行这样的操作,需要具有ALTER
TABLESPACE系统权限

表空间的联机与脱机

表空间在创建后默认处于联机状态,数据库管理员可以将它的状态在联机和脱机之间切换。

当表空间处于脱机状态时,表空间中的数据文件也都处于脱机状态,这时用户无法访问表空间中的数据。
在数据库服务器的运行过程中,有时需要将某个表空间置于脱机状态,如在不影响整个数据库运行的情况下对某个表空间进行备份,或者对某些数据进行保护,不允许用户访问等。
除了SYSTEM表空间、默认的临时表空间、正在使用的UNDO表空间以外,其他表空间都可以置于脱机状态。
由于数据库在运行时需要时时刻刻访问SYSTEM表空间,所以它不能被置于脱机状态。
将表空间的状态置为脱机的命令格式为:

ALTER TABLESPACE 表空间名 OFFLINE 脱机方式;

其中关键字OFFLINE 的作用是将表空间脱机。

脱机方式有四种选择: NORMAL 、TEMPORARY 、IMMEDIATE和FOR RECOVER

其中NORMAL方式是默认的脱机方式,是指将表空间置于正常的脱机状态

在脱机之前,首先要保证数据库高速缓存中的数据与数据文件相一致
数据库服务器促使CKPT进程发出一次检查点,并检查数据文件的状态是否为可用,然后将数据库高速缓存中所有与当前表空间有关的脏缓冲区都写入数据文件,然后关闭表空间中的所有数据文件,并使表空间脱机。
由于数据文件与数据库高速缓存中的数据完全一致,在表空间脱机后数据文件也不会发生任何变化,所以当表空间再次联机时不需要恢复数据。
如果希望以NORMAL方式使表空间脱机,脱机方式可以省略。

例如,以下语句将使表空间TS1 以NORMAL方式脱机:

ALTER TABLESPACE ts2 OFFLINE [NORMAL];

TEMPORARY方式是指以临时方式将表空间脱机。

在脱机前,
CKPT进程将发出一次检查点,将数据库高速缓存中的相关脏缓冲区写人数据文件。
但CKPT进程不检查数据文件的状态,如果某个数据文件被损坏,部分脏缓冲区中的数据可能无法写入数据文件,所以在表空间下次重新联机时需要进行数据恢复。
例如,以下语句用于将表空间ts2 以TEMPORORY方式脱机:

ALTER TABLESPACE ts2 OFFLINE TEMPORARY;

IMMEDIATE方式是指将表空间立即置于脱机状态。

在脱机之前,数据库服务器不发出检

IMMEDIATE方式是指将表空间立即置于脱机状态

在脱机之前,数据库服务器不发出检查点,而直接将表空间脱机。
由于数据库高速缓存中的相关脏缓冲区没有被写入数据文件,所以在表空间下次联机之前需要进行数据恢复。

FOR RECOVER方式是用于恢复表空间的脱机状态

如果已经对表空间进行了备份,并希望用以前的备份对表空间进行恢复,首先需要将表空间以FOR
RECOVER方式脱机。

例如,以下语句用于将表空间ts2 以FOR RECOVER方式脱机:

ALTER TABLESPACE ts2 OFFLINE FOR RECOVER;

注:这种脱机方式,需要在归档日志模式下完成。

数据库服务器在重新启动时,可以将脱机的表空间联机,数据库管理员也可以手工将表空间联机

注:数据库重启后,表空间不能自动联机。
如果表空间是以NORMAL方式脱机的,那么在再次联机时不需要进行数据恢复。

表空间再次联机后,用户又可以访问其中的数据。
用于手工将表空间联机的命令格式为:

ALTER TABLESPACE 表空间名 ONLINE;

数据文件的联机与脱机

像表空间一样,数据文件也有联机和脱机两种状态

只有当数据文件处于联机状态时,用户才能访问其中的数据。
数据文件在被创建后,默认处于联机状态
由于数据文件是属于表空间的,所以当表空间处于联机状态时,表空间中的所有数据文件同时处于联机状态,除非这个数据文件损坏。
同样,当表空间处于脱机状态时,表空间中的所有数据文件同时处于脱机状态。
改变数据文件状态的命令是ALTER DATABASE

例如,以下语句将使数据文件TS2_1.DBF处于脱机状态:
ALTER DATABASE DATAFILE ‘C:UsersjohnDesktoptbsts2_1.dbf’
OFFLINE;

如果数据文件损坏,数据库服务器将自动使其脱机

如果数据库处于非归档模式下,要使损坏的数据文件脱机时,可以使用DROP关键字,这个数据文件就再也不能处于联机状态了
例如:

ALTER DATABASE DATAFILE ‘C:UsersjohnDesktoptbsts2_1.dbf’
OFFLINE FOR DROP;

为了使数据文件重新联机,需要在ALTER DATABASE命令中使用ONLINE关键字。

例如,以下语句用于使数据文件TS1_1.DBF重新联机:
ALTER DATABASE DATAFILE ‘C:UsersjohnDesktoptbsts2_1.dbf’
ONLINE;

通过ALTER
TABLESPACE命令可以使一个表空间中的所有数据文件都处于联机或脱机状态。
例如,下面两条语句分别使表空间ts 1 和临时表空间tts 1
中的所有数据文件处于脱机状态:

ALTER TABLESPACE TS1 OFFLINE TEMPORARY;

表空间的读写权限

用户对表空间的访问权限有读写和只读两种方式。

如果表空间处于读写状态,那么用户可以在表空间中创建数据库对象,可以删除其中的数据库对象,可以查看和修改数据库对象的信息。
如果表空间处于只读状态,用户只能查看表空间中的数据,而不能对其进行修改。
将表空间的访问权限改为只读的主要目的是保护一些历史数据,禁止用户修改这些数据。
一个更好的做法是,将只读表空间中的数据文件存放在CD或者DVD这类只读存储介质上,这样不仅可以保护表空间中的数据,而且可以节省磁盘空间。
表空间在创建后,默认处于读写状态,数据库管理员可以将表空间的状态设置为只读状态。
除SYSTEM表空间和UNDO表空间,还有临时表空间外,其他表空间都可置为只读状态

例如,以下命令可以使表空间ts1变为只读状态:

ALTER TABLESPACE TS1 READ ONLY;

需要注意的是,当表空间处于只读状态时,用户在表空间上可以执行SELECT操作,不能执行DELETE
、INSERT
、CREATE等DML和DDL操作,但是有一条DDL命令比较特殊,这条命令是DROP

在只读表空间上可以通过DROP命令删除数据库对象。

为了在只读表空间执行DML和DDL操作,需要将表空间的状态置为读写状态。

例如,以下语句执行的结果是将表空间ts1置为读写状态:

ALTER TABLESPACE TS1 READ WRITE;

数据文件的移动和重命名

数据文件的移动是指将数据文件从一个存储位置移动到另一个存储位置,在移动的同时还可以修改文件的名称。
数据文件的重命名是指在原来的位置将文件的名称改为其他字符串。
移动数据文件的主要目的是为了更换磁盘,或者平衡磁盘的1/O操作。

Oracle建议尽量将数据文件分布在不同的磁盘上,并与重做日志文件分别存放。
数据文件的移动和重命名需要分四步进行,第一步是将数据文件处于脱机状态第二步是在操作系统中将磁盘上的数据文件移动到另一个位置或者仅仅修改它的名称第三步是在数据库中对文件进行重命名第四步是将数据文件处于联机状态
对于不同的表空间,需要使用不同的方法移动或重命名文件

对于普通表空间,先使表空间脱机,然后再对数据文件进行移动或重命名,在这种情况下需要执行ALTER
TABLESPACE命令。

对于SYSTEM表空间,或者其中包含活动回滚段的表空间,因为无法使它们处于脱机状态,所以应该先将数据库切换到MOUNT状态,然后对数据文件进行移动或重命名。
在这种情况下需要执行ALTER DATABASE命令。
例如,对于普通表空间TS1l ,假设希望将数据文件ts
1_2.dbf重命名为tsl_3.dbf,或者改变它的存储位置,首先使表空间TS1
处于脱机状态。
脱机的目的是防止用户访问表空间,以保证数据文件的一致性。

ALTER TABLESPACE ts1 OFFLINE;

接下来在操作系统中对数据文件TS1_2.DBF进行重命名,将其名称改为ts
1_3.dbf,或者将它移动到另外一个存储位置。
接下来在SQL*Plus 中执行ALTER TABLESPACE修改数据文件的名称或路径。

命令如下:

ALTER TABLESPACE ts1 RENAME DATAFILE
‘C:UsersjohnDesktoptbsTS1_2.DBF’ TO
‘C:UsersjohnDesktopTS1_2.DBF’;

数据文件的位置和名称信息记录在控制文件和数据字典中, ALTER
TABLESPACE命令中的RENAME
子句的作用就是修改控制文件和数据字典的相关信息。

在执行A
LTERTABLESPACE命令之前,必须保证数据文件在操作系统中已经被正确地重命名了。
实际上,表空间中的多个数据文件可以同时被移动或重命名

数据文件被移动或重命名后,可以再次通过查询数据字典dba_data_files来了解修改后的信息。
最后,为了使用户能够访问表空间,应该将表空间处于联机状态,例如:

ALTER TABLESPACE ts1 ONLINE;

现在再以表空间SYSTEM为例来说明另一种特殊表空间中数据文件的移动和重命名方法。
假设希望将SYSTEM表空间中的数据文件system01.dbf从原来的存储位置移动到目录“C:UsersjohnDesktoptbs”下,并将它重命名为“
system_02 .dbf”。
由于SYSTEM表空间和包含活动回滚段的表空间不能处于脱机状态,所以需要将数据库转入MOUNT状态。
这一系列操作需要数据库管理员来执行。

CONN SYS/123 AS SYSDBA

SHUTDOWN

STARTUP MOUNT

接下来在操作系统中对数据文件进行移动和重命名,然后在SQL*Plus
中执行ALTERDATABASE命令,在控制文件和数据字典中修改该数据文件的相关信息。
命令如下:

ALTER DATABASE RENAME FILE
‘D:oracleproduct10.2.0oradataorclSYSTEM01.DBF’ TO
‘C:UsersjohnDesktoptbsSYSTEM02.DBF’;

需要注意的事,在ALTER DATABASE
命令的RENAME子句中使用的是FILE关键字,而不是DATAFILE关键字。

最后,为了使用户能够访问数据库,需要打开数据库

ALTER DATABASE OPEN;

在有些情况下需要对表空间进行重命名,这样的操作是非常简单的,表空间中的数据文件没有任何变化。
例如,下面的语句用于把表空间ts1 重命名为ts1:

 ALTER TABLESPACE ts1 RENAME TO ts11;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注