Oracle 12c 新特性(二)

jelephant發表於2015-12-05

第二部分內容包括:

  1. 對錶分割槽維護的增強

  2. 資料庫升級的改進

  3. 透過網路恢復資料檔案

  4. 對Data Pump的增強

  5. 實時自動資料診斷監視器(ADDM)

  6. 併發統計資訊收集

  1. 對錶分割槽維護的增強

  在第一部分中,我解釋瞭如何線上或是離線狀態下遷移一個表分割槽或子分割槽到另一個不同的表空間。在本文中,主要介紹表分割槽其他方面的改進。

  新增多個新分割槽

  在Oracle 12c R1之前,一次只可能新增一個新分割槽到一個已存在的分割槽表。要新增一個以上的新分割槽,需要對每個新分割槽都單獨執行一次ALTER TABLE ADD PARTITION語句。而Oracle 12c只需要使用一條單獨的ALTER TABLE ADD PARTITION 命令就可以新增多個新分割槽,這增加了資料庫靈活性。以下示例說明了如何新增多個新分割槽到已存在的分割槽表:

SQL> CREATE TABLE emp_part
    (eno number(8), ename varchar2(40), sal number (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分割槽不存在,你就可以新增多個新分割槽到一個列表和系統分割槽表。

  如何刪除和截斷多個分割槽/子分割槽

  作為資料維護的一部分,DBA通常會在一個分割槽表上進行刪除或截斷分割槽的維護任務。在12c R1之前,對於一個已存在的分割槽表一次只可能刪除或截斷一個分割槽。而對於Oracle 12c, 可以用單條ALTER TABLE table_name {DROP|TRUNCATE} PARTITIONS 命令來撤銷或合併多個分割槽和子分割槽。

  下例說明了如何在一個已存在分割槽表上刪除或截斷多個分割槽:

  SQL> ALTER TABLE emp_part DROP PARTITIONS p4,p5;
  SQL> ALTER TABLE emp_part TRUNCATE PARTITONS p4,p5;

  要保持索引更新,使用UPDATE INDEXESUPDATE GLOBAL INDEXES語句,如下所示:

  SQL> ALTER TABLE emp_part DROP PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;
  SQL> ALTER TABLE emp_part TRUNCATE PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;

  如果你在不使用UPDATE GLOBAL INDEXES 語句的情況下刪除或截斷一個分割槽,你可以在USER_INDEXESUSER_IND_PARTITIONS 字典檢視下查詢ORPHANED_ENTRIES 欄位以找出是否有索引包含任何的過期條目。

  將單個分割槽分割為多個新分割槽

  在12c中新增強的SPLIT PARTITION 語句可以讓你只使用一個單獨命令將一個特定分割槽或子分割槽分割為多個新分割槽。下例說明了如何將一個分割槽分割為多個新分割槽:

 SQL> CREATE TABLE emp_part
  (eno number(8), ename varchar2(40), sal number (6))
  PARTITION BY RANGE (sal)
  (PARTITION p1 VALUES LESS THAN (10000),
  PARTITION p2 VALUES LESS THAN (20000),
  PARTITION p_max (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);

  將多個分割槽合併為一個分割槽

  你可以使用單條ALTER TBALE MERGE PARTITIONS 語句將多個分割槽合併為一個單獨分割槽:

  SQL> CREATE TABLE emp_part
  (eno number(8), ename varchar2(40), sal number (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> ALTER TABLE emp_part MERGE PARTITIONS p3,p4,p5 INTO PARTITION p_merge;

  如果分割槽範圍形成序列,你可以使用如下示例:

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

  2. 資料庫升級改進

  每當一個新的Oracle版本釋出,DBA所要面臨的挑戰就是升級過程。該部分我將介紹12c中引入的針對升級的兩個改進。

  預升級指令碼

  在12c R1中,原有的utlu[121]s.sql 指令碼由一個大為改善的預升級資訊指令碼preupgrd.sql所取代。除了預升級檢查驗證,此指令碼還能以修復指令碼的形式解決在升級過程前後出現的各種問題。

   可以對產生的修復指令碼加以執行來解決不同級別的問題,例如,預升級和升級後的問題。當手動升級資料庫時,指令碼必須在實際升級過程初始化之前加以手動執 行。然而,當使用DBUA工具來進行資料庫升級時,它會將預升級指令碼作為升級過程的一部分加以自動執行,而且會提示你去執行修復指令碼以防止報錯。

  如何執行指令碼:

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

  以上指令碼會產生一份日誌檔案以及一個[pre/post]upgrade_fixup.sql 指令碼。所有這些檔案都位於$ORACLE_BASE/cfgtoollogs 目錄下。在你繼續真正的升級過程之前,你應該瀏覽日誌檔案中所提到的建議並執行指令碼以修復問題。

  注意:你要確保將preupgrd.sqlutluppkg.sql 指令碼從12c Oracle的目錄home/rdbms/admin directory複製至當前的Oracle的database/rdbms/admin路徑。

  並行升級功能

  資料庫升級時間的長短取決於資料庫上所配置的元件數量,而不是資料庫的大小。在之前的版本中,我們是無法並行執行升級程式,從而快速完成整個升級過程的。

  在12c R1中,原有的catupgrd.sql 指令碼由catctl.pl 指令碼(並行升級功能)替代,現在我們可以採用並行模式執行升級程式了。

  以下流程說明了如何初始化並行升級功能(3個過程);你需要在升級模式下在啟動資料庫後執行這一指令碼:

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

  以上兩個步驟需要在手動升級資料庫時執行。而DBUA也繼承了這兩個新變化。

  3. 透過網路恢復資料檔案

  在12c R1中另一個重要的增強是,你現在可以在主資料庫和備用資料庫之間用一個服務名重新獲得或恢復資料檔案、控制檔案、引數檔案、表空間或整個資料庫。這對於同步主資料庫和備用資料庫極為有用。

   當主資料庫和備用資料庫之間存在相當大的差異時,你不再需要複雜的前滾流程來填補它們之間的差異。RMAN能夠透過網路執行備用恢復以進行增量備份,並 且可以將它們應用到物理備用資料庫。你可以用服務名直接將所需資料檔案從備用點複製至主站,這是為了防止主資料庫上資料檔案、表空間的丟失,或是沒有真正 從備份集恢復資料檔案。

  以下流程演示瞭如何用此新功能執行一個前滾來對備用資料庫和主資料庫進行同步:

  在物理備用資料庫上:

  ./rman target "username/password@standby_db_tns as SYSBACKUP"
  RMAN> RECOVER DATABASE FROM SERVICE primary_db_tns USING COMPRESSED BACKUPSET;

  以上示例使用備用資料庫上定義的primary_db_tns 連線字串連線到主資料庫,然後執行了一個增量備份,再將這些增量備份傳輸至備用目的地,接著將應用這些檔案到備用資料庫來進行同步。然而,需要確保已經對primary_db_tns 進行了配置,即在備份資料庫端將其指向主資料庫。

  在以下示例中,我將演示一個場景透過從備用資料庫獲取資料檔案來恢復主資料庫上丟失的資料檔案:

  在主資料庫上:

  ./rman target "username/password@primary_db_tns as SYSBACKUP"
  RMAN> RESTORE DATAFILE ‘+DG_DISKGROUP/DBANME/DATAFILE/filename’ FROM SERVICE standby_db_tns;

  4. 對Data Pump的增強

  Data Pump版本有了不少有用的改進,例如在匯出時將檢視轉換為表,以及在匯入時關閉日誌記錄等。

  關閉redo日誌的生成

  Data Pump中引入了新的TRANSFORM選項,這對於物件在匯入期間提供了關閉重做生成的靈活性。當為TRANSFORM選項指定了DISABLE_ARCHIVE_LOGGING 值,那麼在整個匯入期間,重做生成就會處於關閉狀態。這一功能在匯入大型表時緩解了壓力,並且減少了過度的redo產生,從而加快了匯入。這一屬性還可應用到表以及索引。以下示例演示了這一功能:

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

  將檢視轉換為表

  這是Data Pump中另外一個改進。有了VIEWS_AS_TABLES 選項,你就可以將檢視資料載入表中。以下示例演示瞭如何在匯出過程中將檢視資料載入到表中:

$ ./expdp directory=dpump dumpfile=abcd.dmp logfile=abcd.log views_as_tables=my_view:my_table

  5. 實時自動資料診斷監視器 (ADDM) 分析

  透過使用諸如AWR、ASH以及ADDM之類的自動診斷工具來分析資料庫的健康狀況,是每個DBA日程工作的一部分。儘管每種工具都可以在多個層面衡量資料庫的整體健康狀況和效能,但沒有哪個工具可以在資料庫反應遲鈍或是完全掛起的時候使用。

  當資料庫反應遲鈍或是掛起狀態時,而且你已經配置了Oracle 企業管理器 12c的雲控制,你就可以對嚴重的效能問題進行診斷。這對於你瞭解當前資料庫發生了什麼狀況有很大幫助,而且還能夠對此問題給出解決方案。

  以下步驟演示瞭如何在Oracle 企業管理器 12c上分析資料庫狀態:

  • 在訪問資料庫訪問主頁面從Performance選單選擇Emergency Monitoring 選項。這會顯示掛起分析表中排名靠前的阻止會話。
  • Performance選單選擇Real-Time ADDM 選項來執行實時ADDM分析。
  • 在收集了效能資料後,點選Findings標籤以獲得所有結果的互動總結。

  6. 同時在多個表上收集統計資料

   在之前的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/29337971/viewspace-1853941/,如需轉載,請註明出處,否則將追究法律責任。

相關文章