Definição
Oracle SQL Developer
O Oracle SQL Developer é uma IDE (Ambiente de Desenvolvimento Integrado) gráfica gratuita fornecida pela Oracle. É a ferramenta mais utilizada por desenvolvedores e DBAs para trabalhar com bancos Oracle no dia a dia.
Principais Recursos
- Editor SQL com auto-complete
- Navegador de objetos (tabelas, views, etc.)
- Debug de PL/SQL
- Exportação/Importação de dados
- Modelagem de dados (Data Modeler)
- Relatórios e gráficos
- Suporte a múltiplas conexões
Quando Usar
- Desenvolvimento de queries complexas
- Análise visual de dados
- Debug e testes de procedures
- Administração visual do banco
- Criação e alteração de objetos
- Migração entre bancos
- Tarefas do dia a dia
Oracle SQL*Plus
O SQL*Plus é o cliente de linha de comando original do Oracle, disponível desde as primeiras versões. É uma ferramenta essencial para DBAs, especialmente para automação, scripts e situações onde não há interface gráfica disponível.
Principais Recursos
- Execução de comandos SQL e PL/SQL
- Comandos de formatação de saída
- Execução de scripts (.sql)
- Conexão via linha de comando
- Startup/Shutdown do banco
- Variáveis de substituição
- Spool para arquivos
Quando Usar
- Acesso remoto via SSH
- Scripts de automação
- Startup/Shutdown do banco
- Recuperação de desastres
- Ambientes sem GUI
- Jobs agendados (cron)
- Servidores de produção
Comparação: SQL Developer vs SQL*Plus
| Aspecto | SQL Developer | SQL*Plus |
|---|---|---|
| Interface | Gráfica (GUI) | Linha de comando (CLI) |
| Curva de aprendizado | Menor (intuitivo) | Maior (comandos) |
| Recursos visuais | Completos | Básicos (texto) |
| Automação | Possível mas limitada | Excelente |
| Startup/Shutdown | Não suporta | Suporta |
| Acesso remoto | Precisa de rede | Funciona via SSH |
Aplicação Prática
Configurando Conexões
SQL Developer - Nova Conexão
- Abra SQL Developer e clique em "+" no painel Connections
- Preencha os campos:
- Connection Name: Nome descritivo (ex: DEV_HR)
- Username: Seu usuário Oracle
- Password: Sua senha
- Hostname: IP ou nome do servidor
- Port: Geralmente 1521
- Service name: Nome do serviço (ex: ORCL, XE)
- Clique em "Test" para validar
- Clique em "Save" e depois "Connect"
SQL*Plus - Conectando
# Conexão local (mesmo servidor)
sqlplus usuario/senha
# Conexão com service name
sqlplus usuario/senha@//servidor:1521/service_name
# Conexão usando TNS alias (configurado no tnsnames.ora)
sqlplus usuario/senha@TNS_ALIAS
# Conexão como SYSDBA (para tarefas administrativas)
sqlplus / as sysdba
sqlplus sys/senha@ORCL as sysdba
# Exemplos práticos
sqlplus hr/hr@//localhost:1521/XEPDB1
sqlplus scott/tiger@ORCL
Comandos Essenciais do SQL*Plus
-- Comandos de formatação de saída
SET LINESIZE 200 -- Largura da linha
SET PAGESIZE 100 -- Linhas por página
SET SERVEROUTPUT ON -- Habilita DBMS_OUTPUT
SET TIMING ON -- Mostra tempo de execução
SET FEEDBACK ON -- Mostra "X rows selected"
-- Formatação de colunas
COLUMN nome FORMAT A30 -- Coluna texto com 30 caracteres
COLUMN salario FORMAT 999,999.99 -- Número formatado
COLUMN data_admissao FORMAT A12 -- Data como texto
-- Exemplo de uso
SET LINESIZE 150
SET PAGESIZE 50
COLUMN employee_name FORMAT A25
COLUMN department_name FORMAT A20
COLUMN salary FORMAT 999,999.99
SELECT e.first_name || ' ' || e.last_name AS employee_name,
d.department_name,
e.salary
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE e.salary > 10000
ORDER BY e.salary DESC;
-- Salvando resultado em arquivo
SPOOL /tmp/relatorio_salarios.txt
SELECT * FROM employees WHERE salary > 15000;
SPOOL OFF
-- Executando scripts externos
@/caminho/para/script.sql
START /caminho/para/script.sql
-- Descrevendo estrutura de objetos
DESC employees
DESC departments
-- Limpando tela e buffer
CLEAR SCREEN
CLEAR BUFFER
-- Editando último comando
EDIT
-- Saindo do SQL*Plus
EXIT
QUIT
Script de Exemplo: Relatório Formatado
-- Arquivo: relatorio_departamentos.sql
-- Gera relatório de funcionários por departamento
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING ON
SET LINESIZE 150
SET PAGESIZE 60
SET TRIMSPOOL ON
-- Título do relatório
TTITLE CENTER 'RELATÓRIO DE FUNCIONÁRIOS POR DEPARTAMENTO' SKIP 2
-- Rodapé
BTITLE CENTER 'Página: ' SQL.PNO
-- Formatação das colunas
COLUMN department_name FORMAT A25 HEADING 'Departamento'
COLUMN employee_count FORMAT 999 HEADING 'Qtd Func'
COLUMN avg_salary FORMAT 999,999.99 HEADING 'Salário Médio'
COLUMN total_salary FORMAT 9,999,999.99 HEADING 'Folha Total'
-- Início do spool
SPOOL relatorio_departamentos.txt
-- Query principal
SELECT d.department_name,
COUNT(e.employee_id) AS employee_count,
AVG(e.salary) AS avg_salary,
SUM(e.salary) AS total_salary
FROM departments d
LEFT JOIN employees e ON d.department_id = e.department_id
GROUP BY d.department_name
ORDER BY total_salary DESC NULLS LAST;
-- Finaliza spool
SPOOL OFF
-- Limpa formatações
CLEAR COLUMNS
TTITLE OFF
BTITLE OFF
SET FEEDBACK ON
PROMPT Relatório gerado com sucesso em relatorio_departamentos.txt
Dicas do SQL Developer
Atalhos de Teclado
Ctrl+Enter- Executa instruçãoF5- Executa como scriptF9- Executa seleçãoCtrl+Space- Auto-completeCtrl+F7- Formata SQLF4- Descreve objetoCtrl+Shift+D- Duplica linha
Recursos Úteis
- Snippets: Reutilize código frequente
- Explain Plan: Analise performance
- Compare: Compare estruturas
- Export: CSV, Excel, JSON, SQL
- DBDoc: Gere documentação
- Reports: Relatórios predefinidos
Resultado Esperado
O que você deve dominar após este tópico:
Configurar conexões
Criar e gerenciar conexões em ambas ferramentas
Navegar no SQL Developer
Usar interface, atalhos e recursos principais
Operar o SQL*Plus
Conectar, executar queries e formatar saída
Criar scripts reutilizáveis
Escrever scripts SQL*Plus profissionais
Escolher a ferramenta certa
Saber quando usar cada ferramenta
Gerar relatórios
Exportar dados formatados para arquivos
Exercícios Práticos
Exercício 1: Script de Inventário
Crie um script SQL*Plus que liste todas as tabelas do usuário atual, mostrando nome, quantidade de linhas e tamanho estimado. O resultado deve ser salvo em um arquivo.
Ver Solução
-- inventario_tabelas.sql
SET ECHO OFF
SET FEEDBACK OFF
SET LINESIZE 120
SET PAGESIZE 100
TTITLE CENTER 'INVENTÁRIO DE TABELAS DO USUÁRIO' SKIP 2
BTITLE CENTER 'Gerado em: ' _DATE
COLUMN table_name FORMAT A30 HEADING 'Tabela'
COLUMN num_rows FORMAT 999,999,999 HEADING 'Num Linhas'
COLUMN avg_row_len FORMAT 999,999 HEADING 'Tam Médio Linha'
COLUMN blocks FORMAT 999,999 HEADING 'Blocos'
COLUMN last_analyzed FORMAT A20 HEADING 'Última Análise'
SPOOL inventario_tabelas.txt
SELECT table_name,
num_rows,
avg_row_len,
blocks,
TO_CHAR(last_analyzed, 'DD/MM/YYYY HH24:MI') AS last_analyzed
FROM user_tables
ORDER BY num_rows DESC NULLS LAST;
SPOOL OFF
CLEAR COLUMNS
TTITLE OFF
BTITLE OFF
PROMPT Arquivo inventario_tabelas.txt gerado com sucesso!
Exercício 2: Conexão SSH
Descreva os passos para se conectar a um banco Oracle em um servidor Linux remoto usando SSH e SQL*Plus, quando não há acesso de rede direta à porta 1521.
Ver Solução
# 1. Conectar via SSH ao servidor
ssh usuario@servidor-oracle.empresa.com
# 2. Configurar variáveis de ambiente Oracle
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=ORCL
# 3. Conectar ao SQL*Plus localmente
sqlplus hr/senha
# OU usar túnel SSH para acessar do seu PC:
# No seu PC local, crie o túnel:
ssh -L 1521:localhost:1521 usuario@servidor-oracle
# Agora você pode usar SQL Developer conectando em localhost:1521
Exercício 3: Automatização
Crie um script shell (bash) que execute uma verificação de saúde do banco Oracle usando SQL*Plus e salve o resultado com timestamp no nome do arquivo.
Ver Solução
#!/bin/bash
# health_check.sh - Script de verificação de saúde do Oracle
# Configurações
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=ORCL
# Diretório de saída
OUTPUT_DIR=/var/log/oracle/health
mkdir -p $OUTPUT_DIR
# Nome do arquivo com timestamp
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
OUTPUT_FILE=$OUTPUT_DIR/health_check_$TIMESTAMP.log
# Executa SQL*Plus com script inline
sqlplus -s / as sysdba << EOF > $OUTPUT_FILE
SET LINESIZE 200
SET PAGESIZE 100
SET FEEDBACK OFF
PROMPT ========================================
PROMPT ORACLE DATABASE HEALTH CHECK
PROMPT Data: $(date)
PROMPT ========================================
PROMPT
PROMPT -- Status da Instância --
SELECT instance_name, status, database_status FROM v\$instance;
PROMPT
PROMPT -- Espaço em Tablespaces --
SELECT tablespace_name,
ROUND(used_space * 8192 / 1024 / 1024, 2) AS used_mb,
ROUND(tablespace_size * 8192 / 1024 / 1024, 2) AS total_mb,
ROUND(used_percent, 2) AS used_pct
FROM dba_tablespace_usage_metrics
ORDER BY used_percent DESC;
PROMPT
PROMPT -- Sessões Ativas --
SELECT COUNT(*) AS total_sessions,
SUM(CASE WHEN status = 'ACTIVE' THEN 1 ELSE 0 END) AS active_sessions
FROM v\$session
WHERE type = 'USER';
PROMPT
PROMPT -- Alertas Recentes --
SELECT originating_timestamp, message_text
FROM v\$diag_alert_ext
WHERE originating_timestamp > SYSDATE - 1
AND message_text LIKE '%ORA-%'
ORDER BY originating_timestamp DESC
FETCH FIRST 10 ROWS ONLY;
EXIT;
EOF
echo "Health check concluído. Resultado em: $OUTPUT_FILE"