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.
- Pré-requisitos
- Instalação
- Configuração
- Uso
- Scripts Auxiliares
- Validação
- Informações de Acesso
- Solução de Problemas
- Comandos Úteis
- 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
-
Clone ou baixe este repositório
-
Configure as variáveis de ambiente
Copie o arquivo de exemplo e ajuste conforme necessário:
cp env.example .env
-
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.
Edite o arquivo .env para personalizar as configurações:
ORACLE_PORT: Porta do Oracle Database (padrão: 1521)EM_PORT: Porta do Enterprise Manager (padrão: 5500)
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 -standardouenterprise(padrão: standard)ORACLE_CHARACTERSET: Charset do banco (padrão: AL32UTF8)
TZ: Timezone (padrão: America/Sao_Paulo)
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)
docker compose up -dSiga esta sequência para criar o banco do zero:
- Configurar variáveis:
cp env.example .enve ajusteORACLE_PWD, portas e limites. - Ajustar permissões dos dados:
sudo chown -R 54321:54321 data/ && sudo chmod -R 755 data/. - Scripts de bootstrap: mantenha a pasta
scripts/(montada em/opt/oracle/scripts). O SQLscripts/startup/disable_maintenance_plan.sqldesabilita as janelas de manutenção e remove o planoDEFAULT_MAINTENANCE_PLAN, evitando mensagens constantes nos logs. - Subir o container:
docker compose up -d. - Validar: execute
./validate-oracle.she 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.
docker compose stopdocker compose restartdocker compose logs -f oracle19cdocker compose down -vScript 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.shScript para resetar completamente o Oracle (limpar dados e recriar).
Uso:
chmod +x reset-oracle.sh
sudo ./reset-oracle.shO script:
- Para o container
- Remove todos os dados antigos
- Ajusta permissões
- Inicia o Oracle novamente
- Aguarda o Oracle ficar pronto (healthcheck)
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.shO script:
- Verifica se o container está rodando
- Verifica se o Oracle está pronto (healthcheck)
- Cria o usuário
laraveldbna PDBORCLPDB1 - Cria a tabela
usuariosde teste - Valida a conexão e a criação dos objetos
- 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.
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.
Consulte o arquivo VALIDACAO.md para um guia detalhado passo a passo.
Execute o script de validação:
./validate-oracle.shImportante: 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 filesouCreating database - Listener não mostra serviços registrados
- URL: http://localhost:5500/em
- URL (com proxy reverso/HTTPS obrigatório): https://localhost:5500/em
- Usuário:
sys - Senha: (valor definido em
ORACLE_PWDno arquivo.env) - Conectar como:
SYSDBA
- 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_PWDno arquivo.env)
docker compose exec oracle19c sqlplus sys/SUA_SENHA@localhost:1521/ORCLCDB as sysdbaDentro do SQL*Plus:
SELECT 'Oracle está funcionando!' FROM DUAL;
EXIT;Connection type: Service NameHost:localhostPort:1521Service:ORCLPDB1Driver:ThinAuthentication:User & PasswordUser:pdbadmin(ousyscomo SYSDBA,system, etc.)Password: valor deORACLE_PWD- O URL gerado fica
jdbc:oracle:thin:@//localhost:1521/ORCLPDB1
Método recomendado (script automatizado):
chmod +x create-laravel-user.sh
./create-laravel-user.shO 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)
);
SQLO 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.
Connection type: Service NameHost:localhostPort:1521Service:ORCLPDB1Driver:ThinAuthentication:User & PasswordUser:laraveldbPassword:Oracle123Secure(ou o valor atualizado deORACLE_PWD)- O URL gerado fica
jdbc:oracle:thin:@//localhost:1521/ORCLPDB1
- 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. - Via
pdbadminousys: na conexão atual, clique no ícone de filtro (funil) em Schemas e adicioneLARAVELDB. Depois expandaSchemase procure a tabela emLARAVELDB > Tables. - Sempre que criar objetos novos, use
Ctrl+F5(Refresh) para atualizar o cache de metadados do DataGrip.
- URL padrão:
http://localhost:5500/em. Se houver proxy reverso forçando HTTPS, usehttps://localhost:5500/em. - Credenciais com privilégios máximos:
Username:sysPassword:Oracle123Secure(ou o valor deORACLE_PWD)Container Name:ORCLPDB1(ouORCLCDBpara o container raiz)- Marque “Connect as SYSDBA” quando solicitado e repita usuário/senha caso o navegador exiba um popup de autenticação.
jdbc:oracle:thin:@localhost:1521:ORCLCDB
Para PDB:
jdbc:oracle:thin:@localhost:1521/ORCLPDB1
Solução:
sudo chown -R 54321:54321 data/
sudo chmod -R 755 data/
docker compose restartSolução:
# Ver logs detalhados
docker compose logs oracle19c
# Verificar recursos disponíveis
docker stats oracle19cVerifique se há memória suficiente disponível e ajuste os limites no arquivo .env se necessário.
Solução:
- Aguarde alguns minutos (banco ainda pode estar inicializando)
- Verifique se o listener está ativo:
docker compose exec oracle19c lsnrctl status - Verifique a senha no arquivo
.env - Execute o script de validação:
./validate-oracle.sh
O healthcheck pode levar alguns minutos para passar na primeira inicialização. Monitore os logs:
docker compose logs -f oracle19cProcure por mensagens como:
- ✅
DATABASE IS READY TO USE!- Banco pronto - ✅
Listener started- Listener ativo - ❌
ERRORouDATABASE SETUP WAS NOT SUCCESSFUL- Problemas
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:
- Ignorar o alerta (recomendado) - O Oracle funciona normalmente com os limites de memória configurados
- Comentar as linhas de memória no
docker-compose.ymlse 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.
# 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# 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 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- 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)
- Sempre use senhas fortes para
ORACLE_PWD - Não commite o arquivo
.envno controle de versão - Mantenha backups das pastas
data/oradataedata/diag - Este ambiente é adequado para desenvolvimento e testes locais. Para produção, considere configurações adicionais de seguranç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.
