2014-07-15 2 views
1

Dans OracleEBS, il existe des modules comme, AP, AR, XLA, etc. Chaque module a son propre schéma nommé comme le nom du module correspondant. Il y a aussi le schéma APPS. Vous pouvez accéder à différentes tables à partir de schémas différents via un synonyme pour les objets créés dans le schéma APPS. Par exemple, il existe une table dans le schéma xla nommée xla.xla_transaction_entities et la table a un synonyme dans le schéma des applications. C'est, les deux requêtes suivantes doivent sélectionner produire ensemble de résultats identiques:La table et le synonyme de la même table produisent des résultats différents

select distinct entity_code from xla.xla_transaction_entities 

et

select distinct entity_code from apps.xla_transaction_entities 

Cependant, la deuxième requête a produit moins de résultats que le premier. Ensuite, j'ai supprimé et recréé le synonyme apps.xla_transaction_entities. Ce n'est qu'après avoir recréé le synonyme que les deux requêtes ci-dessus ont produit des ensembles de résultats identiques. La question est: pourquoi cela arriverait-il? Qu'est-ce qui a amené le synonyme à produire un ensemble de résultats différent? Pour autant que je sache, les synonymes ne sont que des synonymes. Comme leur nom l'indique, ils devraient produire le même ensemble de résultats que leurs tables correspondantes.

Edit: Dans un autre cas de test, je reproduit le même problème:

select distinct entity_code from apps.xla_transaction_entities 

produit les éléments suivants:

THIRD_PARTY_MERGE 
MANUAL 
INTER_ASSET_TRANSACTIONS 
TRANSACTIONS 
DEPRECIATION 

select distinct entity_code from xla.xla_transaction_entities 

produit les éléments suivants:

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' 

me donne ce qui suit:

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' 

produit les éléments suivants:

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 

Ainsi, vous pouvez voir que APPS.XLA_TRANSACTION_ENTITES po ints à XLA.XLA_TRANSACTION_ENTITIES. Et encore, une fois que je recréer le synonyme, le problème est parti. La raison pour laquelle cela me dérange tant est que la plupart des rapports personnalisés que nous avons codés utilisaient des synonymes au lieu de noms de tables réels. Ainsi, je me demande si à moins que je recrée tous les synonymes dans le schéma d'APPS le problème persistera ou non.

+0

Avant de laisser tomber et de recréer le synonyme, il aurait été conseillé de vérifier DBA_SYNONYMS pour voir ce qu'il pointait, alors qui aurait pu faire la lumière sur la question. – TenG

+0

Les informations requises sont fournies sous la forme d'une édition de la question. – Ahmedov

+0

Mon point était pour référence future de voir ces données avant que le synonyme soit abandonné si quelque chose de semblable se produit à nouveau. Comme pour le reste d'entre eux, vous pourriez peut-être vérifier toutes les lignes dans DBA_SYNONYMS où le synonyme_name! = Nom_table comme un début. – TenG

Répondre

1

Certaines tables des applications Oracle sont compatibles VPD. In this link you can find additional information

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 
0

Le tableau xla_transaction_entities est VPD (Base de données privé virtuel) permettent.

VPD est une fonctionnalité de sécurité qui permet à l'utilisateur de restreindre l'accès aux données de la base de données au niveau de la base de données.Supposons qu'un utilisateur est limité à extraire des données de l'application, mais qu'il peut utiliser des outils tels que SQLPlus pour extraire des données de la table. Pour limiter cela, l'administrateur de la sécurité ajoute un niveau de sécurité (un des trois types) toutes les lignes/colonnes ne sont pas récupérées. Par conséquent, au lieu d'utiliser apps.xla_transaction_entities, utilisez xla.xla_transaction_entities.

pour more info on VPD

0

Une autre solution à ce problème est d'utiliser le synonyme apps.xla_transaction_entities_upg

Cela ne nous oblige pas à contourner les paramètres de sécurité définis sur le xla_transaction_entities.

Source - Metalink Note: 2110926,1

Questions connexes