我想捕获所有可能的SAP表的更改。
我发现CDHDR
和CDPOS
表捕获了变更文档,但尚不清楚它对所有表都执行此操作。
我有多个问题要问:
CDHDR
和CDPOS
表的所有表的列表
更改文档。CDPOS
表仅包含更改的字段,因此我需要使用
表的主键。如何使用主键映射更改的记录
一张桌子?答案 0 :(得分:3)
要纯粹回答您的问题,我当然可以告诉您查看T代码SCDO
以获得所需信息的线索,但是我会选择挑战您的推理方法。因此,您需要捕获所有可能的SAP表的更改。出于什么目的? CDHDR
和CDPOS
跟踪成千上万个SAP表,并且那里的大多数表都无法为您带来直接的业务价值。只要表列包含BELNR_D
和GJAHR
之类的数据元素,它就可能出现在CDHDR
中,因为该元素被标记为“更改文档”标志(t代码{{1} }):
SAP对标志的解释是:
变更文档标志指定当涉及变更文档对象时,是否记录对此数据元素定义的数据库表中字段的更改。
因此,要跟踪成千上万张表,单纯从技术角度解决问题不是一个好主意,我们甚至还没有开始研究SE11
和{{1}的性能问题}。
如果您的需求是数据仓库项目的一部分,那么无需麻烦处理CDHDR
和CDPOS
,您可以通过透明表或标准提取器来分析增量插入,删除和更新。如果可以使用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
(以点开头的列名称用于内部内容)。