EXP匯出時DML操作對其匯出資料是否有影響

來源:互聯網
上載者:User

EXP匯出時DML操作對其匯出資料是否有影響

一、概述

隨著資料庫版本的升級及業務測試的增加,資料庫或者資料移轉也成了資料庫管理者們經常的工作之一。那麼對於要求嚴格的資料,針對大資料表,在你匯出時如果有人做了操作,這個操作是否也會被匯出呢?由於個人能力有限,想要深究邏輯備份的話,估計還需要一些時日,暫時只做了一個小實驗測試,如大家有其他方法、更全面說明,歡迎拍磚。

二、操作過程

以下實驗操作流程為每執行一次邏輯匯出時都執行一次DML操作。動作陳述式如下(資料庫版本10.2.0.5):

使用者為firsoul,操作的表有age、big_table、test,為各表的初始資料


SQL> show user

USER is "FIRSOUL"

SQL> select * from tab;

SQL> select table_name,NUM_ROWS from user_tables;

 

TABLE_NAME                      NUM_ROWS

------------------------------ ----------

EMP                                    14

DEPT                                    4

TEST                                    1

AGE                                    1

BIG_TABLE                        3000000
 

第一次操作:


exp firsoul/firsoul tables=BIG_TABLE CONSISTENT=Y file=exp_table.dmp log=exp_table.log
 insert into age values(22,'mingli');

delete from big_table where id=7;

insert into test values(2,'shandong');

commit;
 

第二次操作:

 


exp firsoul/firsoul  file=exp_user.dmp log=exp_user.log consistent=y grants=y
 insert into age values(24,'mengmeng');

delete from big_table where id=14;

insert into test values(3,'china');

commit;
 

第三次操作:


exp firsoul/firsoul tables=BIG_TABLE file=exp_table2.dmp log=exp_table2.log
 insert into age values(24,'xiaochi');

delete from big_table where id=21;

insert into test values(4,'dezhou');

commit;
 

第四次操作:


exp firsoul/firsoul  file=exp_user2.dmp log=exp_user2.log grants=y
 insert into age values(25,'fengyin');

delete from big_table where id=28;

insert into test values(5,'jinan');

commit;
 

第五次操作:


expdp firsoul/firsoul directory=dir_dmp dumpfile=expdp_table.dmp tables=BIG_TABLE logfile=expdp_table.log
 insert into age values(30,'shubin');

delete from big_table where id=35;

insert into test values(6,'shizhong');

commit;
 

第六次操作:


expdp firsoul/firsoul directory=dir_dmp dumpfile=expdp_user.dmp SCHEMAS=firsoul logfile=expdp_user.log
 insert into age values(32,'liupan');

delete from big_table where id=42;

insert into test values(7,'tianqiao');

commit;
 

得出結果如下所示(“-”為少幾行,“+”為多幾行): 

執行DML次數

age

big_table

test

備忘

1

 

0

 

匯出表(CONSISTENT=y)

2

+2

-2

+2

匯出使用者(CONSISTENT=y)

3

 

-2

 

匯出表(CONSISTENT=n)

4

+3

-3

+4

匯出使用者(CONSISTENT=n)

5

 

-5

 

expdp 匯出表

6

+6

-6

+6

expdp 匯出使用者

通過以上資料,我們可以看出

1、exp匯出,參數CONSISTENT=y,單獨匯出表big_table,資料無變化,匯出使用者時,資料有變化。

2、exp匯出,參數CONSISTENT=n,單獨匯出表big_table,資料無變化,匯出使用者資料時,表age、big_table沒變化,表test多一行,exp匯出按照表的首字母排序,在匯出時,我們執行DML語句(第四次操作)時,age已匯出,big_table正在匯出,而test還為等待匯出。由此看出,exp匯出,當表在執行匯出時再做DML操作對匯出資料無影響。

3、expdp匯出時,資料都有變化。expdp匯出的表是按照資料從大到小排序

三、總結

這個測試其實很無聊的,而且還有點繞,總結呢,就一點,exp任務開始,當該表已執行邏輯匯出操作(執行中或已匯出完成),做的任何DML操作對匯出資料無影響;當匯出任務還未涉及到該表時,所做DML操作影響該表匯出資料。一句話,DML操作時間(先後)影響匯出表資料。說來,還是對於資料庫原理不太明白,希望可以認真看看吧,希望。以上只是個人昏昏欲睡狀態下所得出結論,歡迎大家積極拍磚。水平有限,不足之處還望見諒。

Oracle EXP匯出報錯EXP-00091分析解決

探索Oracle之 EXP/IMP過程中的字元集問題

Oracle EXP imp備份、恢複資料表空間資料步驟

Oracle 建立自動執行的EXP任務

Oracle 11g 匯出表報EXP-00011:table不存在

EXP/imp匯出匯入資料時報錯ORA-12154 無法解析指定的串連標識符

相關文章

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.