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)