用户有一个需求,之前删除了表中大量数据,只保留近20天的数据,因为表中有lob段,所以这些lob段占用的空间一直没有释放
二目前释放这些空间需要move表的lob段,这个时间很慢,业务无法接受,后续我们通过讨论采用另一种方案解决
1 申请停机时间,先rename表CLOB_U1为CLOB_U1_OLD,再创建一样的表CLOB_U1,此时开启业务,业务数据开始向表中写数,
后续我们逐步将CLOB_U1_OLD中20天内的数据insert到表CLOB_U1,终实现用户数据需求,这里有个缺点就是在用户导入完成之前,虽然
业务可以继续跑,中断时间也很短,但是这个表用于数据监控,会导致insert完成之前用户监控界面的数据暂时缺失,这个需要跟业务沟通好,下面
模拟这个过程。
CLOB_U1中的数据
SQL> select * from clob_u1;
ID TEXT
---------- ------------------------------------------------------------
1 dlfdjfldjldjfldfjsldfjdslfjeofoewwor20ripeglf
2 oweurol0werw=2=2-523-43840584rfjkvnlajfdsfjdlfjldfjwoe
3 oweurol0werfldfjsldfjdslfjeofoewwor20ripeglf
4 oweurol0w=2=2-523-43840584rfjkvnlajfdsfjdlfjldfjwoe
改表名
alter table clob_u1 rename to clob_u1_old;
创建新的原始表
DBMS_METADATA.GET_DDL('TABLE','CLOB_U1','U1')
--------------------------------------------------------------------------------
CREATE TABLE "U1"."CLOB_U1"
( "ID" NUMBER,
"TEXT" CLOB
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TBS_U1"
LOB ("TEXT") STORE AS SECUREFILE (
TABLESPACE "TBS_U1" ENABLE STORAGE IN ROW CHUNK 8192
NOCACHE LOGGING NOCOMPRESS KEEP_DUPLICATES
STORAGE(INITIAL 106496 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT))
用户业务上线
insert into clob_u1 values('5',to_clob('dfsdjsfjuworuweorueworueworeuor'));
commit;
SQL> select * from clob_u1;
ID TEXT
---------- ------------------------------------------------------------
5 dfsdjsfjuworuweorueworueworeuor
目前用户表中只有新数据
下面插入其他数据
insert into clob_u1 select * from clob_u1_old where id in (1,2,3,4);
查询当前业务表clob_u1中的数据
SQL> select * from clob_u1;
ID TEXT
---------- ------------------------------------------------------------
5 dfsdjsfjuworuweorueworueworeuor
1 dlfdjfldjldjfldfjsldfjdslfjeofoewwor20ripeglf
2 oweurol0werw=2=2-523-43840584rfjkvnlajfdsfjdlfjldfjwoe
3 oweurol0werfldfjsldfjdslfjeofoewwor20ripeglf
4 oweurol0w=2=2-523-43840584rfjkvnlajfdsfjdlfjldfjwoe
至此业务表数据完成迁移
将clob_u1_old表truncate释放lob段。
truncate table clob_u1_old;