開發者必讀:Oracle 12c新特性再總結

raysuen發表於2017-09-19

  【IT168 技術】本文中,作者將對12c叢集,ASM以及RAC資料庫新增和改進方面廣泛介紹,同時列舉一些對開發者而言非常有用的新特性。

  文章導讀:

  1.ASM中的增強

  2.網格基礎架構的增強

  3.Oracle RAC的增強

  4.如何在子表包含資料的情況下截斷一個主表

  5.限制Top-N查詢結果的記錄

  6.SQL*Plus的各種增強

  7.會話級序列

  8.WITH語句的改善

  9.擴充套件資料型別

  1. 自動儲存管理(ASM)中的增強

  Flex ASM

  在一個典型的網格基礎架構安裝環境中,每個節點都執行自身的ASM例項,並將其作為執行於此節點上資料庫的儲存容器。但這種設定會存在相應的單點故障危險。例如,如果此節點上的ASM例項發生故障,則執行於此節點上的所有資料庫和例項都會受到影響。為了避免ASM例項的單點故障,Oracle 12c提供了一個名為Flex ASM的功能。Flex ASM是一個不同的概念和架構,只有很少數量的ASM例項需要執行在叢集中的一些伺服器上。當某節點上的一個ASM例項發生故障,Oracle叢集就會在另一個不同的節點上自動啟動替代ASM例項以加強可用性。另外,這一設定還為執行在此節點上的例項提供了ASM例項負載均衡能力。Flex ASM的另一個優勢就是可以在單獨節點上加以配置。

  當選擇Flex Cluster選項作為叢集安裝環境的第一部分時,鑑於Flex Cluster的要求,Flex ASM配置就會被自動選擇。傳統叢集同樣也適用於Flex ASM。當你決定使用Flex ASM時,你必須保證所需的網路是可用的。你可以選擇Flex ASM儲存選項作為叢集安裝環境的一部分,或是使用ASMCA在一個標準叢集環境下啟用Flex ASM。

  以下命令顯示了當前的ASM模式:

$ ./asmcmd showclustermode
$ .
/srvctl config asm

  或是連線到ASM例項並查詢INSTANCE_TYPE引數。如果輸出值為ASMPROX,那麼,就說明Flex ASM已經配置好了。

  ASM儲存限制放寬

  ASM儲存硬性限額在最大ASM 磁碟群組和磁碟大小上已經大幅提升。在 12c R1中,ASM支援511個ASM磁碟群組,而在11g R2中只支援63個。同樣,相比起在11g R2中20 PB的磁碟大小,現在已經將這一數字提高到32 PB。

  對ASM均衡操作的最佳化

  12c 中新的EXPLAIN WORK FOR 語句用於衡量一個給定ASM均衡操作所需的工作量,並在V$ASM_ESTIMATE動態檢視中輸入結果。使用此動態檢視,你可以調整POWER LIMIT 語句對重新平衡操作工作進行改善。例如,如果你想衡量新增一個新ASM磁碟所需的工作量,在實際執行手動均衡操作之前,你可以使用以下命令:

SQL> EXPLAIN WORK FOR ALTER DISKGROUP DG_DATA ADD DISK data_005;
SQL
> SELECT est_work FROM V$ASM_ESTIMATE;
SQL
> EXPLAIN WORK SET STATEMENT_ID='ADD_DISK' FOR ALTER DISKGROUP DG_DATA AD DISK data_005;
SQL
> SELECT est_work FROM V$ASM_ESTIMATE WHERE STATEMENT_ID = 'ADD_DISK’;

  你可以根據從動態檢視中獲取的輸出來調整POWER的限制以改善均衡操作。

  ASM 磁碟清理

  在一個ASM磁碟群組中,新的ASM磁碟清理操作分為正常或高冗餘兩個級別,它可以檢驗ASM磁碟群組中所有磁碟的邏輯資料破壞,並且可以自動對邏輯破壞進行修復,如果檢測到有邏輯資料破壞,就會使用ASM映象磁碟。磁碟清理可以在磁碟群組,特定磁碟或是某個檔案上執行,這樣其影響可降到最小程度。以下演示了磁碟清理場景:

