Oracle12c功能增強新特性之維護&升級&恢復&資料泵等

sqysl發表於2016-06-11

1.   內容提要

1)   表分割槽維護的增強。

2)   資料庫升級改善。

3)   跨網路還原/恢復資料檔案。

4)   資料泵的增強。

5)   實時ADDM。

6)   併發統計資訊收集。

2.   表分割槽維護的增強

在其他文章中,我說明了如何線上或離線把一個表分割槽或子分割槽移到一個不同的表空間。這部分,你將學習和表分割槽相關的其他方面的增強。

2.1.  增加多個新分割槽。

12c R1之前,在一個已分割槽表上只能一次增加一個分割槽。為了增加多個分割槽,你必須每增加一個新分割槽單獨執行一個ALTER TABLE ADD PARTITION語句。 12c支援用一個ALTER TABLE ADD PARTITION命令增加多個新分割槽。下例說明如何往一個已有分割槽表上增加多個新分割槽:

SQL> CREATE TABLE emp_part(eno number(8), ename varchar2(40), salnumber (6))

     PARTITION BY RANGE (sal)

     (PARTITION p1 VALUES LESS THAN(10000),

      PARTITION p2 VALUES LESS THAN(20000),

      PARTITION p3 VALUES LESS THAN(30000)

     );

下面讓我們增加幾個新分割槽:

SQL> ALTER TABLE emp_part ADD PARTITION

     PARTITION p4 VALUES LESS THAN(35000),

     PARTITION p5 VALUES LESS THAN(40000);

同樣,你能給列表和系統分割槽表上增加多個新分割槽,前提是這些分割槽表上不存在maxvalue分割槽。

2.2.  如果刪除和截斷多個分割槽或子分割槽

作為資料維護的一部分,典型的你可以刪除或截斷分割槽表上分割槽。12c R1前,只能一次一個的刪除或截斷分割槽表的分割槽。12c中,用一個ALTER TABLE table_name {DROP|TRUNCATE}PARTITIONS 命令可以刪除或截斷多個分割槽或子分割槽。下例說明如何刪除或截斷分割槽表上的多個分割槽:

SQL> ALTER TABLEemp_part DROP PARTITIONS p4,p5;

SQL> ALTER TABLEemp_part TRUNCATE PARTITONS p4,p5;

為了同時也維護索引,使用UPDATE INDEXES or UPDATE GLOBAL INDEXES 子句,

如下:

SQL> ALTERTABLE emp_part DROP PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;

SQL> ALTERTABLE emp_part TRUNCATE PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;

如果你刪除或截斷分割槽時不帶UPDATE GLOBAL INDEXES子句,你可以查詢USER_INDEXES或USER_IND_PARTITIONS字典檢視的ORPHANED_ENTRIES,以便發現索引是否包含陳舊索引項。

2.3.  將一個分割槽劈成多個新分割槽

12c中,新增強的SPLITPARTITION子句可以讓你用一個命令將一個特定的分割槽或子分割槽劈成多個新分割槽:

SQL> CREATE TABLE emp_part

    (eno number(8), enamevarchar2(40), sal number (6))

     PARTITION BY RANGE (sal)

    (PARTITION p1 VALUES LESS THAN(10000),

     PARTITION p2 VALUES LESS THAN(20000),

     PARTITION p_max VALUES LESSTHAN (MAXVALUE)

    );


SQL> ALTER TABLE emp_part SPLIT PARTITION p_max INTO

    (PARTITION p3 VALUES LESS THAN(25000),

     PARTITION p4 VALUES LESS THAN(30000), PARTITION p_max);

2.4.  將多個分割槽合併成一個分割槽

你可以用一個ALTER TBALE MERGE PARTITIONS語句將多個分割槽合併成一個分割槽:

SQL> CREATETABLE emp_part

    (eno number(8), ename varchar2(40), salnumber (6))

     PARTITION BY RANGE (sal)

    (PARTITION p1 VALUES LESS THAN (10000),

     PARTITION p2 VALUES LESS THAN (20000),

     PARTITION p3 VALUES LESS THAN (30000),

     PARTITION p4 VALUES LESS THAN (40000),

     PARTITION p5 VALUES LESS THAN (50000),

     PARTITION p_max (MAXVALUE)

    );


SQL> ALTERTABLE emp_part MERGE PARTITIONS p3,p4,p5 INTO PARTITION p_merge;

如果這些分割槽包含分割槽鍵值範圍,你也能用下例命令:

SQL> ALTERTABLE emp_part MERGE PARTITIONS p3 TO p5 INTO PARTITION p_merge;

3.   資料庫升級改善

無論何時新版本釋出,每個DBA必須立刻面對的就是升級。這部分,將會說明兩個新引進的升級到12c的改善。

3.1.  升級前指令碼

12c R1中,一個新的、得到極大改善的升級前資訊指令碼preupgrd.sql,替換了之前的utlu[121]s.sql指令碼。除了做升級前檢查驗證,該指令碼還能以fixup指令碼的方式解決升級過程前後產生的各種問題。產生的fixup指令碼能被執行來解決不同層面的問題。例如:升級前和升級後。當手工升級資料庫時,開始實際資料庫升級前,指令碼必須被手工執行。可是,當用DBUA工具升級資料庫時,會被作為升級過程的一部分,自動執行升級前指令碼,當出現任何錯誤時,都會提示你執行fixup指令碼。下例說明如何執行該指令碼:

SQL> @$ORACLE_12GHOME/rdbms/admin/preupgrd.sql

