1

在 OracleEBS 中,有 AP、AR、XLA 等模块。每个模块都有自己的模式,其名称与相应的模块名称相同。还有APPS模式。您可以通过在 APPS 模式中创建的对象的同义词访问来自不同模式的不同表。例如,在 xla 架构中有一个名为 xla.xla_transaction_entities 的表,并且该表在应用程序架构中有同义词。也就是说,以下两个选择查询应该产生相同的结果集:

select distinct entity_code from xla.xla_transaction_entities

select distinct entity_code from apps.xla_transaction_entities

但是,第二个查询产生的结果比第一个少。然后,我删除并重新创建了 apps.xla_transaction_entities 同义词。只有在重新创建同义词之后,上述两个查询才会产生相同的结果集。问题是,为什么会发生?是什么导致同义词产生不同的结果集?据我所知,同义词就是——同义词。顾名思义,它们应该产生与其对应的表相同的结果集。

编辑:在另一个测试实例中,我重现了同样的问题:

select distinct entity_code from apps.xla_transaction_entities

产生以下内容:

THIRD_PARTY_MERGE
MANUAL
INTER_ASSET_TRANSACTIONS
TRANSACTIONS
DEPRECIATION

select distinct entity_code from xla.xla_transaction_entities

产生以下内容:

AP_PAYMENTS
RCV_ACCOUNTING_EVENTS
THIRD_PARTY_MERGE
MANUAL
ADJUSTMENTS
PURCHASE_ORDER
MTL_ACCOUNTING_EVENTS
RECEIPTS
INTER_ASSET_TRANSACTIONS
AP_INVOICES
TRANSACTIONS
DEPRECIATION

  select * from dba_synonyms
  where synonym_name = 'XLA_TRANSACTION_ENTITIES'

给了我以下内容:

OWNER   SYNONYM_NAME              TABLE_OWNER   TABLE_NAME,               DB_LINK
APPS    XLA_TRANSACTION_ENTITIES  XLA           XLA_TRANSACTION_ENTITIES

select * from dba_synonyms
where TABLE_NAME = 'XLA_TRANSACTION_ENTITIES'

输出以下内容:

OWNER    SYNONYM_NAME                   TABLE_OWNER    TABLE_NAME               DB_LINK
APPS     XLA_TRANSACTION_ENTITIES       XLA            XLA_TRANSACTION_ENTITIES
APPS     XLA_TRANSACTION_ENTITIES_UPG   XLA            XLA_TRANSACTION_ENTITIES

因此,您可以看到 APPS.XLA_TRANSACTION_ENTITES 指向 XLA.XLA_TRANSACTION_ENTITIES。再一次,一旦我重新创建了同义词,问题就消失了。这让我如此困扰的原因是因为我们编写的大多数自定义报告都使用了同义词而不是实际的表名。所以,我想知道除非我在 APPS 模式中重新创建所有同义词,否则问题是否会持续存在。

4

3 回答 3

1

Oracle 应用程序中的某些表启用了 VPD。在此链接中,您可以找到更多信息

Are you using MO view like ap_invoices?
  For all org_ids' data      -> Use `ap_invoices_all`
  For specific org_id's data -> 11i -> `dbms_application_info.set_client_info(&org_id);`
                                R12 -> `mo_global.set_policy_context('S',&org_id);`

Are you using VPD enabled tables like xla_transaction_entities?
  For specific application's data -> xla_security_pkg.set_security_context(&appl_id);
  For all applications' data      -> xla_security_pkg.set_security_context(602);
                                    (Or) Use xla.xla_transaction_entities
                                    (Or) Use xla_transaction_entities_upg
于 2014-07-16T05:40:15.717 回答
0

此问题的另一个解决方案是使用同义词apps.xla_transaction_entities_upg

这不需要我们绕过xla_transaction_entities.

来源 - Metalink 注:2110926.1

于 2018-02-14T15:23:27.953 回答
0

xla_transaction_entities表是VPD(Virtual Private Database) enable 。

VPD是一项安全功能,允许用户在数据库级别限制从数据库访问数据。假设用户被限制从应用程序中获取数据,但他可以使用 SQLPlus 等工具从表中获取数据。为了限制这一点,安全管理员添加了一个安全级别(3 种类型之一)并不会获取所有行/列。

所以不要使用apps.xla_transaction_entitiesuse xla.xla_transaction_entities

有关 VPD 的更多信息

于 2017-12-05T11:12:01.620 回答