【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/

● 本系列題目來源於作者的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

● 題目解答若有不當之處,還望各位朋友批評指正,共同進步