Oracle新特性之四——維護、升級、恢複及資料泵等,oracle新特性

來源:互聯網
上載者:User

Oracle新特性之四——維護、升級、恢複及資料泵等,oracle新特性

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.sqlutluppkg.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');

 

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

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.