30、深入理解Data Pump:功能与操作全解析

深入理解Data Pump:功能与操作全解析

1. 数据泵基本操作

数据泵(Data Pump)在数据库管理中扮演着重要角色,它能高效地进行数据的导出和导入操作。以下是一些常见操作的详细介绍:
- 全量导入验证
bash $ sqlplus test/test@pdborcl SQL> SELECT * FROM test.employee;
执行上述命令后,若能成功查询到数据,说明导入操作成功。示例查询结果如下:
| EMP_ID | EMP_NAME | EMP_SSN | EMP_DOB |
| ------ | ------------------ | --------- | --------- |
| 101 | Francisco Munoz | 123456789 | 30 - JUN - 73 |
| 102 | Gonzalo Munoz | 234567890 | 02 - OCT - 96 |
| 103 | Evelyn Aghemio | 659812831 | 02 - OCT - 79 |
- 表的导出与导入
1. 导出表 :使用 expdp 命令导出指定表,示例如下:
bash $ expdp fcomunoz/alvarez@pdborcl directory=datapump dumpfile=employee.dmp logfile=employee.log tables=test.employee
2. 删除表 :在数据库中删除指定表:
sql SQL> DROP TABLE test.employee PURGE;
3. 导入表 :使用 impdp 命令从导出文件中导入表:
bash $ impdp fcomunoz/alvarez@pdborcl directory=datapump dumpfile=employee.dmp logfile=imp_employee.log
4. 验证表导入 :再次查询表数据,验证导入是否成功:
sql SQL> SELECT * FROM test.employee;

2. 数据库/可插拔数据库的导出与导入

对于数据库或可插拔数据库的导出与导入,可按以下步骤操作:
- 导出数据库 :使用 expdp 命令进行全量导出:
bash $ expdp fcomunoz/alvarez@pdborcl directory=datapump dumpfile=full_pdborcl.dmp logfile=full_pdborcl.log full=y
- 关闭并删除可插拔数据库
bash $ sqlplus / as sysdba SQL> ALTER PLUGGABLE DATABASE pdborcl CLOSE; SQL> DROP PLUGGABLE DATABASE pdborcl INCLUDING DATAFILES;
- 创建新的可插拔数据库
sql SQL> CREATE PLUGGABLE DATABASE pdborcl ADMIN USER pdb_admin IDENTIFIED BY oracle 2 STORAGE (MAXSIZE 2G MAX_SHARED_TEMP_SIZE 100M) 3 DEFAULT TABLESPACE Users 4 DATAFILE '/u01/app/oracle/oradata/orcl/pdborcl/datafile1.dbff' SIZE 250M AUTOEXTEND ON 5 PATH_PREFIX = '/u01/app/oracle/oradata/orcl/pdborcl/' 6 FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/orcl/pdbseed/', '/u01/app/oracle/oradata/orcl/pdborcl/'); SQL> ALTER PLUGGABLE DATABASE pdborcl OPEN;
- 创建数据泵环境
sql SQL> ALTER SESSION SET CONTAINER=pdborcl; SQL> CREATE USER fcomunoz IDENTIFIED BY alvarez DEFAULT TABLESPACE users QUOTA UNLIMITED ON users; SQL> GRANT CREATE SESSION, RESOURCE, DATAPUMP_EXP_FULL_DATABASE, DATAPUMP_IMP_FULL_DATABASE TO fcomunoz; SQL> CREATE OR REPLACE DIRECTORY datapump AS '/u01/db_backups'; SQL> GRANT READ, WRITE ON DIRECTORY datapump to fcomunoz;
- 导入数据库
bash $ impdp fcomunoz/alvarez@pdborcl directory=datapump dumpfile=full_pdborcl.dmp logfile=imp_full_pdborcl.log

3. 使用导出操作估算空间

数据泵可以通过 ESTIMATE_ONLY 参数估算模式导出所需的磁盘空间。具体操作步骤如下:

