lunes, 13 de diciembre de 2010

Cambiar el DBID de Nuestra Instancia

Algo para los que manejamos respaldos en RMAN con un catalogo y constantemente estamos clonando Bases de Datos via tradicional, no via RMAN, el DBID es algo de lo que tenemos que estar conscientes para poder registrar nuestras BDs en el mismo catalogo de RMAN donde se encuentra la BD fuente de la clonacion.

Si nunca has manejado un catalogo de RMAN, el DBID no era de gran importancia ya que si queriamos renombrar nuestra instancia, lo unico que teniamos que hacer era recrear el control file, y listo, nuestra base de datos tenia un nuevo nombre, pero hay que saber que el DBID se mantenia igual.
Oracle tiene una utileria llamada DBNEWID para poder cambiar el DBID de la instancia asi como el nombre de la instancia, y esta utileria tiene unas cuantas ramificaciones que hay que saber:
  • En el momento que cambiamos el DBID, cualquier respaldo y archived redo logs anterior a este proceso no nos va a servir para recuperar nuestra base de datos, se vuelven obsoletos para esta version de la base de datos, ya que a la vez tenemos que abrir la base de datos con la opcion de resetlogs, el cual recrea los online redo logs y regresa la secuencia a 1.
  • Si nada mas cambiamos el DBNAME, los respaldos y archived redo logs siguen sirviendonos ya que no tenemos que abrir la base de datos con open resetlogs, lo unico que hay que tomar en cuenta que tenemos que cambiar el parametro DB_NAME.
  • Si cambiamos el nombre con la utileria DBNEWID, hay que tomar en cuenta que no cambia el nombre unico global, GLOBAL_NAME, este lo cambiamos via el comando ALTER DATABASE
  • Si cambiamos el DBID, vamos a tener que recrear el password file.
Pasos para cambiar el DBID.
  1.  Asegurarnos que tenemos un buen respaldo de nuestra base de datos, ya que en este proceso vamos a abrir la base de datos con resetlogs y éste, en el peor de los casos,  va a ser nuestro punto a restaurar.
  2. Para poder hacer este proceso, la base de datos tiene que estar en modo MOUNT.

    oracle@localhost [TESTDB] /mount/oracle
    root $ sqlplus
    SQL*Plus: Release 11.2.0.2.0 Production on
    Mon Dec 13 07:38:14 2010
    Copyright (c) 1982, 2010, Oracle.  
    All
     rights reserved.
    Enter user-name: /as sysdba
    Connected to:

    Oracle Database 11g Enterprise Edition
    Release 11.2.0.2.0 - 64bit Production
    With the OLAP, Data Mining and Real
    Application Testing options

    TESTDB >shutdown immediate
    TESTDB >startup mount

    ORACLE instance started.

    TESTDB >exit

  3. En la linea de comandos vamos a llamar a la utileria DBNEWID, que se encuentra en $ORACLE_HOME/bin.

    oracle@localhost [TESTDB] /mount/oracle
    root $ nid target=sys/sys_password@TESTDB
    DBNEWID: Release 11.2.0.2.0 - Production on 
    Mon
     Dec 13 07:39:04 2010
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  
    All
     rights reserved.

    Connected to database TESTDB (DBID=3071275785)
    Connected to server version 11.2.0

    Control Files in database:
        /mount/u01/oracle/TESTDB/control/control01.ctl
        /mount/u01/oracle/TESTDB/control/control02.ctl
        /mount/u01/oracle/TESTDB/control/control03.ctl

    Change database ID of database TESTDB? (Y/[N]) => Y

    Proceeding with operation
    Changing database ID from 3071275785
    to 3073734488
        Control File /mount/u01/oracle/TESTDB/control/control01.ctl - modified
        Control File /mount/u01/oracle/TESTDB/control/control02.ctl - modified
        Control File /mount/u01/oracle/TESTDB/control/control03.ctl - modified

        Datafile /mount/u01/oracle/TESTDB/data/system.db - dbid changed

        Datafile /mount/u01/oracle/TESTDB/data/undotbs1.db - dbid changed

        Datafile /mount/u01/oracle/TESTDB/data/sysaux.db - dbid changed

        Datafile /mount/u01/oracle/TESTDB/data/users01.db - dbid changed

        Datafile /mount/u01/oracle/TESTDB/data/temp01.db - dbid changed

        Control File /mount/u01/oracle/TESTDB/control/control01.ctl - dbid changed

        Control File /mount/u01/oracle/TESTDB/control/control02.ctl - dbid changed

        Control File /mount/u01/oracle/TESTDB/control/control03.ctl - dbid changed

        Instance shut down

    Database ID for database TESTDB changed
    to 3073734488.
    All previous backups and archived redo logs
    for this database are unusable.
    Database has been shutdown, 
    open
     database with RESETLOGS option.

    Succesfully changed database ID.
    DBNEWID - Completed succesfully.
  4. Una vez que termino la utileria, hay que abrir la base de datos en modo MOUNT

    oracle@localhost [TESTDB] /mount/oracle
    root $ sqlplus
    SQL*Plus: Release 11.2.0.2.0 Production on
    Mon Dec 13 07:39:28 2010

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

    Enter user-name: /as sysdba
    Connected to an idle instance.

    TESTDB >startup mount
    ORACLE instance started.

    Database mounted.
  5. Ahora tenemos que abrir la base de datos con la opcion RESETLOGS, es recomendable que despues de que la base de datos este abierta, tengamos que hacer un respaldo completo de nuestra base de datos.
    TESTDB >alter database open resetlogs;

    Database altered.
  6. Por ultimo, si quieres revisar el cambio del DBID puedes hacer el siguiente query
    TESTDB >select DBID,name from v$database;

          DBID NAME
    ---------- ---------------------------
    3073734488 TESTDB
Conclusion
Esta utileria de Oracle es muy util para cuando hemos clonado una BD via un respaldo caliente o frio que no fue con RMAN, ya que RMAN hace este paso de manera implicita. Lo unico es que es una utileria muy facil de usar pero a su vez muy peligrosa ya que nos puede dejar sin un respaldo util para nuestras BDs.