Сжат ли передача по ссылке на базу данных в Oracle 10g? Является ли это возможным? - PullRequest
4 голосов
/ 21 мая 2011

Я передаю данные из одной базы в другую по ссылкам базы данных (используя INSERT INTO SELECT ...).

Я хочу знать, являются ли данные, передаваемые по ссылке, сжатыми или могут быть сжаты во избежание чрезмерного использования сети. У меня очень маленькая пропускная способность, и я думаю, что это поможет, если это еще не сделано.

Ответы [ 2 ]

3 голосов
/ 22 мая 2011

Есть некоторая дедупликация , но серьезного сжатия нет.

Существует функция UTL_COMPRESS, но было бы сложно получить ее для распаковки в месте назначения (может быть, триггер или вместо просмотра - но это неуклюже).

EXPDP может использоватьссылка на базу данных ( NETWORK_LINK ) и, в 11g, сжатие , но для этого требуется лицензия на расширенное сжатие .

Наконец, есть обычныеИзвлечение, сжатие, передача, распаковка, загрузка

В 11gR2 вы можете использовать внешние таблицы с препроцессором для распаковки , так что вы можете полуавтоматизировать этот последний вариант.

2 голосов
/ 23 мая 2011

Как говорит @Gary, не изначально, но можно получить сжатие, используя SSH-туннель, при условии, что у вас все равно есть доступ к командной строке. Справочная страница по SSH отмечает, что сжатие может замедлить работу быстрой сети, но этот компромисс может стоить того, если вы сильно ограничены в пропускной способности; и вам, возможно, придется поэкспериментировать с CompressionLevel в ssh_config, чтобы получить наилучшие результаты для вашей ситуации.

Например, если ваша существующая ссылка определена для подключения к remote_server порту 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)))'

Вы можете создать SSH-туннель, используя бесплатный локальный порт, например:

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

И тогда у вас может быть ссылка на БД, указывающая на локальную сторону туннеля:

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)))'

То есть вы просто меняете хост и порт. Если ваша существующая ссылка использует запись tnsnames, вы можете просто изменить ее, указав localhost:1522 вместо remote_server:1521.

Конечно, вы должны убедиться, что SSH-соединение работает, когда вы используете БД. Если он не работает, вы получите ошибку ORA-12541: TNS:no listener, так как на вашем локальном порту 1522 ничего не будет прослушиваться.

...