熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle12c新特性再總結

2013-11-13 16:06:30  來源: Oracle 

  本文中作者將對c集群ASM以及RAC數據庫新增和改進方面廣泛介紹同時列舉一些對開發者而言非常有用的新特性

  文章導讀

  ASM中的增強

  網格基礎架構的增強

  Oracle RAC的增強

  如何在子表包含數據的情況下截斷一個主表

  限制TopN查詢結果的記錄

  SQL*Plus的各種增強

  會話級序列

  WITH語句的改善

  擴展數據類型 自動存儲管理(ASM)中的增強Flex ASM在一個典型的網格基礎架構安裝環境中每個節點都運行自身的ASM實例並將其作為運行於此節點上數據庫的存儲容器但這種設置會存在相應的單點故障危險例如如果此節點上的ASM實例發生故障則運行於此節點上的所有數據庫和實例都會受到影響為了避免ASM實例的單點故障Oracle c提供了一個名為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 磁盤群組和磁盤大小上已經大幅提升c RASM支持個ASM磁盤群組而在g R中只支持同樣相比起在g R PB的磁盤大小現在已經將這一數字提高到 PB對ASM均衡操作的優化c 中新的EXPLAIN WORK FOR 語句用於衡量一個給定ASM均衡操作所需的工作量並在V$ASM_ESTIMATE動態視圖中輸入結果使用此動態視圖你可以調整POWER LIMIT 語句對重新平衡操作工作進行改善例如如果你想衡量添加一個新ASM磁盤所需的工作量在實際執行手動均衡操作之前你可以使用以下命令SQL> EXPLAIN WORK FOR ALTER DISKGROUP DG_DATA ADD DISK data_SQL> SELECT est_work FROM V$ASM_ESTIMATESQL> EXPLAIN WORK SET STATEMENT_ID=ADD_DISK FOR ALTER DISKGROUP DG_DATA AD DISK data_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 LOWHIGHAUTOMAXSQL> ALTER DISKGROUP dg_data SCRUB FILE +DG_DATA/MYDB/DATAFILE/filenamexxxxxxxx REPAIR POWER AUTOASM的活動會話歷史(ASH)

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

   網格(Grid)基礎架構的增強Flex 集群Oracle c 在集群安裝時支持兩類配置傳統標准集群和Flex集群在一個傳統標准集群中所有集群中的節點都彼此緊密地整合在一起並通過私有網絡進行互動而且可以直接訪問存儲另一方面Flex集群在Hub和Leaf節點結構間引入了兩類節點分配在Hub中的節點類似於傳統標准集群它們通過私有網絡彼此互連在一起並對存儲可以進行直接讀寫訪問而Leaf節點不同於Hub節點它們不需要直接訪問底層存儲相反的是它們通過Hub節點對存儲和數據進行訪問

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

  部署Flex 集群的兩種途徑 在配置一個全新集群的時候部署 升級一個標准集群模式到Flex集群如果你正在配置一個全新的集群你需要在步驟中選擇集群配置的類型選擇配置一個Flex集群選項然後你需要在步驟中對Hub和Leaf節點進行分類對於每個節點選擇相應角色是Hub或是Leaf而虛擬主機名也是可選的

  將一個標准集群模式轉換為Flex 集群模式需要以下步驟 用以下命令獲取集群的當前狀態$ /crsctl get cluster mode status 以root用戶執行以下命令$ /crsctl set cluster mode flex $ /crsctl stop crs $ /crsctl start crs –wait 根據設計改變節點角色$ /crsctl get node role config $ /crsctl set node role hub|leaf $ /crsctl stop crs $ /crsctl start crs wait注意?你無法從Flex恢復回標准集群模式?改變集群節點模式需要集群棧停止?確保以一個固定的VIP配置GNS ASM磁盤群組中的OCR備份對於cOCR現在可以在ASM磁盤群組中得以備份這簡化了通過所有節點對OCR備份文件的訪問為了防止OCR的恢復你不必擔心OCR最新的備份是在哪個節點上可以從任何節點輕易識別存儲在ASM中的最新備份並能很容易地執行恢復

  以下演示了如何將ASM磁盤群組設置為OCR備份位置$ /ocrconfig backuploc +DG_OCR支持IPv協議對於cOracle是支持IPv網絡協議配置的你現在可以在IPv或IPv上配置共有或私有網絡接口盡管如此你需要確保在所有集群中的節點上使用相同的IP協議

   RAC數據庫的增強Whatif命令評估通過srvctl使用新的Whatif命令評估選項現在可以確定運行此命令所造成的影響這一新添加到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 截斷表CASCADE在之前的版本中在子表引用一個主表以及子表存在記錄的情況下是不提供截斷此主表操作的而在c中的帶有CASCADE操作的TRUNCATE TABLE可以截斷主表中的記錄並自動對子表進行遞歸截斷並作為DELETE ON CASCADE服從外鍵引用由於這是應用到所有子表的所以對遞歸層級的數量是沒有CAP的可以是孫子表或是重孫子表等等

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

  SQL> TRUNCATE TABLE CASCADESQL> TRUNCATE TABLE PARTITION CASCADE如果對於子表的外鍵沒有定義ON DELETE CASCADE 選項便會拋出一個ORA錯誤

   對TopN查詢結果限制記錄在之前的版本中有多種間接手段來對頂部或底部記錄獲取TopN查詢結果而在c中通過新的FETCH FIRST|NEXT|PERCENT語句簡化了這一過程並使其變得更為直接為了從EMP表檢索排名前的工資記錄可以用以下新的SQL語句SQL> SELECT enoenamesal FROM emp ORDER BY SAL DESC FETCH FIRST ROWS ONLY以下示例獲取排名前N的所有相似的記錄例如如果第十行的工資值是並且還有其他員工的工資符合排名前N的標准那麼它們也同樣會由WITH TIES語句獲取

  SQL> SELECT enoenamesal FROM emp ORDER BY SAL DESC FETCH FIRST ROWS ONLY WITH TIES以下示例限制從EMP表中獲取排名前%的記錄SQL> SELECT enoenamesal FROM emp ORDER BY SAL DESC FETCH FIRST PERCENT ROWS ONLY以下示例忽略前條記錄並會顯示表的下條記錄SQL> SELECT enoenamesal FROM emp ORDER BY SAL DESC OFFSET ROWS FETCH NEXT ROWS ONLY所有這些限制同樣可以很好的應用於PL/SQL塊

  BEGIN SELECT sal BULK COLLECT INTO sal_v FROM EMP FETCH FIRST ROWS ONLYEND 對SQL*Plus的各種增強SQL*Plus的隱式結果c中在沒有實際綁定某個RefCursor的情況下SQL*Plus從一個PL/SQL塊的一個隱式游標返回結果這一新的dbms_sqlreturn_result過程將會對PL/SQL 塊中由SELECT 語句查詢所指定的結果加以返回並進行格式化以下代碼對此用法進行了描述SQL> CREATE PROCEDURE mp res sys_refcursorBEGIN open res for SELECT enoenamesal FROM empdbms_sqlreturn_result(resENDSQL> execute mp當此過程得以執行會在SQL*Plus上返回格式化的記錄

  顯示不可見字段在本系列文章的第一部分我已經對不可見字段的新特性做了相關闡述當字段定義為不可見時在描述表結構時它們將不會顯示然而你可以通過在SQL*Plus提示符下進行以下設置來顯示不可見字段的相關信息SQL> SET COLINVISIBLE ON|OFF以上設置僅對DESCRIBE 命令有效目前它還無法對不可見字段上的SELECT 語句結果產生效果

   會話級序列在c中現在可以創建新的會話級數據庫序列來支持會話級序列值這些序列的類型在有會話級的全局臨時表上最為適用

  會話級序列會產生一個獨特范圍的值這些值是限制在此會話內的而非超越此會話一旦會話終止會話序列的狀態也會消失以下示例解釋了創建一個會話級序列SQL> CREATE SEQUENCE my_seq START WITH INCREMENT BY SESSIONSQL> ALTER SEQUENCE my_seq GLOBAL|SESSION對於會話級序列CACHE NOCACHE ORDER 或 NOORDER 語句會予以忽略

   WITH語句的改善在c中你可以用SQL更快的運行PL/SQL函數或過程這些是由SQL語句的WITH語句加以定義和聲明的以下示例演示了如何在WITH語句中定義和聲明一個過程或函數WITH PROCEDURE|FUNCTION test (…)

  BEGIN ENDSELECT FROM table_name/盡管你不能在PL/SQL單元直接使用WITH語句但其可以在PL/SQL單元中通過一個動態SQL加以引用

   擴展數據類型在c中與早期版本相比諸如VARCHAR NAVARCHAR以及 RAW這些數據類型的大小會從K以及K字節擴展至K字節只要可能擴展字符的大小會降低對LOB數據類型的使用為了啟用擴展字符大小你必須將MAX_STRING_SIZE的初始數據庫參數設置為EXTENDED要使用擴展字符類型需要執行以下過程 關閉數據庫 以升級模式重啟數據庫 更改參數 ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED 執行 utlksql as sysdba SQL> @?/rdbms/admin/utlksql 關閉數據庫 以讀寫模式重啟數據庫對比LOB數據類型在ASSM表空間管理中擴展數據類型的字段以SecureFiles LOB加以存儲而在非ASSM表空間管理中它們則是以BasciFiles LOB進行存儲的

  注意一旦更改你就不能再將設置改回STANDARD


From:http://tw.wingwit.com/Article/program/Oracle/201311/17823.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.