设为首页 收藏本站
查看: 1075|回复: 0

[经验分享] SAP BW增量队列解析感悟

[复制链接]

尚未签到

发表于 2015-9-18 13:44:47 | 显示全部楼层 |阅读模式
  技术贴,转自:http://www.sap.cm/thread-351-1-1.html

  前段时间由于特殊情况R3系统和BW系统断开不能互联,但是用户还要查询系统数据,这就给IT提出了比较大的挑战,我们需要研究怎么把R3中Delta Queue的数据读取出来并且传送到BW系统中,要解决这一问题我们首先需要查询数据了解Delta Queue的存储原理及结构,然后查找Delta Queue的读取方法,最后还要处理读取的数据如何传送的BW系统中,以下是我们解决此问题采用的方法供大家参考,有不当之处请及时指出。
一、Delta Queue的存储原理及结构:
BW Delta Queue是一种基于SAP Web Application servers RFC技术的队列功能(qRFC), Delta Queue的数据主要存放在以下三个表中:
a. TRFCQOUT:Client Dependent pointer table per queue name and destination
依赖Client的库表,主要存储每个TID的RFC Queue的名称及RFC的目标客户端Destination,以及此RFC调用的Function Module名称还有TID的读取状态等信息;
b. ARFCSSTATE:Link between TRFCQOUT and ARFCSDARA
不依赖Client的库表,主要存放每个TID的读取状态,是连接库表TRFCQOUT和库表ARFCSDARA的中间桥梁;
c. ARFCSDATA:Compressed data for tRFC/qRFC
不依赖Client的库表,主要存放每个TID即Delta Queue的具体数据内容以压缩方式存放;
另外一个比较重要的库表ROOSPRMSC[Control Parameter Per DataSource Channel],主要存放每个DataSource的相关重要信息,包括目标客户端,做Initial的Request Number及具体时间以及上一次做Delta的Request Number及时间,还有两个重要的字段GETTID和GOTID;
TID= Host ID (IP ID) +Process ID +Timestamp+Transaction ID (LUW)
GETTID:This field refers to the last but one delta TID
GOTTID:This field refers to the last delta TID (that has reached to BW)
当用户每次在BW做Delta数据拉取时,R3系统首先将大于GETTID并且小于等于GOTTID的DeltaQueue数据删除,然后将GETTID值更新为GOTTID的值,同时将新读取的TID作为GOTTID的值;
更详细内容可以参考:

二、Delta Queue数据解析方法:
如何查找Delta Queue的读取方法,主要通过Debug系统标准程序方式来查找Delta Queue解析原理,目前发现有三种方式来解析Delta Queue的数据,其中综合起来第三种方式最方便和灵活,由于Delta Queue采用压缩机制,因此在读取时我们需要分批次按TID来读取压缩数据防止内表溢出,详细处理如下:
1.RSA3的读取方式:
l_t_fields-fieldnm = 'CURRUNIT'.
APPEND l_t_fields.
l_t_fields-fieldnm = 'QUANTITY'.
APPEND l_t_fields.
l_t_fields-fieldnm = 'QUANUNIT'.
APPEND l_t_fields.
CALL FUNCTION 'RSFH_GET_DATA_SIMPLE'
    EXPORTING
         i_requnr             = 'TEST'
         i_osource            = '0EC_PCA_1'
         i_maxsize            = '999999'
         i_forcegen           = ''
         i_maxfetch           = '9999'
         i_updmode            = 'F'
         i_debugmode          = ''
         i_rlogsys            = 'BWPCLNT891'
         i_read_only          = 'X'
    TABLES
         i_t_select           = l_t_select
         i_t_field            = l_t_fields
         e_t_data             = e_t_data
    EXCEPTIONS
         generation_error     = 1
         interface_table_error = 2
         metadata_error       = 3
         no_authority         = 4
         OTHERS               = 5.
2.RSA7读取Delta Queue数据方式:
...
Data: Begin of Z1SCHAR30K.
        WA(8000) TYPE C.
DATA: END OF Z1SCHAR30K.
Data:E_T_DATA like of Z1SCHAR30K.
SUBMIT zrsa1qmon WITH s = datasourcetype
               WITH rs = 'BWPCLNT891'
               WITH ss = 'CQA701'
               WITH so_dpack IN so_dpack
               WITH so_recno IN so_recno
               WITH p_updmod = 'D'
               WITH p_maxsz = '10'
               WITH p_maxrec = '1000'
    AND RETURN .
IMPORT e_t_data FROM MEMORY ID 'BW_DELTA_ID'.
…
3.直接读取ARFCSDATA的数据,解析压缩数据Function示例如下:
<例子:读取Sales段的Billing明细Delta Queue资料>
DATA: l_func LIKE arfcsstate-arfcfnam .
data: lt_arfcsdata like STANDARD TABLE OF arfcsdata WITH HEADER LINE.
DATA: lt_13_vditm LIKE STANDARD TABLE OF /BI0/C_0006 WITH HEADER LINE.
IF DATASOURCETYPE = '2LIS_13_VDITM'.
l_func = '/BI0/QI2LIS_13_VDITM0001'.
ENDIF.
   CALL FUNCTION 'TRFC_QOUT_PLAYBACK'
     EXPORTING
      IF_FNAME              = l_func
     TABLES
       sdata                 = lt_arfcsdata
       ATAB01                = lt_13_vditm.
*   CALL FUNCTION 'RSC2_QOUT_PLAYBACK'
*     EXPORTING
*      IF_FNAME              = l_func
*     TABLES
*       sdata                 = lt_arfcsdata
*       ATAB01                = lt_12_VCITM.
*           
三、Delta Queue数据传送BW系统:
当Delta Queue数据读取出来后如何传送到BW系统,目前采用两种途径来处理:
1.R3程序拋砖FlatFile到FTP, BW系统从FTP读取数据;
2.通过中间程序VB来连接R3系统和BW系统,从R3系统读取数据然后写入BW系统中;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115481-1-1.html 上篇帖子: sap interview tips 下篇帖子: SAP BW 基础知识(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表