概述
Oracle 数据库 10g 提供了多种卸载和加载数据的方法。在本教程中,您将使用 Oracle Data Pump Export 实用程序卸载数据,然后使用 Oracle Data Pump Import 实用程序加载数据。
何为 Oracle Data Pump?
Oracle Data Pump 是 Oracle 数据库 10g 的一个新功能,通过它可以对 Oracle 数据库内容实现高速、并行的批量数据和元数据移动。新的公共接口 PL/SQL 程序包 DBMS_DATAPUMP 提供了一个服务器端基础架构,用于快速地移动数据和元数据。Oracle 数据库 10g 包含了使用该接口的新的导出 (expdp) 和导入 (impdp) 客户端。Data Pump Export 和 Import 工具显著增强了性能和功能,例如有可重启性能、灵活的对象选择以及对导出和导入作业的更好监视和控制。由于这些可贵的改进,Oracle 建议您使用 Data Pump 导入和导出客户端,而非原有的导出 (exp) 和导入 (imp) 客户端。
案例
MyCompany 正在对其产品系列进行评估,以确定哪些产品最终能够为其带来最大收益。为此,MyCompany 使用了 Data Pump Export 和 Import 工具来卸载和加载他们需要分析的各种数据库对象。Sales History (SH) 模式包含若干表格,此时需要先卸载这些表,然后再将它们加载到其他模式以进行分析。
前提条件
开始本教程之前,您应该:
1. | ||
2. |
下载 datapump.zip 并将其解压缩到您的工作目录 (c:/wkdir) 中。 |
在本教程中,您可以执行这些文件,或者直接在命令提示符下输入命令。
Data Pump 基于服务器,而不是基于客户端。因此,要以基于服务器的目录路径为参照来访问转储文件、日志文件和 SQL 文件,以便实施相应的文件安全性。Data Pump 要求您将目录路径指定为目录对象。目录对象将名称映射为文件系统上的目录名。
要运行 Data Pump Export 或 Data Pump Import,DBA 或拥有 CREATE ANY DIRECTORY 权限的用户必须先创建目录对象。然后,在您使用 Export 或 Import 时,使用 DIRECTORY 参数指定目录对象。
创建目录对象
要创建目录对象,请执行以下步骤:
1. |
要启动一个 SQL*Plus 会话,请选择开始 > 程序 > Oracle - OraDb10g_home1 > Application Development > SQL Plus。在 User Name 域中输入 system,在 Password 域中输入 oracle,然后单击 OK。 |
|
2. |
执行以下命令,为本教程创建两个目录: @c:/wkdir/dir01 dir01.sql 文件包括以下命令: CREATE DIRECTORY datadir1 AS 'c:/wkdir';
CREATE DIRECTORY datadir2 AS 'c:/wkdir';
|
|
3. |
创建目录对象后,您需要将它们的 READ 和 WRITE 权限授予其他用户。要允许 Oracle 数据库以用户 SH 的身份读取和写入 datadir1 和 datadir2 目录中的文件,请执行以下命令: 执行以下命令,为本教程创建两个目录: @c:/wkdir/dir02 dir02.sql 文件包括以下命令: CONNECT / AS SYSDBA GRANT READ, WRITE ON DIRECTORY datadir1 TO sh; GRANT READ, WRITE ON DIRECTORY datadir2 TO sh;
|
确定表依赖性
您需要卸载 SALES、PRODUCTS 和 COSTS 表。要确定这些表是否与其他表(可能也要卸载)存在依赖关系,请执行以下步骤:
1. |
打开浏览器,输入以下 URL(用您自己的主机名或 IP 地址替换 <hostname>): http://:1158/em 在 User Name 域中输入 system,在 Password 域中输入 oracle,在 Connect As 域中输入 Normal,然后单击 Login。 如果您是第一次以该用户的身份登录企业管理器,则单击 I agree 确认 Oracle 数据库 10g 许可信息。
|
|
2. |
选择 Administration 选项卡。
|
|
3. |
向下滚动至 Schema 部分,然后单击 Tables 链接。
|
|
4. |
在 Schema 域中输入 SH,然后单击 Go。
|
|
5. |
选择 Costs,然后从下拉列表中选择 Show Dependencies。单击 Go。
|
|
6. |
注意,COSTS 表依赖于其他四个表:CHANNELS、PRODUCTS、PROMOTIONS 和 TIMES。除 PRODUCTS 表外,其他表都不需要进行分析。单击 OK。
|
|
7. |
选择 Products,,然后从下拉列表中选择 Show Dependencies。单击 Go。
|
|
8. |
PRODUCTS 表不依赖于任何其他表。单击 OK。
|
|
9. |
选择 Sales,然后从下拉列表中选择 Show Dependencies。单击 Go。
|
|
10. |
SALES 表依赖于其他几个表:CHANNELS、COUNTRIES、CUSTOMERS、PRODUCTS、PROMOTIONS 和 TIMES。除 PRODUCTS 表外,其他表都不需要进行分析。单击 Database Instance:orcl 路径式导航栏。
|
卸载数据
Data Pump Export 是一个实用程序,它用于将数据和元数据卸载到一组名为转储文件集的操作系统文件中。转储文件集可以复制到其他系统并由 Data Pump Import 实用程序加载。转储文件集由一个或多个包含表数据、数据库对象元数据和控制信息的磁盘文件组成。这些文件以专有的二进制格式写入。在导入操作期间,Data Pump Import 实用程序使用这些文件在转储文件集中定位每个数据库对象。利用 Data Pump Export,您可以指定作业是否应移动数据和元数据的子集(由导出模式确定)。该作业要使用数据筛选器和元数据筛选器,还要设定 Export 参数。
您可以通过以下方法使用 Oracle Data Pump Export:
使用企业管理器 | ||
使用命令行 |
要使用企业管理器卸载公司的销售数据,请执行以下步骤:
1. |
单击 Maintenance 选项卡。
|
|
2. |
单击 Data Movement 部分中的 Export to Export Files 链接。
|
|
3. |
要导出表,请选择 Tables,并在 Username 和 Password 域中输入 oracle,再选择“Save as Preferred Credential”,然后单击 Continue。
|
|
4. |
单击 Add 按钮查看可导出的表。
|
|
5. |
在 Schema 域中输入 SH,然后单击 Go。
|
|
6. |
选择 Costs,然后单击 Next 7。
选择 Products 和 Sales 表,然后单击 Select 按钮。
|
|
7. |
单击 Next。
|
|
8. |
在 Maximum Number of Threads in Export Job 域中输入 4,然后为 Directory Object 选择 DATADIR1。将导出日志文件名更改为 EXPDAT_.log,然后单击 Next。
|
|
9. |
为 Directory Object 选择 DATADIR1,并将 DMP 文件的名称更改为 EXPDAT_.DMP。然后单击 Next。
|
|
10. |
输入作业名 EXPORT_,并确保将 Start 设置为 Immediately,然后单击 Next。
|
|
11. |
单击 Submit Job 按钮提交导出作业。
|
|
12. |
导出作业已经成功提交。单击 EXPORT_ 链接。
|
|
13. |
单击 Status 链接。
|
|
14. |
选择 Export 链接查看 Export 日志状态。
|
|
15. |
该作业仍在运行。在浏览器窗口中单击 Reload。
|
|
16. |
完成该作业后,向下滚动到底部以查看日志中的所有消息。导出作业已成功完成。记下转储文件的名称,以便在本教程的稍后部分中使用。
|
可以使用 Data Pump Export 命令行界面执行以下任务:
执行表模式导出 | ||
估计模式导出占用的磁盘空间大小 |
执行表模式导出
您可以使用 TABLES 参数指定表导出。在以下示例中,NOLOGFILE 参数将指示不生成操作的 Export 日志文件。
执行以下命令导出 COSTS 和 SALES 表:
1. |
打开一个终端窗口或命令提示符窗口,使用以下命令导航到 c:/wkdir 目录: cd c:/wkdir
|
|
2. |
执行以下命令导出表: exp01 exp01.bat 文件包括以下命令: expdp system/oracle TABLES=sh.costs,sh.sales DUMPFILE=datadir2:table.dmp NOLOGFILE=y
向下滚动以确认导出成功完成。
|
估计模式导出占用的磁盘空间大小
ESTIMATE_ONLY 参数可以估计模式导出占用的空间大小,但实际上并不执行导出操作。估计值将打印在日志文件中,并显示在客户端的标准输出设备中。该估计值只用于表行数据;其中不包含元数据。
执行以下步骤:
1. |
从终端窗口中执行以下命令,估计从 Sales History (SH) 模式中导出三个表(SALES、PRODUCTS 和 COSTS)中的数据所需的块数量。 执行以下命令,估计表的块空间: est01 est01.bat 文件包括以下命令: expdp sh/sh DIRECTORY=datadir2 ESTIMATE_ONLY=y TABLES=SALES, PRODUCTS, COSTS
|
加载数据
Data Pump Import 是一个用于将导出的转储文件集加载到目标系统的实用程序。转储文件集由一个或多个包含表数据、数据库对象元数据和控制信息的磁盘文件组成。Data Pump Export 实用程序以专用的二进制格式写入这些文件。在导入操作期间,Data Pump Import 实用程序使用这些文件在转储文件集中定位每个数据库对象。
如果源数据库不包含干预文件,则可以同时执行导出和导入操作,因而能使用 Import 实用程序实现源数据库到目标数据库的直接加载。这避免了在文件系统上创建转储文件,还可以最大限度地减少导出和导入操作的总消耗时间。这称作网络导入。
利用 Data Pump Import,您可以指定作业是否应移动数据和元数据子集(由导入模式确定)。该作业要使用数据筛选器和元数据筛选器,这将通过 Import 参数实现。
您可以通过以下方法使用 Oracle Data Pump Import:
使用企业管理器 | ||
使用命令行 |
要使用企业管理器来导入模式,请执行以下步骤:
1. |
打开浏览器,输入以下 URL(用您自己的主机名或 IP 地址替换 <hostname>): http://:1158/em 在 User Name 域中输入 system,在 Password 域中输入 oracle,在 Connect As 域中输入 Normal,然后单击 Login。 |
|
2. |
单击 Maintenance 选项卡。
|
|
3. |
单击 Import from Export Files 链接。
|
|
4. |
为 Directory Objects 选择 DATADIR1,并将文件名更改为 EXPORT_.DMP(您在本教程的前一部分“卸载数据”中创建的文件)。为 Import Type 选择 Tables,并在 Username 和 Password 域中输入 oracle,然后单击 Continue。
|
|
5. |
单击 Add 按钮查看可导入的表。
|
|
6. |
在 Schema 域中输入 SH,然后单击 Go。
|
|
7. |
选中 Costs、Products 和 Sales 的复选框,然后单击 Select。
|
|
8. |
单击 Next。
|
|
9. |
单击 Re-Map Schemas 区域下的 Add Another Row 按钮。
|
|
10. |
在 Destination Schema 列下选择 PM,然后单击 Next。
|
|
11. |
为 Directory Object 选择 DATADIR1,并将日志文件名更改为 IMPORT_.LOG,然后单击 Next。
|
|
12. |
在 Job 域中输入 IMPORT_,确保作业立即启动,然后单击 Next。
|
|
13. |
单击 Submit Job。
|
|
14. |
单击链接 IMPORT_。
|
|
15. |
选择 Running 链接。
|
|
16. |
单击 Import。
|
|
17. |
该作业仍在运行。在浏览器窗口中单击 Reload。
|
|
18. |
完成该作业后,向下滚动到底部以查看日志中的所有消息。尽管日志文件显示了一些错误,但导入已经成功完成。由于 SALES 和 COSTS 表所依赖的几个表未包含在导出中,因此导入中也没有,从而生成了这些错误。在这种情况下,由于遗漏是人为意愿造成,故而可以忽略日志文件中的这些错误。
|
您可以使用 Data Pump Import 命令行界面执行纯数据表模式导入。
使用 CONTENT 参数可以过滤导入加载的数据和元数据。DATA_ONLY 值只加载表行数据;不会重新创建数据库对象定义(元数据)。执行以下步骤:
1. |
您要使用未来的数据导入复制 SH.COSTS 表中的数据。要在“清理”活动期间恢复 SH.COSTS 表的原始版本,现在应该创建一个副本。从 SQL*Plus 会话中,执行以下命令: @c:/wkdir/costs2 costs2.sql 文件包括以下命令: create table sh.costs2 as select * from sh.costs;
|
|
2. |
从 TABLE.DMP 转储文件(先前在本教程的导出部分中创建的文件)中提取 COSTS 表的数据。从 c:/wkdir 目录的终端窗口中,执行以下命令: imp01 imp01.bat 文件包括以下命令: impdp system/oracle TABLES=sh.costs DUMPFILE=datadir2:table.dmp NOLOGFILE=y
|
删除目录对象并“清理”模式 SH 和 PM 修改(源自本教程中的任务)。
1. |
从 SQL*Plus 会话中,执行以下命令: @c:/wkdir/cleanup cleanup.sql 文件包括以下命令: CONNECT / AS SYSDBA DROP DIRECTORY datadir1; DROP TABLE SH.COSTS PURGE; DROP TABLE PM.COSTS CASCADE CONSTRAINTS PURGE;
|
|
2. |
关闭所有打开的教程窗口。
|
在本教程中,您学习了如何:
使用 Oracle Data Pump Export 卸载数据 | ||
使用 Oracle Data Pump Import 加载数据 |