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

一、概述
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、数据处理过程中要生成处理日志,方便监控。
      具体实施内容,详见脚本。

你可能感兴趣的:(办公系统数据库分区及历史数据清理优化方案一)