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