$ expdp fcomunoz/alvarez@pdborcl directory=datapump schemas=test estimate_only=y logfile=est_test.log

执行上述命令后,数据泵会使用 BLOCKS 方法进行估算。示例输出显示,估算 TEST 模式下的 EMPLOYEE 表需要 64 KB 空间,总估算空间也为 64 KB。

4. 并行全量数据库导出与交互式命令模式

数据泵的并行选项可以显著提高导出和导入的速度。以下是相关操作介绍:
- 并行导出数据库 :使用 PARALLEL 参数指定并行线程数,并结合 %U 通配符创建多个转储文件:
bash $ expdp fcomunoz/alvarez@pdborcl directory=datapump dumpfile=full_%U.dmp parallel=4 logfile=full.log full=y
与普通导出相比,并行导出能节省大量时间。
- 交互式命令模式 :在导出或导入过程中,可以使用交互式命令模式对作业进行管理。例如,启动一个带有作业名的导出作业:
bash $ expdp fcomunoz/alvarez@pdborcl dumpfile=full2_%U.dmp filesize=5g parallel=4 logfile=imp_full2.log job_name=expfull full=y directory=datapump
按下 Ctrl + C 进入交互式命令模式,可执行以下操作:
- 停止作业
bash Export> STOP_JOB=immediate
- 重新启动作业
bash $ expdp fcomunoz/alvarez@pdborcl attach=expfull Export> START_JOB
- 更改并行级别
bash Export> PARALLEL=10
- 显示作业状态
bash Export> STATUS=15
- 返回客户端输出模式
bash Export> CONTINUE_CLIENT

命令 描述 导出 导入
ADD_FILE 添加转储文件到转储文件集
CONTINUE_CLIENT 返回日志模式。若作业空闲则重启
EXIT_CLIENT 退出客户端会话并让作业继续运行
FILESIZE 后续 ADD_FILE 命令的默认文件大小(字节)
HELP 总结交互式命令
KILL_JOB 分离并删除作业
PARALLEL 更改当前作业的活动工作线程数
REUSE_DUMPFILES 若目标转储文件存在则覆盖
START_JOB 启动或恢复当前作业
STATUS 显示作业运行状态(秒为单位)。默认 0 表示有可用状态时显示
STOP_JOB 有序关闭作业执行并退出客户端;使用 STOP_JOB = IMMEDIATE 可立即关闭数据泵作业,后续可使用 START_JOB 重启

以下是交互式命令模式操作的流程图:

graph TD;
    A[启动导出作业] --> B[按下 Ctrl + C 进入交互式模式];
    B --> C{选择命令};
    C -->|STOP_JOB=immediate| D[停止作业];
    C -->|START_JOB| E[启动作业];
    C -->|PARALLEL=10| F[更改并行级别];
    C -->|STATUS=15| G[显示作业状态];
    C -->|CONTINUE_CLIENT| H[返回客户端输出模式];

深入理解Data Pump:功能与操作全解析

5. 仅导入表的元数据

CONTENT 参数可在导出或导入操作时过滤数据和元数据,其取值及含义如下:
- ALL :加载表行数据,并重新创建对象定义(元数据)。
- DATA_ONLY :仅加载表行数据,不重新创建数据库对象定义(元数据)。
- METADATA_ONLY :重新创建数据库对象定义(元数据),但不加载任何数据。

具体操作步骤如下:
1. 导出整个 test 模式:
bash $ expdp fcomunoz/alvarez@pdborcl directory=datapump schemas=test dumpfile=shema_test.dmp logfile=schema_test.log
2. 仅导入 test 模式的元数据到 pdborcl2
bash $ impdp fcomunoz/alvarez@pdborcl2 directory=datapump dumpfile=shema_test.dmp logfile=imp_schema_test.log content=metadata_only table_exists_action=replace

TABLE_EXISTS_ACTION 参数用于指定在目标数据库中对象已存在时的处理方式,可选值如下:
| 参数值 | 描述 |
| ---- | ---- |
| APPEND | 加载源数据行,保留现有行不变 |
| SKIP | 保持表不变,继续处理下一个对象(若 CONTENT 参数设置为 DATA_ONLY ,此选项无效) |
| TRUNCATE | 删除现有行,然后加载源数据行 |
| REPLACE | 删除现有表,重新创建并加载数据 |

6. 将视图导出为表

在 Oracle 12c 中,数据泵引入了将视图导出为表的功能。操作步骤如下:
1. 创建视图:
bash $ sqlplus fcomunoz/alvarez@pdborcl SQL> CREATE VIEW test.employee_view AS 2 SELECT * 3 FROM employee; SQL> SELECT * FROM test.employee_view; SQL> exit
2. 导出视图为表:
bash $ expdp fcomunoz/alvarez@pdborcl directory=datapump dumpfile=employee_view.dmp logfile=employee_view.log views_as_tables=test.employee_view
3. 验证导出结果:
bash $ impdp fcomunoz/alvarez@pdborcl directory=datapump dumpfile=employee_view.dmp sqlfile=employee_view.sql $ cat employee_view.sql

查看 employee_view.sql 文件内容,可发现创建的是表而非视图,示例如下:

-- CONNECT FCOMUNOZ
ALTER SESSION SET EVENTS '10150 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '10904 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '25475 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '10407 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '10851 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '22830 TRACE NAME CONTEXT FOREVER, LEVEL 192 ';
-- new object type path: TABLE_EXPORT/VIEWS_AS_TABLES/TABLE
CREATE TABLE "TEST"."EMPLOYEE_VIEW"
   (    "EMP_ID" NUMBER(10,0) NOT NULL ENABLE,
        "EMP_NAME" VARCHAR2(30 BYTE),
        "EMP_SSN" VARCHAR2(9 BYTE),
        "EMP_DOB" DATE
   ) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  TABLESPACE "USERS" ;
7. 通过网络链接导入数据

使用数据泵可通过数据库链接直接将元数据和数据导入目标数据库,主要优点如下:
- 不生成转储文件,无需复制转储文件。
- 无需执行导出命令。
- 直接从源导出并立即导入目标。

操作步骤如下:
1. 创建数据库链接:
bash sqlplus fcomunoz/alvarez@pdborcl2 SQL> CREATE DATABASE LINK pdborcl_lnk CONNECT TO fcomunoz IDENTIFIED by alvarez USING 'pdborcl';
2. 验证数据库链接:
sql SQL> SELECT * FROM employee@pdborcl_lnk;
3. 检查目标环境中表是否存在:
sql SQL> SELECT * FROM test.employee;
4. 通过网络链接导入数据:
bash $ impdp fcomunoz/alvarez@pdborcl2 schemas=test directory=datapump network_link=pdborcl_lnk logfile=pdborcl_lnk.log
5. 验证数据导入:
bash $ sqlplus fcomunoz/alvarez@pdborcl2 SQL> SELECT * FROM test.employee;

需要注意的是,此方法不适用于 LONG/LONG RAW 和包含嵌套表的对象类型。导入操作必须由具有 DATAPUMP_IMP_FULL_DATABASE 角色的目标数据库用户执行,数据库链接必须连接到具有 DATAPUMP_EXP_FULL_DATABASE 角色的源数据库用户,且源数据库用户不能具有 SYSDBA 系统权限。若数据库链接是连接用户数据库链接,目标数据库用户也不能具有 SYSDBA 系统权限。

以下是通过网络链接导入数据的流程图:

graph TD;
    A[创建数据库链接] --> B[验证数据库链接];
    B --> C[检查目标表是否存在];
    C --> D[通过网络链接导入数据];
    D --> E[验证数据导入];

综上所述,数据泵提供了丰富的功能和灵活的操作方式,可满足不同场景下的数据导出和导入需求。通过合理使用这些功能,可以提高数据库管理的效率和灵活性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值