Resolvendo o ORA-17627 em uma operação de clone remoto

Em ambientes multitenant é comum que tenhamos que clonar ou migrar PDBs entre CDBs, e uma das formas de fazermos isso é através do método de clone remoto, que utiliza um database link no CDB de destino, apontando para o CDB de origem. Durante uma dessas operações, encontrei o erro ORA-17627, e neste post vou falar sobre a sua causa e resolução.

Pré requisitos para o clone remoto

Antes de partir direto para o erro, vale a pena relembrar os pré requisitos de um clone remoto:

  • Os CDBs origem e destino devem ter Charsets compatíveis;
  • O usuário executor do clone deve ter o privilégio CREATE PLUGGABLE DATABASE;
  • Um database link deve existir, do CDB de destino apontando para o CDB (ou PDB) de origem;
  • O usuário usado no database link precisa ter os privilégios CREATE PLUGGABLE DATABASE e SYSOPER;

Com esses prereqs podemos efetuar o clone usando o comando CREATE PLUGGABLE DATABASE com a cláusula FROM, passando o nome do PDB de origem e o database link logo após ela:

SQL> CREATE PLUGGABLE DATABASE MYPDB FROM MYPDB@DBLINK;

O problema

O procedimento é bem simples, porém durante a execução do comando de clone, recebo o seguinte erro:

Command: CREATE PLUGGABLE DATABASE MYPDB FROM MYPDB@DBLINK;

ERROR at Line 1:
ORA-65169: error encounted while attempting to copy file +DATA1/CDB/DATAFILE/my_datafile.dbf
ORA-17627: ORA-01017: invalid username/password; logon denied
ORA-17629: Cannot connect to the remote database server

Bom, inicialmente pensei o óbvio: “Errei a senha do usuário que estou usando no dblink, vou recriar ele, cuidando com a digitação da senha”. Feito isso, comando reexecutado e o mesmo erro aconteceu.

A solução

O grande problema dessa mensagem de erro é que ela nos direciona pra uma linha de resolução que não condiz com o problema em si. Depois de muita pesquisa, a Doc ID 2863929.1: ORA-17627: ORA-01017: invalid username/password; logon denied While Creating Pluggable Database From Non-CBD Through DBLINK forneceu a resposta.

O problema ocorre porque durante um clone remoto de PDB, o Oracle abre diversas sessões na origem, e o erro é gerado quando o limite do SESSIONS_PER_USER configurado no profile do usuário do dblink é alcançado. Infelizmente aqui o Oracle retorna o erro ORA-01017 ao invés do ORA-02391 (exceeded simultaneous SESSIONS_PER_USER limit), o que causa a confusão e torna a resolução menos intuitiva.

Ao aumentar o valor de SESSIONS_PER_USER para o usuário do dblink, o clone prossegue sem mais erros.

Referências

Cloning a Remote PDB;

ORA-17627: ORA-01017: invalid username/password; logon denied While Creating Pluggable Database From Non-CBD Through DBLINK (Doc ID 2863929.1);

3 comments

comments user
Cristiano Pedreira Góes

Será mais um requisito Oracle de check antes do remote clone PDB.

Show.

comments user
Mateus

Existe um valor mínimo para esse limit na origem? Conseguimos estimar quantas sessões serão iniciadas em uma operação como essa?

Ótima dica.

    comments user
    piontk

    Não existe uma forma fácil de estimar isso Mateus. O número de sessões vai depender principalmente do paralelismo usado durante a operação, mas mesmo sem o paralelismo o Oracle abre mais de uma sessão durante o processo. Uma forma que pode ser usada para verificar o número exato seria criando uma trigger de logon que registra informações em uma tabela de controle ou habilitando o trace para o serviço que o clone usa no database link.

Publicar comentário