Skip to content

nillander/doracle

Repository files navigation

Oracle 19c Docker

Este repositório contém uma configuração Docker Compose para executar o Oracle Database 19c em um ambiente containerizado, facilitando o desenvolvimento e testes locais.

📋 Índice

🔧 Pré-requisitos

  • Docker Engine 20.10+
  • Docker Compose 2.0+
  • Pelo menos 2GB de RAM disponível (recomendado 4GB+)
  • Pelo menos 10GB de espaço em disco livre

🚀 Instalação

  1. Clone ou baixe este repositório

  2. Configure as variáveis de ambiente

    Copie o arquivo de exemplo e ajuste conforme necessário:

    cp env.example .env
  3. Ajuste as permissões dos diretórios de dados (importante!)

    sudo chown -R 54321:54321 data/
    sudo chmod -R 755 data/

    Nota: Isso é necessário porque o Oracle roda com o usuário UID 54321 dentro do container.

⚙️ Configuração

Edite o arquivo .env para personalizar as configurações:

Portas

  • ORACLE_PORT: Porta do Oracle Database (padrão: 1521)
  • EM_PORT: Porta do Enterprise Manager (padrão: 5500)

Configurações do Banco de Dados

  • ORACLE_SID: Nome da instância do container (padrão: ORCLCDB)
  • ORACLE_PDB: Nome da PDB - Pluggable Database (padrão: ORCLPDB1)
  • ORACLE_PWD: Senha dos usuários sys/system/pdbadmin (obrigatório)
  • ORACLE_EDITION: Edição do Oracle - standard ou enterprise (padrão: standard)
  • ORACLE_CHARACTERSET: Charset do banco (padrão: AL32UTF8)

Timezone

  • TZ: Timezone (padrão: America/Sao_Paulo)

Limites de Recursos

  • MEMORY_LIMIT: Limite de memória (padrão: 2g)
  • MEMORY_RESERVATION: Reserva de memória (padrão: 1g)
  • CPUS_LIMIT: Limite de CPUs (padrão: 2)
  • CPUS_RESERVATION: Reserva de CPUs (padrão: 1)

🎯 Uso

Iniciar o Oracle

docker compose up -d

🛠️ Construção e Inicialização do Container

Siga esta sequência para criar o banco do zero:

  1. Configurar variáveis: cp env.example .env e ajuste ORACLE_PWD, portas e limites.
  2. Ajustar permissões dos dados: sudo chown -R 54321:54321 data/ && sudo chmod -R 755 data/.
  3. Scripts de bootstrap: mantenha a pasta scripts/ (montada em /opt/oracle/scripts). O SQL scripts/startup/disable_maintenance_plan.sql desabilita as janelas de manutenção e remove o plano DEFAULT_MAINTENANCE_PLAN, evitando mensagens constantes nos logs.
  4. Subir o container: docker compose up -d.
  5. Validar: execute ./validate-oracle.sh e confirme que o status está healthy, o listener responde e a conexão SQL*Plus passa.

Para reconstruir tudo de maneira automatizada, use sudo ./reset-oracle.sh, que aplica todos os passos acima e acompanha os logs até o banco ficar pronto.

Parar o Oracle

docker compose stop

Reiniciar o Oracle

docker compose restart

Ver logs em tempo real

docker compose logs -f oracle19c

Parar e remover tudo (⚠️ CUIDADO: apaga dados)

docker compose down -v

📜 Scripts Auxiliares

validate-oracle.sh

Script de validação automática que verifica:

  • Status do container
  • Healthcheck
  • Logs recentes
  • Oracle Listener
  • Conexão ao banco de dados
  • Portas expostas

Uso:

chmod +x validate-oracle.sh
./validate-oracle.sh

reset-oracle.sh

Script para resetar completamente o Oracle (limpar dados e recriar).

⚠️ ATENÇÃO: Este script apaga todos os dados do banco!

Uso:

chmod +x reset-oracle.sh
sudo ./reset-oracle.sh

O script:

  1. Para o container
  2. Remove todos os dados antigos
  3. Ajusta permissões
  4. Inicia o Oracle novamente
  5. Aguarda o Oracle ficar pronto (healthcheck)

create-laravel-user.sh

Script para criar o usuário laraveldb e a tabela de teste usuarios para desenvolvimento Laravel.

Uso:

chmod +x create-laravel-user.sh
./create-laravel-user.sh

O script:

  1. Verifica se o container está rodando
  2. Verifica se o Oracle está pronto (healthcheck)
  3. Cria o usuário laraveldb na PDB ORCLPDB1
  4. Cria a tabela usuarios de teste
  5. Valida a conexão e a criação dos objetos
  6. Exibe informações de acesso

Nota: O script verifica se o usuário/tabela já existem antes de criar, evitando erros em execuções repetidas.

scripts/startup/disable_maintenance_plan.sql

