#ALTER TABLESPACE

# 通用描述

ALTER TABLESPACE语句用于更改一个已存在的表空间的相关属性。

# 语句定义

alter tablespace::=

syntax
ALTER TABLESPACE tablespace_name datafile_clause databucket_clause shrink_clause offline_clause ONLINE

datafile_clause::=

syntax
ADD DATAFILE TEMPFILE file_specification , DROP DATAFILE TEMPFILE file_name

file_specification::=

syntax
'file_name' SIZE size_clause AUTOEXTEND OFF ON NEXT size_clause MAXSIZE UNLIMITED size_clause PARALLEL parallel

databucket_clause::=

syntax
ADD DATABUCKET bucketurl , DROP DATABUCKET bucketurl

shrink_clause::=

syntax
SHRINK SPACE KEEP size_clause

offline_clause::=

syntax
OFFLINE NORMAL TEMPORARY IMMEDIATE

# datafile_clause

该语句用于修改表空间的数据文件。

# add (datafile|tempfile)

为表空间增加一个或多个数据文件(临时文件需使用TEMPFILE关键字)。

file_specification的描述请参考CREATE TABLESPACE

当不指定file_specification时,系统按如下规则自动创建一个数据文件:

  • 文件名称由表空间名称以及数据文件在表空间内的序号组合生成,如:tablespace_name1,tablespace_name2...,且统一转换为大写。
  • 文件的默认大小为8192个BLOCK,文件路径为系统默认的数据文件路径。
  • 对于非MEMORY MAPPED表空间,默认文件开启自动扩展,next为8192个块,maxsize为64MB个块。
  • 如果没有显式的规定extent分配方式,extent的默认分配方式为系统自动分配。

# drop (datafile|tempfile)

删除表空间的某个数据文件(临时文件需使用TEMPFILE关键字)。不允许删除创建该表空间时指定的第一个数据文件以及非ONLINE的数据文件。

MEMORY MAPPED表空间的数据文件删除后该文件内部ID以及全局ID在该表空间被删除并重启数据库之前都不允许被复用。 当增加数据文件导致文件的表空间内部ID到达表空间限制(63)时,删除已有文件也无法向该表空间添加数据文件。

分布式部署中用户无法执行此操作。

示例

ALTER TABLESPACE SYSTEM ADD DATAFILE 'sys1' SIZE 4M AUTOEXTEND ON NEXT 4M MAXSIZE 1G;
 
ALTER TABLESPACE yashan ADD DATAFILE 'yashan1' SIZE 4M AUTOEXTEND ON NEXT 4M MAXSIZE 1G;

ALTER TABLESPACE yashan ADD DATAFILE 'yashan2' SIZE 4M AUTOEXTEND ON NEXT 4M MAXSIZE 1G PARALLEL 4;

ALTER TABLESPACE yashan ADD DATAFILE;
 
ALTER TABLESPACE SYSTEM DROP DATAFILE 'sys1';
 
ALTER TABLESPACE yashan DROP DATAFILE 'yashan1';

# databucket_clause

该语句用于修改表空间的bucket(数据桶)信息。

# add databucket

为表空间增加bucket,按bucketurl指定路径挂载新的bucket,可同时挂载多个,以,分隔。对于新建bucket的约束与CREATE TABLESPACE相同。

# drop databucket

删除表空间的某个bucket,每次只允许指定一个bucketurl进行bucket的卸载,卸载成功后该bucketurl也将被删除。

分布式部署中用户无法执行此操作。

示例

ALTER TABLESPACE lsc_tb ADD DATABUCKET 'lscfile3','lscfile4';

ALTER TABLESPACE lsc_tb DROP DATABUCKET 'lscfile3';

# shrink_clause

该语句用于根据各个数据文件的空间使用情况回收空闲空间,收缩表空间大小。

# keep size_clause

将表空间收缩至指定大小,如表空间实际使用已超过该大小值,则收缩失败并返回错误。

不指定KEEP时,系统将最大化收缩表空间。

注意:UNDO表空间不支持手动shrink大小。

示例

ALTER TABLESPACE SYSTEM SHRINK SPACE KEEP 100M;
 
ALTER TABLESPACE SYSTEM SHRINK SPACE;

# offline_clause

改变表空间至脱机状态。本操作一般应用于如下业务场景:

  • 数据库的部分数据不再开放访问,则可以将其所在表空间offline
  • 需要对表空间里的数据文件进行重命名或重分配时,将表空间offline,则其下所有的数据文件均会被offline

当某个表空间被offline后,该表空间下的所有数据文件将不可读写也不可修改,且不能对该表空间执行DDL操作,包括增删数据文件等操作。

SYSTEM/SYSAUX/UNDO/SWAP/TEMPORARY/DEFAULT等内置表空间不允许offline。

被offline的表空间及其下数据文件仍为数据库的一部分,因此不能创建与它们同名的表空间或数据文件。

# normal| temporary | immediate

offline选项,可省略,默认为NORMAL。

OFFLINE NORMAL:当表空间所有的数据文件均没有脱机时,才会将表空间及数据文件offline,否则报错。

OFFLINE TEMPORARY:允许表空间中存在已经脱机的数据文件,只对online的数据文件执行offline。

OFFLINE IMMDIATE:对非脱机的数据文件立即执行offline,可能存在归档或Redo日志没有完全应用于数据文件,处于不一致状态,所以该操作offline的数据文件无法直接online。当数据库未开启归档模式时,不允许指定此选项执行offline。

示例

ALTER TABLESPACE yashan OFFLINE;
 
ALTER TABLESPACE yashan OFFLINE NORMAL;

ALTER TABLESPACE yashan OFFLINE TEMPORARY;

ALTER TABLESPACE yashan OFFLINE IMMEDIATE;

# online

改变脱机表空间至在线状态,使其正常可用。

本操作将表空间及其下的所有数据文件online,如果存在无法online的数据文件,则执行失败并返回错误。

ALTER TABLESPACE yashan ONLINE;