Recentemente em uma migração de banco de dados SAP, a ferramenta BRTOOLS apresentou a seguinte mensagem de erro ao fazer a validação inicial do novo ambiente:

BR2036I Using standard database connection for ASM file select
BR2007E Control file '+DATAC1/XPTO/CONTROLFILE/cntrlXPTO.dbf' is not a valid ASM alias (valid name '+DATAC1/XPTO/cntrlXPTO.dbf') or is not part of database XPTO
BR2007E Control file '+RECOC1/XPTO/CONTROLFILE/cntrlXPTO.dbf' is not a valid ASM alias (valid name '+RECOC1/XPTO/cntrlXPTO.dbf') or is not part of database XPTO
BR1632E Checking Oracle parameter 'control_files' failed

O administrador do ambiente (Basis) solicitou que a configuração do parâmetro CONTROL_FILES tivesse exatamente os caminhos indicados como “esperados” na mensagem de erro acima.

Essa alteração é relativamente simples, bastaria alterar o parâmetro no spfile, baixar o banco, mover os arquivos para os novos diretórios e iniciar o banco novamemte.

No entanto, uma vantagem no ASM é a possibilidade de criar “apelidos” para os arquivos usando comandos SQL, conectados na própria instância RDBMS. Essa abordagem acaba sendo mais simples e mais segura (uma vez que não estou movimentando arquivo, apenas criando um apelido), além de resultar em um menor downtime (porque não preciso fazer nenhum ajuste enquanto o banco está down).

Note que essa abordagem é útil apenas para “customizar” os caminhos referenciados pelo parâmetro CONTROL_FILES e não tem relação com “Multiplexar” os arquivos em diretórios diferentes, assim como não é útil caso o objetivo seja realmente reorganizar os arquivos dentro do ASM.

Opção 1: Criando ASM Alias

Essa opção é aplicável quando o parâmetro control_files está fazendo referencia ao caminho absoluto do arquivo ASM e não a um ASM Alias.

1) Crie um ASM Alias para cada controlfile:

SQL> ALTER DISKGROUP DATAC1 
ADD ALIAS '+DATAC1/XPTO/cntrlXPTO.dbf' 
FOR '+DATAC1/XPTO/CONTROLFILE/cntrlXPTO.dbf'; 

SQL> ALTER DISKGROUP RECOC1
ADD ALIAS '+RECOC1/XPTO/cntrlXPTO.dbf' 
FOR '+RECOC1/XPTO/CONTROLFILE/cntrlXPTO.dbf';

2) Altere o parâmetro CONTROL_FILES apontando para os novos ASM Alias:

SQL> ALTER SYSTEM 
SET control_files='+DATAC1/XPTO/cntrlXPTO.dbf','+RECOC1/XPTO/cntrlXPTO.dbf' 
SCOPE=SPFILE;

3) Reinicie o banco de dados:

$ srvctl stop database -d XPTO
$ srvctl start database -d XPTO

Com o parâmetro ajustado, a view v$controlfile já deve indicar os novos caminhos usados para referenciar o arquivo no ASM, apesar de o arquivo original pernamenecer em sua localização original.

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
+DATAC1/XPTO/cntrlXPTO.dbf
+RECOC1/XPTO/cntrlXPTO.dbf

Opção 2: Renomeando um Alias existente

Essa opção aplica-se quando o parâmetro control_files já faz referência a um ASM Alias, mas deseja-se alterar o ALIAS para um padrão diferente (testado na versão 19c).

1) Renomeie o ASM Alias: (pode ser feito online, a instância continua fazendo referência ao arquivo original até que seja reiniciada):

SQL> ALTER DISKGROUP DATAC1
RENAME ALIAS '+DATAC1/XPTO/cntrlXPTO.dbf' TO '+DATAC1/XPTO/control01.ctl';

SQL> ALTER DISKGROUP RECOC1
RENAME ALIAS '+RECOC1/XPTO/cntrlXPTO.dbf' TO '+RECOC1/XPTO/control02.ctl';

2) Altere o parâmetro CONTROL_FILES apontando para os novos ASM Alias:

SQL> ALTER SYSTEM 
SET control_files='+DATAC1/XPTO/control01.ctl','+RECOC1/XPTO/control02.ctl' 
SCOPE=SPFILE;

3) Reinicie o banco de dados:

$ srvctl stop database -d XPTO
$ srvctl start database -d XPTO

Nota: Um arquivo só pode ter um alias, a tentativa de criar um ASM Alias adicional resulta no seguinte erro: “ORA-15176: file xxxx already has “an alias associated with it”.

Leave a Reply

Discover more from Blog do Dibiei

Subscribe now to keep reading and get access to the full archive.

Continue reading