--1: 创建新表
Create table CC_EVENT_RESERVE_NEW tablespace tab_cc as select * from CC_EVENT_RESERVE where rownum < 1;
--close logging
alter table CC_EVENT_RESERVE_NEW nologging;
--set session parallel DML
alter session enable parallel dml;
--2:将数据导入新表中
INSERT /*+ APPEND PARALLEL( CC_EVENT_RESERVE_NEW,3) */ INTO CC_EVENT_RESERVE_NEW SELECT /*+ PARALLEL(CC_EVENT_RESERVE,3) */
T.*
FROM CC_EVENT_RESERVE T;
COMMIT;
--3:获得新表中 最大的 EVENT_ID 值 ,这个值 在第9步会用到
select max (EVENT_ID) from CC_EVENT_RESERVE_NEW;
--4:在新表上创建索引
alter table CC_EVENT_RESERVE_NEW
add constraint PK_CC_EVENT_RESERVE_NEW primary key (EVENT_ID)
using index
tablespace IDX_CC;
--create index
CREATE INDEX IDX_CC_EVENT_RES_AB_ID_NEW ON CC_EVENT_RESERVE_NEW (ACCT_BOOK_ID ASC) TABLESPACE IDX_CC PARALLEL (DEGREE 3) NOLOGGING;
--5:对新表进行表分析
EXEC DBMS_STATS.GATHER_TABLE_STATS('USERNAME', 'CC_EVENT_RESERVE_NEW', DEGREE=>3, CASCADE=>TRUE,no_invalidate =>false);
--6:打开新表的LOGGING 功能 ,并且删除 和原表有关系的 外键约束
ALTER TABLE CC_EVENT_RESERVE_NEW LOGGING;
ALTER TABLE CC_EVENT_RESERVE drop CONSTRAINT FK_CC_EVENT_REF_ACCT_BOOK;
ALTER TABLE CC_EVENT_RESERVE drop CONSTRAINT FK_CC_EV_RES_REF_CC_EV_FORMAT;
--7:关闭新表索引的并行 打开 日志功能
ALTER INDEX IDX_CC_EVENT_RES_AB_ID_NEW NOPARALLEL;
ALTER INDEX IDX_CC_EVENT_RES_AB_ID_NEW LOGGING;
--modify index attr.
ALTER INDEX PK_CC_EVENT_RESERVE_NEW NOPARALLEL;
ALTER INDEX PK_CC_EVENT_RESERVE_NEW LOGGING;
--8:改名,将原表 改成 CC_EVENT_RESERVE_OLD 改成 CC_EVENT_RESERVE
RENAME CC_EVENT_RESERVE TO CC_EVENT_RESERVE_OLD;
--rename table
RENAME CC_EVENT_RESERVE_NEW TO CC_EVENT_RESERVE;
--9:可能会存有少量数据在原表中,没有插入新表中,执行下面语句 补插,其中&EVENT_ID 用
第3步 查出的值替换
INSERT /*+ APPEND PARALLEL( CC_EVENT_RESERVE,3) */ INTO CC_EVENT_RESERVE SELECT /*+ PARALLEL(CC_EVENT_RESERVE_OLD ,3) */
T.*
FROM CC_EVENT_RESERVE_OLD T WHERE T.EVENT_ID>&EVENT_ID AND NOT EXISTS
(SELECT 1
FROM CC_EVENT_RESERVE_OLD T2
WHERE T2.EVENT_ID = T.EVENT_ID) ;
COMMIT;
--10:重新创建外键约束
alter table CC_EVENT_RESERVE
add constraint FK_CC_EVENT_REF_ACCT_BOOK foreign key (ACCT_BOOK_ID)
references ACCT_BOOK (ACCT_BOOK_ID);
alter table CC_EVENT_RESERVE
add constraint FK_CC_EV_RES_REF_CC_EV_FORMAT foreign key (EVENT_FORMAT_ID)
references CC_EVENT_FORMAT (EVENT_FORMAT_ID);
--11:删除 CC_EVENT_RESERVE_OLD 表
DROP TABLE CC_EVENT_RESERVE_OLD purge;
--12:将索引名改回之前的名字
ALTER INDEX IDX_CC_EVENT_RES_AB_ID_NEW RENAME TO IDX_CC_EVENT_RES_AB_ID;
ALTER INDEX PK_CC_EVENT_RESERVE_NEW RENAME TO PK_CC_EVENT_RESERVE;
--13 约束名字改回之前名字
ALTER TABLE CC_EVENT_RESERVE RENAME constraint PK_CC_EVENT_RESERVE_NEW TO PK_CC_EVENT_RESERVE;
oracle 清大表
最新推荐文章于 2023-12-15 08:00:00 发布