Escolhendo meu DBID

Aqui no Oracle Home já falamos da importância do DBID (database ID) artigo: Descobrindo o DBID sem acesso ao database OPEN, de como alterá-lo via DBNEWID (NID) artigo: Alterar DBname via NID, mas nunca de como podemos mudá-lo para um valor aleatório(de nossa escolha).

Mas para que isto seria útil?

Bom, pode ser pelo mero prazer de ter uma base com o DBID do seu gosto (1,2,3..24..666) ou pelo fato da licença da sua aplicação estar vinculada ao DBID do banco de modo que se ele for alterado a aplicação para de funcionar!

Antes de começar lembre-se que é de suma importância executar um backup FULL do database!

Verificando o dbid atual da base:

SQL> select dbid from v$database;

      DBID
----------
3464458105

Efetuando um shutdown limpo da base e na sequencia abrindo como READ ONLY:

SQL> shut immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup open read only;
ORACLE instance started.

Total System Global Area 1138368512 bytes
Fixed Size                  1364088 bytes
Variable Size             318771080 bytes
Database Buffers          788529152 bytes
Redo Buffers               29704192 bytes
Database mounted.
Database opened.

Agora basta executar o script abaixo que ele irá pedir o NOVO DBID da base e após você inserir ele irá fazer todo o trabalho.

Baixe o script clicando AQUI.

