利用达梦dexp和dimp完成表数据空间释放

       对于一些会大规模发生delete的场景下,数据库是不会回收空间的,此时需要手动对其进行空间释放。但因为其中可能存在大量索引、约束及触发器等对象。随意操作,可能会影响正常业务的正常使用。本例利用dexp和dimp达到这一效果。

环境准备表、索引及触发器:

student表:

CREATE TABLE "SYSDBA"."STUDENT"
(
"NAME" VARCHAR(20),
"AGE" INT NOT NULL,
"SEX" VARCHAR(10),
"GRADE" INT,
NOT CLUSTER PRIMARY KEY("AGE"),
CHECK(SEX IN ('MAIL', 'FEMAIL'))
,CHECK(GRADE IN (7, 8, 9)))
PARTITION BY LIST("GRADE")
SUBPARTITION BY LIST("SEX") SUBPARTITION TEMPLATE
(
SUBPARTITION  "Q1"  VALUES('MAIL') STORAGE(ON "MAIN"),
SUBPARTITION  "Q2"  VALUES('FEMAIL') STORAGE(ON "MAIN")
),
SUBPARTITION BY RANGE("AGE") SUBPARTITION TEMPLATE
(
SUBPARTITION  "R1"  VALUES LESS THAN(12) STORAGE(ON "MAIN"),
SUBPARTITION  "R2"  VALUES LESS THAN(15) STORAGE(ON "MAIN"),
SUBPARTITION  "R3"  VALUES LESS THAN(MAXVALUE) STORAGE(ON "MAIN")
)
(
PARTITION  "P1"  VALUES(7)   STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION  "P2"  VALUES(8)   STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION  "P3"  VALUES(9)   STORAGE(ON "MAIN", CLUSTERBTR)
) STORAGE(HASHPARTMAP(1), ON "MAIN", CLUSTERBTR) ;

局部索引:

CREATE  INDEX "IND_STUDENT_NAME" ON "SYSDBA"."STUDENT"("NAME" ASC) STORAGE(ON "MAIN", CLUSTERBTR) ;

触发器:

CREATE OR REPLACE TRIGGER STUDENT_TRIGGER
BEFORE INSERT
ON "SYSDBA"."STUDENT_BAK"
FOR EACH ROW --表示行级触发器

BEGIN
 if :new.AGE<7 then
 RAISE_APPLICATION_ERROR(-20001,'未到达入学年龄');
 END if;
end;

对表student利用dexp进行备份

[dmdba@MySQL5 ~]$ dmdbms/bin/dexp USERID=SYSDBA/SYSDBA@192.168.56.100:5236 FILE=student.dmp DIRECTORY=/home/dmdba TABLES=STUDENT LOG=student.log
dexp V8


----- [2023-01-03 10:54:27]导出表:STUDENT -----

导出索引:IND_STUDENT_NAME

导出触发器: STUDENT_TRIGGER

导出模式下的对象权限...

表STUDENT导出结束,共导出 4 行数据

整个导出过程共花费    0.060 s


成功终止导出, 没有出现警告

从导出信息来看,导出的对象非常详尽。如果是生产环境的大表,请注意再导出统计信息,以防止重新收集统计导致新旧统计信息产生偏差,最终影响应用。

再删除student表:

[dmdba@MySQL5 ~]$ dmdbms/bin/disql
disql V8
用户名:
密码:

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 3.876(ms)
SQL> drop table student purge;
操作已执行
已用时间: 60.306(毫秒). 执行号:2200.
SQL> exit

利用dimp完成表还原:

[dmdba@MySQL5 ~]$ dmdbms/bin/dimp USERID=SYSDBA/SYSDBA@192.168.56.100:5236 FILE=student.dmp DIRECTORY=/home/dmdba LOG=student_imp.log
dimp V8

本地编码:PG_UTF8, 导入文件编码:PG_GB18030


----- [2023-01-03 10:56:37]导入表:STUDENT -----

创建表 STUDENT ...

导入表 STUDENT 的数据:4 行被处理

导入表的索引:

IND_STUDENT_NAME

导入成功……

导入表的触发器:

STUDENT_TRIGGER

导入成功……

整个导入过程共花费    0.314 s


成功终止导入, 没有出现警告
[dmdba@MySQL5 ~]$

验证一下触发器效果:

如此操作可以确保delete操作后,数据空间的释放。

达梦数据库技术社区:https://eco.dameng.com   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值