zoukankan      html  css  js  c++  java
  • Oracle数据库验证IMP导入元数据是否会覆盖历史表数据

    场景:imp导入数据时,最终触发器报错退出,并未导入存储过程、触发器、函数。
    现在exp单独导出元数据,然后imp导入元数据,验证是否会影响已导入的表数据。

    测试环境:CentOS 6.7 + Oracle 11.2.0.4
    构造实验环境:

    1.导出scott用户的表和数据

    导出scott用户的表和数据,此时并没有触发器、过程、函数这些对象: ``` exp scott/tiger OWNER=scott BUFFER=10240000 STATISTICS=none RESUMABLE=y FILE=scott_exp.dmp LOG=scott_exp.log ```

    2.scott用户创建过程、函数、触发器

    scott用户创建过程: ``` create or replace procedure pro_insert_dept is begin insert into dept values (99, 'xx_dept_name', 'Beijing'); end; / ``` scott用户创建函数: ``` create or replace function sp_fun1(spName varchar2) return number is yearSal number(7, 2); begin select sal * 12 + nvl(comm, 0) * 12 into yearSal from emp where ename = spName; return yearSal; end; / ``` scott用户触发器: ``` --创建序列 CREATE SEQUENCE seq_del_id;

    --创建表
    CREATE TABLE emp_del_info(
    autoid number primary key,
    deptno number,
    empno number,
    ename varchar2(20),
    del_rq date);

    --创建触发器
    CREATE OR REPLACE TRIGGER trg_del_emp_info
    BEFORE DELETE
    ON emp
    FOR EACH ROW
    DECLARE
    -- local variables here
    BEGIN
    INSERT INTO emp_del_info(autoid,deptno,empno,ename,del_rq)
    VALUES(seq_del_id.NEXTVAL,:OLD.deptno,:OLD.empno,:OLD.ename,sysdate);
    END;
    /

    <h1 id="3">3.导出scott元数据</h1>
    导出scott元数据:
    

    exp scott/tiger OWNER=scott ROWS=n BUFFER=10240000 STATISTICS=none RESUMABLE=y FILE=scott_metadata_exp.dmp LOG=scott_metadata_exp.log

    此时导出的元数据,是有触发器、过程、函数这些对象的。
    <h1 id="4">4.删除scott用户</h1>确认没有scott用户登录的session:
    

    select 'alter system kill session '''||sid||','||serial#||''''||';' from v$session where username='SCOTT';

    如果上述查询有结果,那么直接把查出的结果复制执行即可kill掉scott用户登录的session。
    
    删除scott用户:
    

    SQL> drop user scott cascade;

    User dropped.

    <h1 id="5">5.导入scott表和数据</h1>
    先创建用户并赋权:
    

    SQL> create user scott identified by tiger default tablespace users;

    User created.

    SQL> grant connect, resource to scott;

    Grant succeeded.

    导入表和数据:
    

    imp scott/tiger BUFFER=10240000 RESUMABLE=y FILE=scott_exp.dmp LOG=imp_scott_exp.log IGNORE=y FULL=y

    此时导入的只是表和表数据,没有触发器、过程、函数这些对象。
    <h1 id="6">6.导入Scott元数据</h1>
    

    imp scott/tiger BUFFER=10240000 RESUMABLE=y FILE=scott_metadata_exp.dmp LOG=imp_scott_metadata_exp.log IGNORE=y FULL=y

    此时导入的只是表结构、触发器、过程、函数等这些对象,
    最后验证下是否覆盖上一步已导入的表数据?
    最终结论是没有覆盖已导入的表数据,之前未导入的过程、函数、触发器也都成功导入。
  • 相关阅读:
    手把手教会你如何通过C#创建Windows Service
    推荐几款软件界面模型设计工具
    visual studio 2010小技巧
    C# 枚举在属性中运用
    C# Stream 和 byte[] 之间的转换
    推荐一款DataGridView的打印解决方案
    VB提高专辑VB编写自定义类(下)
    vb 怎么把长整型转字符串
    Android NAND: nand_dev_load_disk_state, restore failed: size required (3546398242485400641) exceeds device limit (6920
    VB中各种类型的转换
  • 原文地址:https://www.cnblogs.com/jyzhao/p/5595208.html
Copyright © 2011-2022 走看看