SQL> set serveroutput on
SQL> declare
  2    v_chgdbid   binary_integer;
  3    v_chgdbname binary_integer;
  4    v_skipped   binary_integer;
  5    v_new_db_name varchar2(9);
  6    v_old_db_name varchar2(9);
  7    v_new_dbid    number;
  8    v_old_dbid    number;
  9    w_action      varchar2(255);
 10
 11
 12  begin
 13       w_action:='Recuperando DBID Atual.' ;
 14       select dbid, name, name into v_old_dbid, v_new_db_name, v_old_db_name  from v$database;
 15
 16       select TO_NUMBER('&NOVO_DBID') into v_new_dbid from dual;
 17
 18       w_action:='Executando a Procedure (dbms_backup_restore.nidbegin).';
 19       dbms_output.put_line('New NAME='||V_NEW_DB_NAME);
 20       dbms_output.put_line('Old NAME='||V_OLD_DB_NAME);
 21       dbms_output.put_line('New DBID='||V_NEW_DBID);
 22       dbms_output.put_line('Old DBID='||V_OLD_DBID);
 23
 24       dbms_backup_restore.nidbegin(V_NEW_DB_NAME,V_OLD_DB_NAME,V_NEW_DBID,V_OLD_DBID,0,0,10);
 25
 26       w_action:='Executando a Procedure (dbms_backup_restore.nidprocesscf).';
 27       dbms_backup_restore.nidprocesscf( v_chgdbid,v_chgdbname);
 28
 29       dbms_output.put_line('ControlFile.......: ');
 30       dbms_output.put_line('  => Change Name..: '  ||to_char(v_chgdbname));
 31       dbms_output.put_line('  => Change DBID..: '  ||to_char(v_chgdbid));
 32
 33       w_action := 'Alterando os Datafiles, procedure (dbms_backup_restore.nidprocessdf).';
 34       for i in (select file#,name from v$datafile)
 35       loop
 36          dbms_output.put_line('DataFile..........: '  ||i.name);
 37          dbms_output.put_line('  => Skipped......: '  ||to_char(v_skipped));
 38          dbms_output.put_line('  => Change Name..: '  ||to_char(v_chgdbname));
 39          dbms_output.put_line('  => Change DBID..: '  ||to_char(v_chgdbid));
 40          dbms_backup_restore.nidprocessdf(i.file#,0, v_skipped,v_chgdbid,v_chgdbname);
 41       end loop;
 42
 43       w_action := 'Alterando os Tempfiles, procedure (dbms_backup_restore.nidprocessdf).';
 44       for i in (select file#,name from v$tempfile)
 45       loop
 46          dbms_output.put_line('TempFile..........: '  ||i.name);
 47          dbms_output.put_line('  => Skipped......: '  ||to_char(v_skipped));
 48          dbms_output.put_line('  => Change Name..: '  ||to_char(v_chgdbname));
 49          dbms_output.put_line('  => Change DBID..: '  ||to_char(v_chgdbid));
 50          dbms_backup_restore.nidprocessdf(i.file#,1,v_skipped,v_chgdbid,v_chgdbname);
 51       end loop;
 52    dbms_backup_restore.nidend;
 53  end;
 54  /
Enter value for novo_dbid: 1
old  16:      select TO_NUMBER('&NOVO_DBID') into v_new_dbid from dual;
new  16:      select TO_NUMBER('1') into v_new_dbid from dual;
New NAME=DBTRN
Old NAME=DBTRN
New DBID=1
Old DBID=3464458105
ControlFile.......:
=> Change Name..: 0
=> Change DBID..: 1
DataFile..........: /oraprd02/oradata/dbtrn/system01.dbf
=> Skipped......:
=> Change Name..: 0
=> Change DBID..: 1
DataFile..........: /oraprd02/oradata/dbtrn/sysaux01.dbf
=> Skipped......: 0
=> Change Name..: 0
=> Change DBID..: 1
DataFile..........: /oraprd02/oradata/dbtrn/users01.dbf
=> Skipped......: 0
=> Change Name..: 0
=> Change DBID..: 1
DataFile..........: /oraprd02/oradata/dbtrn/veys01.dbf
=> Skipped......: 0
=> Change Name..: 0
=> Change DBID..: 1
DataFile..........: /oraprd02/oradata/dbtrn/FAROL01.dbf
=> Skipped......: 0
=> Change Name..: 0
=> Change DBID..: 1
DataFile..........: /oraprd02/oradata/dbtrn/teste01.dbf
=> Skipped......: 0
=> Change Name..: 0
=> Change DBID..: 1
DataFile..........: /oraprd02/oradata/dbtrn/teste02.dbf
=> Skipped......: 0
=> Change Name..: 0
=> Change DBID..: 1
DataFile..........: /oraprd03/oradata/dbtrn/system02.dbf
=> Skipped......: 0
=> Change Name..: 0
=> Change DBID..: 1
DataFile..........: /oraprd03/oradata/dbtrn/undotbs01.dbf
=> Skipped......: 0
=> Change Name..: 0
=> Change DBID..: 1
TempFile..........: /oraprd02/oradata/dbtrn/temp01.dbf
=> Skipped......: 0
=> Change Name..: 0
=> Change DBID..: 1

PL/SQL procedure successfully completed.

Terminado a execução do script podemos ver que todos os arquivos tiveram o DBID alterado para 1 e que nenhum foi pulado (SKIPPED).

Efetuando novamente um shutdown e abrindo a base com OPEN RESETLOGS pois alteramos o controlfile!


SQL> startup mount
ORACLE instance started.

Total System Global Area 1138368512 bytes
Fixed Size                  1364088 bytes
Variable Size             318771080 bytes
Database Buffers          788529152 bytes
Redo Buffers               29704192 bytes
Database mounted.
SQL> alter database open resetlogs;

Database altered.

Verificando o novo DBID do banco de dados:

SQL> select dbid from v$database;

      DBID
----------
         1

No script também existe a variavel v_new_db_name que lhe mertite alterar junto com o DBID o DBNAME da base, basta ajustá-lo e voilá! tudo de uma só vez.

Referências:

 How To Choose Your Oracle Database ID (DBID)

%name Escolhendo meu DBID

Autor: Anderson Graf

Bacharel em Sistemas de Informação e MBA em Gestão de Banco de Dados Oracle. Entusiasta da tecnologia Oracle, ACE Associate ♠, autor em vários blogs e OTN. Consultor Oracle Senior na Exímio Soluções em TI

Envolvido em soluções de:
– Implementação, migração, gerenciamento e suporte a produtos Oracle, multiplataforma
– Monitoramento de ambientes 24×7
– Backup e Recovery
– Performance e Tuning
– Alta disponibilidade (HA) – RAC, Data Guard
– EM database/grid/cloud control
– Particionamento & Advanced Compression
– Oracle Engineered Systems – ODA, Exadata

Blog pessoal: http://www.andersondba.com.br
Articulista na Oracle Technology Network (OTN) – https://goo.gl/99R6yW
ACE Associate – https://goo.gl/MBB51b
Articulista GPO – http://profissionaloracle.com.br