您的位置:首页 > 运维架构

数据仓库系统数据维护(部分表重跑)的一个方案

2010-09-15 22:36 381 查看
1、 需要跑批的日期维护表
create_date_list_table.sql
-- Create table
create table EDW_DATE_LIST
(
ID       INTEGER,
DATE_CUR VARCHAR2(8)
)
;

2、 插入日期测试数据
插入7、8日期.sql
truncate table Edw_Date_List;
insert into Edw_Date_List (ID, DATE_CUR) values (1, '20100701');
insert into Edw_Date_List (ID, DATE_CUR) values (2, '20100702');
insert into Edw_Date_List (ID, DATE_CUR) values (3, '20100703');
insert into Edw_Date_List (ID, DATE_CUR) values (4, '20100704');
insert into Edw_Date_List (ID, DATE_CUR) values (5, '20100705');
insert into Edw_Date_List (ID, DATE_CUR) values (6, '20100706');
insert into Edw_Date_List (ID, DATE_CUR) values (7, '20100707');
insert into Edw_Date_List (ID, DATE_CUR) values (8, '20100708');
insert into Edw_Date_List (ID, DATE_CUR) values (9, '20100709');
insert into Edw_Date_List (ID, DATE_CUR) values (10, '20100710');
insert into Edw_Date_List (ID, DATE_CUR) values (11, '20100711');
insert into Edw_Date_List (ID, DATE_CUR) values (12, '20100712');
insert into Edw_Date_List (ID, DATE_CUR) values (13, '20100713');
insert into Edw_Date_List (ID, DATE_CUR) values (14, '20100714');
insert into Edw_Date_List (ID, DATE_CUR) values (15, '20100715');
insert into Edw_Date_List (ID, DATE_CUR) values (16, '20100716');
insert into Edw_Date_List (ID, DATE_CUR) values (17, '20100717');
insert into Edw_Date_List (ID, DATE_CUR) values (18, '20100718');
insert into Edw_Date_List (ID, DATE_CUR) values (19, '20100719');
insert into Edw_Date_List (ID, DATE_CUR) values (20, '20100720');
insert into Edw_Date_List (ID, DATE_CUR) values (21, '20100721');
insert into Edw_Date_List (ID, DATE_CUR) values (22, '20100722');
insert into Edw_Date_List (ID, DATE_CUR) values (23, '20100723');
insert into Edw_Date_List (ID, DATE_CUR) values (24, '20100724');
insert into Edw_Date_List (ID, DATE_CUR) values (25, '20100725');
insert into Edw_Date_List (ID, DATE_CUR) values (26, '20100726');
insert into Edw_Date_List (ID, DATE_CUR) values (27, '20100727');
insert into Edw_Date_List (ID, DATE_CUR) values (28, '20100728');
insert into Edw_Date_List (ID, DATE_CUR) values (29, '20100729');
insert into Edw_Date_List (ID, DATE_CUR) values (30, '20100730');
insert into Edw_Date_List (ID, DATE_CUR) values (31, '20100731');
insert into Edw_Date_List (ID, DATE_CUR) values (32, '20100801');
insert into Edw_Date_List (ID, DATE_CUR) values (33, '20100802');
insert into Edw_Date_List (ID, DATE_CUR) values (34, '20100803');
insert into Edw_Date_List (ID, DATE_CUR) values (35, '20100804');
insert into Edw_Date_List (ID, DATE_CUR) values (36, '20100805');
insert into Edw_Date_List (ID, DATE_CUR) values (37, '20100806');
insert into Edw_Date_List (ID, DATE_CUR) values (38, '20100807');
insert into Edw_Date_List (ID, DATE_CUR) values (39, '20100808');
insert into Edw_Date_List (ID, DATE_CUR) values (40, '20100809');
insert into Edw_Date_List (ID, DATE_CUR) values (41, '20100810');
insert into Edw_Date_List (ID, DATE_CUR) values (42, '20100811');
insert into Edw_Date_List (ID, DATE_CUR) values (43, '20100812');
insert into Edw_Date_List (ID, DATE_CUR) values (44, '20100813');
insert into Edw_Date_List (ID, DATE_CUR) values (45, '20100814');
insert into Edw_Date_List (ID, DATE_CUR) values (46, '20100815');
insert into Edw_Date_List (ID, DATE_CUR) values (47, '20100816');
insert into Edw_Date_List (ID, DATE_CUR) values (48, '20100817');
insert into Edw_Date_List (ID, DATE_CUR) values (49, '20100818');
insert into Edw_Date_List (ID, DATE_CUR) values (50, '20100819');
insert into Edw_Date_List (ID, DATE_CUR) values (51, '20100820');
insert into Edw_Date_List (ID, DATE_CUR) values (52, '20100821');
insert into Edw_Date_List (ID, DATE_CUR) values (53, '20100822');
insert into Edw_Date_List (ID, DATE_CUR) values (54, '20100823');
insert into Edw_Date_List (ID, DATE_CUR) values (55, '20100824');
insert into Edw_Date_List (ID, DATE_CUR) values (56, '20100825');
insert into Edw_Date_List (ID, DATE_CUR) values (57, '20100826');
insert into Edw_Date_List (ID, DATE_CUR) values (58, '20100827');
insert into Edw_Date_List (ID, DATE_CUR) values (59, '20100828');
insert into Edw_Date_List (ID, DATE_CUR) values (60, '20100829');
insert into Edw_Date_List (ID, DATE_CUR) values (61, '20100830');
insert into Edw_Date_List (ID, DATE_CUR) values (62, '20100831');
commit;

