Início / Trilha 1 / Conteúdo / Tópico 3
3

O Ambiente Oracle: SQL Developer e SQL*Plus

Ferramentas essenciais para interagir com o banco

📖

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

  1. Abra SQL Developer e clique em "+" no painel Connections
  2. 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)
  3. Clique em "Test" para validar
  4. 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ção
  • F5 - Executa como script
  • F9 - Executa seleção
  • Ctrl+Space - Auto-complete
  • Ctrl+F7 - Formata SQL
  • F4 - Descreve objeto
  • Ctrl+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"
Anterior: Modelagem ER Próximo: Linguagem SQL