1. 程式人生 > >Oracle12c功能增強新特性之維護&升級&恢復&數據泵等

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

特點 back director spl 診斷 art 同步 value transform

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"[email protected]_db_tns as SYSBACKUP"

RMAN> RECOVERDATABASE FROM SERVICE primary_db_tns USING COMPRESSED BACKUPSET;

上面的樣例使用備庫上的連接串primary_db_tns連接主庫來運行一個增量備份,然後把這些增量備份傳輸到備庫,並應用這些文件來同步備庫。

但是。你須要確信已經在備庫端配置了 指向主庫的連接串primary_db_tns。

下例中,我將通過從備庫獲取並恢復主庫上丟失的數據文件來說明一個場景:

主庫端:

./rman target"[email protected]_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‘);

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