Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Tabelas externas Oracle


A tabela externa é um dos recursos importantes no oracle, exploraremos a tabela externa no oracle com um exemplo neste post

O que são EXTERNAL TABLES no Oracle?


1) As tabelas externas são tabelas somente leitura onde os dados são armazenados em arquivos simples fora do banco de dados

2) Você pode usar o recurso de tabela externa para acessar arquivos externos como se fossem tabelas dentro do banco de dados.

3)   Ao criar uma tabela externa, você define sua estrutura e localização com in oracle. Basicamente você apenas armazena os metadados dentro do oráculo

4) Quando você consulta a tabela, o oracle lê a tabela externa e retorna os resultados como se os dados tivessem sido armazenados no banco de dados.

5) O servidor oracle fornece dois drivers oracle principais para ler os arquivos simples
  1. Oracle_loader:É usado para ler os arquivos simples usando a tecnologia oracle loader. Basicamente, permite ler os arquivos que podem ser interpretados usando a tecnologia SQL loader
  2. Oracle_datapump:usado para importar e exportar dados usando formato independente de plataforma

ACESSANDO DADOS DA TABELA EXTERNA


Existem algumas etapas que precisam ser executadas para acessar a tabela externa
  • Devemos primeiro usar o comando create directory para definir um objeto de diretório apontando para o local do arquivo externo
sqlplus "/ as sysdba"

Create directory ext_dir as ‘/export/home/ora/external’;

  • Os usuários que acessarão os arquivos externos devem ter privilégios de leitura e gravação no diretório.
Grant all on directory ext_dir to user;

  • Vamos agora criar ou colocar alguns arquivos no diretório
SQL> Conn user/user

SQL> Spool city.lst

SQL> Select city || ‘,’ || state || ‘,’ || country from countries;

SQL> Spool off

 


Agora você poderá ver o arquivo city.lst no diretório
  • Agora devemos criar a tabela externa usando o comando abaixo
Create table city_ext
(city varchar(10),
state varchar(14),
country varchar(13))
Organization external  ( type oracle_loader
Default directory ext_dir
Access parameters
( records delimited by newline
Fields terminated by “,”
( city char(10),
state char(14),
country char(13)))
Location (‘city.lst’))
PARALLEL 5
REJECT LIMIT UNLIMITED;


Explicação de cada termo
Organização externa Informa que os dados estão armazenados fora do banco de dados
Tipo É o driver oracle ou a API  que interpreta os dados externos para o banco de dados. Se você não especificar nada, oracle_loader  será o padrão
Diretório padrão É o local do diretório onde os arquivos simples podem ser armazenados. O diretório padrão também é usado para armazenar os arquivos auxiliares criados a partir do acesso do driver oracle, como arquivo de log e arquivos inválidos. Podemos especificar vários diretórios para facilitar o balanceamento de carga em várias unidades
Parâmetros de acesso Permite especificar valores do parâmetro do driver de acesso específico para esta tabela externa
Local Ele permite que você especifique o nome do arquivo simples externo
REJEITAR LIMITE Ele permite que você especifique quantos erros de conversão podem ocorrer antes que o servidor oracle aborte a operação e retorne o erro

5) SELEÇÃO DE DADOS DA TABELA EXTERNA

SQL> selecione * de city_ext;

Isso será lido em city.lst, que é um arquivo no nível do sistema operacional.

Se o arquivo city.lst não estiver presente, a instrução select lançará esse erro
SELECT *
*
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04040: file city.lst in EXT_DIR not found
ORA-06512: at "SYS.ORACLE_LOADER", line 14
ORA-06512: at line 1

LIMITAÇÕES NAS TABELAS EXTERNAS

  1. Você não pode executar operações de inserção, atualização e exclusão
  2. Não é possível indexação do Oracle
  3.  Restrições não são possíveis

BENEFÍCIOS DAS TABELAS EXTERNAS NO ORACLE

  1. a) As consultas de tabelas externas são concluídas muito rapidamente, embora seja necessário um ID de verificação de tabela completo em cada acesso
  2. b) Você pode unir tabelas externas umas às outras ou a tabelas oracle padrão
  3. c) Podemos criar visualizações na tabela externa

Nova atualização no 11gR2 para tabela externa


Com o Oracle 11g Release 2, foi introduzida uma nova cláusula PREPROCESSOR que pode identificar um objeto de diretório e um script usado para processar os arquivos antes de serem lidos pela tabela externa. Esse recurso foi portado para 11gR1 (11.1.0.7).

A cláusula PREPROCESSOR é especialmente útil para ler arquivos compactados, pois eles são descompactados e canalizados diretamente para o processo de tabela externa sem nunca precisar ser descompactados no sistema de arquivos.

Vamos dar um exemplo para entender melhor esse parâmetro.

Suponha que city.list esteja compactado, então o nome do arquivo seria city.list.Z
Create table city_ext
(city varchar(10),
state varchar(14),
country varchar(13))
Organization external  ( type oracle_loader
Default directory ext_dir
PREPROCESSOR ext_dir:uncompress
Access parameters
( records delimited by newline
Fields terminated by “,”
( city char(10),
state char(14),
country char(13)))
Location (‘city.lst.Z’))
PARALLEL 5
REJECT LIMIT UNLIMITED;


Aqui, a cláusula PREPROCESSOR primeiro descompactará o arquivo city.lst.Z usando o comando uncompress antes de procurar os dados. Tudo aconteceria em tempo real e você não precisará descompactar o arquivo city.lst.Z

Descarregando/Carregando dados usando tabelas externas do Oracle


A Oracle também forneceu suporte para a tecnologia datapump em tabela externa.

Podemos descarregar a tabela usando o driver de acesso oracle_datadump
CREATE TABLE countries_xt
ORGANIZATION EXTERNAL
(
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY ext_dir
LOCATION ('countries.dmp')
)
AS SELECT * FROM countries;

Isso criará o arquivo countries.dmp no diretório. Agora, mesmo que a tabela países seja eliminada, ainda podemos observar os dados usando a tabela países_xt.

Podemos até levar o arquivo de despejo para outro banco de dados e depois criar uma tabela externa para observar os dados
CREATE TABLE countries_xt (
city    VARCHAR2(10),
state       VARCHAR2(9),
countries    VARCHAR2(9))
ORGANIZATION EXTERNAL (
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY ext_dir
LOCATION ('countries.dmp ')
);

Select * from countries_xt;

Aprimoramentos em tabelas externas no banco de dados 12c


Oracle_loader

A cláusula de localização pode ter um caractere curinga. * significa vários caracteres e ? para um único caractere.

A cláusula Fields csv foi introduzida

Oracle_datapump

Podemos descarregar os dados usando a opção de compactação avançada

Artigos relacionados

ORA-29913 com tabelas externas
Dicas sobre tabela externa
Como carregar um campo CLOB com uma tabela externa
oracle crie tabela como select