Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

Oracle: Cómo cambiar SID o DBNAME nombre base datos Oracle 12c Linux CentOS 7
Bases de Datos


Cómo cambiar el nombre DBNAME o SID de una base de datos Oracle 12c en Linux CentOS 7 utilizando la herramienta de Oracle DBNEWID.

Requisitos previos para cambiar el nombre de una base de datos DBNAME SID Oracle 12c

A continuación indicamos algunos requisitos antes de cambiar el DBNAME de una base de datos Oracle 12c:

  • Hacer copia de seguridad, tanto física como lógica de la base de datos. Esta opción es MUY recomendable pues el proceso de cambio de DBNAME y SID puede ser peligroso. Por lo tanto, antes de cambiar el SID, realizaremos backup de la base de datos.
  • El proceso de cambio de SID o DBNAME debe detener la base de datos, por lo tanto los usuarios no podrán conectarse mientras se realiza.
  • Al cambiar el SID o DBNAME de la base de datos tendremos que cambiar la configuración de los equipos clientes para que les vuelva a funcionar la conexión. Al final de este tutorial explicamos cómo hacerlo.
  • Requiriremos obviamente de un servidor con Oracle 12c y Linux CentOS 7, y con un usuario y contraseña con acceso a este servidor y a Oracle 12c.

 

Cambiar DBNAME o SID de base de datos Oracle 12c en Linux CentOS 7

A continuación explicaremos cómo cambiar el DBNAME (nombre de la base de datos o SID) en Oracle 12c montado sobre un equipo con Linux CentOS 7 (válido para cualquier distribución de Linux). En este caso solo cambiaremos el DBNAME y no el DBID (número identificativo).

Desde una ventana de terminal accederemos (con el usuario "oracle") a SQL*Plus, para ello ejecutaremos el comando:

sqlplus /nolog

Nos conectaremos a la base de datos con:

conn / as sysdba

Detendremos la base de datos con:

shutdown immediate

Iniciaremos la base de datos en modo mount (montada) con:

startup mount

Saldremos de SQL*Plus con:

exit

Cambiar DBNAME o SID de base de datos Oracle 12c en Linux CentOS 7

El texto devuelto por los comandos anteriores:

[oracle@srvora12 ~]$ sqlplus /nolog

SQL*Plus: Release 12.1.0.2.0 Production on Thu Jul 16 14:51:03 2015

Copyright (c) 1982, 2014, Oracle. All rights reserved.

SQL> conn / as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 3925868544 bytes
Fixed Size 2931568 bytes
Variable Size 2214593680 bytes
Database Buffers 1694498816 bytes
Redo Buffers 13844480 bytes
Database mounted.
SQL> exit

Como hemos dicho anteriormente saldremos de SQL*PLus o bien iniciaremos otra sesión de terminal en Linux. Desde la línea de comandos de Linux usaremos el comando "nid" que es la herramienta DBNEWID de Oracle que permite cambiar el SID o DBNAME y el DBID de una base de datos Oracle. Esta herramienta necesita conexión con un usuario con permisos de DBA, para ejecutarla deberemos saber el DBNAME actual de nuestra base de datos y el nuevo que le asignaremos, el comando será:

nid target=sys/contraseña@DBNAME_ACTUAL dbname=NUEVO_DBNAME setname=YES

Donde:

  • sys: nombre de usuario de Oracle con permisos de DBA.
  • contraseña: contraseña del usuario anterior.
  • DBNAME_ACTUAL: nombre de la base de datos actual (SID o DBNAME). Se puede obtener ejecutando select * from global_name o también con select instance_name from v$instance.
  • NUEVO_DBNAME: nuevo nombre de la base de datos (DBNAME).

Nota: la herramienta NEWID (nid) de Oracle permite cambiar solo el SID (DBNAME) o el DBID o bien ambos SID y DBID de una base de datos. Si especificamos el parámetro setname=YES cambiaremos solo el SID(DBNAME), como en el ejemplo anterior y si no lo especificamos podremos cambiar el DBID y el SID.

En nuestro caso cambiaremos el actual SID con nombre AJPDSOFT por el nuevo SID con nombre BDOD, para ello ejecutaremos:

nid target=sys/XXX@AJPDSOFT dbname=BDOD setname=YES

Cambiar DBNAME o SID de base de datos Oracle 12c en Linux CentOS 7

El texto devuelto por el comando nid:

[oracle@srvora12 ~]$ nid target=sys/XXX@AJPDSOFT dbname=BDOD setname=YES
DBNEWID: Release 12.1.0.2.0 - Production on Thu Jul 16 14:58:31 2015
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
Connected to database AJPDSOFT (DBID=3668816411)
Connected to server version 12.1.0
Control Files in database:
/ora01/app/oracle/oradata/AJPDSOFT/control01.ctl
/ora01/app/oracle/recovery_area/AJPDSOFT/control02.ctl
Change database name of database AJPDSOFT to BDOD? (Y/[N]) => y
Proceeding with operation
Changing database name from AJPDSOFT to BDOD
Control File /ora01/app/oracle/oradata/AJPDSOFT/control01.ctl - modified
Control File /ora01/app/oracle/recovery_area/AJPDSOFT/control02.ctl - modified
Datafile /ora01/app/oracle/oradata/AJPDSOFT/system01.db - wrote new name
Datafile /ora01/app/oracle/oradata/AJPDSOFT/sysaux01.db - wrote new name
Datafile /ora01/app/oracle/oradata/AJPDSOFT/undotbs01.db - wrote new name
Datafile /ora01/app/oracle/oradata/AJPDSOFT/pdbseed/system01.db - wrote new name
Datafile /ora01/app/oracle/oradata/AJPDSOFT/users01.db - wrote new name
Datafile /ora01/app/oracle/oradata/AJPDSOFT/pdbseed/sysaux01.db - wrote new name
Datafile /ora01/app/oracle/product/12.1.0/db_1/dbs/opendata.db - wrote new name
Datafile /ora01/app/oracle/oradata/AJPDSOFT/temp01.db - wrote new name
Datafile /ora01/app/oracle/oradata/AJPDSOFT/pdbseed/pdbseed_temp0109-07-2015_12-35-21-AM.db - wrote new name
Control File /ora01/app/oracle/oradata/AJPDSOFT/control01.ctl - wrote new name
Control File /ora01/app/oracle/recovery_area/AJPDSOFT/control02.ctl - wrote new name
Instance shut down
Database name changed to BDOD.
Modify parameter file and generate a new password file before restarting.
Succesfully changed database name.
DBNEWID - Completed succesfully.

Volveremos a detener la base de datos, para ello accederemos nuevamente a SQL*Plus con:

sqlplus /nolog

Nos conectaremos a la base de datos con:

conn / as sysdba

Detendremos la base de datos con:

shutdown immediate

Iniciaremos la base de datos en modo mount (montada) con:

startup mount

Modificaremos ahora el parámetro DB_NAME en los parámetros de incialización de la base de datos con el comando:

alter system set DB_NAME=BDOD scope=spfile;

(El nuevo SID o DBNAME en nuestro caso será "BDOD")

Detendremos la base de datos nuevamente con el comando:

shutdown immediate

El texto de los comandos anteriores:

[oracle@srvora12 ~]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.2.0 Production on Thu Jul 16 15:07:42 2015
Copyright (c) 1982, 2014, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected to an idle instance.
SQL> shutdown immediate
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3640
Additional information: -2082761913
Process ID: 0
Session ID: 0 Serial number: 0
SQL> startup mount
ORACLE instance started.

Total System Global Area 3925868544 bytes
Fixed Size 2931568 bytes
Variable Size 2214593680 bytes
Database Buffers 1694498816 bytes
Redo Buffers 13844480 bytes
ORA-01103: database name 'BDOD' in control file is not 'AJPDSOFT'
SQL>alter system set DB_NAME=BDOD scope=spfile;
System altered.
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.

Ahora crearemos un nuevo fichero de contraseña, para ello ejecutaremos el comando:

orapwd file=$ORACLE_HOME/dbs/orapwBDOD password=XXX entries=10

Renombramos el fichero SPFILE del antiguo SID (en nuestro caso spfileAJPDSOFT.ora) con el nuevo DBNAME (que en nuestro caso quedaríaspfileBDOD.ora), teniendo en cuenta que este fichero SPFILE en instalaciones estándar de Oracle suele estar en $ORACLE_HOME/dbs/:

mv $ORACLE_HOME/dbs/spfileAJPDSOFT.ora $ORACLE_HOME/dbs/spfileBDOD.ora

(usamos la variable de entorno ORACLE_HOME que debemos tener establecida con la carpeta de instalación del software de Oracle)

Cambiar DBNAME o SID de base de datos Oracle 12c en Linux CentOS 7

Modificamos las variables de entorno ORACLE_UNQNAME y ORACLE_SID del usuario "oracle" con el nuevo DBNAME, para ello editamos el fichero .bash_profile del usuario oracle en Linux con:

nano /home/oracle/.bash_profile

export ORACLE_UNQNAME=BDOD
export ORACLE_SID=BDOD

