如何使用 Oracle 数据泵导出实用程序在本地计算机上创建转储文件?
Posted
技术标签:
【中文标题】如何使用 Oracle 数据泵导出实用程序在本地计算机上创建转储文件?【英文标题】:How to use Oracle data pump export utility to create dump file in local machine? 【发布时间】:2011-12-06 01:31:16 【问题描述】:Oracle 数据泵导出实用程序需要一个存在于数据库服务器中的参数 DIRECTORY (DBA_DIRECTORIES)。是否可以将此目录映射到本地计算机,或者有没有其他方法可以将多个表从 oracle 数据库导出到本地?
【问题讨论】:
【参考方案1】:如果使用 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 字节)
我相信它也可以与完整的 Oracle 客户端安装一起使用(注意位,应该是 32),但我没有检查自己。
不幸的是,ocp
的 Windows 版本在文件传输期间没有花哨的进度表。那段代码有太多特定于 *nix 的东西,所以我不得不把它删掉。
此外,由于它使用 popt 和 zlib 库,它们作为 GnuWin 项目的一部分进行编译,并且仅在 32 位中可用,Windows 的ocp
也仅是 32 位。希望没有 64 位版本对您来说不是关键任务。
更新 2:
警告!确保从服务器下载文件时始终使用专用服务器连接,否则(对于共享服务器)下载的文件副本将被损坏且没有错误消息!
【讨论】:
我刚刚测试了 Windows 版本,它运行良好。有一些小问题(目录名称不区分大小写,缺少 MSVCR120.dll),我将为它们创建 Github 问题。这是一个很棒的程序,非常感谢您创建并快速修改它! @JonHeller 如果您为目录使用环境变量,那么它会区分大小写。【参考方案2】:通过一些技巧,您可以让数据泵做您想做的事情,但您需要在本地计算机上拥有一个数据库。
您需要做的是在本地计算机上创建一个到远程计算机的数据库链接。
然后在数据泵选项中,以数据库链接所有者身份登录到本地数据库,将“network_link”选项指定为您创建的数据库链接名称的名称。这样,它应该通过本地数据库从远程数据库导出并在本地实例上创建文件。例如:
expdp directory=<local_dir_object> network_link=<dblinkname on local instance> dumpfile=.. logfile=.. tables/schema=...
【讨论】:
【参考方案3】:不,数据泵很糟糕,但 Oracle 可以使用 db 所在的同一台服务器获得更快的吞吐量,所以这就是权衡。其他增强功能也是如此,但我仍然认为这对于数据泵来说是一个很大的缺点。为此目的使用旧的 exp/imp 或第三方工具。
【讨论】:
关于 exp。我必须为每个表做导出。【参考方案4】:您应该问自己:“我为什么要将数据保存在数据库之外——我的数据最安全的地方?备份、恢复和恢复都在哪里。
如果您要将数据从数据库 A 移动到数据库 B,请确保两个数据库都可以访问公共文件区域,在该区域中它们可以通过其目录对象访问数据转储文件并使用数据泵。
如果您仍想将数据导出到客户端,您可以使用很好的旧工具 exp 和 imp。
【讨论】:
关于 exp。我必须为每个表做导出。exp help=y
告诉我们您可以导出多个表。 Example: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
以上是关于如何使用 Oracle 数据泵导出实用程序在本地计算机上创建转储文件?的主要内容,如果未能解决你的问题,请参考以下文章
ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法
ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法