我通过数据库链接将数据从一个基地传输到另一个基地(使用INSERT INTO SELECT ...
)。是否通过Oracle 10g中的数据库链接进行压缩?可能吗?
我想知道通过链接传输的数据是压缩还是可以压缩以避免过多的网络使用。我的带宽非常少,如果尚未完成,我认为这会有所帮助。
我通过数据库链接将数据从一个基地传输到另一个基地(使用INSERT INTO SELECT ...
)。是否通过Oracle 10g中的数据库链接进行压缩?可能吗?
我想知道通过链接传输的数据是压缩还是可以压缩以避免过多的网络使用。我的带宽非常少,如果尚未完成,我认为这会有所帮助。
有一些de-duplication但没有严重的压缩。
这里有一个UTL_COMPRESS函数,但要解压到目的地(可能是一个触发器,而不是视图 - 但它很笨拙)会很棘手。
EXPDP可以使用数据库链接(NETWORK_LINK),而在11g中,compression但确实需要Advanced Compression option to be licensed。
最后还有传统的提取物,压缩,传输,解压缩,负载
在11gR2中您可以使用外部表,并preprocessor to unzip,所以你可以半自动化是最后的选择。
正如@Gary所说,不是本地的,但是假设您有命令行访问权限,则可以使用SSH隧道进行压缩。 SSH手册页指出,压缩可以在一个快速网络上减慢速度,但如果你受到严格的带宽限制,这种折衷可能是值得的;并且您可能需要在ssh_config
中尝试使用CompressionLevel
以获得您的情况的最佳结果。
例如,如果您现有的链接被定义为连接到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
然后你可以有一个DB链接指向隧道的本地端:
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上侦听。