GaussDB T 运维基础:如何删除表空间中的数据文件
【摘要】 在 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)