亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 34187 | 回復(fù): 18
打印 上一主題 下一主題

AS/400開(kāi)發(fā)經(jīng)驗(yàn)點(diǎn)滴(五)-- 通用日志管理工具 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2004-01-09 17:13 |只看該作者 |倒序?yàn)g覽
AS/400開(kāi)發(fā)經(jīng)驗(yàn)點(diǎn)滴(五)
---- 通用日志管理工具

BLOG LIOU



八.通用日志管理工具

1.        引言

AS/400系統(tǒng)上有日志(JRN)和日志接收器(JRNRCV)目標(biāo)對(duì)象,用來(lái)存放對(duì)數(shù)據(jù)庫(kù)文件進(jìn)行增刪改等操作的日志記錄。日志接收器是存放日志記錄的具體地方,它可以是由一個(gè)無(wú)限增大的文件組成,也可以是由多個(gè)固定大小的文件組成。多個(gè)日志接收器文件形成日志接收器鏈,當(dāng)當(dāng)前ATTACHED的有限大小的日志接收器滿了以后,系統(tǒng)會(huì)自動(dòng)產(chǎn)生或由用戶產(chǎn)生一個(gè)新的同樣屬性的接收器文件。

用CHGJRN命令可以改變產(chǎn)生新的日志方式,當(dāng)Manage receivers( MNGRCV)選項(xiàng)選擇*SYSTEM時(shí),系統(tǒng)會(huì)自動(dòng)產(chǎn)生新的日志接收器,當(dāng)Manage receivers( MNGRCV)選項(xiàng)選擇*USER時(shí),則當(dāng)日志接收器滿了以后,需要由用戶產(chǎn)生新的日志接收器。當(dāng)Manage receivers( MNGRCV)選項(xiàng)選擇*SYSTEM時(shí),可以在Delete receivers(DLTRCV)選項(xiàng)里選擇*YES來(lái)讓系統(tǒng)自動(dòng)刪除已經(jīng)被DETACH的日志接收器文件。

但如果我們希望定制保留固定個(gè)數(shù)的日志記錄,或者保存若干天的日志記錄,或者其他一些原因不能讓系統(tǒng)自動(dòng)刪除日志接收器,那么我們就必須手工刪除日志接收器,如果系統(tǒng)業(yè)務(wù)比較頻繁,產(chǎn)生日志接收器量比較大,可能會(huì)很快使系統(tǒng)硬盤(pán)空間漲滿,那么我們手工維護(hù)日志接收器的工作量很大。在一般的雙機(jī)熱備系統(tǒng)中比如MIMIX、OMS等都提供了日志管理功能,本文提供一個(gè)與這些軟件日志管理功能類似的獨(dú)立的一個(gè)通用日志管理工具,可以使你不需要依靠其他軟件就可以獨(dú)立地由程序來(lái)完成日志管理工作。

保留日志接收器,通常有兩種方式,一種是按時(shí)間即天來(lái)保留,一種是按日志記錄個(gè)數(shù)來(lái)保留。本文的例子是按日志記錄個(gè)數(shù)來(lái)保留日志接收器的。但按照該例的方法也可以很容易實(shí)現(xiàn)按天來(lái)保留日志接收器。

2.日志管理原理

(1)        要由程序來(lái)實(shí)現(xiàn)日志管理,必須先用CHGJRN命令把日志屬性中Manage receivers( MNGRCV)選項(xiàng)改為*USER。

(2)        如果Manage receivers( MNGRCV)屬性已經(jīng)設(shè)置為*USER,那么當(dāng)前日志接收器超過(guò)其閥值大小后,系統(tǒng)會(huì)發(fā)送CPF7099的消息。程序根據(jù)這個(gè)消息知道當(dāng)前日志接收器已經(jīng)滿了,需要產(chǎn)生一個(gè)新的日志接收器。這個(gè)消息是由系統(tǒng)發(fā)送到日志屬性中Journal message queue(MSGQ)中所定義的消息隊(duì)列里。通常日志該消息隊(duì)列缺省為QSYSOPR。用CRTMSGQ命令創(chuàng)建一個(gè)叫TTJRNMSGQ的消息隊(duì)列。并用該隊(duì)列名用CHGJRN命令修改Journal message queue(MSGQ)的值。

