设为首页 加入收藏

TOP

RTP记录log的机制(一)
2014-11-24 07:42:21 来源: 作者: 【 】 浏览:7
Tags:RTP 记录 log 机制

我们 RCV 这边经常跑的一个concurrent request RTP: Receiving Transaction Processor, 主要是用来处理 RCV_TRANSACTIONS_INTERFACE 里面的数据的.

\

这个 concurrent program 里面包含许多文件, 比较重要的有:

ident RVCTP
RVCTP:
     $Header: rvctp.oc  120.0.12000000.1 2007/01/16 23:53:49 appldev ship $
     $Header: rvtbm.lpc 120.13.12010000.10 2013/03/15 02:51:16 zhlee ship $ 
     $Header: rvtpt.lpc 120.28.12010000.33 2013/07/15 07:12:37 smai ship $
     $Header: rvtvq.lpc 120.8.12010000.17 2013/04/03 11:40:30 wayin ship $
     $Header: rvtuq.lpc 120.9.12000000.7 2009/07/07 09:47:49 YUZZHANG01 ship $
     $Header: pouer.lpc 120.2 2006/06/14 07:57:02 arudas noship $
     $Header: rvtlo.lpc 120.1.12010000.7 2013/01/05 16:02:14 gke ship $
     $Header: rvtoc.lpc 120.1.12010000.5 2013/03/28 22:38:31 vthevark ship $
     $Header: rvtpa.lc  120.6.12010000.3 2009/07/07 08:58:22 ksivasa ship $
     $Header: rvtpd.lc  120.1.12010000.3 2009/07/07 09:03:17 ksivasa ship $
     $Header: rvtsh.lpc 120.10.12010000.3 2009/03/06 22:09:40 vthevark ship $
     $Header: rvtth.lpc 120.29.12010000.9 2012/05/30 15:50:03 gke ship $
     $Header: rvtvt.lpc 120.9.12010000.10 2013/03/28 18:19:11 vthevark ship $
     $Header: rvsco.lpc 120.4.12010000.12 2012/09/27 23:10:24 vthevark ship $
     $Header: rvsrv.lpc 120.4.12010000.16 2013/02/04 07:34:37 zhizheng ship $
     $Header: rvsit.lpc 120.5.12010000.6 2013/02/04 07:26:30 zhizheng ship $
     $Header: rvsdl.lpc 120.5.12010000.17 2011/11/28 05:19:19 xiameng ship $
     $Header: rvssh.lpc 120.2.12010000.3 2009/07/07 09:56:26 ksivasa ship $
     $Header: rvsut.lpc 120.3.12010000.14 2012/05/28 04:53:57 gke ship $
     $Header: rvtcl.lpc 120.6.12010000.3 2009/07/07 09:15:25 ksivasa ship $
     $Header: rvtii.lpc 120.19.12010000.27 2013/08/14 09:58:23 gke ship $
     $Header: rvtls.lpc 120.7.12010000.14 2012/01/30 12:31:22 ksivasa ship $
     $Header: rvtoo.lpc 120.3.12010000.3 2009/07/07 09:08:40 ksivasa ship $
     $Header: rvsrq.lpc 120.5.12010000.3 2009/07/07 09:53:56 ksivasa ship $
     $Header: rvspo.lpc 120.3.12010000.3 2009/07/07 09:53:12 ksivasa ship $

这些文件是在 RTP log 里面经常见到的. 这里我们主要看看, 在这些文件中是用怎样的机制写 log 的.

首先, 要在要写日志的函数里面声明一个变量:

text     strbuf[BUFLEN+1];

然后用下面的语句:

    strcpy((char *)strbuf,"");
    sprintf((char *)strbuf,"RVTUQ:370 req_line_id %ld\n", (long)req_line_id);
    Debug(strbuf,TRUE,TRUE);

第一句把 strbuf 清空, 然后把后面的字符串和整型数写入 strbuf, 第三句 Debug 把 strbuf 写入日志. Debug 后面有两个参数:

#define Debug(message,check_sql_error,no_rows_is_error)

第二个参数 check_sql_error 表示 如果希望检查 SQL error, 就设为 TRUE, 否则设为 FALSE. no_rows_is_error 表示 是不是把 NO_DATA_FOUND 当做一个 error. 如果是, 设为TRUE.

Concurrent Request 里面的文件都是 .c 的代码, 如果里面要写SQL, 就要写一句:

    EXEC SQL
然后下面写上 SQL. 这句 SQL 有可能会出错, 这时需要一个方法把错误消息写到 log 里面去. 比如:
       EXEC SQL
       select transaction_id,
              unit_of_measure
         into :parent_trx_id,
              :rec_uom
         from rcv_transactions
        where transaction_type in ('RECEIVE','MATCH')
        start with transaction_id = :p_trx_id 
   connect by transaction_id = prior parent_transaction_id;

为了捕获这句SQL 可能发生的错误, 我们在这句后面写一句:

pouersql("RVTUQ", "134", FALSE )
pouersql() 这个函数是在 pouer.lpc 文件 (po user error) 中定义的, 如果上面的SQL 发生了错误, 那么就会把 error message 写入 message stack. 并且返回 true.

这里面有三个参数, routine, location, no_rows_is_err.

routine 表示SQL 发生错误的文件名, 上面的例子中是 RVTUQ.

location 表示SQL 发生错误的位置, 上面的例子中是 134. 这样我们看到日志里面的这个位置就很容易定位到这句SQL.

no_rows_is_err 表示 是不是把 NO_DATA_FOUND 当做 error 来处理. 上面的例子中我们没有当做 error.

在 pouersql 这个函数的内部, 会去sqlca 里面提取 sqlcode. sqlca 全称是: sql commu

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇开源ETL工具kettle--数据迁移 下一篇Greenplum环境安装配置步骤

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)
·Redis - The Real-ti (2025-12-26 08:20:50)
·Bash 脚本教程——Li (2025-12-26 07:53:35)
·实战篇!Linux shell (2025-12-26 07:53:32)