Executado automaticamente a cada inicialização (via /opt/oracle/scripts/startup). Ele desabilita todas as janelas padrão (MONDAY_WINDOW, WEEKEND_WINDOW, etc.), força o grupo SYS.MAINTENANCE_WINDOW_GROUP a permanecer desligado e zera RESOURCE_MANAGER_PLAN, evitando que o Resource Manager padrão seja aplicado e que novas mensagens “Setting Resource Manager plan...” apareçam nos logs.

✅ Validação

Validação Manual

Consulte o arquivo VALIDACAO.md para um guia detalhado passo a passo.

Validação Automática

Execute o script de validação:

./validate-oracle.sh

⏱️ Tempo de Inicialização

Importante: A primeira inicialização do Oracle pode levar 5-15 minutos dependendo da sua máquina.

Sinais de que ainda está inicializando:

  • Healthcheck mostra starting
  • Logs mostram Copying database files ou Creating database
  • Listener não mostra serviços registrados

🔐 Informações de Acesso

Enterprise Manager (Web)

Conexão SQL

  • Host: localhost
  • Port: 1521
  • SID: ORCLCDB
  • Service Name: ORCLPDB1 (para PDB)
  • Usuários:
    • sys (como sysdba)
    • system
  • pdbadmin (para PDB)
  • Senha: (valor definido em ORACLE_PWD no arquivo .env)

Exemplo de Conexão SQL*Plus

docker compose exec oracle19c sqlplus sys/SUA_SENHA@localhost:1521/ORCLCDB as sysdba

Dentro do SQL*Plus:

SELECT 'Oracle está funcionando!' FROM DUAL;
EXIT;

Exemplo de Conexão no DataGrip (usuários padrão)

  1. Connection type: Service Name
  2. Host: localhost
  3. Port: 1521
  4. Service: ORCLPDB1
  5. Driver: Thin
  6. Authentication: User & Password
  7. User: pdbadmin (ou sys como SYSDBA, system, etc.)
  8. Password: valor de ORACLE_PWD
  9. O URL gerado fica jdbc:oracle:thin:@//localhost:1521/ORCLPDB1

Configuração DataGrip

💾 Schema laraveldb para o Laravel

1. Criar o usuário e a tabela de teste

Método recomendado (script automatizado):

chmod +x create-laravel-user.sh
./create-laravel-user.sh

O script cria automaticamente o usuário laraveldb e a tabela usuarios, além de validar a conexão.

Método manual (comandos SQL):

Execute os comandos abaixo dentro do container (as credenciais usam os valores padrão de .env.example):

# 1. Criar o usuário/schema dentro da PDB ORCLPDB1
docker compose exec -T oracle19c sqlplus -s sys/Oracle123Secure@localhost:1521/ORCLPDB1 as sysdba <<'SQL'
CREATE USER laraveldb IDENTIFIED BY "Oracle123Secure" DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
GRANT CONNECT, RESOURCE TO laraveldb;
ALTER USER laraveldb QUOTA UNLIMITED ON USERS;
SQL

# 2. Conectar como laraveldb e criar a tabela de teste
docker compose exec -T oracle19c sqlplus -s laraveldb/Oracle123Secure@localhost:1521/ORCLPDB1 <<'SQL'
CREATE TABLE usuarios (
    id   NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
    nome VARCHAR2(255) NOT NULL,
    CONSTRAINT usuarios_pk PRIMARY KEY (id)
);
SQL

O campo id usa GENERATED BY DEFAULT ON NULL AS IDENTITY, o equivalente Oracle para AUTO_INCREMENT. Esse schema fica pronto para ser consumido por uma aplicação Laravel ou para testes manuais.

2. Conectando o DataGrip com o usuário laraveldb

  1. Connection type: Service Name
  2. Host: localhost
  3. Port: 1521
  4. Service: ORCLPDB1
  5. Driver: Thin
  6. Authentication: User & Password
  7. User: laraveldb
  8. Password: Oracle123Secure (ou o valor atualizado de ORACLE_PWD)
  9. O URL gerado fica jdbc:oracle:thin:@//localhost:1521/ORCLPDB1

Visualizando o schema

  1. Conexão dedicada: duplique a conexão existente e altere o usuário para laraveldb. Ao expandir a nova conexão, o painel Database exibirá Schemas > LARAVELDB > Tables > USUARIOS.
  2. Via pdbadmin ou sys: na conexão atual, clique no ícone de filtro (funil) em Schemas e adicione LARAVELDB. Depois expanda Schemas e procure a tabela em LARAVELDB > Tables.
  3. Sempre que criar objetos novos, use Ctrl+F5 (Refresh) para atualizar o cache de metadados do DataGrip.

