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

yizhihongxing

下面我来详细讲解“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日

相关文章

  • 如何使用Python实现数据库中数据的排序?

    以下是使用Python实现数据库中数据排序的完整攻略。 数据库中数据排序简介 在数据库中,数据排序是指按照指定的字段对数据进行排序。在Python中,可以使用pymysql库连接到MySQL数据库,并使用ORDER BY子句实现数据排序。 步骤1:连接到数据库 在Python中,可以使用pymysql库连接到MySQL数据库。以下是连接到MySQL数据库的基…

    python 2023年5月12日
    00
  • 如何使用Python在MySQL中使用存储引擎?

    在MySQL中,存储引擎是一种用于管理表的机制。在Python中,可以使用MySQL连接来执行存储引擎查询和设置。以下是在Python中使用存储引擎的完整攻略,包括存储引擎的基本语法、使用存储引擎的示例以及如何在Python中使用存储引擎。 存储引擎的基本语法 在MySQL中,可以使用CREATE TABLE语来创建表,并使用ENGINE关键字指定的存储引擎…

    python 2023年5月12日
    00
  • Linux下Mysql定时任务备份数据的实现方法

    下面就为大家介绍如何在Linux下使用定时任务备份MySQL数据库。 简介 MySQL数据库是我们常用的关系型数据库之一,而为了保证数据的完整性及安全性,我们需要进行数据的备份。而通过在Linux系统下使用定时任务进行备份则可以帮助我们高效、准确地完成备份任务。 实现步骤 以下是实现步骤: 1.安装MySQL客户端 我们首先需要安装MySQL客户端,用来连接…

    database 2023年5月22日
    00
  • 浅谈MySQL的B树索引与索引优化小结

    我们来详细讲解一下“浅谈MySQL的B树索引与索引优化小结”的攻略。 浅谈MySQL的B树索引与索引优化小结 什么是B树索引? B树是一种多路平衡搜索树,常被用来实现关系型数据库中的索引。B树不同于二叉树,一个B树节点可以包含许多数据项以及指向其他节点的指针,被称为“分支节点”。B树一般用于磁盘存储系统中,可以有效减少磁盘I/O读取次数,提高数据的访问速度。…

    database 2023年5月19日
    00
  • 三天吃透Redis八股文

    Redis连环40问,绝对够全! Redis是什么? Redis(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis 的数据是存在内存中的,所以读写速度非常快,被广泛应用于缓存方向。Redis可以将数据写入磁盘中,保证了数据的安全不丢失,而且Redis的操作是原子性的。…

    Redis 2023年4月13日
    00
  • JavaScript中的Promise使用详解

    JavaScript中的Promise使用详解 什么是Promise? Promise是一种用来处理异步请求的解决方案,它可以使得异步代码更加易于阅读和编写。Promise可以将异步请求进行封装,让代码具有更好的可读性和可维护性。 如何使用Promise? 在JavaScript中,Promise是构造函数,通过new来创建一个Promise对象。 cons…

    database 2023年5月22日
    00
  • python连接sql server数据库的方法实战

    下面是python连接sql server数据库的方法实战的完整攻略: 1. 安装pymssql库 pymssql是一个与sql server数据库协作的Python模块,通过该模块,我们可以轻松地在Python中连接sql server数据库并操作其中的数据。你可以使用以下命令在控制台中安装该模块: pip install pymssql 2. 连接sql…

    database 2023年5月18日
    00
  • Redis的简介、启动、停止

      NoSql菲关系型数据库(not-only sql) 应用场景: 1、high performance:对数据库高并发读写 2、huge storage:对海量数据的高效率存储和访问 3、high scalability && high availability:对数据库的高可扩展性和高可用性   Redis——C语言开发——键值存储数据…

    Redis 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部