日常我们在数据库使用过程中经常会遇到一个问题,表空间对应的数据文件占用空间太大,清理一些不需要的大表后,表空间使用率下降了,但数据文件还是那么大。虽说清理出来的空间可以复用,但总没有将数据文件收缩后看得舒心。达梦为了增强用户体验,在新的版本中也提供了数据文件收缩的功能,接下来我们对新功能进行测试。
1、首先我们先创建表空间:
create tablespace test0203 datafile ‘D:\dbms\data\DAMENG\test0203.dbf’ size 218 autoextend on next 218 maxsize 4096;
2、接着创建用户,并指定默认表空间:
create user test identified by test123456;
grant dba to test;
alter user test default tablespace test0203;
3、这一步完成后我们可以查一下test用户默认表空间是否修改成功:
select username,default_tablespace from dba_users;
4、下面我们造数,将test0203表空间对应的数据文件撑大。在test用户下建表,并插入数据。
CREATE TABLE T1_0203 AS
SELECT LEVEL AS A,LEVEL%100 AS B, DBMS_RANDOM.RANDOM_STRING(‘U’,20) AS C
FROM DUAL CONNECT BY LEVEL<=10000000 ;
CREATE TABLE T2_0203 AS
SELECT LEVEL AS A,LEVEL%100 AS B, DBMS_RANDOM.RANDOM_STRING(‘U’,20) AS C
FROM DUAL CONNECT BY LEVEL<=50000000 ;
5、表创建完成后,通过查表空间使用率,可以看到此时test0203表空间目前使用了3046.03M,数据文件大小3270M(约为3.19G),使用率达到93.15%。
我们再在操作系统上验证下数据文件大小:
操作系统上看到的数据文件大小与数据库中一致。
6、接下来,我们将T2_0203表删除,然后在查看表空间使用情况。
drop table T2_0203 purge;
用上面查询语句再次查询后发现,test0203表空间使用降为508M,数据文件大小不变,使用率降为15.54%。
这个时候我们就可以对数据文件进行收缩了,但这里有一点要注意,收缩数据文件不能小于在使用的空间,不然会报错。
alter tablespace TEST0203 resize datafile ‘D:\dbms\data\DAMENG\test0203.dbf’ to 512;
将数据文件收缩至512M。
再次查询表空间使用率:
此时test0203对应数据文件size已缩小为512M,操作系统层面也可以正常看到数据文件缩小为512M,
至此数据文件收缩完成。
PS:
这里补充一点,达梦数据文件的大小(单位 MB),取值范围 4096页大小~2147483647页大小,也就是说如果我们的页大小为8K,就算把表空间上所有表都删除了,已使用空间为0,数据文件最小也只能收缩到32M。
文章
阅读量
获赞