3、 批调度存储过程
BATCH_SU_78.SQL
CREATE OR REPLACE PROCEDURE BATCH_SU_78 AS
--DECLARE
O_RUNSTATUS NUMBER;
O_MSG       VARCHAR2(4000);
V_DATE      VARCHAR2(10);
CURSOR CUR_EDW_DATE IS
SELECT DATE_CUR FROM EDW_DATE_LIST ORDER BY ID;
BEGIN
--批量执行
OPEN CUR_EDW_DATE;
LOOP
FETCH CUR_EDW_DATE
INTO V_DATE;
EXIT WHEN CUR_EDW_DATE%NOTFOUND;
--拉取ODS数据
EXECUTE IMMEDIATE 'TRUNCATE TABLE ODS_CMS_CMIS_JJ';
INSERT INTO EDW.ODS_CMS_CMIS_JJ
SELECT * FROM BDW.ODS_CMS_CMIS_JJ WHERE ODS_DATA_DATE = V_DATE;
COMMIT;
--执行存储过程
P_T01_LOAN_DUE_BILL(V_DATE, O_RUNSTATUS, O_MSG);
IF V_DATE IN ('20100731', '20100831') THEN
--拉取全量表ODS数据
EXECUTE IMMEDIATE 'TRUNCATE TABLE C_ODS_CS_LNB_LNCF';
EXECUTE IMMEDIATE 'TRUNCATE TABLE ODS_CMS_CMIS_ZH_FS';
EXECUTE IMMEDIATE 'TRUNCATE TABLE ODS_CMS_CMIS_ZH_PT';
EXECUTE IMMEDIATE 'TRUNCATE TABLE DWIF_FCR_LN_DTL';
EXECUTE IMMEDIATE 'TRUNCATE TABLE DWIF_FCR_LN_SCHEDULE';
EXECUTE IMMEDIATE 'TRUNCATE TABLE ODS_WFM_BIZ_LOANNOTE';
INSERT INTO EDW.C_ODS_CS_LNB_LNCF
SELECT * FROM BDW.C_ODS_CS_LNB_LNCF WHERE ODS_DATA_DATE = V_DATE;
INSERT INTO EDW.ODS_CMS_CMIS_ZH_FS
SELECT * FROM BDW.ODS_CMS_CMIS_ZH_FS WHERE ODS_DATA_DATE = V_DATE;
INSERT INTO EDW.ODS_CMS_CMIS_ZH_PT
SELECT * FROM BDW.ODS_CMS_CMIS_ZH_PT WHERE ODS_DATA_DATE = V_DATE;
INSERT INTO EDW.DWIF_FCR_LN_DTL
SELECT * FROM BDW.DWIF_FCR_LN_DTL WHERE DWIF_DATA_DATE = V_DATE;
INSERT INTO EDW.DWIF_FCR_LN_SCHEDULE
SELECT * FROM BDW.DWIF_FCR_LN_SCHEDULE WHERE DWIF_DATA_DATE = V_DATE;
INSERT INTO EDW.ODS_WFM_BIZ_LOANNOTE
SELECT * FROM BDW.ODS_WFM_BIZ_LOANNOTE WHERE ODS_DATA_DATE = V_DATE;
--还款计划全量表调度
P_T01_REPAY_PLAN(V_DATE, O_RUNSTATUS, O_MSG);
--SUB过程调度
P_SUB_DM3_REP_PLAN(V_DATE, O_RUNSTATUS, O_MSG);
DELETE FROM SUB.DM3_REP_PLAN_HIS_78 WHERE ODS_DATA_DATE = V_DATE;
INSERT INTO SUB.DM3_REP_PLAN_HIS_78
(DATA_DT
,TRCH_NO
,BRCH_NO
,CURR_REP_DATE
,NEXT_REP_DATE
,TOTAL_TERM
,CURR_TERM
,ODS_DATA_DATE)
SELECT DATA_DT
,TRCH_NO
,BRCH_NO
,CURR_REP_DATE
,NEXT_REP_DATE
,TOTAL_TERM
,CURR_TERM
,V_DATE
FROM SUB.DM3_REP_PLAN;
END IF;
COMMIT;
END LOOP;
COMMIT;
END;
/

说明:过程分为游标取日期、从ODS取源数据、存储过程调度、SUB历史表备份等部分;其中,根据实际情况,取源表数据与存储过程调度根据报表系统需要及源数据的增量全量情况,进行相应的变换;本例中,SUB的SUB.DM3_REP_PLAN要求只需要取每月月末的数据,相关ODS源表只有ODS_CMS_CMIS_JJ是增量传送的,所以如程序中所示编写了代码。
4、 Shell调度程序
su_78.sh
ORACLE_BASE=/opt/app/oracle;export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0;export ORACLE_HOME
ORACLE_SID=bdw;export ORACLE_SID
$ORACLE_HOME/bin/sqlplus edw0708/edw0708<<!
exec BATCH_SU_78;
exit
!

5、 总结说明
这是一个根据ODS、EDW、SUB的环境情况,在源表数据出错的情况下,经过深层次分析,数据仓库系统数据维护个别表重跑的一个示例方案;以便于遇到类似情况,进行灵活变更,效仿操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