GaussDB T 运维基础:如何删除表空间中的数据文件

举报
GaussDB小粉 发表于 2020/01/13 10:17:19 2020/01/13
【摘要】 在 GaussDB T中,可以通过 DROP DATAFILE 命令删除表空间中的空数据文件。

在 GaussDB T中,可以通过 DROP DATAFILE 命令删除表空间中的空数据文件。

通过 V$DATAFILE 可以查看数据文件的基本信息:

SQL> desc v$datafile;

Name                                Null?    Type                                
----------------------------------- -------- ------------------------------------
ID                                  NOT NULL BINARY_INTEGER                      
TABLESPACE_ID                            NOT NULL BINARY_INTEGER                      
STATUS                               NOT NULL VARCHAR(20 BYTE)                    
TYPE                                NOT NULL VARCHAR(20 BYTE)                    
FILE_NAME                              NOT NULL VARCHAR(256 BYTE)                   
BYTES                                NOT NULL BINARY_BIGINT                       
AUTO_EXTEND                             NOT NULL VARCHAR(20 BYTE)                    
AUTO_EXTEND_SIZE                          NOT NULL BINARY_BIGINT                       
MAX_SIZE                              NOT NULL BINARY_BIGINT                       
HIGH_WATER_MARK                           NOT NULL BINARY_INTEGER

通过 DBA_TABLESPACES 可以查询表空间信息:

SQL> desc dba_tablespaces;

Name                                Null?    Type                                
----------------------------------- -------- ------------------------------------
TABLESPACE_NAME                     NOT NULL VARCHAR(64 BYTE)                    
PAGE_SIZE                                    BINARY_BIGINT                       
EXTENT_PAGES                       NOT NULL BINARY_INTEGER                      
DATAFILE_COUNT                      NOT NULL BINARY_INTEGER                      
TOTAL_SIZE                                    BINARY_BIGINT                       
USED_SIZE                                    BINARY_BIGINT                       
STATUS                           NOT NULL VARCHAR(8 BYTE)                     
IN_MEMORY                         NOT NULL VARCHAR(8 BYTE)                     
CONTENTS                                     CHAR(9 BYTE)                        
LOGGING                                      CHAR(1 BYTE)                        
BIGFILE                                      CHAR(1 BYTE)

测试数据库的表空间和数据文件基本信息如下:

SQL> col tablespace_name for a15


SQL> select tablespace_name,page_size from dba_tablespaces;

TABLESPACE_NAME PAGE_SIZE           
--------------- --------------------
SYSTEM          8192                
TEMP           8192                
UNDO           8192                
USERS           8192                
TEMP2           8192                
TEMP2_UNDO        8192                
SYSAUX          8192                

7 rows fetched.

SQL> select id,file_name from v$datafile;

ID           FILE_NAME                                                       
------------ ----------------------------------------------------------------
0            /gaussdb/gaussdata/data/system                                  
1            /gaussdb/gaussdata/data/temp1_01                                
2            /gaussdb/gaussdata/data/temp1_02                                
3            /gaussdb/gaussdata/data/undo                                    
4            /gaussdb/gaussdata/data/user1                                   
5            /gaussdb/gaussdata/data/user2                                   
6            /gaussdb/gaussdata/data/user3                                   
7            /gaussdb/gaussdata/data/user4                                   
8            /gaussdb/gaussdata/data/user5                                   
9            /gaussdb/gaussdata/data/temp2_01                                
10            /gaussdb/gaussdata/data/temp2_02                                
11            /gaussdb/gaussdata/data/temp2_undo                              
12            /gaussdb/gaussdata/data/sysaux                                  
 
13 rows fetched.

以下依次删除了初始创建的 USERS 表空间中的空余文件:

SQL> alter tablespace users drop datafile '/gaussdb/gaussdata/data/user5';

Succeed.

SQL> alter tablespace users drop datafile '/gaussdb/gaussdata/data/user4';

Succeed.

SQL> alter tablespace users drop datafile '/gaussdb/gaussdata/data/user3';

Succeed.

SQL> alter tablespace users drop datafile '/gaussdb/gaussdata/data/user2';

Succeed.

删除之后,数据文件会自动被清理掉:

SQL> select id,file_name from v$datafile;

ID           FILE_NAME                                                       
------------ ----------------------------------------------------------------
0            /gaussdb/gaussdata/data/system                                  
1            /gaussdb/gaussdata/data/temp1_01                                
2            /gaussdb/gaussdata/data/temp1_02                                
3            /gaussdb/gaussdata/data/undo                                    
4            /gaussdb/gaussdata/data/user1                                   
9            /gaussdb/gaussdata/data/temp2_01                                
10            /gaussdb/gaussdata/data/temp2_02                                
11            /gaussdb/gaussdata/data/temp2_undo                              
12            /gaussdb/gaussdata/data/sysaux                                  

9 rows fetched.

SQL> exit

[eygle@enmodb1 ~]$ cd /gaussdb/gaussdata/data/
[eygle@enmodb1 data]$ ls -l
total 6014984
-rw------- 1 eygle enmotech   10485760 Jan 11 23:42 cntl1
-rw------- 1 eygle enmotech   10485760 Jan 11 23:42 cntl2
-rw------- 1 eygle enmotech   10485760 Jan 11 23:42 cntl3
-rw------- 1 eygle enmotech  268435456 Jan  4 23:55 log1
-rw------- 1 eygle enmotech  268435456 Jan  9 02:37 log3
-rw------- 1 eygle enmotech  268435456 Jan 11 23:46 log4
-rw------- 1 eygle enmotech  335544320 Jan 11 23:42 sysaux
-rw------- 1 eygle enmotech  1073741824 Jan 11 23:42 system
-rw------- 1 eygle enmotech  167772160 Dec 26 14:53 temp1_01
-rw------- 1 eygle enmotech  167772160 Dec 26 14:53 temp1_02
-rw------- 1 eygle enmotech  167772160 Dec 26 14:53 temp2_01
-rw------- 1 eygle enmotech  167772160 Dec 26 14:53 temp2_02
-rw------- 1 eygle enmotech  1073741824 Dec 26 14:53 temp2_undo
-rw------- 1 eygle enmotech  1073741824 Jan 11 23:42 undo
-rw------- 1 eygle enmotech  1073741824 Jan 11 23:42 user1

官方文档内容介绍如下

ALTER TABLESPACE
功能描述
修改tablespace。

注意事项
执行该语句的用户需要有ALTER TABLESPACE系统权限。

增加数据文件、删除数据文件,修改AUTOEXTEND属性及重命名表空间,需在数据库open状态下执行。

修改数据文件名称,需要在数据库mount状态下执行。

只能对用户表空间设置AUTOOFFLINE。

语法格式
ALTER TABLESPACE tablespace_name
   {   datafile_tempfile_clauses
     | RENAME TO new_tablespace_name 
     | SHRINK SPACE KEEP integer [ K | M | G | T ]
     | AUTOOFFLINE [ ON | OFF ]
   }
datafile_tempfile_clauses 子句:

{   ADD DATAFILE {datafile_tempfile_spec [ , ... ]}
  | DROP DATAFILE ‘file_name’ 
  | RENAME DATAFILE 'old_file_name'  TO 'new_file_name' 
  | autoextend_clause
  | OFFLINE DATAFILE 'file_name' [ , ... ] 
}
autoextend_clause 子句:

AUTOEXTEND {   OFF 
             | ON [ NEXT integer [ K | M | G] ] 
           } 
           [ MAXSIZE {   integer [ K | M | G] 
                       | UNLIMITED 
                     } 
           ]
datafile_tempfile_spec 子句:

file_name SIZE integer [ K | M | G ] [ autoextend_clause ]
参数说明
tablespace_name

待修改表空间的名称,当表空间不存在时报错。

ADD DATAFILE

向表空间添加数据文件。

DROP DATAFILE

向表空间删除数据文件,数据文件必须是没有使用过的(hwms为0)才可以被删除。

autoextend_clause

修改表空间AUTOEXTEND属性。

RENAME DATAFILE

修改表空间中的数据文件名称,只有在MOUNT模式下执行,由于修改文件名需要暂时关闭文件,目前不支持等待数据库处于恢复状态。

AUTOOFFLINE