(3)        把保留的日志個(gè)數(shù)設(shè)置成參數(shù),保存在一個(gè)數(shù)據(jù)區(qū)域里,下例創(chuàng)建了一個(gè)保留1000萬(wàn)日志記錄參數(shù)的數(shù)據(jù)區(qū)域:
CRTDTAARA   DTAARA(QGPL/TTDTA)
               TYPE(*CHAR)
LEN(10)
VALUE('0010000000')
這個(gè)參數(shù)可以由用戶根據(jù)硬盤(pán)大小來(lái)調(diào)節(jié),用CHGDTAARA命令可以改變這個(gè)參數(shù)。

(4)        在程序運(yùn)行過(guò)程中,當(dāng)產(chǎn)生新的日志接收器文件后,程序會(huì)計(jì)算最新日志接收器件的開(kāi)始日志序號(hào)與最前一個(gè)日志接收器的開(kāi)始日志序號(hào)差,并用這個(gè)差與數(shù)據(jù)區(qū)域中定義的保留最大日志記錄個(gè)數(shù)相比較,當(dāng)日志序號(hào)差超過(guò)最大日志記錄個(gè)數(shù),程序就會(huì)自動(dòng)刪除過(guò)量的日志接收器文件,并把最后一個(gè)刪除日志接收器文件保存在叫LASTRCV的SAVF文件里,以維護(hù)硬盤(pán)空間不會(huì)增長(zhǎng)。 下面是日志管理原理示意圖:




圖  日志管理示意

3.源程序

(1)        主調(diào)程序JRNMGR

用RCVMSG命令讀TTJRNMSGQ消息隊(duì)列,當(dāng)有CPF7099消息時(shí),先調(diào)用CHKJRNCL程序來(lái)產(chǎn)生新的日志接收器,然后再調(diào)用刪除日志接收器程序,如果刪除接收器不成功,主調(diào)程序等待一段時(shí)間后會(huì)繼續(xù)調(diào)用刪除日志接收器程序:

  1. /*===================================================================*/
  2. /*                                                                           */
  3. /*     PROGRAM NAME    : JRNMGR                                         */
  4. /*     CREATED BY      : BLOG LIOU                                        */
  5. /*     DESCRIPTION     :                                                    */
  6. /*===================================================================*/
  7.              PGM
  8.              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)
  9.              DCL        VAR(&RTCDCHK) TYPE(*CHAR) LEN(1)
  10.              DCL        VAR(&JRNNAM) TYPE(*CHAR) LEN(10) +
  11.                           VALUE('TTJRN’')      /* 測(cè)試日志TTJRN */
  12.              DCL        VAR(&JRNLIB) TYPE(*CHAR) LEN(10) +
  13.                           VALUE(‘QGPL’)
  14.              DCL        VAR(&DJRNFLG) TYPE(*CHAR) LEN(1) VALUE('0')
  15.              DCL        VAR(&DJRNRTN) TYPE(*CHAR) LEN(1)

  16.              CHGVAR     VAR(&RTCDCHK) VALUE('0')

  17. LOOP:
  18. /* 條件滿足時(shí)調(diào)用刪除日志接收器程序 */
  19.              IF         COND(&DJRNFLG *EQ + '1')) THEN(DO)
  20.              CALL       PGM(DELJRNCL) PARM(&JRNNAM &JRNLIB +
  21.                           &DJRNRTN)
  22.              IF         COND(&DJRNRTN *EQ '0') THEN(CHGVAR +
  23.                           VAR(&DJRNFLG) VALUE('0'))
  24.              ENDDO

  25. /* 讀TTJRNMSGQ消息隊(duì)列,調(diào)用產(chǎn)生新日志接收器程序*/
  26.              RCVMSG     MSGQ(TTJRNMSGQ) RMV(*YES) MSGID(&MSGID)

  27.              IF         COND((&MSGID *EQ 'CPF7099') *OR (&RTCDCHK +
  28.                           *EQ '1')) THEN(DO)
  29.              CALL       PGM(CHKJRNCL) PARM( &JRNNAM &JRNLIB +
  30.                           &RTCDCHK)
  31.              CHGVAR     VAR(&MSGID) VALUE(' ')
  32.              IF         COND(&RTCDCHK *EQ '0') THEN(DO)
  33.              CHGVAR     VAR(&DJRNFLG) VALUE('1') /* 設(shè)置執(zhí)行刪除接收器程序標(biāo)志 */
  34.              CLRMSGQ    MSGQ(TTJRNMSGQ)
  35.              MONMSG     MSGID(CPF2357)
  36.              ENDDO
  37.              ENDDO

  38.              DLYJOB      DLY(60)
  39.              GOTO       CMDLBL(LOOP)
  40.              ENDPGM
