Oracle数据泵导出实用程序需要存在于DB服务器中的参数DIRECTORY(DBA_DIRECTORIES)。是否可以将此目录映射到本地计算机,还是有其他方法可以从oracle数据库将多个表导出到本地?
答案 0 :(得分:8)
如果使用Data Pump,则无法直接在本地计算机上存储转储文件。这就是Data Pump的设计方式。
然而,有一种可能的方法可以达到你想要的效果。解决方法有两个步骤:
expdp
,这会在服务器上创建转储文件ocp
工具将转储文件从数据库服务器传输到本地计算机(如果需要,可以返回)。 ocp
工具代表" Oracle Copy"并且完全是为了从数据库服务器来回复制转储文件。它在这里可用:https://github.com/maxsatula/ocp/releases/download/v0.1/ocp-0.1.tar.gz这是一个源代码分发,所以下载并解压缩后,运行./configure && make
(希望您在客户端没有Windows,因为我从未尝试在那里编译它)
这是一个简单的命令行工具,语法简单。例如,此命令将为您提取文件:
ocp <connection_string> DATA_PUMP_DIR:remote_file_name.dmp local_file_name.dmp
该工具使用数据库连接和最小数据库权限集。
<强>更新强>
最后,我能够调整源代码并为Windows 32位构建ocp
工具:
https://github.com/maxsatula/ocp/releases/download/v0.1/ocp-0.1-win32.zip
使用32位Instant Client 11.2.0.4进行编译/测试:http://www.oracle.com/technetwork/topics/winsoft-085727.html
instantclient-basiclite-nt-11.2.0.4.0.zip(20,258,449 bytes)
我相信它也适用于完整的Oracle客户端安装(只需要注意位,应该是32位),但不检查我自己。
不幸的是,ocp
的Windows版本在文件传输过程中没有花哨的进度表。那段代码有太多* nix特定的东西,所以我不得不切断它。
此外,由于它使用popt和zlib库,它们是作为GnuWin项目的一部分编译的,并且仅以32位提供,因此Windows的ocp
也是32位。希望没有64位版本对您来说不是关键任务。
更新2:
警告!确保从服务器下载文件时始终使用DEDICATED服务器连接,否则(对于SHARED服务器)下载的文件副本将被破坏,没有错误消息!
答案 1 :(得分:6)
通过一些黑客攻击,您可以使用数据泵来执行您想要的操作,但您需要在本地计算机上安装数据库。
您需要做的是在本地计算机上创建一个到远程计算机的数据库链接。
然后在datapump选项中,以db链接所有者身份登录本地数据库,将“network_link”选项指定为您创建的数据库链接名称。这样它应该通过本地数据库从远程数据库导出,并在本地实例上创建文件。例如:
expdp directory=<local_dir_object> network_link=<dblinkname on local instance> dumpfile=.. logfile=.. tables/schema=...
答案 2 :(得分:1)
不,数据泵很糟糕,但是Oracle可以使用db所在的同一服务器获得更快的吞吐量,这就是权衡。其他增强功能,但我仍然认为这对数据泵来说是一个很大的缺点。为此目的使用旧的exp / imp或第三方工具。
答案 3 :(得分:-5)
您应该问自己:“为什么我要将数据保存在数据库之外 - 这是我数据最安全的地方?备份,恢复和恢复的位置。
如果要将数据从数据库A移动到数据库B,请确保两个数据库都可以访问公共文件区域,在该文件区域中,他们可以通过其目录对象访问datadump文件并使用数据泵。
如果您仍想将数据导出到客户端,可以使用好的旧工具 exp 和 imp 。