FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
NOPARALLEL;
SQL>CREATE UNIQUE INDEX USER.PK_PAY_ID ON USER.PAY
(PAYID)
NOLOGGING
TABLESPACE USER
PCTFREE 5
IN99vRANS 2
MAXTRANS 255
STORAGE (
IN99vIAL 1120K
NEXT 80K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
NOPARALLEL;
SQL>ALTER TABLE USER.PAY ADD (
FOREIGN KEY (STAFFID)
REFERENCES USER.STAFF (STAFFID));
SQL>ALTER TABLE USER.DEPOS99vCLASSIFY ADD
CONSTRAINT FK_DEPOS99vCLASSIFY2
FOREIGN KEY (PAYID)
REFERENCES USER.PAY (PAYID) ;
SQL>ALTER TABLE USER.DEPOS99vCRED99vLOG ADD
CONSTRAINT FK_DEPOS99vCRED99vLOG2
FOREIGN KEY (PAYID)
REFERENCES USER.PAY (PAYID) ;
SQL>ALTER FUNCTION "USER"."GENERATEPAYNO" COMPILE ;
SQL>ALTER PROCEDURE "USER"."ENGENDERPRVPAY" COMPILE ;
SQL>ALTER PROCEDURE "USER"."ISAP_ENGENDERPRVPAY" COMPILE ;
SQL>ALTER PROCEDURE "USER"."SPADDCRED99vDEPOS99v" COMPILE ;
SQL>ALTER PROCEDURE "USER"."SPADDDEPOS99vW99vHOUTCARD" COMPILE ;
SQL>ALTER PROCEDURE "USER"."SPADJUSTLWDEPOS99v" COMPILE ;
……
然后将导出的表PAY_X的dmp文件导入一个临时的数据库中,然后在临时数据库中将其表名重新命名为PAY,再按表模式将其导出。
imp USER/USER file= PAY_x.dmp tables=PAY ignore=y
SQL>rename PAY_X to PAY;
$ exp USER/USER file=PAY.dmp tables=PAY
最后将这个dmp文件导入正式的生产数据库中即可。
以上的过程在重建好PAY表后整个应用就恢复正常了,而重命名表后重建表的时间是非常之短的,我测试的时间大概是在几分钟之内就可以做完了,新数据就可以插入表了,剩下的工作就是将旧的数据导入数据库,这个工作的时间要求上就没有那么高了,因为应用已经正常了,一般来说利用晚上业务不忙的时候都可以把一张表的数据导入完成的。
以上的六种清除行迁移的方法各有各自的优缺点,分别适用于不同的情况下使用,利用以上的几种清除行迁移的方法基本上就能完全清除掉系统中的存在的行迁移了,当然,具体的生产环境中还需要具体问题具体分析的,针对不同类型的系统,系统中不同特点的表采用不同的清除方法,尽量的减少停数据库的时间,以保证应用的不间断稳定运行。
<< 上一页 [11]