復(fù)制代碼


(2)        產(chǎn)生新的日志接收器程序CHKJRNCL

當(dāng)主調(diào)程序從消息隊(duì)列讀到CPF7099的消息后,開(kāi)始調(diào)用CHKJRNCL程序,來(lái)產(chǎn)生新的日志接收器。

  1. /*===================================================================*/
  2. /*     PROGRAM NAME    : CHKJRNCL                                       */
  3. /*     CREATED BY      : BLOG LIOU                                        */
  4. /*     CREATED DATE    :                                                   */
  5. /*     DESCRIPTION     :                                                    */
  6. /*===================================================================*/
  7.              PGM        PARM( &JRNNAM &JRNLIB &RTCD)
  8.              DCL        VAR(&JRNNAM) TYPE(*CHAR) LEN(10)
  9.              DCL        VAR(&JRNLIB) TYPE(*CHAR) LEN(10)
  10.              DCL        VAR(&RTCD) TYPE(*CHAR) LEN(1)

  11.              CHGVAR     VAR(&RTCD) VALUE('0')
  12. /*-------------------------------------------------------------------*/
  13. /*產(chǎn)生新的日志接收器                          */
  14. /*-------------------------------------------------------------------*/
  15.              SNDMSG     MSG(&JRNNAM *TCAT '*GEN') TOUSR(MYUSR)
  16.              CHGJRN     JRN(&JRNLIB/&JRNNAM) JRNRCV(*GEN)
  17.              MONMSG     MSGID(CPF7013) EXEC(CHGVAR VAR(&RTCD) +
  18.                           VALUE('1'))

  19. END:        ENDPGM
復(fù)制代碼


(3)        刪除日志接收器程序DELJRNCL

當(dāng)產(chǎn)生新的日志接收器調(diào)用成功后,主調(diào)程序會(huì)調(diào)用刪除過(guò)量日志接收器程序。

  1. /*===================================================================*/
  2. /*     PROGRAM NAME    : DELJRNCL                                       */
  3. /*     CREATED BY      : BLOG LIOU                                        */
  4. /*     CREATED DATE    :                                                   */
  5. /*     DESCRIPTION     :                                                    */
  6. /*===================================================================*/
  7.              PGM        PARM( &JRNNAM &JRNLIB &RTNCDE)
  8.              DCL        VAR(&RTNCDE) TYPE(*CHAR) LEN(1)
  9.              DCL        VAR(&CURRCV) TYPE(*CHAR) LEN(10)
  10.              DCL        VAR(&JRNRCV) TYPE(*CHAR) LEN(10)
  11.              DCL        VAR(&RCVLIB) TYPE(*CHAR) LEN(10)
  12.              DCL        VAR(&JRNNAM) TYPE(*CHAR) LEN(10)
  13.              DCL        VAR(&JRNLIB) TYPE(*CHAR) LEN(10)
  14.              DCL        VAR(&STRSEQ) TYPE(*DEC) LEN(10 0)
  15.              DCL        VAR(&STRSEQ1) TYPE(*DEC) LEN(10 0)
  16.              DCL        VAR(&STRSEQ2) TYPE(*DEC) LEN(10 0)
  17.              DCL        VAR(&SNDMSG) TYPE(*CHAR) LEN(50)
  18.              DCL        VAR(&JRNNAMPR) TYPE(*CHAR) LEN(5)
  19.              DCL        VAR(&DELJRNSC) TYPE(*CHAR) LEN(10)
  20.              DCL        VAR(&DELJRNS) TYPE(*DEC) LEN(10 0)
  21.              DCL        VAR(&SNDMSG1) TYPE(*CHAR) LEN(10)

  22. /*-------------------------------------------------------------------*/
  23. /* Init,從TTDTA數(shù)據(jù)區(qū)域讀保留日志個(gè)數(shù)        */
  24. /*-------------------------------------------------------------------*/
  25.              CHGVAR     VAR(&RTNCDE) VALUE('0')
  26.              CHGVAR     VAR(&JRNNAMPR) VALUE(%SST(&JRNNAM 1 5))
  27.              RTVDTAARA  DTAARA(TTDTA (1 10)) RTNVAR(&DELJRNSC)
  28.              CHGVAR     VAR(&DELJRNS) VALUE(&DELJRNSC)

  29. /*------------------------------------------------------------------------*/
  30. /* 提取當(dāng)前日志接收器第一個(gè)日志記錄序號(hào)和接收器名 */
  31. /*------------------------------------------------------------------------*/
  32.              RTVJRNE    JRN(&JRNLIB/&JRNNAM) RCVRNG(*CURRENT) +
  33.                           TOENT(*FIRST) RTNSEQNBR(&STRSEQ) +
  34.                           RTNRCV(&CURRCV) RTNRCVLIB(&RCVLIB)

  35. /*-------------------------------------------------------------------*/
  36. /* 刪除過(guò)量日志接收器                         */
  37. /*-------------------------------------------------------------------*/
  38. LOOP:       RTVJRNE    JRN(&JRNLIB/&JRNNAM) RCVRNG(*CURCHAIN) +
  39.                           TOENT(*FIRST) RTNSEQNBR(&STRSEQ1) +
  40.                           RTNRCV(&JRNRCV) RTNRCVLIB(&RCVLIB)

  41.              IF         COND(&JRNRCV *EQ &CURRCV) THEN(GOTO +
  42.                           CMDLBL(END))

  43.              CHGVAR     VAR(&STRSEQ2) VALUE(&STRSEQ1 - &STRSEQ)

  44. /* 日志序號(hào)差在定義參數(shù)范圍內(nèi),不執(zhí)行刪除動(dòng)作 */
  45.              IF         COND(&STRSEQ2 *LT &DELJRNS) THEN(GOTO +
  46.                           CMDLBL(END))

  47. /*刪除前先備份,LASTRCV重復(fù)使用*/
  48.              DLTF       FILE(&RCVLIB/LASTRCV)
  49.              MONMSG     MSGID(CPF2105)
  50.              CRTSAVF    FILE(&RCVLIB/LASTRCV)
  51.              SAVOBJ     OBJ(&JRNRCV) LIB(&RCVLIB) DEV(*SAVF) +
  52.                           OBJTYPE(*JRNRCV) SAVF(&RCVLIB/LASTRCV) +
  53.                           SAVFDTA(*YES)
  54.              MONMSG     MSGID(CPF3770) /* No object saved */

  55. /*刪除日志接收器*/
  56.              DLTJRNRCV  JRNRCV(&RCVLIB/&JRNRCV)
  57.              MONMSG     MSGID(CPF2105 CPF7023)

  58.              CHGVAR     VAR(&SNDMSG) VALUE(&JRNRCV *BCAT 'Journal +
  59.                           Receiver Deleted !')
  60.              SNDMSG     MSG(&SNDMSG) TOUSR(MYUSR)
  61.              GOTO       CMDLBL(LOOP)

  62. END:        ENDPGM
復(fù)制代碼


最后把JRNMGR程序提交在QBATCH子系統(tǒng)下運(yùn)行,就可以實(shí)現(xiàn)對(duì)日志的自動(dòng)維護(hù)。[img][/img][img][/img][img][/img][img][/img]

jrn2.jpg (48.7 KB, 下載次數(shù): 332)

jrn2.jpg

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2004-01-09 17:33 |只看該作者

AS/400開(kāi)發(fā)經(jīng)驗(yàn)點(diǎn)滴(五)-- 通用日志管理工具

樓主,愛(ài)死你了。。這真是新年大禮啊

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2004-01-09 17:55 |只看該作者

AS/400開(kāi)發(fā)經(jīng)驗(yàn)點(diǎn)滴(五)-- 通用日志管理工具

樓主真牛。!
多謝了!

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2005-12-26 18:06 |只看該作者
下載回去好好研究一下.......................



論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2005-12-27 22:52 |只看該作者
還真沒(méi)用過(guò),收藏.

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2005-12-28 13:58 |只看該作者
發(fā)表于: 2004-1-9 17:13   

以前沒(méi)權(quán)限設(shè)精華,現(xiàn)在補(bǔ)設(shè)吧。

很好的工具。。。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2005-12-31 08:42 |只看該作者
多謝了,收藏先!

[ 本帖最后由 wanghl 于 2005-12-31 08:46 編輯 ]

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2009-07-16 10:33 |只看該作者

好貼留名

好貼留名

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2009-07-20 10:15 |只看該作者
lz id都注銷(xiāo)了?

感慨。

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2011-12-15 17:39 |只看該作者
找日志管理,翻到這個(gè)帖子。 回復(fù)樓上的同志, 我的ID仍然在。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP