En este post, les dejo el procedimiento manual para cambiar el nombre de una base de datos sin borrarla. Aunque el procedimiento es sencillo, la primera vez me costó algo de trabajo.
Voy a enumerar los pasos requeridos para cambiar el nombre o SID de la base de datos.
Nota 1. Les recomiendo tener un respaldo antes de realizar el procedimiento por si algo llegara a fallar.
Nota 2. Mi base de datos inicial se llama LAB y le cambiaremos el nombre a METALDB.
Nota 3. Mi base de datos LAB se encuentra en Windows, por lo que algunos pasos extra son requeridos y serán marcados en el post.
1. Crear script de recreación del control file
Para iniciar, debemos crear un script para recreación de los control files. Recuerden que estos son los que garantizan la unidad de todos los archivos de la base de datos. Para hacer esto, debemos tener en cuenta el directorio user_dump_dest para saber dónde se generará el script mencionado:
SQL> show parameter user_dump_dest NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ user_dump_dest string C:\ORACLE\PRODUCT\10.2.0\ADMIN \LAB\UDUMP
Después de esto, en nuestra instancia, ejecutar el comando para crear el script de recreación del control file:
SQL> alter database backup controlfile to trace; Database altered.
Una vez hecho esto, hay que ir al directorio mostrado con anterioridad para ver el archivo más reciente generado:
Directorio de C:\oracle\product\10.2.0\admin\metaldb\udump 09/01/2011 01:51 p.m. 641 lab_ora_3784.trc 09/01/2011 02:00 p.m. 3,411 lab_ora_4084.trc 09/01/2011 02:10 p.m. 1,111 lab_ora_2828.trc 29/09/2011 05:32 a.m. 609 lab_ora_244.trc 07/11/2011 12:01 p.m. 610 lab_ora_3260.trc 07/11/2011 12:01 p.m. 2,063 lab_ora_3900.trc 07/11/2011 12:09 p.m. 2,237 lab_ora_2564.trc 07/11/2011 07:02 p.m. 610 lab_ora_1976.trc 07/11/2011 07:02 p.m. 1,012 lab_ora_3456.trc 07/11/2011 07:08 p.m. 1,109 lab_ora_3232.trc 11/11/2011 07:36 p.m. 610 lab_ora_2408.trc 11/11/2011 07:36 p.m. <DIR> .. 11/11/2011 07:36 p.m. <DIR> . 11/11/2011 08:23 p.m. 870 lab_ora_2948.trc
En este caso, ya está marcado en negritas, el archivo que se generó.
2. Verificar ubicación actual de data files
Hay que realizar este paso para garantizar que sabemos en qué ubicación están los data files de la base de datos. En mi caso, son pocos, pero puede ser que en la base de datos que quieran aplicarlo, haya muchos. En este caso, me baso en uno de mis Scripts útiles para un DBA:
SQL> star tbsdef % SQL> set echo off ------------------------------------------------------------------------------| Script: TbsDef | Muestra los Data Files de uno o mas Tablespaces. Uso: tbsdef nombre_tbs|% Ejemplo: tbsdef sys% ------------------------------------------------------------------------------| Data Files del sistema ---------------------------------- TABLESPACE_NAME FILE_NAME TOTAL_MB ------------------------- -------------------------------------------------- ----------- DATOS C:\ORACLE\PRODUCT\10.2.0\ORADATA\LAB\DATOS01.DBF 1,024 ************************* ----------- sum 1,024 INDICES C:\ORACLE\PRODUCT\10.2.0\ORADATA\LAB\INDICES01.DBF 1,024 ************************* ----------- sum 1,024 SYSAUX C:\ORACLE\PRODUCT\10.2.0\ORADATA\LAB\SYSAUX01.DBF 300 ************************* ----------- sum 300 SYSTEM C:\ORACLE\PRODUCT\10.2.0\ORADATA\LAB\SYSTEM01.DBF 300 ************************* ----------- sum 300 UNDOTBS C:\ORACLE\PRODUCT\10.2.0\ORADATA\LAB\UNDO01.DBF 500 ************************* ----------- sum 500 5 rows selected.
Con esto, ya tenemos los data files a considerar.
3. Dar de baja la instancia de la base de datos
Ya que tenemos los datos de los puntos previos, podemos dar de baja la instancia de nuestra base de datos. Para hacer esto, se usar nada más el comando:
shutdown [immediate];
Por ejemplo:
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down.
4. Detener el servicio (sólo Windows)
Si la base de datos está instalada en Windows, se deberá detener el servicio correspondiente a la base de datos a renombrar. Esto se puede hacer desde la ventana de Servicios ubicada en Panel de Control – Herramientas Administrativas, o por medio del comando:
oradim -shutdown -sid nombre_db -shutttype SRVC,INST –shutmode A
Hay que recordar que los servicios tienen el formato: OracleServiceSID.
5. Mover, renombrar y borrar archivos
En este paso, se deberían contemplar actividades como:
- Mover los data files de lugar
- Renombrar data files
- Renombrar carpetas para que tengan el nuevo SID (data files y admin donde se encuentra bdump, udump, …)
- Importante: Borrar o mover los control files actuales para que no sean encontrados
Por ejemplo:
-- Listar nueva carpeta donde se encuentran redo, control y data files: C:\oracle\product\10.2.0\oradata\metaldb>dir El volumen de la unidad C no tiene etiqueta. El número de serie del volumen es: 9CE9-FC28 Directorio de C:\oracle\product\10.2.0\oradata\metaldb 09/01/2011 01:52 p.m. <DIR> . 09/01/2011 01:52 p.m. <DIR> .. 11/11/2011 07:48 p.m. 12,304,384 CONTROL01.CTL 11/11/2011 07:48 p.m. 12,304,384 CONTROL02.CTL 11/11/2011 07:48 p.m. 1,073,758,208 DATOS01.DBF 11/11/2011 07:48 p.m. 1,073,758,208 INDICES01.DBF 11/11/2011 07:48 p.m. 20,972,032 REDO01A.LOG 11/11/2011 07:48 p.m. 20,972,032 REDO01B.LOG 11/11/2011 07:48 p.m. 20,972,032 REDO02A.LOG 11/11/2011 07:48 p.m. 20,972,032 REDO02B.LOG 11/11/2011 07:48 p.m. 314,589,184 SYSAUX01.DBF 11/11/2011 07:48 p.m. 314,589,184 SYSTEM01.DBF 09/01/2011 02:10 p.m. 524,304,384 TEMP01.DBF 11/11/2011 07:48 p.m. 524,304,384 UNDO01.DBF -- Moviendo los control files de lugar: C:\oracle\product\10.2.0\oradata\metaldb>mkdir ooo_respaldo C:\oracle\product\10.2.0\oradata\metaldb>move *.ctl ooo_respaldo C:\oracle\product\10.2.0\oradata\metaldb\CONTROL01.CTL C:\oracle\product\10.2.0\oradata\metaldb\CONTROL02.CTL -- Lista de nuevo la carpeta: C:\oracle\product\10.2.0\oradata\metaldb>dir El volumen de la unidad C no tiene etiqueta. El número de serie del volumen es: 9CE9-FC28 Directorio de C:\oracle\product\10.2.0\oradata\metaldb 11/11/2011 08:37 p.m. <DIR> . 11/11/2011 08:37 p.m. <DIR> .. 11/11/2011 07:48 p.m. 1,073,758,208 DATOS01.DBF 11/11/2011 07:48 p.m. 1,073,758,208 INDICES01.DBF 11/11/2011 08:37 p.m. <DIR> ooo_respaldo 11/11/2011 07:48 p.m. 20,972,032 REDO01A.LOG 11/11/2011 07:48 p.m. 20,972,032 REDO01B.LOG 11/11/2011 07:48 p.m. 20,972,032 REDO02A.LOG 11/11/2011 07:48 p.m. 20,972,032 REDO02B.LOG 11/11/2011 07:48 p.m. 314,589,184 SYSAUX01.DBF 11/11/2011 07:48 p.m. 314,589,184 SYSTEM01.DBF 09/01/2011 02:10 p.m. 524,304,384 TEMP01.DBF 11/11/2011 07:48 p.m. 524,304,384 UNDO01.DBF
6. Crear nuevo initSID.ora
Partiendo del anterior pfile initSID.ora, se puede crear uno nuevo. Si su base de datos está basada en spfile y tienen dudas de cómo crear un pfile, pueden visitar Pfile vs Spfile en mi blog, muestro el nuevo archivo pfile:
background_dump_dest='c:\oracle\product\10.2.0\admin\metaldb\bdump' compatible='10.2.0.4.0' control_files='c:\oracle\product\10.2.0\oradata\metaldb\control01.ctl','c:\oracle\product\10.2.0\oradata\metaldb\control02.ctl' core_dump_dest='c:\oracle\product\10.2.0\admin\metaldb\cdump' db_cache_size=200M db_block_size=16384 db_file_multiblock_read_count=16 db_files=1500 db_flashback_retention_target=0 db_name='metaldb' java_pool_size=25M large_pool_size=200M job_queue_processes=20 open_cursors=300 optimizer_index_cost_adj=50 parallel_execution_message_size=65535 parallel_max_servers=64 parallel_min_servers=2 parallel_threads_per_cpu=1 pga_aggregate_target=1063256064 processes=400 query_rewrite_enabled='true' remote_login_passwordfile='EXCLUSIVE' shared_pool_size=200M undo_management='AUTO' undo_tablespace='UNDOTBS' undo_retention=300 user_dump_dest='c:\oracle\product\10.2.0\admin\metaldb\udump' query_rewrite_enabled=true recyclebin=OFF sort_area_size=524288 sort_area_retained_size=65536
En el mismo, es conveniente cambiar todos los directorios para que se ajusten a los movimientos hechos en el paso anterior, así como el nombre de la base de datos.
7. Editar archivo trace creado en punto 1
Para la modificación del archivo creado, se deben considerar los siguientes puntos:
1. Cambiar todos los SID por el nuevo.
2. Borrar todas las líneas arriba de la primera instrucción STARTUP NOMOUNT.
3. Modificar la línea de STARTUP NOMOUNT:
STARTUP NOMOUNT PFILE=%ORACLE_HOME%\DATABASE\INITSID.ORA
4. Cambiar la línea de CREATE CONTROLFILE a:
CREATE CONTROLFILE SET DATABASE "SID" RESETLOGS NOARCHIVELOG
5. Borrar el resto de líneas.
La línea ALTER SYSTEM ARCHIVE LOG ALL deberá estar presente si la base de datos original está en archive mode.
6. Ajustar los directorios y nombres de archivos
7. Cambiar el archivo de nombre a change_db_name.sql para poderlo ejecutar posteriormente.
Un ejemplo de cómo se debería ver el archivo change_db_name.sql, ya con el cambio de metaldb, queda como sigue:
STARTUP NOMOUNT PFILE=%ORACLE_HOME%\DATABASE\INITMETALDB.ORA CREATE CONTROLFILE SET DATABASE "metaldb" RESETLOGS NOARCHIVELOG MAXLOGFILES 8 MAXLOGMEMBERS 4 MAXDATAFILES 500 MAXINSTANCES 1 MAXLOGHISTORY 292 LOGFILE GROUP 1 ( 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\metaldb\REDO01A.LOG', 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\metaldb\REDO01B.LOG' ) SIZE 20M, GROUP 2 ( 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\metaldb\REDO02A.LOG', 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\metaldb\REDO02B.LOG' ) SIZE 20M DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\metaldb\SYSTEM01.DBF', 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\metaldb\UNDO01.DBF', 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\metaldb\SYSAUX01.DBF', 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\metaldb\DATOS01.DBF', 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\metaldb\INDICES01.DBF' CHARACTER SET UTF8;
8. Crear nuevo servicio (sólo Windows)
Para que la instancia de la base de datos «nueva» pueda ser levantada en Windows, se requiere de un nuevo servicio. Para hacer esto, se usa el comando:
ORADIM -NEW -SID nuevosid -INTPWD password -STARTMODE MANUAL -PFILE %ORACLE_HOME%\database\initnuevosid.ora
Para el ejemplo que estoy mostrando en este post, queda como:
C:\oracle\product\10.2.0\db_1\BIN>ORADIM -NEW -SID metaldb -INTPWD manager99 -STARTMODE MANUAL -PFILE %ORACLE_HOME%\database\initmetaldb.ora Instance created.
Este servicio nuevo, deberá verificarse en Servicios, en Panel de Control – Herramientas Administrativas:
9. Ejecutar archivo change_db_name.sql
Antes de ejecutar el archivo creado en el punto 7, se deben configurar las variables de ambiente de Oracle:
ORACLE_BASE <--- Base de Oracle ORACLE_HOME <--- Ubicación de binarios de Oracle ORACLE_SID <--- Nombre de base de datos nuevo
Por ejemplo:
C:\oracle\product\10.2.0\db_1\BIN>set ALLUSERSPROFILE=C:\Documents and Settings\All Users APPDATA=C:\Documents and Settings\Administrador\Datos de programa CLIENTNAME=Console CommonProgramFiles=C:\Archivos de programa\Archivos comunes COMPUTERNAME=LABORATO-1EC0B5 ComSpec=C:\WINDOWS\system32\cmd.exe FP_NO_HOST_CHECK=NO HOMEDRIVE=C: HOMEPATH=\Documents and Settings\Administrador LOGONSERVER=\\LABORATO-1EC0B5 NUMBER_OF_PROCESSORS=1 ORACLE_BASE=c:\oracle\product\10.2.0 ORACLE_HOME=c:\oracle\product\10.2.0\db_1 ORACLE_SID=metaldb
Para después, ya ejecutar el archivo como tal:
C:\oracle\product\10.2.0\db_1\BIN>sqlplus / as sysdba SQL*Plus: Release 10.2.0.4.0 - Production on Vie Nov 11 20:40:56 2011 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. Connected to an idle instance. SQL> SQL> star c:\ewq\change_db_name ORACLE instance started. Total System Global Area 662700032 bytes Fixed Size 1298472 bytes Variable Size 448794584 bytes Database Buffers 209715200 bytes Redo Buffers 2891776 bytes Control file created.
10. Abrir base de datos y verificar
Una vez que se ha creado el o los control files, ya nada más resta el abrirla con el comando:
alter database open resetlogs;
y verificar que ya todo se encuentra correcto. Para esto, usaré un par de mis Scripts útiles para un DBA:
SQL> star conwin prod ------------------------------------------------------------------------------| Script: ConWin | Formatos y columnas para comportamiento de la pantalla. Uso: conwin tipo_instancia Ejemplo: conwin prod ------------------------------------------------------------------------------| TYPE NAME CREATED ARCHIVE VERSION STARTUP PAR CURRENT_SCN PLATFORM_NAME ---- -------- -------- ------------ ----------------- -------- --- ----------- ----------------------------------------- DB METALDB 11/11/11 NOARCHIVELOG 213728 Microsoft Windows IA (32-bit) INST METALDB 10.2.0.4.0 11/11/11 NO SQL> star tbsdef % SQL> set echo off ------------------------------------------------------------------------------| Script: TbsDef | Muestra los Data Files de uno o mas Tablespaces. Uso: tbsdef nombre_tbs|% Ejemplo: tbsdef sys% ------------------------------------------------------------------------------| Data Files del sistema ---------------------------------- TABLESPACE_NAME FILE_NAME TOTAL_MB ------------------------- -------------------------------------------------- ----------- DATOS C:\ORACLE\PRODUCT\10.2.0\ORADATA\METALDB\DATOS01.D 1,024 BF ************************* ----------- sum 1,024 INDICES C:\ORACLE\PRODUCT\10.2.0\ORADATA\METALDB\INDICES01 1,024 .DBF ************************* ----------- sum 1,024 SYSAUX C:\ORACLE\PRODUCT\10.2.0\ORADATA\METALDB\SYSAUX01. 300 DBF ************************* ----------- sum 300 SYSTEM C:\ORACLE\PRODUCT\10.2.0\ORADATA\METALDB\SYSTEM01. 300 DBF ************************* ----------- sum 300 UNDOTBS C:\ORACLE\PRODUCT\10.2.0\ORADATA\METALDB\UNDO01.DB 500 F ************************* ----------- sum 500 5 rows selected.
Con lo que se puede apreciar que mi base de datos e instancia, han cambiado de nombre a METALDB.
11. Pasos complementarios
Ya en este punto, les extiendo las siguientes recomendaciones:
- Detener la instancia y respaldar la base de datos
- Si está en Windows, borrar el servicio anterior
- Borrar control files anteriores
Para borrar un servicio en Windows de Oracle, se usa el comando:
ORADIM -DELETE -SID sidanterior
Por ejemplo:
C:\oracle\product\10.2.0\db_1\BIN>oradim -delete -sid lab Instance deleted.
Con lo que la ventana de Servicios queda como sigue:
Conclusiones
Con esto, hemos terminado de cambiar de nombre a mi base de datos LAB por el nuevo METALDB. Espero les sea de utilidad.
Finalmente, hay un procedimiento automático que permite hacer este movimiento de esa manera. La aplicación se llama dbnewid y pueden ver cómo aplicarlo dando clic en la liga.
Si la información de este post te ha sido de utilidad o quieres que agregue algo más, deja por favor un comentario, contestaré a la brevedad.
Excelente, me salvaste la vida
Qué bueno que te haya sido de utilidad John, ojalá me sigas visitando.
Orlando.
muy bien Orlando, probe la solucion y salio ok… grx!!
Hola Illiec,
Qué bueno que te haya funcionado.
Orlando.
Muy bien Orlando, Saludos, ok gracia! Mr. Incredible!!!
Hola Mr. Incredible.
Qué gusto que me hayas visitado en mi blog y ojalá que te haya sido de utilidad este post.
Orlando.
Excelente, muy detallado. Exitos
Hola Arlette.
Qué bueno que te fue de utilidad.
Orlando.