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”.