2010-03-02 17 views
26

Tengo la sintaxis baja, pero me pregunto si alguien puede proporcionar un caso de uso ilustrativo donde los sinónimos de la base de datos son muy útiles.¿Cuándo deberían utilizarse los sinónimos de la base de datos?

+2

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

+1

Característica completamente inútil: http://vadimtropashko.wordpress.com/2012/12/12/synonyms-do-we-need -them/ –

Respuesta

16

Es excelente para organizar simulacros de tablas durante la prueba. Por ejemplo, si las tablas de origen contienen millones de registros y desea probar un pequeño subconjunto de datos, puede usar sinónimos para redirigir la tabla de origen a una tabla más pequeña que controle, de modo que pueda organizar varios escenarios.

De esta manera, puede actualizar/eliminar los datos en la tabla simulada sin afectar a su tabla fuente. Cuando esté listo para usar la tabla fuente, todo lo que necesita hacer es redirigir el sinónimo.

+0

Por supuesto, los sinónimos públicos le permiten hacer referencia a un objeto sin la necesidad de la sintaxis schema.object que aumenta la legibilidad de PL/SQL y el código SQL. –

+2

@Darren Atkinson: Y los sinónimos públicos aumentan las posibilidades de colisiones de nombres si alguna vez decide consolidar las bases de datos. –

+0

cuán útiles son en el caso de los paquetes, recientemente no pude acceder a un paquete desde mi aplicación a pesar de que la concesión de ejecución estaba allí. Después de crear el sinónimo, pude acceder al paquete desde la aplicación. – viveksinghggits

0

Digamos, cuando necesita hacer una aplicación mal escrita (que no emite ALTER SESSION SET CURRENT_SCHEMA) para trabajar contra otro esquema.

Los sinónimos se utilizan principalmente como una solución para casos como ese. Con una aplicación debidamente escrita, casi nunca tendrá que usarlos.

+0

No estoy de acuerdo con la idea de que los sinónimos son inútiles para las aplicaciones "escritas correctamente". Los uso todo el tiempo para evitar los nombres de los esquemas de codificación en mi aplicación. Por ejemplo, podría tener una vista que une dos tablas; si necesito mover una de las tablas a otro esquema, 'ALTER SESSION SET CURRENT_SCHEMA' no funcionará. –

2

Cuando tiene nombres de objeto de base de datos codificados dentro del código existente.

El uso de sinónimos puede ahorrarle la agonía de volver a escribir el código anterior, a veces de varias fuentes, que tiene sus propias ideas sobre la tabla o los nombres de las bases de datos.

He visto, por ejemplo, un código que fue escrito para algún servidor de producción. El codificador ha convenientemente codificado el nombre de la tabla principal es test_data, que funcionó bien en su estación de trabajo. Utilizar sinónimos en lugar de reescribir su código me hizo llegar a casa temprano.

5

Normalmente veo sinónimos utilizados cuando el DBA desea separar objetos de la base de datos en diferentes esquemas, pero quiere/necesita que algunos de estos objetos sean visibles para otros esquemas (pero no quiere darles acceso directo).

Un ejemplo que he visto más recientemente: varias aplicaciones web administradas por la misma compañía. Los usuarios generalmente tienen acceso a más de una de estas aplicaciones, y solo tendrán una cuenta de usuario para acceder a estas aplicaciones. La información de la cuenta de usuario se almacena en un esquema USER_ACCOUNTS, y todas las demás aplicaciones están en sus propios esquemas y tienen acceso al esquema USER_ACCOUNTS a través de sinónimos.

10

Eche un vistazo a Oracle documentation on synonyms.

Además de las otras respuestas aquí, también se usan comúnmente para:

  • Proporcionar fácil de usar nombres de tablas remotas, es decir, sobre la base de datos vincula
  • Tablas que debe ser accesible a todos usuarios, es decir, sinónimos públicos
1

En general, es una mala práctica incorporar nombres de esquema en SQL o PL * SQL. Por lo tanto, si está escribiendo un código que debe referirse a una tabla en otro esquema como: "select id from OtherSchema.OtherTable", es mejor que defina un sinónimo para la tabla (cree el sinónimo OtherTable para OtherSchema.OtherTable) y escriba "select id" de OtherTable ".

De esta manera, si OtherTable se mueve a un nombre de esquema diferente, o si tiene otra instalación del sistema que usa un nombre de esquema diferente, puede redefinir los sinónimos en lugar de cambiar el código.

También se puede usar para cambiar el código entre dos esquemas con la misma estructura al redefinir los sinónimos.

Cuestiones relacionadas