Pergunta

Estou transferindo dados de uma base para outra através de links de banco de dados (usando INSERT INTO SELECT ...).

Quero saber se os dados transferidos pelo link estão compactados ou podem ser compactados para evitar muito uso da rede.Tenho muito pouca largura de banda e acho que isso ajudaria se ainda não estivesse feito.

Foi útil?

Solução

Há alguma desduplicação mas nenhuma compressão séria.

Existe uma função UTL_COMPRESS, mas seria complicado descompactá-la no destino (talvez um gatilho ou em vez de visualizar - mas é desajeitado).

EXPDP pode usar um link de banco de dados (NETWORK_LINK) e, em 11g, compressão mas isso exige o Opção de compactação avançada a ser licenciada.

Por último, há extração convencional, compactação, transferência, descompactação, carregamento

No 11gR2 você pode usar tabelas externas com um pré-processador para descompactar, para que você possa semiautomatizar essa opção final.

Outras dicas

Como diz @Gary, não nativamente, mas é possível obter compactação usando um túnel SSH, desde que você tenha acesso à linha de comando de qualquer maneira.A página de manual do SSH observa que a compactação pode tornar as coisas mais lentas em uma rede rápida, mas essa compensação pode valer a pena se você estiver com severa restrição de largura de banda;e você pode precisar experimentar CompressionLevel em ssh_config para obter os melhores resultados para sua situação.

Por exemplo, se o seu link existente estiver definido para conectar-se a remote_server porta 1521:

create database link direct connect to usr identified by pwd
using 'DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=remote_server)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=remote_service)))'

Você pode criar um túnel SSH usando uma porta local gratuita, com algo como:

ssh -C -N -L1522:localhost:1521 remote_server

E então você pode ter um link de banco de dados que aponta para o lado local do túnel:

create database link direct connect to usr identified by pwd
using 'DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1522))
(CONNECT_DATA=(SERVICE_NAME=remote_service)))'

Então você apenas altera o host e a porta.Se o seu link existente estiver usando um tnsnames entrada, então você pode simplesmente modificá-la, para apontar para localhost:1522 em vez de remote_server:1521.

É claro que você deve garantir que o link SSH esteja ativo sempre que usar o link do banco de dados.Se estiver baixo, você receberá um ORA-12541: TNS:no listener erro, já que nada estará escutando na sua porta local 1522.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top