Banco de Dados

9 set, 2020

Deploy de um banco Oracle em um container Docker Linux e conexão via SQL Developer

Publicidade

Um experimento bacana para seu ambiente de desenvolvimento

Image for post

Cenário

Imagine um cenário onde utiliza-se Oracle como SGDB e ao iniciar o projeto ainda não foi provisionado um banco de dados de desenvolvimento, além de não conseguir também instalar o banco localmente devido a políticas da empresa. Apesar de ser um grande revés, existe uma alternativa temporária para contornar o problema: baixando a imagem do Oracle e a colocando em um container.

Não é o melhor cenário certamente mas pode quebrar um galho (para efeitos de desenvolvimento).

Existe uma versão do Oracle Enterprise edition para Developer tier no Dockerhub, baixa procurar e executar o Docker pull da imagem.

Image for post

Imagem docker — execute o comando: docker pull store/oracle/database-enterprise:12.2.0.1

Image for post

docker pull para obter imagem Oracle

Conectando de fora do container

Para conectar na base fora do container (no caso via SQL Developer), precisamos rodar o container, informar um nome para o banco e informar qual porta acessaremos. No caso, deixei na porta 1521 para acesso externo e 1521 que é a porta padrão do listener do Oracle (se não me engano).

O comando é:

docker run -d -it — name <Oracle-DB> -p 1521:1521 store/oracle/database-enterprise:12.2.0.1

Image for post

Docker run e listagem de containers rodando

Substitua o nome do banco e portas a seu gosto!

Agora, vamos logar na base via SQL PLUS para criar um usuário edar permissão para ele. Para isso, execute o comando abaixo:

docker exec -it <NOME-DA-BASE> bash -c “source /home/oracle/.bashrc; sqlplus /nolog”

Obs: Até a base subir, esse processo pode retornar um erro: “bash: sqlplus: command not found” — normalmente após algum tempo o command line do SQL fica disponível.

Image for post

Executando SQL PLUS dentro do container

Nesse momento, estamos conectados na base Oracle. Agora, teremos que executar algumas comandos SQL para conectar como sysdba, alterar a sessão para possibilitar scripts, criar um usuário e dar permissão total ao mesmo.

Os comandos SQL são:

  • connect sys as sysdba;
  • alter session set “_ORACLE_SCRIPT”=true;
  • create user raycarneiro identified by raycarneiro; — — usuário e senha
  • GRANT ALL PRIVILEGES TO raycarneiro;

Image for post

Comandos SQL executado dentro do container

Acessando via Oracle SQL Developer

Supondo que você já tenho baixado o SQL Developer, basta agora conectar no banco.

Crie uma nova conexão e informe o usuário de banco criado previamente, sua senha e especifique os detalhes da conexão.

A porta precisa ser a mesma cadastrada como externa do container, o SID não foi alterado (por padrão é xe) e o nome do serviço é ORCLCDB.localdomain

Image for post

Feito isso, teste a conexão. Se funcionou, será solicitado sua senha novamente.

Image for post

Se autenticado com sucesso, você terá uma base disponível para desenvolvimento dentro de um container Docker.

Image for post

Conclusão

Esse artigo retrata uma solução que encontrei para rodar um banco Oracle dentro de um container, dada a situação que não tinha uma infra pronta e nem disponibilidade de instalar o banco localmente no equipamento do cliente. Como eu já tinha o Docker instalado no sistema operacional, essa foi uma solução paleativa para resolver o problema.