Oracle 学习资料库
本单元主要介绍了数据和元数据的加载与卸载。
本单元将讨论以下主题:
| |
概述 | |
| |
前提条件 | |
| |
确定表依赖性 | |
| |
卸载数据 | |
| |
加载数据 | |
将鼠标移到该图标上可以显示所有屏幕截图。还可以将鼠标移到每个图标上来仅查看相关的屏幕截图。
Oracle 数据库 10g 提供了多种卸载和加载数据的方法。在本单元中,您将使用 Oracle Data Pump Export 实用程序卸载数据,然后使用 Oracle Data Pump Import 实用程序加载数据。您还将观看到使用可跨平台传输的表空间快速加载大量数据的演示。
Oracle Data Pump 是 Oracle 数据库 10g 的一个新特性,通过它可以对 Oracle 数据库内容实现高速、并行的批量数据和元数据移动。新的公共接口 PL/SQL 程序包 DBMS_DATAPUMP 提供了一个服务器端基础架构,用于快速地移动数据和元数据。在 Oracle 数据库 10g 中,提供了一个使用该接口的新的导出 (expdp) 和导入 (impdp) 客户端。新的 Data Pump 导入和导出工具显著增强了性能和功能,如可重启性能、灵活的对象选择以及对导出和导入作业的更好监视和控制。由于这些可贵的改进,Oracle 建议您使用新的 Data Pump 导入和导出客户端,替换原有的导出 (exp) 和导入 (imp) 客户端。
MyCompany 正在对其产品系列进行评估,以确定哪些产品最终能够为其带来最大收益。为完成此项工作,MyCompany 使用 Data Pump 的导出和导出工具卸载和加载他们之后将会进行分析的各种数据库对象。其中,Sales History (SH) 模式具有若干表格,首先需要对这些表格进行卸载,然后再将其加载到其他模式中进行分析。
Data Pump 基于服务器,而不是基于客户端。因此,要以基于服务器的目录路径为参照来访问转储文件、日志文件和 SQL 文件,以便实施相应的文件安全性。Data Pump 要求您将目录路径指定为目录对象。目录对象将名称映射映射为文件系统上的目录名。
要运行 Data Pump Export 或 Data Pump Import,首先必须由 DBA 或任何具有 CREATE ANY DIRECTORY 权限的用户创建目录对象。然后,在您使用导出或导入工具时,请使用 DIRECTORY 参数指定该目录对象。
要创建目录对象,请执行以下步骤:
| 1. |
以 system 的身份登录到 SQL*Plus,然后输入以下 SQL 命令创建两个目录。请注意,指定的目录路径将取决于您的系统。这只是一个示例。您需要确定使用系统上的哪些目录来定位由 Data Pump 创建的文件。
CREATE DIRECTORY datadir1 AS '/home/oracle/wkdir';
CREATE DIRECTORY datadir2 AS '/home/oracle/wkdir';
|
|
| 2. |
创建目录后,创建该目录对象的用户需要将该目录的 READ 和 WRITE 权限授予其他用户。要使 Oracle 数据库能够以用户 SH 的身份读取和写入名为 datadir1 和 datadir2 的目录中的文件,请执行以下命令:
GRANT READ,WRITE ON DIRECTORY datadir1 TO sh;
GRANT READ,WRITE ON DIRECTORY datadir2 TO sh;
exit
|
|
您需要卸载 SALES、PRODUCTS 和 COSTS 表。要确定这些表是否与其他表(可能也是要卸载的表)存在依赖关系,请执行以下步骤:
| 1. |
打开一个浏览器,并输入以下 URL:
http://<hostname>:5500/em
以 system/<password> 的身份登录,然后单击 Login。
|
|
| 2. |
单击 Administration 选项卡。
|
|
| 3. |
单击 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 表以外,其他表都不需要进行分析。单击 OK。
|
|
Data Pump Export 是一个实用程序,它用于将数据和元数据卸载到一组名为转储文件集的操作系统文件中。转储文件集可以复制到其他系统并由 Data Pump Import 实用程序加载。转储文件集由一个或多个包含表数据、数据库对象元数据和控制信息的磁盘文件组成。这些文件以专有的二进制格式写入。在导入操作期间,Data Pump Import 实用程序使用这些文件在转储文件集中定位每个数据库对象。利用 Data Pump Export,您可以指定作业是否应移动数据和元数据的子集(由导出模型确定)。该作业要使用数据筛选器和元数据筛选器,还要设定 Export 参数。
可以通过 Enterprise Manager 访问 Oracle Data Pump Export。要卸载公司的销售数据,请执行以下步骤:
| 1. |
单击 Maintenance 链接。
|
|
| 2. |
单击 Export to Files 链接。
|
|
| 3. |
要导出表,请选择 Tables 按钮并输入您的 OS 用户名和口令,然后单击 Continue 按钮。
|
|
| 4. |
选择 Add 按钮查看可供导出的表。
|
|
| 5. |
在 Schema 域中输入 SH,然后单击 Go。
|
|
| 6. |
选中 Costs、Products 和 Sales 表的复选框,然后单击 Select。
|
|
| 7. |
单击 Next。
|
|
| 8. |
为 Maximum Number of Threads in Export Job 输入 4 ,并为 Directory Object 选择 DATADIR1。将导出日志文件的名称更改为 EXPORT_<today's date in mmddyy format>.log,然后单击 Next。
|
|
| 9. |
单击 Next。
|
|
| 10. |
输入作业名称 EXPORT<Today's Date> 并确保将 Start 设置为 Immediate,然后单击 Next。
|
|
| 11. |
单击 Submit Job 按钮,提交导出作业。
|
|
| 12. |
已经成功提交了导出作业。单击 View Job。
|
|
| 13. |
选择 Export 链接查看 Export 日志状态。
|
|
| 14. |
该作业仍在运行。单击 Show more 查看更多日志内容。如果未显示 Show more,请在浏览器窗口中单击 Reload。
|
|
| 15. |
作业完成。向下滚动到底部以查看日志中的所有消息。
|
|
| 16. |
导出成功完成。记下转储文件的名称,以便在本课程的稍后部分中使用。
|
|
您将执行以下有关使用 Data Pump Export 命令行界面的示例:
| |
执行表模式导出 | |
| |
估计该模式导出将占用的磁盘空间大小 | |
| |
执行模式导出 | |
| |
使用四个并行进程执行完全数据库导出 | |
| |
连接和停止现有作业 | |
| |
连接并重新启动已停止的作业 | |
可以使用 TABLES 参数指定表导出。在以下示例中,NOLOGFILE 参数指示将不生成操作的 Export 日志文件。
执行以下导出命令以导出表 Costs 和表 Sales:
| 1. |
打开终端窗口,执行以下命令:
expdp system/<password> \
TABLES=sh.costs,sh.sales \
DUMPFILE=datadir2:table.dmp \
NOLOGFILE=y
|
|
ESTIMATE_ONLY 参数会对模式导出将占用的空间大小进行估计,并在评估停止之后,才开始实际的导出操作。估计值将打印在日志文件中,并显示在客户端的标准输出设备中。该估计值只用于表行数据;它不包含元数据。
INCLUDE 参数使您可以通过为当前的导出模式指定对象和对象类型来过滤导出的元数据。导出指定的对象以及它们的所有相关对象。授予这些对象的权限也被导出。
请执行以下操作:
| 1. |
从终端窗口中,执行以下命令,以估计从 Sales History (SH) 模式中导出三个表(Sales、Products 和 Costs)中的数据所需的块数量。在特殊字符(如圆括号)之前使用反斜线 (\) 作为转义字符,这样操作系统就不会将该字符视为特殊字符。
expdp sh/sh \
INCLUDE=table:\"IN \( \'SALES\',\'PRODUCTS\',\'COSTS\'\) \" \
DIRECTORY=datadir2 \
ESTIMATE_ONLY=y
|
|
可以使用 SCHEMAS 参数指定模式导出。在模式导出中,只卸载属于相应模式的对象。这是默认模式。如果您具有 EXP_FULL_DATABASE 角色,则可以指定模式列表,并包含模式定义本身以及授予这些模式的系统权限。在以下示例中,文件名包含一个替换变量 (%U),它表示导出可能生成多个文件。
请执行以下操作:
| 1. |
从终端窗口中,执行以下导出命令以执行模式导出:
expdp system/<password> \
|
|
FULL 参数表示导出是一个完全数据库模式导出。将导出数据库中的所有数据和元数据。
PARALLEL 参数指定了以导出作业的身份执行操作时,运行的最大线程数。该参数使您可以在资源使用和已用时间之间进行权衡。要获得最佳性能,为 PARALLEL 指定的值至少应等于使用 DUMPFILE 参数指定的输出文件数。每个 Data Pump 执行线程每次以独占方式写入一个文件。
PARALLEL 参数只在 Oracle 数据库的企业版中有效。要在作业执行过程中增大或减小 PARALLEL 的值,请使用以下示例所描述的交互式命令模式。
FILESIZE 参数将每个转储文件的最大大小限制为 2 GB。
请执行以下操作:
| 1. |
从终端窗口中,执行以下命令以使用 PARALLEL 参数执行完全导出:
expdp system/<password> \
FULL=y \
注意:由于不支持某种类型的表,因此导出完成时可能会显示一个预期的错误。
|
|
| 2. |
在 datadir1 和 datadir2 指向的目录中,转储文件 full101.dmp、full201.dmp、full102.dmp、full202.dmp 将通过循环方式创建,依此类推。为获得最佳性能,这些目录应位于单独的 I/O 通道上。每个转储文件的大小应限制为 2 GB。作业名将为 expfull。导出日志文件将写入目录 datadir1 中的 expfull.log。
|
|
ATTACH 命令将客户端会话连接到现有的导出作业,并自动转到交互式命令界面。导出工具将显示已连接的作业的描述,并显示导出提示符。如果只有一个与模式关联的导出作业,则必须指定作业名。连接的作业既可以是当前正在执行的作业也可以是已停止的作业。
在以下示例中,将在导出作业运行所在的同一终端中运行交互式模式。用户也可以从未运行该作业的其他终端来使用交互式模式;这种情况下需要使用 expdp system/<password> ATTACH。
请执行以下操作:
| 1. |
再次运行 Full Export(完全导出)。当导出正在运行时,按 Ctrl+C 以连接到交互式命令界面(下一个示例需要该界面)。交互式命令界面停止记录到终端并显示 Export 提示符,您可以从该提示符下输入各种命令,其中的某些命令特定于交互式模式。
expdp system/<password> \
FULL=y \
|
|
| 2. |
从终端窗口中执行以下命令以停止该作业:
Export> STOP_JOB=immediate
|
|
系统管理员使用更高级别的并行机制重新启动作业(可能在业余时间)。请注意,由于作业以前已停止,因此在这种情况下必须提供作业名。之所以需要作业名是为了查找作业的主表。系统管理员可能还希望显示作业的累积状态以及当前操作的描述。系统管理员可以指定该状态的显示频率(秒)。该状态信息只写入标准的输出设备,而不是日志文件。
请执行以下操作:
| 1. |
从终端窗口中,执行以下命令:
expdp system/<password> ATTACH=expfull2
|
|
| 2. |
显示所有作业状态后,请执行以下交互式模式命令:
Export> PARALLEL=10
Export> START_JOB
Export> STATUS=600
Export> CONTINUE_CLIENT
进入记录模式,在该模式中,作业状态以连续的方式每隔 10 分钟输出到终端一次。 注意:由于停止作业,因此导出在完成时可能会显示一个预期的错误。
|
|
Data Pump Import 是一个用于将导出的转储文件集加载到目标系统的实用程序。转储文件集由一个或多个包含表数据、数据库对象元数据和控制信息的磁盘文件组成。Data Pump Export 实用程序以专用的二进制格式写入这些文件。在导入操作期间,Data Pump Import 实用程序使用这些文件在转储文件集中定位每个数据库对象。
如果源数据库不包含干预文件,则可以同时执行导出和导入操作,所以能使用 Import 实用程序实现源数据库到目标数据库的直接加载。这避免了在文件系统上创建转储文件,还可以最大限度地减少导出和导入操作的总消耗时间。这称作网络导入。
通过 Data Pump Import,您可以指定作业是否应移动数据和元数据子集(由导入模式确定)。该作业要使用数据筛选器和元数据筛选器,还要设定 Import 参数。
可以通过 Enterprise Manager 访问 Oracle Data Pump Import。要使用 Enterprise Manager 来导入模式,请执行以下步骤:
| 1. |
打开一个浏览器,并输入以下 URL:
http://<hostname>:5500/em
以 system/<password> 的身份登录,然后单击 Login。
|
|
| 2. |
单击 Maintenance 链接。
|
|
| 3. |
单击 Import from Files 链接。
|
|
| 4. |
将 Import Type 设置为 Tables 并输入主机用户名和口令,然后单击 Continue。
|
|
| 5. |
选择 Add 按钮查看可供导入的表。
|
|
| 6. |
在 Schema 域中输入 SH,然后单击 Go。
|
|
| 7. |
选中 Costs、Products 和 Sales 的复选框,然后单击 Select。
|
|
| 8. |
单击 Next。
|
|
| 9. |
单击 Re-Map Schemas 区域下的 Add Another Row 按钮。
|
|
| 10. |
在 Destination Schema 列下,选择 SCOTT,然后单击 Next。
|
|
| 11. |
单击 Next。
|
|
| 12. |
在 Job 域中输入 IMPORT_<Today's Date> ,然后单击 Next。
|
|
| 13. |
单击 Submit Job。
|
|
| 14. |
单击 View Job。
|
|
| 15. |
选择 Import 链接以查看导入日志状态。
|
|
| 16. |
该作业仍在运行。单击 Show more 查看更多日志内容。如果未显示 Show more,请在浏览器窗口中单击 Reload。
|
|
| 17. |
作业完成。向下滚动到底部以查看日志中的所有消息。
|
|
| 18. |
尽管日志文件显示了一些错误,但导入已经成功完成。由于 Sales 和 Costs 表所依赖的几个表未包含在导出中,因此导入中也没有,从而生成了这些错误。在这种情况下,此种遗漏由人为意愿造成,故而可以忽略日志文件中的这些错误。
|
|
请演练以下使用 Data Pump Import 命令行界面的示例:
| |
执行仅导入数据的表模式导入 | |
| |
执行模式导入 | |
使用 CONTENT 参数可以过滤导入加载的数据和元数据。DATA_ONLY 值只加载表行数据;不重新创建数据库对象定义(元数据)。
请执行以下操作:
| 1. |
从终端窗口中,执行以下 IMPORT 命令,以使用在本教程前面的“导出”部分中创建的转储文件对表 Costs 执行仅导入表数据的导入。
impdp system/<password> \
|
|
EXCLUDE 参数使您可以通过指定要从导入作业中排除的数据库对象来过滤导入的元数据。给定的导入模式中将包括源中包含的所有对象及其所有相关对象(EXCLUDE 语句中指定的对象除外)。如果不包含某个对象,则其所有相关对象也将排除在外。
TABLE_EXISTS_ACTION 指示导入在它试图创建的表已经存在时所要执行的操作。如果指定 TABLE_EXISTS_ACTION=REPLACE,则导入将删除现有表,然后使用源数据库内容重新创建并加载它。
请执行以下操作:
| 1. |
从终端窗口中,执行以下导入命令,以执行一个模式导入,该导入使用“导出”部分中的模式导出创建的转储文件集排除约束、引用约束、索引和物化视图。
impdp system/<password> \
SCHEMAS=sh \
REMAP_SCHEMA=sh:sh2 \
DUMPFILE=datadir1:schema1%U.dmp,datadir2:schema2%U.dmp \
|
|
热门下载 | ||
更多融合中间件下载 | ||