上面指令碼會產生一個日誌檔案和一個[pre/post]upgrade_fixup.sql 指令碼。所有這些檔案都在$ORACLE_BASE/cfgtoollogs 目錄下。在你繼續真正升級前,你該檢視日誌並執行日誌中推薦的操作和指令碼來解決存在的任何問題。

注意:確信你把preupgrd.sql和utluppkg.sql 指令碼都從12c的Oracle的主目錄 home/rdbms/admin複製到了目前的資料庫/rdbms/admin位置。

3.2.  並行更新功能

資料庫升級時間和資料庫配置的元件多少成正比,而不是和資料庫大小成正比。之前的版本,沒有直接或間接可用選項來並行快速的完成整個升級過程。

12c R1中的catctl.pl (並行升級功能)替換了之前的catupgrd.sql指令碼,12c R1中的指令碼有個選項用以並行升級,從而可以縮短完成整個升級過程所需的時間。下面的過程說明如何啟動並行(3個程式)升級功能,以upgrade模式啟動資料庫後再執行下列命令:

cd $ORACLE_12_HOME/perl/bin

$ ./perl catctl.pl –n 3 -catupgrd.sql

當資料庫被手工升級時,以上兩個步驟需要被顯式執行。然而,DBUA工具包含上面這兩個變化。

4.   透過網路還原/恢復資料檔案

12c R1中,另一個很大的增強是,你現在可以透過服務名(service name)在主備庫之間還原或恢復資料檔案,控制檔案,spfile,表空間或整個庫。在同步主備庫時,這是非常有用的。

當在主備庫之間發現一個很長的延遲時(gap),你不再需要複雜的前滾過程來填充主備庫間的延遲了。RMAN能透過網路得到增量備份並且在物理備庫上應用這些備份來恢復備庫。像已經說過的,你能用服務名直接把需要的資料檔案從備庫複製到主庫上,例如:主庫上的一個資料檔案或表空間丟了,或者沒有從備份集還原資料檔案等。

下列過程說明如何用新特點執行前滾來同步主備庫:

物理備庫端:

./rman target"username/password@standby_db_tns as SYSBACKUP"

RMAN> RECOVERDATABASE FROM SERVICE primary_db_tns USING COMPRESSED BACKUPSET;

上面的例子使用備庫上的連線串primary_db_tns連線主庫來執行一個增量備份,然後把這些增量備份傳輸到備庫,並應用這些檔案來同步備庫。可是,你需要確信已經在備庫端配置了 指向主庫的連線串primary_db_tns。

下例中,我將透過從備庫獲取並恢復主庫上丟失的資料檔案來說明一個場景:

主庫端:

./rman target"username/password@primary_db_tns as SYSBACKUP"

RMAN> RESTOREDATAFILE ‘+DG_DISKGROUP/DBANME/DATAFILE/filename’ FROM SERVICE standby_db_tns;

5.   資料泵增強

這部分主要介紹資料泵方面的增強。有很多有用的增強,例如:匯出時將試圖轉化為表,匯入時關閉日誌等。

5.1.  關閉日誌產生

資料泵匯入被新引進的TRANSFORM選項支援在匯入過程中不產生物件redo。當確定TRANSFORM選項的值為DISABLE_ARCHIVE_LOGGING時,整個匯入過程中上下文中物件將不產生redo。當匯入大表時,該特點會很大的減輕系統壓力和產生的redo,從而減速匯入程式。該特點可以應用到表和索引,下例說明了該特點:

$ ./impdp directory=dpump dumpfile=abcd.dmp logfile=abcd.logTRANSFORM=DISABLE_ARCHIVE_LOGGING:Y

5.2.  把檢視轉換為表

這是資料泵的另一個增強。利用VIEWS_AS_TABLES選項,你能把檢視匯出為一個表。下列例子描述瞭如何在匯出期間將檢視匯出為一個表:

$ ./impdp directory=dpump dumpfile=abcd.dmp logfile=abcd.logTRANSFORM=DISABLE_ARCHIVE_LOGGING:Y

6.   實時進行ADDM分析

透過像AWR,ASH和ADDM等工具去分析過去和目前資料庫健康狀態是每個DBA生活的一部分。雖然每個工具能在各個層面來測量資料庫的整體健康和效能,但當整個資料庫沒反應或”hang”時,每一個工具可以使用。

當你碰到資料庫沒反應或被hang住時,如果你已經配置了Oracle企業管理器12c雲控制,你就能診斷嚴重的效能問題。這將會給你提供一個資料庫中當前什麼在發生的整體描述,也許也會給你提供一個解決問題的補救措施。

下面一步步的說明如何利用Oracle企業管理器雲控制來分析資料庫狀態:

1) 在存取資料庫主頁上從Performance選單選擇EmergencyMonitoring選項,這將會顯示hang分析表中排在最前面的阻塞會話。

2) 從Performance選擇Real-TimeADDM選項來執行實時ADDM分析。

3) 收集效能資料後,點選Findings頁來獲取所有發現的互動總結。

7.   並行的收集多張表的統計資訊

在先前的Oracle版本中,無論什麼時候你執行DBMS_STATS過程來收集表,索引,模式或資料庫級別的統計資訊,Oracle都是一次收集一張表。如果表很大,那麼推薦增加並行度。12c R1中,你現在可以同時收集多張表、分割槽和子分割槽的統計資訊。 在開始使用該特點時,你必須在資料庫層面進行如下設定以啟用該特點:

SQL>ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='DEFAULT_MAIN';

SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=4;

SQL>EXEC DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT', 'ALL');

SQL>EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT');


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-2118671/,如需轉載,請註明出處,否則將追究法律責任。

相關文章