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

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

有帮助吗?

解决方案

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

有一个utl_compress函数,但在目的地上解压缩它会很棘手(也许是触发器,或者而不是视图 - 但它是笨重的)。

expdp可以使用数据库链接( network_link ),在11g,压缩是否需要高级压缩选项被许可。< / p>

最后有传统的提取,zip,传输,解压缩,加载

在11gr2中,您可以使用带有预处理器解压缩,因此您可以半自动化该最终选项。

其他提示

正如 @Gary 所说,不是原生的,但可以使用 SSH 隧道进行压缩,假设您无论如何都有命令行访问权限。SSH 手册页指出,压缩可能会降低快速网络上的速度,但如果您的带宽严重受限,那么这种权衡可能是值得的;你可能需要尝试 CompressionLevelssh_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.

当然,每当您使用 DB 链接时,您都必须确保 SSH 链接已启动。如果它下降了,你会得到一个 ORA-12541: TNS:no listener 错误,因为没有任何内容会监听您的本地端口 1522。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top