【DB筆試面試433】在Oracle 12c中,在數據泵(expdp)方面有哪些增強的新特性?
- 2019 年 10 月 11 日
- 筆記
在Oracle 12c中,在數據泵(expdp)方面有哪些增強的新特性?
答案
Oracle 12c的數據泵新增了很多的新特性,分別如下所示:
(1)在Data Pump中引入了新的TRANSFORM的選項DISABLE_ARCHIVE_LOGGING,這對於表和索引在導入期間提供了關閉Redo日誌生成的靈活性。當為TRANSFORM選項指定了DISABLE_ARCHIVE_LOGGING:Y值,那麼在整個導入期間,表和索引的Redo日誌就會處於關閉狀態,僅生成少量的日誌。這一功能在導入大型表時緩解了壓力,並且減少了過度的Redo產生,從而加快了導入。這一屬性對錶和索引都適用。不管是在非歸檔還是歸檔情況下使用DISABLE_ARCHIVE_LOGGING都會減小導入時間,減少歸檔量。但是需要注意的是,如果資料庫處於FORCE LOGGING模式,那麼DISABLE_ARCHIVE_LOGGING參數會無效。
以下SQL演示了這一功能:
l impdp directory=dpump dumpfile=abcd.dmp TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y logfile=abcd.log
l impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp SCHEMAS=hr TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y –表和索引都關閉日誌
l impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp SCHEMAS=hr TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y:TABLE –只有表關閉日誌
l impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp SCHEMAS=hr TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y TRANSFORM=DISABLE_ARCHIVE_LOGGING:N:INDEX
「TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y」表示表和索引都關閉日誌。
有關該新特性需要注意以下幾點:
① 在導入完成後,表和索引的狀態(包括LOGGING狀態和索引是否有效的狀態)都會恢復到導入之前的狀態。
② 在使用該參數導入數據文件後,如果相應的datafile被restored和recovered,那麼接下來的涉及到目標表的查詢會報ORA-01578和ORA-26040的壞塊錯誤。例如:
例如:
SQL> select * from test_nologging;
ORA-01578: ORACLE data block corrupted (file #11, block # 84)
ORA-01110: data file 4: '/oradata/users.dbf'
ORA-26040: Data block was loaded using theNOLOGGING option
因此,在使用該參數導入數據文件後,需要立馬對相關的數據文件做RMAN備份。
(2)使用VIEWS_AS_TABLES選項可以讓數據泵將視圖轉換為表然後導出。需要注意的是,導出到dmp文件後,視圖的定義已經自動轉換為表的定義了。在執行導入操作後,會以表的形式存在。
以下SQL演示了這一功能:
l expdp system/lhr DIRECTORY=data_pump_dir DUMPFILE=expdp_vw.dmp LOGFILE=expdp_vw.log VIEWS_AS_TABLES=lhr.my_view
l impdp system/lhr DIRECTORY=data_pump_dir DUMPFILE=expdp_vw.dmp LOGFILE=impdp_vw.log remap_schema=lhr:lhr01
l impdp lhr/lhr DIRECTORY=data_pump_dir DUMPFILE=expdp_vw.dmp LOGFILE=impdp_vw.log remap_schema=lhr:lhr1 VIEWS_AS_TABLES=lhr.my_view
l impdp lhr/lhr DIRECTORY=data_pump_dir DUMPFILE=expdp_vw.dmp LOGFILE=impdp_vw.log remap_schema=lhr:lhr1 TABLES=lhr.my_view
表數據準備:
create table lhr.my_tab1 (nr number, txt varchar2(10));
insert into lhr.my_tab1 values (1,'Line 1');
insert into lhr.my_tab1 values (2,'Line 2');
create table lhr.my_tab2 (nr number, col2 number, col3 varchar2(10));
insert into lhr.my_tab2 values (1,1,'c3_1');
insert into lhr.my_tab2 values (2,2,'c3_2');
commit;
create view lhr.my_view (nr, txt, col3) as
select t1.nr, t1.txt, t2.col3
from lhr.my_tab1 t1, lhr.my_tab2 t2
where t1.nr=t2.nr;
(3)LOGTIME參數決定時間戳是否將包括在expdp和impdp功能的輸出資訊中。LOGTIME的可用值如下所示:
① NONE:默認值,指示輸出中不包括時間戳,輸出和之前的版本相似。
② STATUS:時間戳包括在控制台輸出中,但不會在日誌文件中出現。
③ LOGFILE:時間戳出現在日誌文件中,但不會輸出到控制台。
④ ALL:時間戳出現在日誌文件和控制台輸出中。
關於Oracle 12c的數據泵還有很多的新特性,例如壓縮、加密、審計等,這裡不再詳細介紹,讀者可參考作者的部落格或閱讀相關的官方文檔進行學習。
& 說明:
有關12c數據泵新特性的更多內容可以參考我的BLOG:http://blog.itpub.net/26736162/viewspace-2130830/
有關ORA-01578和ORA-26040–NOLOGGING操作引起的壞塊的更多內容可以參考我的BLOG:http://blog.itpub.net/26736162/viewspace-2152783/
About Me:小麥苗
● 本文作者:小麥苗,只專註於資料庫的技術,更注重技術的運用
● 作者部落格地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列題目來源於作者的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解
● 版權所有,歡迎分享本文,轉載請保留出處
● 題目解答若有不當之處,還望各位朋友批評指正,共同進步