Oracle: è possibile creare un sinonimo per uno schema?
Domanda
In primo luogo
Sono un newbie Oracle, e non ho un guru oracolo locale per aiutarmi.
Ecco il mio problema / domanda
ho alcuni script SQL che devono essere rilasciato per un numero di istanze di Oracle.
Gli script creano stored procedure.
Lo schema in cui vengono create le stored procedure è diverso dallo schema che contiene le tabelle da cui le stored procedure stanno leggendo.
Sulle diverse istanze, lo schema contenente le tabelle ha nomi diversi.
Ovviamente, io non voglio avere a modificare gli script per farli su misura per diverse istanze.
È stato suggerito a me che la soluzione potrebbe essere quella di istituire sinonimi.
E 'possibile definire un sinonimo per lo schema della tabella in ogni istanza, e utilizzare il sinonimo nei miei script?
Ci sono altri modi per fare questo lavoro senza modificare gli script ogni volta?
Grazie per qualsiasi aiuto.
Soluzione
Sarebbe utile sapere quale versione di Oracle, ma come di 10g - No, non è possibile effettuare un sinonimo di uno schema
.
È possibile creare i sinonimi di tabelle, che consentirebbe di non si specifica lo schema negli script. Ma significa che i sinonimi devono essere identici in ogni istanza per essere di qualche utilità ...
L'altra opzione sarebbe quella di sostituire i riferimenti dello schema con variabili, in modo che quando lo script viene eseguito all'utente viene richiesto per i nomi di schema. Preferisco questo approccio, perché è meno lavoro. Ecco un esempio che avrebbe funzionato in SQLPlus:
CREATE OR REPLACE &schema1..vw_my_view AS
SELECT *
FROM &&schema2..some_other_table
La bellezza di questo è che la persona che esegue lo script sarebbe richiesto solo una volta per ogni variabile, non ogni volta che si incontra la variabile. Quindi state attenti a errori di battitura:)
Altri suggerimenti
Sì, è possibile creare sinonimo di uno schema.
select ksppinm, ksppstvl from x$ksppi a, x$ksppsv b where a.indx=b.indx and ksppinm like '%schema%synonym%'
ALTER SYSTEM SET "_enable_schema_synonyms" = true SCOPE=SPFILE;
STARTUP FORCE
show parameter synonym
Supponendo che si dispone già di uno schema di nome ORA ...
CREATE SCHEMA SYNONYM ORASYN for ORA; -- create synonym for schema
CREATE TABLE ORASYN.TAB1(id number(10)); -- create table in schema
Maggiori informazioni qui: http: // oracle -network.com/database/how-to-create-synonym-for-a-schema/
Sì, c'è un modo nascosto per creare un sinonimo schema.
C'è un _enable_schema_synonyms
parametro nascosto. E 'falso per impostazione predefinita, ma è possibile impostare a true e creare un sinonimo.