IBM i上的SAP。数据库模式中对象的最大数量 - 我需要担心吗?

202 阅读4分钟

熟悉其他应用程序的人在第一次看到SAP ERP系统的主数据库模式时,通常会对其中的表、视图和索引的数量印象深刻。根据应用程序的组合和附加组件,你可以很容易地在一个SQL模式中拥有超过100,000个对象。有了这些数字,你可能会想,你是否需要担心任何数据库的限制。直到IBM i 7.2,记录的模式中的最大对象数量是 "大约360,000",自从IBM i 7.3,记录的限制是 "大约1,000,000"。你可能认为,还有很多空间。

不幸的是,在 "大约 "这个词中有一个小小的警告。每个SQL模式(或操作系统层面的库)都有一个对象信息库(OIR),它包含对该SQL模式中的程序、服务程序或SQL包所使用的表、视图和索引的引用。OIR有一个大小限制,如果达到这个限制,创建新对象的尝试就会失败,消息是CPD2120("无法向库中添加新对象......"),然后是SQL7032甚至SQL0901。OIR中每个对象所需的空间取决于对象中的引用数量,所以不可能预测OIR可以处理的对象的确切数量。这有关系吗?好吧,我们已经看到一些客户在IBM i 7.2上使用接近零停机维护(nZDM)选项升级SAP系统时遇到了这个限制。在升级过程中,大量的触发程序被创建,使其更容易达到极限。另一个促成因素可能是OIR的碎片化:当对象被删除和新对象被创建时,如果新对象适合于未使用的OIR空间,系统才会重新使用被删除对象所占用的空间。否则,被删除的空间就不能被重新使用,并保持未使用状态。

大多数客户不需要担心达到限制,而那些拥有较大数量对象的客户可以采取措施,避免碰到限制。显然,当你还在IBM i 7.2甚至IBM i 7.1的时候,你应该考虑在开始SAP升级之前升级到IBM i 7.3或者更高。新的大约1,000,000个对象的限制被超过的可能性较小,所以你可能没有问题。如果你想在SAP升级前检查你的系统,你可以通过你选择的工具,如STRSQL或IBM i Access Client Solutions执行以下SQL语句。

SELECT DISTINCT SYSTEM_OBJECT_NAME,
                OBJECT_TYPE,
                CURRENT_VALUE,
                MAXIMUM_VALUE,
                LAST_CHANGE_TIMESTAMP
  FROM QSYS2.SYSLIMITS
 WHERE SIZING_NAME = 'MAXIMUM NUMBER OF OBJECT DESCRIPTION ENTRIES IN A LIBRARY'
   AND SYSTEM_OBJECT_NAME = 'R3<sid>DATA'
 ORDER BY LAST_CHANGE_TIMESTAMP DESC

如果查询没有返回任何数据,或者返回的 "CURRENT_VALUE "明显小于返回的 "MAXIMUM_VALUE",你就不需要担心。如果 "CURRENT_VALUE "接近 "MAXIMUM_VALUE",你有以下选择来增加它们之间的差异。

  1. 在任何操作系统层面上,以模式名称为参数调用API QEXCLNCI,以使被删除的条目所占用的OIR空间得到重新利用。注意,该API是由操作系统的选项5("System/36 Environment")提供的。这个选项在你的IBM i媒体上,并且包含在基本操作系统许可中。这里记录了该API。使用 API QSSP/QEXCLNCI 清理未使用的对象信息库条目(ibm.com)。这是最简单的选择。
  2. 如果API还不够,通过执行RCLSTG(需要系统的限制状态)或保存、删除和恢复数据库模式来回收OIR中未使用的空间。考虑你的LPAR上的SAP系统的数量,以及其中有多少是接近极限的,以便知道是使用RCLSTG来清理所有的东西,还是使用保存/恢复程序来回收感兴趣的那一个OIR的空间。
  3. 如果你是在 IBM i 7.2 或以下,请升级到 IBM i 7.3 或以上。这可能比方案 2 更加可取,因为它大大增加了限制,而且可能比完整的 RCLSTG 需要更少的停机时间。
  4. 如果前面的选项对你来说都不可行,就在没有nZDM选项的情况下执行计划的升级。

你也可以在SAP Note 3106299中找到这些信息。