2010-03-02 10 views
26

Ho la sintassi giù ma mi chiedo se qualcuno possa fornire un caso d'uso illustrativo in cui i sinonimi dei database sono molto utili.Quando devono essere utilizzati i sinonimi dei database?

+2

Link: http://www.dba-oracle.com/concepts/synonyms.htm –

+1

Funzione assolutamente inutile: http://vadimtropashko.wordpress.com/2012/12/12/synonyms-do-we-need -them/ –

risposta

16

È eccellente per la gestione di tabelle fittizie durante il test. Ad esempio, se le tabelle di origine contengono milioni di record e si desidera testare un piccolo sottoinsieme di dati, è possibile utilizzare i sinonimi per reindirizzare la tabella di origine a una tabella più piccola che si controlla in modo da poter mettere in scena vari scenari.

In questo modo, è possibile aggiornare/eliminare i dati nella tabella fittizia senza influire sulla tabella di origine. Quando sei pronto per utilizzare la tabella di origine, tutto ciò che devi fare è reindirizzare il sinonimo.

+0

Ovviamente, i sinonimi pubblici consentono di fare riferimento a un oggetto senza che la sintassi dello schema.object aumenti la leggibilità di PL/SQL e del codice SQL. –

+2

@Darren Atkinson: E i sinonimi pubblici aumentano la possibilità di colmare il nome se si decide di consolidare i database. –

+0

quanto sono utili in caso di pacchetti, di recente non ero in grado di accedere a un pacchetto dalla mia applicazione anche se la concessione di esecuzione era lì. dopo aver creato il sinonimo sono stato in grado di accedere al pacchetto dall'applicazione. – viveksinghggits

0

Dire, quando è necessario creare un'applicazione scritta male (che non emette ALTER SESSION SET CURRENT_SCHEMA) per funzionare contro un altro schema.

I sinonimi sono principalmente utilizzati come soluzione alternativa per casi come quello. Con un'applicazione correttamente scritta, non dovrai quasi mai usarli.

+0

Non sono d'accordo con l'idea che i sinonimi siano inutili per le applicazioni "scritte correttamente". Li uso sempre per evitare i nomi degli schemi hardcoding nella mia applicazione. Ad esempio, potrei avere una vista che unisce due tabelle; se ho bisogno di spostare una delle tabelle in un altro schema, 'ALTER SESSION SET CURRENT_SCHEMA' non funzionerà. –

2

Quando i nomi degli oggetti del database sono codificati nel codice esistente.

L'utilizzo di sinonimi potrebbe risparmiare l'angoscia di riscrivere il vecchio codice, a volte da più fonti, che ha le proprie idee sulla tabella o sui nomi di database.

Ho visto, ad esempio, un codice che è stato scritto per alcuni server di produzione. Il codificatore è convenientemente codificato il nome della tabella principale è test_data, che ha funzionato bene sulla sua workstation. Usare sinonimi piuttosto che riscrivere il suo codice mi ha portato a casa presto.

5

Di solito vedo i sinonimi utilizzati quando l'amministratore di database desidera separare gli oggetti di database in schemi diversi, ma desidera/richiede che alcuni di questi oggetti siano visibili ad altri schemi (ma non vuole concedere loro l'accesso diretto).

Un esempio che ho visto più di recente: diverse app Web gestite dalla stessa azienda. Gli utenti di solito hanno accesso a più di una di queste app e avranno solo un account utente per accedere a queste app. Le informazioni dell'account utente sono memorizzate in uno schema USER_ACCOUNTS e tutte le altre app sono nei propri schemi e accedono allo schema USER_ACCOUNTS tramite sinonimi.

10

Controlla il Oracle documentation on synonyms.

In aggiunta alle altre risposte qui, sono anche comunemente utilizzati per:

  • Fornendo un facile da usare i nomi per le tabelle remote, cioè su collegamenti di database
  • tabelle che avete bisogno di essere accessibile a tutti utenti, ovvero sinonimi pubblici
1

In generale, è una pratica scorretta incorporare i nomi di schema in SQL o PL * SQL. Quindi, se stai scrivendo un codice che deve fare riferimento a una tabella in un altro schema come: "seleziona id da OtherSchema.OtherTable", ti consigliamo di definire un sinonimo per la tabella (crea sinonimo OtherTable per OtherSchema.OtherTable) e scrivi "select id" da OtherTable ".

In questo modo, se OtherTable si sposta su un nome schema diverso o si dispone di un'altra installazione del sistema che utilizza un nome schema diverso, è possibile ridefinire i sinonimi anziché modificare il codice.

Può anche essere utilizzato per passare il codice tra due schemi con la stessa struttura ridefinendo i sinonimi.

Problemi correlati