Oracle資料庫驗證IMP匯入中繼資料是否會覆蓋曆史表資料

來源:互聯網
上載者:User

Oracle資料庫驗證IMP匯入中繼資料是否會覆蓋曆史表資料

情境:imp匯入資料時,最終觸發器報錯退出,並未匯入預存程序、觸發器、函數。
現在exp單獨匯出中繼資料,然後imp匯入中繼資料,驗證是否會影響已匯入的表資料。

測試環境:CentOS 6.7 + Oracle 11.2.0.4
構造實驗環境:

  • 1.匯出scott使用者的表和資料
  • 2.scott使用者建立過程、函數、觸發器
  • 3.匯出scott中繼資料
  • 4.刪除scott使用者
  • 5.匯入scott表和資料
  • 6.匯入Scott中繼資料
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 isbegin  insert into dept values (99, 'xx_dept_name', 'Beijing');end;/

scott使用者建立函數:

create or replace function sp_fun1(spName varchar2) return number isyearSal number(7, 2);beginselect 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;/
3.匯出scott中繼資料

匯出scott中繼資料:

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

此時匯出的中繼資料,是有觸發器、過程、函數這些對象的。

4.刪除scott使用者

確認沒有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.
5.匯入scott表和資料

先建立使用者並賦權:

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

此時匯入的只是表和表資料,沒有觸發器、過程、函數這些對象。

6.匯入Scott中繼資料

 

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

此時匯入的只是表結構、觸發器、過程、函數等這些對象,
最後驗證下是否覆蓋上一步已匯入的表資料?
最終結論是沒有覆蓋已匯入的表資料,之前未匯入的過程、函數、觸發器也都成功匯入。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.