Posso alterar o SID de um banco de dados Oracle?

18

O servidor é o Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit

Existe uma maneira fácil e rápida de alterar os SIDs dos bancos de dados de teste no servidor?

Soltar e recriar o banco de dados é uma opção para mim. Mas estou procurando algo que exija menos tempo.

A outra opção para atribuir nomes nos clientes tnsnames.ora é propensa a erros, porque eles não são administrados centralmente.

Comparado com o tempo para descartar e criar um banco de dados no SQL Server, a quantidade de tempo necessária para criar um novo banco de dados Oracle é excessivamente maior. Mais adiante no SQL-Server, você pode renomear instâncias do SQL-Server. [Geralmente, você renomeia o servidor em que o SQL-Server está sendo executado e tem alguns problemas até renomear o servidor também].

bernd_k
fonte
Você menciona que pode descartar e recriar os bancos de dados. Você tem acesso ao banco de dados de produção e seus backups? Você pode usar o RMAN e o comando duplicado para recriar o banco de dados e alterar o SID ao mesmo tempo.
Sumnibot
Não, eu trabalho como DBA para desenvolver e testar alguns bancos de dados Oracle.
bernd_k
2
Quando você usava um banco de dados no SQL Server, geralmente usa um Esquema (= usuário) no Oracle. O mesmo nome não significa a mesma coisa nesses dois mundos
a_horse_with_no_name

Respostas:

13

Como o utilitário 9i dbnewid (nid) pode ser usado para alterar o nome do banco de dados (e o DBID, se necessário). Se o nome do banco de dados estiver sendo alterado apenas, o resetlogs não será necessário:

  • 1 banco de dados de inicialização no modo de montagem

    shutdown immediate
    startup mount
  • 2 execute nid para alterar o nome do banco de dados:

    nid target=sys/syspassword@dbtns dbname=newname setname=YES
  • 3 encerre e inicie o banco de dados no modo de montagem:

    shutdown immediate
    startup mount
  • 4 alteração db_nameno spfile (ou no pfile editando o arquivo):

    alter system set db_name=newname scope=spfile;
  • 5 recriar arquivo de senha:

    orapwd file=orapwnewname password=syspassword
  • 6 inicialização do banco de dados

    startup
  • 7 etapas de renomeação de post:

    change SID in listener.ora
    correct tnsnames.ora
    remove old trace directories
    change /etc/oratab (UNIX) or rename windows service using oradim
Andrey Goryunov
fonte
11
Renomeei 4 bancos de dados Oracle em um Windows Server dessa maneira. Procurando pelo utilitário dbnewid , encontrei o oracle-base.com/articles/9i/DBNEWID.php que dava algumas explicações adicionais.
bernd_k
11
esta é uma boa resposta quando a pergunta era: como renomear um banco de dados. A pergunta é: como alterar um SID.
Ik_zelf
17

Você precisa recriar o arquivo de controle

Este post de Kaunain Ahmed descreve as etapas necessárias:

  1. faça: altere o arquivo de controle de backup do banco de dados para rastrear;
  2. extraia o comando "create controlfile" do tracefile background-dump-destination.
  3. encerre o banco de dados.
  4. Altere o nome do banco de dados em seu init.ora e altere o init.ora
  5. Altere o SID em / etc / oratab ou / var / opt / oracle / oratab
  6. Altere o SID no seu ambiente e forneça-o
  7. Inicialize o banco de dados para montar o status de montagem
  8. Recrie o arquivo de controle com a instrução da posição 2.
  9. Altere o nome do banco de dados global_name para 10. Altere a configuração do TNS de acordo com $ ORACLE_HOME / network / admin / *. Ora Procure por SID e GLOBAL_NAME

Existem outras ferramentas mencionadas no encadeamento.

Aqui está um post do AskTom que faz referência ao processo em mais detalhes. Embora seja 10g, ainda deve funcionar.

Brian Ballsun-Stanton
fonte
5
Nota para os usuários do Windows, você também precisará usar o utilitário "oradim" para configurar o novo serviço.
REW
9

Sim, você pode e também é muito fácil.

No Oracle, ORACLE_SID é apenas o nome da Instância Oracle e não tem muito a ver com o DBNAME. Um banco de dados com o nome PROD pode ser servido usando Instâncias com qualquer nome válido. Não há conexão direta entre o SID e o DBNAME. Essa conexão é feita usando os parâmetros.

O arquivo de parâmetro é identificado como init $ {ORACLE_SID} .ora ou spfile $ {ORACLE_SID} .ora No arquivo de parâmetro está o parâmetro db_name. É aqui que a conexão entre a Instância Oracle e o banco de dados é feita.

Portanto, você não precisa recriar um arquivo de controle, não precisa usar nid, apenas certifique-se de que seu arquivo de parâmetros tenha o nome certo, desative a antiga Instância Oracle e inicie a nova Instância Oracle após definir ORACLE_SID para o novo nome da instância Oracle. O arquivo de parâmetros e o arquivo de senha são encontrados usando o $ {ORACLE_SID} como parte de seu nome.

Recriar o arquivo de controle é necessário apenas quando o DBNAME precisa ser alterado. nid é necessário após uma operação de clone, na qual é necessário alterar o DBID para evitar acidentes que possam prejudicar os backups do banco de dados de origem.

ik_zelf
fonte
+1 Mas ainda não tenho certeza se também quero alterar o DB_NAME.
2141111
Se você quiser: claro, pode, as outras respostas explicaram corretamente como fazer isso. Por que razão você faria isso? O db_name é muito físico. Conhecer o db_name é bom para um dba, mas para a maioria dos outros é irrelevante. Em uma abordagem consolidada normal, você tem um banco de dados que atende a muitos serviços. Um serviço - aplicativo - não deve se preocupar em qual banco de dados está sendo executado.
ik_zelf