设置表空间是否开启自动离线。AUTOOFFLINE为ON时,开启自动离线的用户表空间,在数据库启动过程中存在文件打开失败的问题时,会自动离线该用户表空间;若用户表空间在数据库启动成功后出现问题,则不会自动离线。

某些用户表空间发生损坏或其他故障时,如果已通过“ALTER TABLESPACE tablespace_name AUTOOFFLINE ON;”将该表空间设置为损坏后离线,那么在启动数据库时可以将数据库加载到MOUNT状态,否则将报错,且数据库启动失败。

OFFLINE DATAFILE

将损坏的datafile离线,只有在MOUNT模式下执行,之后若被离线的数据文件不为空,则该表空间被离线。

datafile_tempfile_spec

表空间数据文件,可以用逗号分隔多个数据文件,数据文件中暂时不支持中文。

file_name

新生成的数据文件在操作系统下的路径+新数据文件名。指定文件名为相对路径时,默认保存在数据目录的data目录下。

SIZE integer[ K | M | G ]

数据文件大小。

K:单位KB

M:单位MB

G:单位GB

undo表空间的取值范围:[1M,32G),其它表空间的取值范围:[1M, 8TB]。

autoextend_clause

表空间的AUTOEXTEND为on时,可以手动指定每次扩展的大小。

“NEXT”指定自动扩展的大小。若用户未指定时,默认值为16MB

“MAXSIZE”指定数据文件自动扩展的上限。

若用户未指定或指定为 "UNLIMITED" 时,undo表空间的上限大小为32GB,其它表空间的上限大小为 8TB。

若用户指定了上限值,则undo表空间指定的上限值不可大于32GB,其它表空间指定的上限值不可大于 8TB。

若用户既指定了上限值也通过“NEXT”指定了自动扩展大小,则指定的上限值不得小于用户指定的自动扩展值。

不指定AUTOEXTEND字句,默认不自动扩展。

指定AUTOEXTEND OFF;默认不自动扩展。

指定AUTOEXTEND ON时,可设置的属性如下:

RENAME TO new_tablespace_name

修改表空间名字。

SHRINK SPACE KEEP integer [ K | M | G | T ]

收缩表空间,在RESTRICTED模式下支持收缩临时表空间和undo表空间。

若需收缩undo表空间,则必须保证事务无残留。

K:单位KB

M:单位MB

G:单位GB

T:单位TB

表空间的取值范围:[1M, 8000T]。

示例
向表空间tbs_human中添加数据文件。

--创建表空间tbs_human。
CREATE TABLESPACE tbs_human DATAFILE 'dfile_tbs_01' SIZE 32M AUTOEXTEND ON NEXT 10M;
--向表空间tbs_human中添加数据文件privilege_dfile(大小是32M),manager_dfile(大小是32M)和section_dfile(大小是32M)。
ALTER TABLESPACE tbs_human ADD DATAFILE 'privilege_dfile' SIZE 32M, 'manager_dfile' SIZE 32M, 'section_dfile' SIZE 32M;
删除表空间tbs_human中的数据文件manager_dfile。

ALTER TABLESPACE tbs_human DROP DATAFILE 'manager_dfile';
mount状态下将表空间tbs_human中的数据文件privilege_dfile重命名为new_privilege_dfile。

--mount状态下将数据文件privilege_dfile重命名为new_privilege_dfile。
ALTER TABLESPACE tbs_human RENAME DATAFILE 'privilege_dfile' TO 'new_privilege_dfile';
--修改数据库状态为OPEN.
ALTER DATABASE OPEN;
mount状态下将表空间tbs_human中损坏的数据文件section_dfile离线。

--mount状态下将表空间tbs_human中损坏的数据文件section_dfile离线。
ALTER TABLESPACE tbs_human OFFLINE DATAFILE 'section_dfile';
--修改数据库状态为OPEN.
ALTER DATABASE OPEN;
修改表空间tbs_human为自动扩展,数据插满时,表空间自动扩展,可手动指定每次扩展大小。

ALTER TABLESPACE tbs_human AUTOEXTEND ON NEXT 5M;
将表空间名称tbs_human修改为data_tbs_human:

ALTER TABLESPACE tbs_human RENAME TO data_tbs_human;


转自墨天轮

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。