2009-10-13 9 views
5

Realmente debería saber esto, pero ¿alguien me diría cómo cambiar la base de datos predeterminada en Linux?En Oracle, ¿cómo se cambia la base de datos 'predeterminada'?

Por ejemplo:

que tienen una base de datos en test1 con ORACLE_SID=test1. Por lo tanto, para conectarse a test1 puedo usar:

sqlplus myuser/password 

se conecta a la base de datos predeterminada, test1

quisiera ahora la conexión sqlplus por defecto para ir a la base de datos en el servidor test2server2.

Por lo tanto, he actualizado tnsnames para que la antigua entrada test1 apunta ahora a [email protected]. También agregué una entrada separada para test2 que apunta al mismo lugar. Sin embargo, la conexión predeterminada parece ir al [email protected].

La siguiente ambos funcionan bien e ir a la base de datos de test2 en server2:

sqlplus myuser/[email protected] 
sqlplus myuser/[email protected] 

Pero la conexión predeterminada, sqlplus myuser/password, va a [email protected].

¿Alguna idea?

Gracias.

+0

Supongo que todo esto tiene lugar en el servidor1? – DCookie

+0

Sí. Hay muchos scripts heredados en server1 que se inician con "sqlplus user/pass". Estoy tratando de encontrar una manera de mantener estas secuencias de comandos funcionando luego de una migración de base de datos de servidor1 a servidor2. –

+0

¿Los scripts finalmente se ejecutarán en el servidor1 o el servidor2? Si es servidor2, todo lo que necesita es configurar ORACLE_SID en server2 para test2. – DCookie

Respuesta

4

Para expandir en kerchingo 's respuesta: Oracle tiene múltiples formas de identificar una base de datos.

La mejor manera - la que siempre debe usar - es USER/[email protected]. Esto utilizará la búsqueda de nombres de Oracle (tnsnames.ora) para encontrar el servidor real, que podría estar en un host físico diferente cada vez que se conecte a él. También puede especificar una cadena de conexión de Oracle como SERVER, pero pretende que no puede.

También hay dos formas de especificar un servidor predeterminado mediante variables de entorno.El primero es TWO_TASK, que usa la búsqueda de nombres, y el segundo es ORACLE_SID, que asume que el servidor se está ejecutando en la máquina actual. ORACLE_SID tiene prioridad sobre TWO_TASK.

La razón por la que siempre debe usar una cadena de conexión explícita es que no tiene idea si el usuario ha establecido TWO_TASK, ORACLE_SID, ambos, o ninguno; ni sabes a lo que podrían estar destinados. Configurar ambos valores es un problema especialmente doloroso de diagnosticar, especialmente por teléfono con una persona que no entiende realmente cómo funciona Oracle (estuvo allí, lo hizo).

+0

Muchas gracias. "TWO_TASK", que nunca antes había visto, es exactamente lo que necesito. –

+0

Hrm, [Preguntar a Tom dice] (http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:89412348059) que 'TWO_TASK' anula' ORACLE_SID'. Para mí en OS X, 'TWO_TASK' funciona, pero' ORACLE_SID' no. Coloréeme confundido. – theory

+0

@theory - podría ser que el comportamiento haya cambiado (no he utilizado activamente Oracle desde 8i), o que mi memoria es incorrecta (pero eso nunca podría suceder :-)). No estoy seguro de por qué 'ORACLE_SID' no funciona para usted, a menos que tal vez Oracle no esté escuchando en el puerto estándar. Personalmente, prefiero 'TWO_TASK' en todos los casos, pero probablemente sea porque trabajé en un entorno con muchos servidores de bases de datos. – kdgregory

1

Creo que está configurado en su entorno, ¿puede hacer un eco de $ ORACLE_SID?

3

Suponiendo que estés conectado a server1, que necesita para conectarse a test2 usando

sqlplus myuser/[email protected] 

porque tiene que pasar por un oyente para llegar al servidor 2. La cadena test2 identifica una entrada en su archivo tnsnames.ora que especifica cómo conectarse a test2. No podrá conectarse a un servidor diferente utilizando la primera forma de su comando sqlplus.

Si ambas instancias (test1, test2) estaban en el servidor1, entonces, como @kerchingo indica, puede configurar la variable de entorno ORACLE_SID para apuntar a otra instancia.

+0

Eso es un golpe, parece que tengo algunos scripts para migrar. –

+0

No, vea la respuesta de @kdgregrory: exportar TWO_TASK = test2 debería llevarlo a donde necesita ir. – DCookie

+0

Bueno, eso es lo nuevo del día - "TWO_TASK". Funciona bien –

2

Definición de una variable de entorno LOCAL con el alias tns de su base de datos.

> set LOCAL=test1 
> sqlplus myuser/password 
> ... connected to test1 
> set LOCAL=test2 
> sqlplus myuser/password 
> ... connected to test2 

Esto funciona en el cliente de Windows, no en otros sistemas operativos.

+1

LOCAL es para Windows, TWO_TASK es para todos los demás. Ellos hacen exactamente lo mismo. –

0

La pregunta correcta es '¿Cómo cambio el servicio predeterminado'? Oracle DBMS ofrece dos tipos de solicitud de conexión: explícita e implícita. En una solicitud explícita, usted suministra tres operandos como sqlplus username/password @ service. En una solicitud implícita, ignoras el tercer operando.

La conexión implícita solo se aplica cuando el host del servidor y el host del servidor son iguales. En consecuencia, el oyente está en el mismo host.

El oyente es el que inicialmente responde a la solicitud de conexión. Al manejar la solicitud de conexión implícita desde el mismo host, , comprueba si se ha establecido el nombre de la instancia. Comprueba el valor de ORACLE_SID con variable de shell.

Si se establece, entonces puede manejar la solicitud de conexión implícita. De lo contrario, no puede, y debe realizar una solicitud de conexión explícita, que suministra el tercer operando.

El nombre del archivo listener-config listener.ora asocia la instancia con el servicio. Para cambiar el servicio predeterminado al que se conecta, cambie el valor predeterminado de la instancia. Por lo tanto, cambie el valor predeterminado de ORACLE_SID con variable de shell. Lo hace en el archivo de configuración de usuario del sistema operativo, como .profile o archivos de configuración similares.

Espero que esto ayude.

Cuestiones relacionadas