是通过Oracle 10g中的数据库链接传输压缩的吗?可能吗?

时间:2011-05-21 12:24:48

标签: oracle bandwidth database-link oracle-net-services

我通过数据库链接(使用INSERT INTO SELECT ...)将数据从一个基地传输到另一个基地。

我想知道通过链接传输的数据是否已压缩或是否可以压缩以避免过多的网络使用。我的带宽非常少,而且如果还没有完成,我认为这会有所帮助。

2 个答案:

答案 0 :(得分:3)

有一些de-duplication但没有严重压缩。

有一个UTL_COMPRESS函数,但要在目标上解压缩(可能是一个触发器,或者代替视图 - 但它很笨重)会很棘手。

EXPDP可以使用数据库链接(NETWORK_LINK),在11g中使用compression,但确实需要Advanced Compression option to be licensed

最后有传统的提取,拉链,转移,解压缩,加载

在11gR2中,您可以使用带有preprocessor to unzip的外部表格,这样您就可以半自动化最终选项。

答案 1 :(得分:2)

正如@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上侦听。