¿Puedo cambiar el SID de una base de datos Oracle?


18

El servidor es Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit

¿Existe una manera fácil y rápida de cambiar los SID de las bases de datos de prueba en el servidor?

Dejar y recrear la base de datos es una opción para mí. Pero estoy buscando algo que requiera menos tiempo.

La otra opción para asignar nombres en los clientes tnsnames.ora es propensa a errores, ya que no se administran centralmente.

En comparación con el tiempo para colocar y crear una base de datos en SQL Server, la cantidad de tiempo requerida para crear una nueva base de datos Oracle es excesivamente mayor. Además, en SQL-Server puede cambiar el nombre de las instancias de SQL-Server. [Por lo general, cambia el nombre del servidor donde se ejecuta SQL-Server y tiene algunos problemas hasta que cambia el nombre del servidor también].


Menciona que puede soltar y volver a crear las bases de datos. ¿Tiene acceso a la base de datos de producción y sus copias de seguridad? Puede usar RMAN y el comando duplicar para volver a crear la base de datos y cambiar el SID al mismo tiempo.
Sumnibot

No, trabajo como DBA para desarrollar y probar algunas bases de datos Oracle.
bernd_k

2
Cuando usa una base de datos en SQL Server, generalmente usa un esquema (= usuario) en Oracle. El mismo nombre no significa lo mismo en esos dos mundos
a_horse_with_no_name

Respuestas:


13

Dado que la utilidad 9i dbnewid (nid) se puede usar para cambiar el nombre de la base de datos (y DBID si es necesario). Si solo se cambia el nombre de la base de datos, no se requiere resetlogs:

  • 1 base de datos de inicio en modo de montaje

    shutdown immediate
    startup mount
  • 2 ejecute nid para cambiar el nombre de la base de datos:

    nid target=sys/syspassword@dbtns dbname=newname setname=YES
  • 3 cierre e inicie la base de datos en modo de montaje:

    shutdown immediate
    startup mount
  • 4 cambio db_nameen spfile (o en pfile editando el archivo):

    alter system set db_name=newname scope=spfile;
  • 5 recrear el archivo de contraseña:

    orapwd file=orapwnewname password=syspassword
  • 6 inicio de la base de datos

    startup
  • 7 pasos para cambiar el nombre de la publicación:

    change SID in listener.ora
    correct tnsnames.ora
    remove old trace directories
    change /etc/oratab (UNIX) or rename windows service using oradim

1
Cambié el nombre de 4 bases de datos Oracle en un servidor de Windows de esta manera. Buscando la utilidad dbnewid encontré oracle-base.com/articles/9i/DBNEWID.php que me dio algunas explicaciones adicionales.
bernd_k

1
Esta es una buena respuesta cuando la pregunta era: cómo cambiar el nombre de una base de datos. La pregunta es: cómo cambiar un SID.
ik_zelf

17

Necesita volver a crear el archivo de control

Esta publicación de Kaunain Ahmed describe los pasos necesarios:

  1. hacer: alterar el archivo de control de copia de seguridad de la base de datos para rastrear;
  2. extraiga el comando "crear archivo de control" del archivo de rastreo background-dump-destination.
  3. apague la base de datos.
  4. Cambie el DB-Name en su init.ora y cambie init.ora
  5. Cambie el SID en / etc / oratab o / var / opt / oracle / oratab
  6. Cambia el SID en tu entorno y aprovéchalo
  7. Inicie la base de datos para montar el estado de montaje de inicio
  8. Vuelva a crear el archivo de control con la declaración de la posición 2.
  9. Realice un cambio de nombre de la base de datos global_name a 10.Cambie la configuración de TNS en consecuencia $ ORACLE_HOME / network / admin / *. Ora Busque SID y GLOBAL_NAME

Hay otras herramientas a las que se hace referencia en el hilo.

Aquí hay una publicación de AskTom que hace referencia al proceso con más detalle. Si bien es por 10 g, aún debería funcionar.


55
Para los usuarios de Windows, también deberá usar la utilidad "oradim" para configurar el nuevo servicio.
REW

9

Sí, puedes y también es bastante fácil.

En Oracle, ORACLE_SID es solo el nombre de la instancia de Oracle y no tiene mucho que ver con DBNAME. Se puede servir una base de datos con el nombre PROD, utilizando instancias con cualquier nombre válido. No hay conexión directa entre el SID y el DBNAME. Esta conexión se realiza utilizando los parámetros.

El archivo de parámetros se identifica como init $ {ORACLE_SID} .ora o spfile $ {ORACLE_SID} .ora En el archivo de parámetros se encuentra el parámetro db_name. Aquí es donde se realiza la conexión entre la instancia de Oracle y la base de datos.

Por lo tanto, no necesita volver a crear un archivo de control, no necesita usar nid, solo asegúrese de que su archivo de parámetros tenga el nombre correcto, elimine la instancia de Oracle anterior e inicie la nueva instancia de Oracle después de haber configurado ORACLE_SID al nuevo nombre de instancia de Oracle. El archivo de parámetros y el archivo de contraseña se encuentran utilizando $ {ORACLE_SID} como parte de su nombre.

Volver a crear el archivo de control solo es necesario cuando DBNAME tiene que cambiar. nid es necesario después de una operación de clonación en la que necesita cambiar el DBID para evitar accidentes que puedan dañar las copias de seguridad de la base de datos de origen.


+1 Pero todavía no estoy seguro si quiero cambiar el DB_NAME también.
bernd_k

Si quieres: claro, puedes, las otras respuestas explicaron correctamente cómo hacerlo. ¿Por qué razón lo harías? El db_name es muy físico. Saber db_name es bueno para un dba pero para la mayoría de los demás es irrelevante. En un enfoque consolidado normal, tiene una base de datos que sirve a muchos servicios. Una aplicación de servicio no debería tener que preocuparse en qué base de datos se está ejecutando.
ik_zelf
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.