SQL> ALTER DISKGROUP dg_data SCRUB POWER LOW:HIGH:AUTO:MAX;
SQL
> ALTER DISKGROUP dg_data SCRUB FILE '+DG_DATA/MYDB/DATAFILE/filename.xxxx.xxxx'
REPAIR 
POWER AUTO;

  ASM的活動會話歷史(ASH)

  V$ACTIVE_SESSION_HISOTRY 動態檢視現在還可以提供ASM例項的活動會話抽樣。然而,診斷包的使用是受到許可限制的。

  2. 網格(Grid)基礎架構的增強

  Flex 叢集

  Oracle 12c 在叢集安裝時支援兩類配置:傳統標準叢集和Flex叢集。在一個傳統標準叢集中,所有叢集中的節點都彼此緊密地整合在一起,並透過私有網路進行互動,而且可以直接訪問儲存。另一方面,Flex叢集在Hub和Leaf節點結構間引入了兩類節點。分配在Hub中的節點類似於傳統標準叢集,它們透過私有網路彼此互連在一起並對儲存可以進行直接讀寫訪問。而Leaf節點不同於Hub節點,它們不需要直接訪問底層儲存;相反的是,它們透過Hub節點對儲存和資料進行訪問。

  你可以配置多達64個Hub節點,而Leaf節點則可以更多。在Oracle Flex叢集中,無需配置Leaf節點就可以擁有Hub節點,而如果沒有Hub節點的話,Leaf節點是不會存在的。對於一個單獨Hub節點,你可以配置多個Leaf節點。在Oracle Flex叢集中,只有Hub節點會直接訪問OCR和Voting磁碟。當你規劃大規模的叢集環境時,這將是一個非常不錯的功能。這一系列設定會大大降低互連擁堵,併為傳統標準叢集提供空間以擴大叢集。

  部署Flex 叢集的兩種途徑:

  1. 在配置一個全新叢集的時候部署

  2. 升級一個標準叢集模式到Flex叢集

  如果你正在配置一個全新的叢集,你需要在步驟3中選擇叢集配置的型別,選擇配置一個Flex叢集選項,然後你需要在步驟6中對Hub和Leaf節點進行分類。對於每個節點,選擇相應角色是Hub或是Leaf,而虛擬主機名也是可選的。

  將一個標準叢集模式轉換為Flex 叢集模式需要以下步驟:

  1. 用以下命令獲取叢集的當前狀態:

$ ./crsctl get cluster mode status

  2. 以root使用者執行以下命令:

$ ./crsctl set cluster mode flex
$ .
/crsctl stop crs
$ .
/crsctl start crs –wait

  3. 根據設計改變節點角色:

$ ./crsctl get node role config
$ .
/crsctl set node role hub|leaf
$ .
/crsctl stop crs
$ .
/crsctl start crs -wait

  注意:

  ?你無法從Flex恢復回標準叢集模式

  ?改變叢集節點模式需要叢集棧停止

  ?確保以一個固定的VIP配置GNS

  ASM磁碟群組中的OCR備份

  對於12c,OCR現在可以在ASM磁碟群組中得以備份。這簡化了透過所有節點對OCR備份檔案的訪問。為了防止OCR的恢復,你不必擔心OCR最新的備份是在哪個節點上。可以從任何節點輕易識別儲存在ASM中的最新備份並能很容易地執行恢復。

  以下演示瞭如何將ASM磁碟群組設定為OCR備份位置:

$ ./ocrconfig -backuploc +DG_OCR

  支援IPv6協議

  對於12c,Oracle是支援IPv6網路協議配置的。你現在可以在IPv4或IPv6上配置共有或私有網路介面,儘管如此,你需要確保在所有叢集中的節點上使用相同的IP協議。

  3. RAC資料庫的增強

  What-if命令評估

  透過srvctl使用新的What-if命令評估選項,現在可以確定執行此命令所造成的影響。這一新新增到srvctl的命令,可以在沒有實際執行或是不對當前系統做任何改變的情況下模擬此命令。這在想要對一個已存在的系統進行更改卻對結果不確定的時候特別有用。這樣,此命令就會提供進行變更的效果。而–eval 選項也可以透過crsctl 命令來使用。

  例如,如果你想要知道停止一個特定資料庫會發生什麼,那麼你就可以使用以下示例:

$ ./srvctl stop database –d MYDB –eval
$ .
/crsctl eval modify resource -attr “value”

  srvctl的改進

  對於srvctl命令還有一些新增功能。以下演示瞭如何用這些新增功能停止或啟動叢集上的資料庫或例項資源。

srvctl start database|instance –startoption NOMOUNT|MOUNT|OPEN
srvctl stop 
database|instance –stopoption NOMOUNT|MOUNT|OPEN

  4. 截斷表CASCADE

  在之前的版本中,在子表引用一個主表以及子表存在記錄的情況下,是不提供截斷此主表操作的。而在12c中的帶有CASCADE操作的TRUNCATE TABLE可以截斷主表中的記錄,並自動對子表進行遞迴截斷,並作為DELETE ON CASCADE服從外來鍵引用。由於這是應用到所有子表的,所以對遞迴層級的數量是沒有CAP的,可以是孫子表或是重孫子表等等。

  這一增強擯棄了要在截斷一個主表之前先截斷所有子表記錄的前提。新的CASCADE語句同樣也可以應用到表分割槽和子表分割槽等。

