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 DATABASEeSYSOPER;
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.
3 comments