Acessando o Enterprise Manager (EM Express)

  • URL padrão: http://localhost:5500/em. Se houver proxy reverso forçando HTTPS, use https://localhost:5500/em.
  • Credenciais com privilégios máximos:
    • Username: sys
    • Password: Oracle123Secure (ou o valor de ORACLE_PWD)
    • Container Name: ORCLPDB1 (ou ORCLCDB para o container raiz)
    • Marque “Connect as SYSDBA” quando solicitado e repita usuário/senha caso o navegador exiba um popup de autenticação.

Exemplo de Conexão JDBC

jdbc:oracle:thin:@localhost:1521:ORCLCDB

Para PDB:

jdbc:oracle:thin:@localhost:1521/ORCLPDB1

🐛 Solução de Problemas

Problema: "Cannot create directory /opt/oracle/oradata"

Solução:

sudo chown -R 54321:54321 data/
sudo chmod -R 755 data/
docker compose restart

Problema: Container para logo após iniciar

Solução:

# Ver logs detalhados
docker compose logs oracle19c

# Verificar recursos disponíveis
docker stats oracle19c

Verifique se há memória suficiente disponível e ajuste os limites no arquivo .env se necessário.

Problema: Não consegue conectar

Solução:

  1. Aguarde alguns minutos (banco ainda pode estar inicializando)
  2. Verifique se o listener está ativo: docker compose exec oracle19c lsnrctl status
  3. Verifique a senha no arquivo .env
  4. Execute o script de validação: ./validate-oracle.sh

Problema: Healthcheck sempre falha

O healthcheck pode levar alguns minutos para passar na primeira inicialização. Monitore os logs:

docker compose logs -f oracle19c

Procure por mensagens como:

  • DATABASE IS READY TO USE! - Banco pronto
  • Listener started - Listener ativo
  • ERROR ou DATABASE SETUP WAS NOT SUCCESSFUL - Problemas

Problema: Alerta "Your kernel does not support swap limit capabilities"

Sintoma:

WARNING: No swap limit support
oracle19c Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.

Causa: Este alerta é comum no WSL2, especialmente após:

  • Upgrade de hardware (troca de placa mãe, RAM)
  • Atualização do WSL2 ou Docker
  • Mudança para cgroup v2 (padrão em versões mais recentes)

O WSL2 não suporta swap limits nativamente, mesmo que os limites de memória estejam configurados.

Solução: Este é um alerta informativo, não um erro. O limite de memória funciona normalmente, apenas o swap não é limitado. Você pode:

  1. Ignorar o alerta (recomendado) - O Oracle funciona normalmente com os limites de memória configurados
  2. Comentar as linhas de memória no docker-compose.yml se o alerta incomodar, mas você perderá o controle de recursos:
    limits:
        # memory: ${MEMORY_LIMIT:-2g}  # Comentado para evitar alerta
        cpus: '${CPUS_LIMIT:-2}'

Nota: Após upgrades de hardware, o WSL2 pode ser reinstalado/atualizado automaticamente, mudando o comportamento do cgroup. Isso é esperado e não afeta o funcionamento do Oracle.

📊 Comandos Úteis

Gerenciamento do Container

# Ver status
docker compose ps

# Ver logs
docker compose logs -f oracle19c

# Entrar no container
docker compose exec oracle19c bash

# Ver uso de recursos
docker stats oracle19c

# Parar o Oracle
docker compose stop

# Iniciar o Oracle
docker compose start

# Reiniciar o Oracle
docker compose restart

Comandos Oracle

# Verificar status do listener
docker compose exec oracle19c lsnrctl status

# Iniciar listener (se necessário)
docker compose exec oracle19c lsnrctl start

# Conectar via SQL*Plus
docker compose exec oracle19c sqlplus sys/SUA_SENHA@localhost:1521/ORCLCDB as sysdba

Verificar Portas

# Verificar porta 1521 (Oracle)
netstat -tuln | grep 1521
# ou
ss -tuln | grep 1521

# Verificar porta 5500 (Enterprise Manager)
netstat -tuln | grep 5500
# ou
ss -tuln | grep 5500

📝 Checklist de Validação

  • Container está rodando (docker compose ps)
  • Logs não mostram erros críticos
  • Listener está ativo (lsnrctl status)
  • Porta 1521 está escutando
  • Porta 5500 está escutando
  • Conexão SQL*Plus funciona
  • Enterprise Manager acessível via browser
  • Healthcheck mostra healthy (após inicialização completa)

🔒 Segurança

  • Sempre use senhas fortes para ORACLE_PWD
  • Não commite o arquivo .env no controle de versão
  • Mantenha backups das pastas data/oradata e data/diag
  • Este ambiente é adequado para desenvolvimento e testes locais. Para produção, considere configurações adicionais de segurança.

📚 Recursos Adicionais

📄 Licença

Este projeto utiliza a imagem Docker laynerain/oracle19c:19.3.0. Consulte os termos de licença do Oracle Database para uso em produção.


Nota: Este é um ambiente de desenvolvimento/testes. Para ambientes de produção, considere configurações adicionais de segurança, backup e monitoramento.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages