oracle覆盖导入dmp文件的2种方法

下面我来详细讲解“oracle覆盖导入dmp文件的2种方法”的完整攻略。

1. 覆盖导入dmp文件的概述

在Oracle数据库中,如果已经存在同名的表或者数据,导入dmp文件时会直接报错。但是,有时候我们需要覆盖掉已经存在的表或数据,这时候就需要使用覆盖导入dmp文件的方法。下面分别介绍两种方法。

2. 第一种方法:使用impdp命令

2.1 导出原数据

首先需要将原有的数据进行导出,并且在导出时需要指定IGNORE=Y参数。例如:

expdp schemas=SCOTT directory=DATA_PUMP_DIR dumpfile=SCOTT.dmp logfile=SCOTT.log content=DATA_ONLY exclude=STATISTICS compression=ALL

上述命令中,schemas指定要导出的用户,directory指定导出的文件路径,dumpfile指定导出的dmp文件名,logfile指定导出的日志文件名,content指定导出内容,exclude排除导出的对象,compression指定压缩方式。

2.2 使用impdp覆盖导入

接下来就可以使用impdp命令进行覆盖导入了。在导入时需要指定FULL=YES IGNORE=Y 参数,例如:

impdp schemas=SCOTT directory=DATA_PUMP_DIR dumpfile=SCOTT.dmp logfile=SCOTT.log TABLE_EXISTS_ACTION=REPLACE FULL=YES IGNORE=Y

上述命令中,schemas指定要导入的用户,directory指定导入的文件路径,dumpfile指定导入的dmp文件名,logfile指定导入的日志文件名,TABLE_EXISTS_ACTION指定对已存在的表的处理方式,FULL指导入数据和元数据,IGNORE指忽略错误。

2.3 示例

例如,如果我们已经有一个名为SCOTT的用户和一张名为EMP的表,其中有一条数据:

SELECT * FROM SCOTT.EMP;

EMPNO  ENAME       JOB        MGR HIREDATE    SAL       COMM     DEPTNO
----- ---------- --------- ---- ----------- --------- --------- ----------
7369  SMITH      CLERK     7902 17-DEC-1980  800                     20

现在我们将EMP表清空,并且在导出时排除了EMP表:

expdp schemas=SCOTT directory=DATA_PUMP_DIR dumpfile=SCOTT.dmp logfile=SCOTT.log content=DATA_ONLY exclude=TABLE:"='EMP'" compression=ALL

接下来我们对SCOTT用户进行覆盖导入:

impdp schemas=SCOTT directory=DATA_PUMP_DIR dumpfile=SCOTT.dmp logfile=SCOTT.log TABLE_EXISTS_ACTION=REPLACE FULL=YES IGNORE=Y

这时候再检查EMP表中的数据,可以看到它已经被覆盖掉了,只有导入时新加入的数据:

SELECT * FROM SCOTT.EMP;

EMPNO   ENAME      JOB              MGR HIREDATE         SAL COMM       DEPTNO
----- ---------- ---------      ---- ---------      ------      ------         ----------
  101    Tom             CEO                         2019-08-10            2000          0            20
  102    Jerry           CFO                         2019-08-11            1500          0            20

3. 第二种方法:使用脚本

3.1 编写脚本

第二种方法是通过编写脚本来实现覆盖导入的功能。编写脚本的过程与使用impdp命令类似,在导入时需要先判断表是否存在,如果存在则先删除已存在的表,然后再导入数据。下面是一个编写好的脚本:

SET ECHO OFF
SET HEADING OFF
SET FEEDBACK OFF
SET PAGESIZE 0
SET SERVEROUTPUT ON

DECLARE
  file_exists BOOLEAN := FALSE;
  table_exists BOOLEAN := FALSE;
BEGIN
  -- check file exists
  SELECT COUNT(*) INTO file_exists FROM ALL_DIRECTORIES WHERE DIRECTORY_NAME = 'DATA_PUMP_DIR';
  IF file_exists = FALSE THEN
    DBMS_OUTPUT.PUT_LINE('Directory DATA_PUMP_DIR is not exists!');
    RETURN;
  END IF;

  -- check table exists
  SELECT COUNT(*) INTO table_exists FROM ALL_TABLES WHERE TABLE_NAME = 'EMP' AND OWNER = 'SCOTT';
  IF table_exists = TRUE THEN
    EXECUTE IMMEDIATE 'DROP TABLE SCOTT.EMP CASCADE CONSTRAINTS';
    DBMS_OUTPUT.PUT_LINE('Table SCOTT.EMP has been dropped!');
  END IF;

  -- import data
  DBMS_DATAPUMP.Import(
    handle       => NULL,
    job_name     => 'IMPORT_EMP',
    operation    => 'IMPORT',
    job_mode     => 'FULL',
    remote_link  => NULL,
    directory    => 'DATA_PUMP_DIR',
    dumpfile     => 'SCOTT.dmp',
    logfile      => 'SCOTT.log',
    TABLE_EXISTS_ACTION => 'REPLACE',
    skip_existing => FALSE
  );
  DBMS_OUTPUT.PUT_LINE('Table SCOTT.EMP has been imported!');
END;
/

上述脚本首先判断导入的文件目录是否存在,然后判断表是否存在,如果存在则先删除表,最后进行数据导入。

3.2 示例

例如,我们在SCOTT用户中有一个名为EMP的表,其中有一条数据:

SELECT * FROM SCOTT.EMP;

EMPNO  ENAME       JOB        MGR HIREDATE    SAL       COMM     DEPTNO
----- ---------- --------- ---- ----------- --------- --------- ----------
7369  SMITH      CLERK     7902 17-DEC-1980  800                     20

现在我们将EMP表清空,并且导出时排除了EMP表:

expdp schemas=SCOTT directory=DATA_PUMP_DIR dumpfile=SCOTT.dmp logfile=SCOTT.log content=DATA_ONLY exclude=TABLE:"='EMP'" compression=ALL

接下来我们运行上述脚本,它会对SCOTT用户进行覆盖导入。

EXECUTE EMP_IMPORT;

这时候再检查EMP表中的数据,可以看到它已经被覆盖掉了,只有导入时新加入的数据:

SELECT * FROM SCOTT.EMP;

EMPNO   ENAME      JOB              MGR HIREDATE         SAL COMM       DEPTNO
----- ---------- ---------      ---- ---------      ------      ------         ----------
  101    Tom             CEO                         2019-08-10            2000          0            20
  102    Jerry           CFO                         2019-08-11            1500          0            20

至此,“oracle覆盖导入dmp文件的2种方法”完整攻略讲解完毕,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:oracle覆盖导入dmp文件的2种方法 - Python技术站

(1)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • PyCharm 设置数据库,查询数据库语句方式

    下面我将给您详细讲解PyCharm设置数据库和查询数据库语句的方式,内容包含以下几个方面: PyCharm如何设置数据库 PyCharm如何使用查询数据库语句 示例说明 1. PyCharm如何设置数据库 在PyCharm中对于一个Python项目,可以使用多种数据库进行开发和测试。下面给出常见关系型数据库的配置示例。首先,在project的settings…

    database 2023年5月18日
    00
  • Cassandra 和 IBM Db2 的区别

    Cassandra和IBM Db2是两种不同类型的数据库管理系统,各自有着不同的优点和适用场景。 Cassandra vs. IBM Db2: 概述 Cassandra是一个开源的分布式NoSQL数据库,适用于海量数据的存储和处理,具有高可扩展性和高可靠性。它支持面向列的数据模型,可以提供快速的读写速度,并且可以在多个数据中心之间进行数据同步,以保证高可用性…

    database 2023年3月27日
    00
  • Couchbase 和 MongoDB的区别

    Couchbase和MongoDB都是目前市场上比较流行的NoSQL数据库,二者各有特点。接下来将从架构、功能、性能、可靠性等多个角度详细讲解Couchbase和MongoDB的区别,并提供实例说明。 1.架构 Couchbase和MongoDB的架构有所不同。Couchbase全面基于内存的架构为它提供了卓越的性能和可靠性。 Couchbase的架构采用分…

    database 2023年3月27日
    00
  • 在Centos 5.6下安装 redis

    先引用redis官方(http://redis.io/) 的介绍: Redis is an open source, advanced key-value store.It is often referred to as a data structure server since keys can contain strings, hashes, lists…

    Redis 2023年4月11日
    00
  • Centos 7.9安装MySQL8.0.32的详细教程

    下面是CentOS 7.9安装MySQL 8.0.32的详细教程: 确认系统版本和组件 确认系统版本 在终端输入以下命令,查看系统版本: cat /etc/redhat-release 注意:安装MySQL 8.0.32需要CentOS 7.6及以上版本。 确认是否安装了MariaDB 在终端输入以下命令,查看是否安装了MariaDB: rpm -qa | …

    database 2023年5月22日
    00
  • MySQL设置日志输出方式

    MySQL是一款流行的关系型数据库管理系统(RDBMS),为了保证数据安全性和系统维护,MySQL提供了多种日志输出方式,让管理员和开发者可以更好地监控数据库运行中的操作和错误。本文将详细介绍MySQL的日志输出方式,帮助你选择适合你的场景的日志输出方式。 错误日志(Error Log) 错误日志被视为MySQL最重要的日志之一,它会记录MySQL服务器启动…

    MySQL 2023年3月10日
    00
  • (一)redis源码阅读

    目录 1. srand()和rand()函数以及随机数种子 2. 守护进程及pid文件 3. 初始化服务器时的信号处理 4. 在程序coredump时记录堆栈信息StackTrace 5. 线程主循环 6. 时间戳 7. 全局时间缓存 8. run_with_period 宏 9. /proc/getpid()/stat 10. Redis Command …

    Redis 2023年4月12日
    00
  • MySQL优化SQL语句的技巧

    MySQL是一种非常流行的开源关系型数据库,而SQL语句是MySQL数据库中常用的操作命令。然而,在实际使用中,有时候SQL语句可能不够高效,在数据量较大的情况下,会导致查询缓慢甚至卡死。为了提高MySQL数据库查询性能及效率,可以采用以下技巧进行SQL语句优化。 1. 确认查询条件是否正确 在执行SQL查询之前,需要确认查询条件是否正确。如果查询条件与表中…

    database 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部