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日

相关文章

  • centos 7.0 编译 安装mysql 5.6.22 过程 已完成~ 成功~ 撒花~

      mysql 下载目录/usr/local/srcmysql 解压目录 /usr/local/bin/mysql GitHub https://github.com/mysql/mysql-server   mysql官网的安装说明http://dev.mysql.com/doc/refman/5.6/en/source-installation.html…

    MySQL 2023年4月13日
    00
  • 最新MySQL高级SQL语句大全

    首先我们需要明确,“最新MySQL高级SQL语句大全”是一本讲解MySQL高级SQL语句的书籍或者指南,其目的是帮助开发人员在使用MySQL时更加高效地操作数据库。本篇攻略将介绍如何学习MySQL高级SQL语句,以及如何使用该书籍进行系统的学习。下面是我为大家准备的攻略: 一、成为一个合格的MySQL使用者 在开始学习MySQL高级SQL语句之前,我们需要成…

    database 2023年5月21日
    00
  • 新装MySql后登录出现root帐号提示mysql ERROR 1045 (28000): Access denied for use的解决办法

    下面是关于“新装MySql后登录出现root帐号提示mysql ERROR 1045 (28000): Access denied for user”的解决办法的攻略。 背景 在新安装MySQL后,尝试使用root账户登录时,有可能会出现以下错误提示: ERROR 1045 (28000): Access denied for user ‘root’@’lo…

    database 2023年5月18日
    00
  • 如何使用Python实现数据库的备份和还原?

    当需要备份和还原数据库时,Python提供了一些库和工具来完成这个任务。在本攻略中,我们将使用Python实现数据库的备份和还原,使用的工具是mysqldump和mysql命令。以下是使用Python实数据库备份和还原的完整攻略。 步骤1:安装必要的库 在使用Python实现数据库备份和还原之前,需要安装mysql-connector-python库。可以使…

    python 2023年5月12日
    00
  • Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份

    以下是详细讲解“Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份”的完整攻略: 步骤一:安装必要软件 为了自动备份Oracle数据库,我们需要安装以下两个软件:- Oracle Instant Client: 可以在不安装完整版Oracle数据库的情况下,连接Oracle数据库服务;- Oracle SQLcl: 是一款命令行工具,可以在…

    database 2023年5月22日
    00
  • ubuntu16.04.1下 mysql安装和卸载图文教程

    Ubuntu16.04.1下 MySQL安装和卸载图文教程 MySQL是一种流行的关系型数据库管理系统,可以在各种操作系统上运行。该教程将详细介绍在Ubuntu16.04.1上安装和卸载MySQL的步骤。 安装MySQL 打开终端,更新本地软件包列表,使用以下命令: sudo apt update 执行以下命令安装MySQL服务器: sudo apt ins…

    database 2023年5月22日
    00
  • 一文搞懂SQL注入攻击

    一文搞懂SQL注入攻击 什么是SQL注入攻击? SQL(Structured Query Language)是用于管理关系数据库管理系统的语言。SQL注入攻击是指黑客通过构造恶意的SQL语句,使得应用程序在对用户输入数据的处理过程中,将不可信的数据作为SQL查询语言的一部分,从而使应用程序的数据库受到攻击的一种攻击方法。 攻击者在不需要任何身份验证的情况下即…

    database 2023年5月21日
    00
  • Linux 安装二进制MySQL 及 破解MySQL密码的方法

    安装二进制MySQL 及 破解MySQL密码的方法 下载MySQL二进制安装包 首先,需要从MySQL官方网站下载MySQL二进制安装包,下载地址为: https://dev.mysql.com/downloads/mysql/ 选择所需的操作系统和版本后进行下载。 安装MySQL 在Linux系统上,可以使用以下命令进行MySQL的安装: tar xvf …

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