Cambiar DBNAME o SID de base de datos Oracle 12c en Linux CentOS 7

Para no tener que cerrar la sesión del usuario oracle para que se apliquen los cambios en las variables de entorno, podemos establecerlas en la sesión actual con el comando:

ORACLE_SID=BDOD; export ORACLE_SID

Reiniciamos el Listener con el comando:

lsnrctl reload

Cambiar DBNAME o SID de base de datos Oracle 12c en Linux CentOS 7

Los comandos anteriores devolverán:

[oracle@srvora12 dbs]$ nano /home/oracle/.bash_profile
[oracle@srvora12 dbs]$ ORACLE_SID=BDOD; export ORACLE_SID
[oracle@srvora12 dbs]$ lsnrctl reload
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 16-JUL-2015 15:36:11
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=srvora12.ajpdsoft.local)(PORT=1521)))
The command completed successfully

Volvemos a acceder a SQL*Plus para iniciar la base de datos, con los comandos:

sqlplus /nolog

conn / as sysdba

Iniciamos la base de datos en modo mount (montada):

startup mount

Y la iniciamos en modo normal con:

alter database open;

Nota: si tenemos la base de datos en modo ARCHIVELOG deberemos iniciarla con el parámetro RESETLOGS, con el comando alter database open resetlogs;

Ahora podremos comprobar que el SID o DBNAME se ha cambiado ejecutando la consulta SQL:

select * from global_name;

O bien:

select instance_name from v$instance;

Y podremos comprobar que la base de datos se ha iniciado correctamente con el comando SQL:

select status from v$instance;

Cambiar DBNAME o SID de base de datos Oracle 12c en Linux CentOS 7

Los comandos anteriores devolverán:

SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup mount
ORACLE instance started.

Total System Global Area 3925868544 bytes
Fixed Size 2931568 bytes
Variable Size 2214593680 bytes
Database Buffers 1694498816 bytes
Redo Buffers 13844480 bytes
Database mounted.
SQL> alter database open;
Database altered.
SQL> select * from global_name;

GLOBAL_NAME
-------------------
BDOD

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
BDOD

SQL> select status from v$instance;

STATUS
------------
OPEN

Ahora editaremos el fichero /etc/oratab para modificar el SID de arranque automático de la base de datos (si lo tenemos activado), para ello editaremos este fichero con:

nano /etc/oratab

Y cambiaremos el SID antiguo por el nuevo:

BDOD:/ora01/app/oracle/product/12.1.0/db_1:Y

Cambiar DBNAME o SID de base de datos Oracle 12c en Linux CentOS 7

Si disponemos de fichero tnsnames.ora, tanto en el servidor Linux como en los equipos cliente, deberemos cambiar también el antigo SID por el nuevo. En el caso de Linux CentOS 7, en una instación estándar de Oracle 12c, el fichero tnsnames.ora suele estar en:

$ORACLE_HOME/network/admin/tnsnames.ora

Por lo tanto lo editaremos con nano o vi:

nano $ORACLE_HOME/network/admin/tnsnames.ora

Y modificaremos el SID antiguo por el nuevo. Un ejemplo del contenido de este fichero:

BDOD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = srvora12.ajpdsoft.local)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = BDOD)
)
)

Cambiar DBNAME o SID de base de datos Oracle 12c en Linux CentOS 7

 

Configuración equipos cliente y aplicaciones de acceso a Oracle tras cambio de SID o DBNAME

Si hemos cambiado el SID o DBNAME de la base de datos Oracle 12c y tenemos aplicaciones y equipos externos al servidor que lo usan, deberemos configurar el cliente de Oracle con el nuevo SID o DBNAME. En función de cada configuración deberemos realizar los cambios apropiados. Por ejemplo, si tenemos Oracle SQL Developer deberemos cambiar el SID en las propiedades de la conexión:

Configuración equipos cliente y aplicaciones de acceso a Oracle tras cambio de SID o DBNAME

Si usamos Oracle Client o bien Oracle Instant Client (OCI y ODBC) deberemos cambiar el antiguo SID en el fichero tnsnames.ora por el nuevo (al igual que en servidor Linux de Oracle). En el caso de equipos Windows la ubicación del fichero tnsnames.ora suele estar indicada en la variable de entorno TNS_ADMIN. Si no existe esta variable de entorno, buscaremos el fichero tnsnames.ora y lo editaremos con cualquier editor (notepad por ejemplo):

Configuración equipos cliente y aplicaciones de acceso a Oracle tras cambio de SID o DBNAME

 

Artículos relacionados

 

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft.

Artículo en inglés.


Anuncios


Enviado el Viernes, 17 julio a las 13:47:45 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A