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 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;
/
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
此時導入的只是表結構、觸發器、過程、函數等這些對象,
最后驗證下是否覆蓋上一步已導入的表數據?
最終結論是沒有覆蓋已導入的表數據,之前未導入的過程、函數、觸發器也都成功導入。

 

1.導出scott用戶的表和數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM