web-dev-qa-db-fra.com

Oracle 12C - Créer une vue matérialisée Résultats dans ORA-00942

J'ai une idée que je peux accéder via un lien de base de données en tant que telle:

SQL> select count(*) from REMOTE_SCHEMA.REMOTE_VIEW@REMOTE_DB;

COUNT(*)
--------
110

Je peux créer et interroger avec succès la vue distante via un synonyme:

SQL> create synonym REMOTE_VIEW for REMOTE_SCHEMA.REMOTE_VIEW@REMOTE_DB;

Synonym created

SQL> select count(*) from REMOTE_VIEW;

COUNT(*)
--------
110

Si j'essaie de créer une vue matérialisée à l'aide du synonyme, il échoue:

SQL> create materialized view REMOTE_MV
build immediate
refresh complete
next sysdate+1
with ROWID
as
select * from REMOTE_VIEW;

ORA-00942: table or view does not exist

Créer la vue matérialisée sans le synonyme réussit:

SQL> create materialized view REMOTE_MV
build immediate
refresh complete
next sysdate+1
with ROWID
as
select * from REMOTE_SCHEMA.REMOTE_VIEW@REMOTE_DB;

Materialized view created

Des idées pourquoi utiliser le synonyme échoue? Idéalement, j'aimerais utiliser le synonyme d'isoler la vue matérialisée à partir du lien de base de données. Le lien de base de données pourrait différer en fonction de l'environnement et je souhaite que la requête de visualisation matérialisée reste la même indépendamment.

4
user109164

Réussi à comprendre! Vous Can Créer des vues matérialisées sur Synonymes, mais c'est mon manque de compréhension de la redéfinition basée sur les éditions (EBR) qui causait les problèmes.

Synonymes privés par défaut est éditionable:

Créer synonyme

[Éditionable | Non émis]

Utilisez ces clauses pour spécifier si le synonyme est un objet édition ou non édition si l'édition est activée pour le type d'objet de schéma Synonyme de Schema. Pour les synonymes privés, la valeur par défaut est éditionable. Pour les synonymes publiques, la valeur par défaut est non émis.

Des vues matérialisées sont toutefois des objets non évités:

tilisation de la redéfinition à base d'édition

24.1.1.2.1 Vues matérialisées

Une vue matérialisée est un objet non traité qui peut spécifier une édition d'évaluation, ce qui lui permet de dépendre des objets édition.

Créer une vue matérialisée [Schéma.] Matérialisations_View Autres_Clauses [Evaluation_edition_Clause] [Query_rewrite_clause] comme sous-requête

Où l'évaluation_edition_edition_clause est la suivante:

Évaluer en utilisant {Edition actuelle | Édition édition | NULL EDITION}

L'édition actuelle est l'édition dans laquelle l'instruction DDL est exécutée. Spécifier l'édition NULL est équivalente à l'omission de la clause qui l'inclut. Si vous omettez l'évaluation_edition_edition_édoition, les objets éditions sont invisibles lors de la résolution de noms.

J'ai donc testé avec succès deux options pour résoudre le problème:

  • Option 1 - Faites le synonyme non émis, auquel cas il sera visible pour la vue matérialisée ou
  • Option 2 - Spécifiez l'évaluation_edition_DITION sur la vue matérialisée.
1
user109164

Utilisez l'instruction Créer une vue matérialisée pour créer une vue matérialisée. Une vue matérialisée est un objet de base de données contenant les résultats d'une requête. La clause de la requête peut nommer des tables, des vues et d'autres vues matérialisées. plus

Vous ne pouvez pas créer de vue matérialisée à partir de synonyme. Je ne sais pas pourquoi voudriez-vous cela, mais nous créons une vue matérialisée comme exemple de travail.

2
JSapkota