Por que . oraenv?

Quando temos nosso primeiro contato com o banco de dados Oracle, acabamos encontrando o famoso comando “. oraenv”, que usamos para declarar as variáveis de ambiente para a instância do banco de dados que vamos conectar. Entretanto, muitos iniciantes não sabem o que esse comando faz “por trás dos panos”, e acabam surgindo muitas dúvidas como “por que meu sqlplus não abre se instalei tudo de maneira correta?”. E é isto que vou esclarecer neste artigo.

env: verificando as variáveis de ambiente

As variáveis de ambiente são usadas amplamente nos sistemas operacionais, como Windows, MacOS e Linux, e armazenam informações importantes sobre o ambiente de execução do sistema. Essas variáveis contém valores como caminhos para diretórios, configurações de idioma, hostname e diversos outros. Essas variáveis oferecem meios para que os aplicativos acessem informações sobre o sistema, e também permite ao usuário customizar o funcionamento do seu sistema.

Quando falamos em Linux, sistema operacional onde geralmente instalamos o Oracle Database, podemos citar algumas das principais variáveis de ambiente:

  • HOME: aponta para o diretório pessoal do usuário atual;
  • USER ou USERNAME: armazena o nome do usuário atual;
  • SHELL: armazena o caminho do interpretador de comando padrão do sistema;
  • LANG: define a configuração regional e o idioma do sistema;
  • PATH: armazena uma série de diretórios, separados por dois pontos ( : ), onde o sistema operacional buscará pelo comando digitado sem o caminho completo.

which: mostrando os caminhos completos dos comandos

No Linux o comando which seguido por um comando, nos mostra o caminho completo do comando passado por parâmetro. Por exemplo:

[oracle@dba-ol7 ~]$ which ls
/usr/bin/ls

Executando o comando acima no nosso terminal, temos o resultado “/usr/bin/ls”, indicando que o binário deste comando se encontra dentro do diretório “/usr/bin”.

Entretanto, se tentarmos executar este comando para um executável do Oracle, como o sqlplus ou netca, por exemplo, antes de executarmos o . oraenv, temos o seguinte erro:

[oracle@dba-ol7 ~]$ which sqlplus
/usr/bin/which: no sqlplus in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oracle/.local/bin:/home/oracle/bin)

Esse erro ocorre devido ao sistema operacional não ter encontrado em nenhum dos diretórios referenciados na variável de ambiente PATH um binário executável chamado sqlplus. Podemos constatar que a lista de diretórios retornada no erro acima é a mesma que consta na variável de ambiente PATH com o comando:

[oracle@dba-ol7 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oracle/.local/bin:/home/oracle/bin

. oraenv, aqui vamos nós!

Então, vamos ao . oraenv.

Começando pelo ponto no início do comando, ele tem um propósito. O ponto, assim como seu equivalente source, faz com que o comando execute no mesmo contexto do shell atual, ou seja, permite que variáveis de ambiente e outras modificações do comando sejam aplicadas no shell em execução, em vez de executar o comando em um subshell.

Já o oraenv, quando executado, lê o arquivo /etc/oratab para determinar qual é o Oracle home para a instância especificada. O arquivo /etc/oratab contém entradas com a sintaxe abaixo:

ORACLE_SID:ORACLE_HOME:N

Por exemplo:

orcl:/u01/app/oracle/product/19.0.0/dbhome_1:N

Com base nos valores do /etc/oratab, o oraenv cria as variáveis de ambiente ORACLE_SID, ORACLE_BASE e ORACLE_HOME, além de incluir o caminho $ORACLE_HOME/bin à variável de ambiente PATH. Para visualizarmos as variáveis criadas usamos o comando:

[oracle@dba-ol7 ~]$ env | grep ORA
ORACLE_SID=orcl
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1

Além disso podemos verificar que o caminho $ORACLE_HOME/bin foi adicionado ao PATH usando:

[oracle@dba-ol7 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oracle/.local/bin:/home/oracle/bin:/u01/app/oracle/product/19.0.0/dbhome_1/bin

Agora, com este caminho adicionado podemos verificar com o comando which onde o sqlplus executa:

[oracle@dba-ol7 ~]$ which sqlplus
/u01/app/oracle/product/19.0.0/dbhome_1/bin/sqlplus

Como demonstrado, agora o sistema operacional consegue identificar o diretório que contém o binário do sqlplus, devido ao caminho ter sido adicionado ao PATH pelo comando oraenv.

Concluindo

Bom pessoal, espero ter ajudado você a entender melhor o funcionamento do oraenv e quais são suas implicações dentro do sistema operacional e sua relação com o funcionamento dos binários do Oracle.

Um grande abraço a todos!

Publicar comentário