隨著數據庫版本的升級及業務測試的增加,數據庫或者數據遷移也成了數據庫管理者們經常的工作之一。那么對于要求嚴格的數據,針對
一、概述
隨著數據庫版本的升級及業務測試的增加,數據庫或者數據遷移也成了數據庫管理者們經常的工作之一。那么對于要求嚴格的數據,針對大數據表,在你導出時如果有人做了操作,這個操作是否也會被導出呢?由于個人能力有限,想要深究邏輯備份的話,估計還需要一些時日,暫時只做了一個小實驗測試,如大家有其他方法、更全面說明,歡迎拍磚。
二、操作過程
以下實驗操作流程為每執行一次邏輯導出時都執行一次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 無法解析指定的連接標識符
本文永久更新鏈接地址:
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com