您的位置:首页 > 数据库

办公系统数据库分区及历史数据清理优化方案一

2013-11-11 14:51 429 查看
一、概述

1、需要分区优化表

  OA_OA.DOC_DOCMAIN,按DOC_TYPE分区;

  OA_OA.DOC_WF_OPINION,按DOCUMENT_ID分区;

  OA_YWLC.BD_WF_OPTION,按BD_ID分区;

  OA_YWLC.BD_CONTENT,按BD_ID分区;

  CORDYS.TASK_LIST,按WORKFLOW_MODULE分区;

  CORDYS.TASK_LIST_WAIT,按WORKFLOW_MODULE分区。

2、需要清理历史数据表

  CORDYS.TASK_LIST中办结文件,移到TASK_LIST_FINISH表中;

  CORDYS.WORKFLOW_INSTANCE_TRANSLOG中,2012年以前办结文件,移到WORKFLOW_INSTANCE_TRANSLOGBAK表中。

二、表分区方案

1、TASK_LIST表分区

CREATE TABLE TASK_LIST

(

 GUID                VARCHAR2(50) NOT NULL,

 BO_ID               NUMBER(38),

  ......

)

PARTITION BY LIST(WORKFLOW_MODULE)

(

PARTITION PART_01 VALUES('公文模块'),

PARTITION PART_02 VALUES('业务流程模块'),

PARTITION PART_03 VALUES('通用办公模块'),

PARTITION PART_04 VALUES(DEFAULT)

)

2、DOC_WF_OPINION表分区

   2012年以前DOCUMENT_ID最后一个值是634974(1589332条记录),按一年数据量进行分析,一年大概为8万个公文记录。

create table DOC_WF_OPINION

(

 ID          NUMBER(38) not null,

  DOCUMENT_ID  NUMBER(38),

  ......

)

PARTITION BY RANGE (DOCUMENT_ID)

(

PARTITION PART_01 VALUES LESS THAN(634975),

PARTITION PART_02 VALUES LESS THAN(714975),

PARTITION PART_03 VALUES LESS THAN(800000),

PARTITION PART_04 VALUES LESS THAN(890000),

PARTITION PART_05 VALUES LESS THAN(1000000)

)

3、BD_CONTENT表分区

   2012年以前BD_ID最后一个值是44001,按一年数据量进行分析,一年(今年,将来还会增加)大概产生11万个工单记录。

create table OA_YWLC.BD_CONTENT

(

 CONTENT_ID   NUMBER(38) not null,

 BD_ID        NUMBER(38) not null,

  ......

)

PARTITION BY RANGE (BD_ID)

(

PARTITION PART_01 VALUES LESS THAN(44002),

PARTITION PART_02 VALUES LESS THAN(154000),

PARTITION PART_03 VALUES LESS THAN(300000),

PARTITION PART_04 VALUES LESS THAN(450000),

PARTITION PART_05 VALUES LESS THAN(650000)

)

4、BD_WF_OPTION表分区

   2012年以前BD_ID最后一个值是44001,按一年数据量进行分析,一年(今年,将来还会增加)大概产生11万个工单记录。注:此表目前数据量偏少(截止2012年9月10日,45万条记录),可以考虑不分区。

create table OA_YWLC.BD_WF_OPTION

(

 ID          NUMBER(38) not null,

  OPINION_TYPE VARCHAR2(20),

  ......

 STATES      VARCHAR2(1),

 IN_ORDER    CHAR(2),

 TYPE        CHAR(10),

 BD_ID       NUMBER(38) not null

)

PARTITION BY RANGE (BD_ID)

(

PARTITION PART_01 VALUES LESS THAN(44002),

PARTITION PART_02 VALUES LESS THAN(154000),

PARTITION PART_03 VALUES LESS THAN(300000),

PARTITION PART_04 VALUES LESS THAN(450000),

PARTITION PART_05 VALUES LESS THAN(650000)

)

5、TASK_LIST_WAIT表分区

CREATE TABLE TASK_LIST_WAIT

(

 GUID                VARCHAR2(50) NOT NULL,

 BO_ID               NUMBER(38),

  ......

)

PARTITION BY LIST(WORKFLOW_MODULE)

(

PARTITION PART_01 VALUES('公文模块'),

PARTITION PART_02 VALUES('业务流程模块'),

PARTITION PART_03 VALUES('通用办公模块'),

PARTITION PART_04 VALUES(DEFAULT)

)

6、DOC_DOCMAIN表分区

CREATE TABLE DOC_DOCMAIN

(

 DOCUMENT_ID          NUMBER(38) not null,

 DOC_TYPE             VARCHAR2(10),

  ......

)

PARTITION BY LIST(DOC_TYPE)

(

PARTITION PART_01 VALUES('1'),

PARTITION PART_02 VALUES('2'),

PARTITION PART_03 VALUES(DEFAULT)

)

三、清理历史数据方案

1、清理表TASK_LIST、WORKFLOW_INSTANCE_TRANSLOG办结历史数据原则

   2012年前办结流程,并且是子流程(含二级并发子流程办结)已经办结的流程数据;

   CORDYS.TASK_LIST中,办结流程消息,移到TASK_LIST_FINISH表中;

   CORDYS.WORKFLOW_INSTANCE_TRANSLOG中,2012年以前办结流转记录,移到WORKFLOW_INSTANCE_TRANSLOGBAK。

2、数据处理程序,存储过程

   ⑴、生成待处理临时表;

   ⑵、循环处理数据;

   ⑶、每1000条数据,生成一条处理日志记录,并提交。

四、程序修改

1、修改触发器

    TRIGGERAFTER_INSERT_MESSAGE_TRACK

    TRIGGERafter_update_MESSAGE_TRACK

   把涉及到修改、查询TASK_LIST表的操作语句中,都在WHERE中增加WORKFLOW_MODULE条件;

   把涉及到修改、查询DOC_DOCMAIN表的操作语句中,都在WHERE中增加DOC_TYPE条件。

2、修改应用程序

   修改公文管理中的办结文件列表查询,在程序中增加二次查询,在第一次查询(TASK_LIST)不命中的情况下(查询结果为空),进行第二次查询(TASK_LIST_FINISH)。综合查询是否也需要此功能改造?

   修改流转记录查看功能,在程序中增加二次查询,在第一次查询不命中的情况下(查询WORKFLOW_INSTANCE_TRANSLOG结果为空),进行第二次查询(WORKFLOW_INSTANCE_TRANSLOGBAK)。

五、实施方案

1、源数据表通过更名进行备份;

2、重新创建目标表;

3、在数据处理过程中,去掉索引,数据更新完毕后,重建索引;

4、数据处理通过存储过程完成,分别插入重建目标表(TASK_LIST、WORKFLOW_INSTANCE_TRANSLOG)和历史表(TASK_LIST_FINISH、WORKFLOW_INSTANCE_TRANSLOGBAK);

5、数据处理过程中要生成处理日志,方便监控。

   具体实施内容,详见脚本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