SQL> TRUNCATE TABLE CASCADE;
SQL
> TRUNCATE TABLE PARTITION CASCADE;

  如果對於子表的外來鍵沒有定義ON DELETE CASCADE 選項,便會丟擲一個ORA-14705錯誤。

  5. 對Top-N查詢結果限制記錄

  在之前的版本中有多種間接手段來對頂部或底部記錄獲取Top-N查詢結果。而在12c中,透過新的FETCH FIRST|NEXT|PERCENT語句簡化了這一過程並使其變得更為直接。為了從EMP表檢索排名前10的工資記錄,可以用以下新的SQL語句:

SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC
FETCH FIRST 10 ROWS ONLY;

  以下示例獲取排名前N的所有相似的記錄。例如,如果第十行的工資值是5000,並且還有其他員工的工資符合排名前N的標準,那麼它們也同樣會由WITH TIES語句獲取。

SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC
FETCH FIRST 10 ROWS ONLY WITH TIES;

  以下示例限制從EMP表中獲取排名前10%的記錄:

SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC
FETCH FIRST 10 PERCENT ROWS ONLY;

  以下示例忽略前5條記錄並會顯示錶的下5條記錄:

SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC
OFFSET 
5 ROWS FETCH NEXT 5 ROWS ONLY;

  所有這些限制同樣可以很好的應用於PL/SQL塊。

BEGIN
SELECT sal BULK COLLECT INTO sal_v FROM EMP
FETCH FIRST 100 ROWS ONLY;
END;

  6. 對SQL*Plus的各種增強

  SQL*Plus的隱式結果:12c中,在沒有實際繫結某個RefCursor的情況下,SQL*Plus從一個PL/SQL塊的一個隱式遊標返回結果。這一新的dbms_sql.return_result過程將會對PL/SQL 塊中由SELECT 語句查詢所指定的結果加以返回並進行格式化。以下程式碼對此用法進行了描述:

SQL> CREATE PROCEDURE mp1
res1 sys_refcursor;
BEGIN
open res1 for SELECT eno,ename,sal FROM emp;
dbms_sql.return_result(res1);
END;
SQL
> execute mp1;

  當此過程得以執行,會在SQL*Plus上返回格式化的記錄。

  顯示不可見欄位:在本系列文章的第一部分,我已經對不可見欄位的新特性做了相關闡述。當欄位定義為不可見時,在描述表結構時它們將不會顯示。然而,你可以透過在SQL*Plus提示符下進行以下設定來顯示不可見欄位的相關資訊:

SQL> SET COLINVISIBLE ON|OFF

  以上設定僅對DESCRIBE 命令有效。目前它還無法對不可見欄位上的SELECT 語句結果產生效果。

  7. 會話級序列

  在12c中現在可以建立新的會話級資料庫序列來支援會話級序列值。這些序列的型別在有會話級的全域性臨時表上最為適用。

  會話級序列會產生一個獨特範圍的值,這些值是限制在此會話內的,而非超越此會話。一旦會話終止,會話序列的狀態也會消失。以下示例解釋了建立一個會話級序列:

SQL> CREATE SEQUENCE my_seq START WITH 1 INCREMENT BY 1 SESSION;
SQL
> ALTER SEQUENCE my_seq GLOBAL|SESSION;

  對於會話級序列,CACHE, NOCACHE, ORDER 或 NOORDER 語句會予以忽略。

  8. WITH語句的改善

  在12c中,你可以用SQL更快的執行PL/SQL函式或過程,這些是由SQL語句的WITH語句加以定義和宣告的。以下示例演示瞭如何在WITH語句中定義和宣告一個過程或函式:

WITH
PROCEDURE|FUNCTION test1 (…)
BEGIN
END;
SELECT FROM table_name;
/

  儘管你不能在PL/SQL單元直接使用WITH語句,但其可以在PL/SQL單元中透過一個動態SQL加以引用。

  9. 擴充套件資料型別

  在12c中,與早期版本相比,諸如VARCHAR2, NAVARCHAR2以及 RAW這些資料型別的大小會從4K以及2K位元組擴充套件至32K位元組。只要可能,擴充套件字元的大小會降低對LOB資料型別的使用。為了啟用擴充套件字元大小,你必須將MAX_STRING_SIZE的初始資料庫引數設定為EXTENDED。

  要使用擴充套件字元型別需要執行以下過程:

  1. 關閉資料庫

  2. 以升級模式重啟資料庫

  3. 更改引數: ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED;

  4. 執行 utl32k.sql as sysdba : SQL> @?/rdbms/admin/utl32k.sql

  5. 關閉資料庫

  6. 以讀寫模式重啟資料庫

  對比LOB資料型別,在ASSM表空間管理中,擴充套件資料型別的欄位以SecureFiles LOB加以儲存,而在非ASSM表空間管理中,它們則是以BasciFiles LOB進行儲存的。

  注意:一旦更改,你就不能再將設定改回STANDARD。



原文連結: http://tech.it168.com/a2013/0903/1529/000001529147.shtml

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

相關文章