Erro ao criar database link utilizando senha iniciada por caractere numérico.
Boa noite a todos (ou será bom dia? Afinal, é madrugada! :)).
Essa é a nossa vida de DBA. Implementando novas funcionalidades ao banco de dados em ambiente de produção sempre nas madrugadas. :)
E como não poderia ser diferente, algumas surpresas também acontecem no meio da implementação.
Problema encontrado, problema resolvido e agora, solução compartilhada. :D
O banco de dados Oracle permite que um usuário seja criado e que sua senha seja iniciada por um número, como segue:
02:55:30 SYSTEM@ORCL2> CREATE USER TESTE 02:55:33 2 IDENTIFIED BY 123456; User created. Elapsed: 00:00:00.03
Mas perceba que, ao utilizar uma mistura de caracteres numéricos e alfa numéricos, um erro será disparado:
02:57:23 SYSTEM@ORCL2> CREATE USER TESTE2 02:57:26 2 IDENTIFIED BY 123dasilva5; CREATE USER TESTE2 IDENTIFIED BY 123dasilva5 * ERROR at line 1: ORA-00922: missing or invalid option Elapsed: 00:00:00.00
A solução para a criação do usuário é definir a senha (mista com numérico e alfa numérico) entre aspas (" "), como segue:
02:59:52 SYSTEM@ORCL2> CREATE USER TESTE2 02:59:55 2 IDENTIFIED BY "123dasilva5"; User created. Elapsed: 00:00:00.05
OK. Agora temos 2 usuários (TESTE e TESTE2) criados no BD ORCL2 onde o primeiro possui uma senha composta apenas por caracteres numéricos e o segundo com uma senha mista.
Vejamos agora como o database link irá se comportar:
03:02:21 SYSTEM@ORCL> CREATE DATABASE LINK DBLINK_TESTE 03:02:24 2 CONNECT TO TESTE IDENTIFIED BY 123456 03:02:27 3 USING 'ORCL2'; CONNECT TO TESTE IDENTIFIED BY 123456 * ERROR at line 1: ORA-00933: SQL command not properly ended Elapsed: 00:00:00.01 03:03:45 SYSTEM@ORCL> CREATE DATABASE LINK DBLINK_TESTE2 03:03:50 2 CONNECT TO TESTE2 IDENTIFIED BY 123dasilva5 03:03:53 3 USING 'ORCL2'; CONNECT TO TESTE2 IDENTIFIED BY 123dasilva5 * ERROR at line 1: ORA-00933: SQL command not properly ended Elapsed: 00:00:00.01
Perceba que, em ambos os casos, o database link não foi criado. O pior é que o erro não é muito claro. A única pista que temos é o asterisco (*) logo abaixo da senha, na mensagem de erro.
A solução é bem simples. Independentemente de como tenha sico criado o usuário (com a senha entre aspas ou não), ao criar o database link onde a senha do usuário seja iniciada por caractere numérico, sempre haverá a necessidade de colocar a senha entre aspas, como segue:
03:07:12 SYSTEM@ORCL> CREATE DATABASE LINK DBLINK_TESTE 03:07:15 2 CONNECT TO TESTE IDENTIFIED BY "123456" 03:07:18 3 USING 'ORCL2'; Database link created. Elapsed: 00:00:00.01 03:09:33 SYSTEM@ORCL> CREATE DATABASE LINK DBLINK_TESTE2 03:09:38 2 CONNECT TO TESTE2 IDENTIFIED BY "123dasilva5" 03:09:41 3 USING 'ORCL2'; Database link created. Elapsed: 00:00:00.01 É isso aí! :)