我正在通过数据库链接(使用INSERT INTO SELECT ...
)将数据从一个基地传输到另一个基地。
我想知道通过链接传输的数据是否被压缩或可以被压缩以避免过多的网络使用。我的带宽很少,如果还没有完成,我认为这会有所帮助。
我正在通过数据库链接(使用INSERT INTO SELECT ...
)将数据从一个基地传输到另一个基地。
我想知道通过链接传输的数据是否被压缩或可以被压缩以避免过多的网络使用。我的带宽很少,如果还没有完成,我认为这会有所帮助。
有一些重复数据删除,但没有严重的压缩。
有一个 UTL_COMPRESS 函数,但要在目标上解压缩它会很棘手(可能是触发器,或者不是视图 - 但它很笨重)。
EXPDP 可以使用数据库链接 ( NETWORK_LINK ),并且在 11g 中可以使用压缩,但这确实需要获得Advanced Compression 选项的许可。
最后是常规的提取、压缩、传输、解压缩、加载
在 11gR2 中,您可以使用带有预处理器的外部表来解压缩,因此您可以半自动化最后的选项。
正如@Gary 所说,不是本机的,但可以使用 SSH 隧道进行压缩,假设您无论如何都具有命令行访问权限。SSH 手册页指出,压缩会在快速网络上减慢速度,但如果您的带宽受到严重限制,这种权衡可能是值得的;您可能需要尝试CompressionLevel
inssh_config
以获得适合您情况的最佳结果。
例如,如果您现有的链接被定义为连接到remote_server
port 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 上没有任何东西在监听。