如何使用Oracle数据泵导出实用程序在本地计算机中创建转储文件?

时间:2011-12-06 01:31:17

标签: oracle export

Oracle数据泵导出实用程序需要存在于DB服务器中的参数DIRECTORY(DBA_DIRECTORIES)。是否可以将此目录映射到本地计算机,还是有其他方法可以从oracle数据库将多个表导出到本地?

4 个答案:

答案 0 :(得分:8)

如果使用Data Pump,则无法直接在本地计算机上存储转储文件。这就是Data Pump的设计方式。

然而,有一种可能的方法可以达到你想要的效果。解决方法有两个步骤:

  1. 照常运行expdp,这会在服务器上创建转储文件
  2. 使用ocp工具将转储文件从数据库服务器传输到本地计算机(如果需要,可以返回)。
  3. 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