在CDHDR和CDPOS表中保留跟踪的表的列表

时间:2019-08-28 10:43:44

标签: sap hana sap-hana-cloud-connector

我想捕获所有可能的SAP表的更改。

我发现CDHDRCDPOS表捕获了变更文档,但尚不清楚它对所有表都执行此操作。

我有多个问题要问:

  1. 获取捕获了CDHDRCDPOS表的所有表的列表 更改文档。
  2. 由于CDPOS表仅包含更改的字段,因此我需要使用 表的主键。如何使用主键映射更改的记录 一张桌子?

2 个答案:

答案 0 :(得分:3)

要纯粹回答您的问题,我当然可以告诉您查看T代码SCDO以获得所需信息的线索,但是我会选择挑战您的推理方法。因此,您需要捕获所有可能的SAP表的更改。出于什么目的? CDHDRCDPOS跟踪成千上万个SAP表,并且那里的大多数表都无法为您带来直接的业务价值。只要表列包含BELNR_DGJAHR之类的数据元素,它就可能出现在CDHDR中,因为该元素被标记为“更改文档”标志(t代码{{1} }):enter image description here

SAP对标志的解释是:

  

变更文档标志指定当涉及变更文档对象时,是否记录对此数据元素定义的数据库表中字段的更改。

因此,要跟踪成千上万张表,单纯从技术角度解决问题不是一个好主意,我们甚至还没有开始研究SE11和{{1}的性能问题}。

如果您的需求是数据仓库项目的一部分,那么无需麻烦处理CDHDRCDPOS,您可以通过透明表或标准提取器来分析增量插入,删除和更新。如果可以使用DB触发器,那么SLT也可以选择以几乎实时的方式(默认设置为5秒的延迟)获取您感兴趣的表上的更改记录。

总而言之,要找到所需的内容,您可以导航至SAP菜单-工具-ABAP工作台-其他工具-更改文档,或仅输入t代码CDPOS。但是,我上面对业务需求的评论是我真正打算表达的。

答案 1 :(得分:1)

为什么不运行SELECT DISTINCT tabname FROM cdpos来获取所有表的实际列表?我想这应该足够了,因为您的SAP系统已经存在了一段时间。如果您自己做不到,请彻底问一个人。

在表CDPOS中,您将从列TABKEY中更改的对象的ID。如果主键由几列组成,则TABKEY是字符值的串联,其对齐方式基于每一列的大小。我不确定,但是我猜(CDPOS的TABNAME引用的表的主键列)始终具有字符类型。

可以使用以下SQL查询从ABAP词典中提取一个表的主键的列:SELECT fieldname, leng FROM dd03l WHERE tabname = 'one_table' AND fieldname LIKE '.%' AND keyflag = 'X' ORDER BY position(以点开头的列名称用于内部内容)。