on 10-05-2010 9:16 AM
接着上次的,先聊一下PSA table内容的删除。
首先PSA table的内容都是和request关联的(上次有提到怎么看关联)。
而且在BW系统脱离request存在的数据抽取是不现实的。
(这句话怎么理解有些微妙, 比方说ODS的active table, 比方compress过的cube的E-table,request就被压缩掉了..)
所以一般认为要删除数据,就是要去删除request..
而事实上删除PSA的requeset, 并不会物理删除PSA table,而只是在RSTSODSPART里标注一个删除记号。 只有当一个partition上的request都被做了标记,才会做物理删除..
具体内容大家可以参考一下 SAP note 565176..
(以上这些只适用于oracle DB. 如果是其他的DB, PSA tables分区方式不一样,又是另外的故事了..)
然后再介绍几个PSA table的修理和检查工具..
1. RSAR_PSA_PARTITION_CHECK
这个是用来检查PSA table的索引和分区的。Note 1012607有颇为详细的介绍.
2. SAP_PSA_ZEROCORRECT / SAP_PSA_PARTNO_CORRECT
那是针对 PARTNO 被赋值为 0 的现象.
如果数据量很大,请使用 ZSAP_PSA_ZEROCORRECT_PARTS
3. RSAR_PSA_CLEANUP_DIRECTORY /_MS
这个用来检查PSA的目录表和PSA自身之间是否有不一致的数据.
往往是adminitrative table里已经显示被删掉了,但实际物理存储还有的情况。
如果发生这种情况,之前提到的PSA table的删除就无法正常进行,数据就会冗余,无效地占用硬盘空间..
4. RSAR_PSA_CLEANUP_DEFINITION
检查PSA table和DDIC之间是否有不一致.
详细请参考 SAP note 699125.
以上内容,SAP note 1150724都有介绍..
个人觉得需要留意的是BW系统使用的是哪个DB, 不同DB对PSA table的分区方式不同,
于是纠错方法和管理方法也会不同。
祝好,
Vince
Edited by: Vince Lu on Oct 5, 2010 4:16 PM
vince Lu
我删除了一个PSA的所有请求,日期也选了一个非常古老的日期,确定是请求被我删干净了。但我通过DTP加载时,仍然有1000多条数据,而我通过table RSTSODSPART查看删除情况时,确实有一个分区中,有一个1000多条数据的请求的删除标记不是X,但我就是没明白,为啥我在PSA把请求都已经删完了,但RSTSODSPART表里面却还有一个请求的删除标记不为X,通过RSRQ查看这个请求,发现技术状态是黄灯,而最终状态是绿灯。
请问一下,存在我这样的情况,一般是为什么呢?
以上,祝好~
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
猛一看还以为是石油行业的PSA解决方案呢。呵呵
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Vince Lu 你好
感谢你的回复!
我还有个疑问: 假设一个数据源对应的PSA有个分区,里面有10个请求,我不小心删除了其中一个,现在这个被删除的请求,还能恢复吗? 就是可以在前台查看PSA的界面里可以看到这个被删除的请求.
祝好!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Vince Lu 谢谢您的分享
我有个问题想请教一下.
"而事实上删除PSA的requeset, 并不会物理删除PSA table,而只是在RSTSODSPART里标注一个删除记号。 只有当一个partition上的request都被做了标记,才会做物理删除"
我怎么去掉已经在RSTSODSPART这个表里标注删除记号的REQUEST,让这个请求重新在DS对应的前台里出现.?
因为我查看您给的那几个系统PSA程序,好象没有可以恢复已经在前台删除请求的REPORT.
请赐教!!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Xinzhai,
或许有些误会..
"只是在RSTSODSPART里标注一个删除标记"里的"只"强调的是 PSA table本身(也就是实际存放PSA内容的 /bic/b*000 这个PSA 表) 不一定会被立刻删除(只有当整个paritition的request在RSTSODSPART里被标上删除标记).. 提这一点的侧重点是PSA的空间管理.
实施上删除PSA表时,有一系列表,比方说 RSREQICODS, 会被删除相关的entry.
所以单纯修改 RSTSODSPART 里的deletion flag不能恢复数据。并且不建议直接修改RSTSODSPART 表,以免发生不必要的数据不整合。 RSTSODSPART 这个表本身就设定为不能修改的。想要修改的话,要么进debug mode"作弊",要么些local sql去改.. 在没有SAP相关部门的提示下, 不建议客户做这一步..
以上,祝好..
Vince
谢谢vince!
实际中,特别是增量更新的psa,技术状态显示未往上更新,可在往dso加载时,显示传输数据为0,不管加载多少次,都是0,而再执行一次delta的psa,再往上加载时,两次执行的信息包的数据全部加载上去了,我就奇怪了,为什么前一次的就是无法往上更新了,并且我发现,这种情况很多时候是在我往dso加载过程中,出错,然后删掉dso对应的这个请求,再次加载就是0,而这个时候,我将DTP的语义组中的勾全部去掉,再次激活,再传输,又成功加载上了。可有时候这样也不管用,只有加载第二次后,再网上传输,前一次的数据才会连带一起上载
我还遇到过在psa表中,请求是全部被我删光了,但往上加载时,仍然有数据,这种情况是不是你说的,只给了一个删除标志,而非真正的物理删除,用的是sql server 2005,这种情况下,是不是要借助RSAR_PSA_CLEANUP_DIRECTORY /_MS ?
还有,我在通过psa往信息对象加载主数据时,比如0PRICE_LIST(价格清单类型),它只包含文本,TEXTS 0PRICE_LIST(价格清单类型 (文本)),我把数据从psa加载到它时,每次都有一个请求,对于主数据,每天都会抽取,也就生成了很多个请求,请问一下,加载到TEXTS 0PRICE_LIST的请求的数据,是否只保存到了table /BI0/TPRICE_LIST,就如传输到DSO的请求,并且使用关键值覆盖那样,虽然传输了多个请求,但只更新新的数据到数据表,或者,TEXTS 0PRICE_LIST(价格清单类型 (文本))本身就对应一个数据表,然后每次有请求,就把数据扔里面,然后再去更新/BI0/TPRICE_LIST,这张假设,主要是想到每次有新数据更新,都需要激活,不然取到的数据仍然是之前的。 并且,右键点击TEXTS 0PRICE_LIST(价格清单类型 (文本)),选择管理,有几百个请求,有没有什么方法可以一次性全部删掉啊?或者删掉30天之前的,处理链可以删掉30天之前加载的信息包,但这个请求貌似删不掉。
不好意思,自己写得有些杂,您有空的时候帮我解答一下吧,再次感谢Vince~
3Q
Best Regard!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.