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

网友投稿 976 2022-05-30

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

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

通过 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;

转自墨天轮

GaussDB

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:你与高薪仅差一本Kotlin
下一篇:C++ on 华为云DevCloud
相关文章