Este repositório contém um projeto SQL desenvolvido no Visual Studio, utilizando uma imagem Oracle Database em Docker (Oracle Virtual Machine) para execução e testes locais.
O objetivo é demonstrar boas práticas de versionamento e automação de scripts SQL em um ambiente controlado, integrando o Oracle ao fluxo de desenvolvimento moderno.
- Oracle Database (via imagem Docker)
- Visual Studio como IDE principal
- SQL e PL/SQL para modelagem e manipulação de dados
- Scripts versionados e organizados por módulos/funções
Este projeto configura um ambiente Oracle Database Express Edition (XE) usando Docker.
Este projeto utiliza como referência o schema HR da Oracle, que é o schema de exemplo padrão usado na documentação e treinamentos oficiais. O schema HR representa um sistema de recursos humanos simplificado e é ideal para aprendizado e demonstrações.
Estrutura do Schema HR:
┌─────────────────┐
│ REGIONS │
│ (region_id) │
└────────┬────────┘
│
│ 1:N
▼
┌─────────────────┐
│ COUNTRIES │
│ (country_id) │
└────────┬────────┘
│
│ 1:N
▼
┌─────────────────┐ 1:N ┌─────────────────┐
│ LOCATIONS │◄───────────────┤ DEPARTMENTS │
│ (location_id) │ │ (department_id) │
└─────────────────┘ └────────┬────────┘
│
│ 1:N
▼
┌─────────────────┐
│ EMPLOYEES │
│ (employee_id) │
│ │
│ - manager_id │◄─┐
│ - job_id │ │
│ - salary │ │
└────────┬────────┘ │
│ │
│ Self-Join │
└───────────┘
│
│ 1:N
▼
┌─────────────────┐
│ JOB_HISTORY │
│ │
└─────────────────┘
│
│ N:1
▼
┌─────────────────┐
│ JOBS │
│ (job_id) │
└─────────────────┘
Principais Tabelas:
- EMPLOYEES: Dados dos funcionários (nome, salário, data de contratação, etc.)
- DEPARTMENTS: Departamentos da empresa
- JOBS: Cargos/funções disponíveis
- LOCATIONS: Localizações físicas dos escritórios
- COUNTRIES: Países onde a empresa opera
- REGIONS: Regiões geográficas (Americas, Europe, Asia, etc.)
- JOB_HISTORY: Histórico de cargos dos funcionários
Referências:
- Oracle HR Schema Documentation
- Scripts de exemplo neste projeto utilizam este schema como base
Antes de iniciar o Docker, você precisa configurar as senhas:
-
Copie os arquivos de exemplo:
cp docker-compose.example.yml docker-compose.yml cp scripts/01_create_user.example.sql scripts/01_create_user.sql
-
Edite o
docker-compose.ymle defina sua senha:- Altere
ORACLE_PWD=SUA_SENHA_AQUIpara sua senha escolhida
- Altere
-
Edite o
scripts/01_create_user.sql(opcional):- Altere
SUA_SENHA_APP_USERse quiser criar usuário adicional
- Altere
docker-compose.yml e 01_create_user.sql estão no .gitignore e não serão enviados ao GitHub.
- Docker Desktop instalado e em execução
- Pelo menos 2GB de RAM disponível para o container
- Espaço em disco suficiente (aprox. 10GB)
sql_oracle/
├── docker-compose.example.yml # Template (VAI para o GitHub)
├── docker-compose.yml # Suas senhas (NÃO VAI para o GitHub)
├── scripts/
│ ├── 01_create_user.example.sql # Template (VAI para o GitHub)
│ └── 01_create_user.sql # Suas senhas (NÃO VAI para o GitHub)
├── sql/ # Seus scripts SQL personalizados
└── README.md
- Host: localhost
- Porta: 1521
- SID: XE
- Usuário SYSTEM: system
- Senha: (definida no
docker-compose.yml- variávelORACLE_PWD) - Enterprise Manager: http://localhost:5500/em
📝 NOTA: Nos comandos abaixo, substitua
<SUA_SENHA>pela senha definida no arquivodocker-compose.yml
docker-compose up -d⏱️ IMPORTANTE: Na primeira vez, este comando pode demorar bastante (10-20 minutos):
- Baixando a imagem do Oracle (2-3 GB)
- Criando e configurando o banco de dados
- Executando scripts de inicialização
docker-compose logs -f oracle-dbAguarde até ver a mensagem: "DATABASE IS READY TO USE!"
Pressione Ctrl+C para sair dos logs sem parar o container.
docker exec -it oracle-xe sqlplus system/<SUA_SENHA>@XEPara sair do SQL*Plus, digite: EXIT
Host: localhost
Port: 1521
SID: XE
Service Name: XEPDB1 (para PDB)
Username: system
Password: <SUA_SENHA>
# Copiar script para dentro do container
docker cp seu_script.sql oracle-xe:/opt/oracle/scripts/
# Executar o script
docker exec -it oracle-xe sqlplus system/<SUA_SENHA>@XE @/opt/oracle/scripts/seu_script.sqlColoque seus scripts na pasta sql/ e execute:
docker exec -it oracle-xe sqlplus system/<SUA_SENHA>@XE @/opt/oracle/scripts/seu_script.sqlColoque scripts .sql na pasta scripts/ antes de iniciar o container. Eles serão executados automaticamente na primeira inicialização.
docker-compose downPara remover também os dados (CUIDADO: remove todo o banco):
docker-compose down -vdocker psdocker exec -it oracle-xe bashdocker-compose logs -fdocker-compose restartdocker exec oracle-xe sh -c "expdp system/<SUA_SENHA>@XE full=y directory=DATA_PUMP_DIR dumpfile=backup.dmp"Para alterar a senha do usuário SYSTEM:
- Modifique
ORACLE_PWDnodocker-compose.yml - Recrie o container:
docker-compose down -v
docker-compose up -d- Verifique se há RAM suficiente disponível
- Verifique os logs:
docker-compose logs oracle-db - Certifique-se que as portas 1521 e 5500 não estão em uso
- O banco ainda está inicializando. Aguarde alguns minutos.
- Limpe imagens Docker antigas:
docker system prune -a
- Oracle Database XE Documentation
- Oracle Container Registry
- Fabio Prado - Blog DBA Oracle - Blog com muitas dicas e passos para ajudar no aprendizado de DBA Oracle