您好,登錄后才能下訂單哦!
這篇文章給大家介紹oracle12c新特性指的是哪些,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
一、第一部分
1. 在線重命名和重新定位活躍數(shù)據(jù)文件
不同于以往的版本,在Oracle數(shù)據(jù)庫12c R1版本中對數(shù)據(jù)文件的遷移或重命名不再需要太多繁瑣的步驟,即把表空間置為只讀模式,接下來是對數(shù)據(jù)文件進(jìn)行離線操作。在12c R1中,可以使用ALTER DATABASE MOVE DATAFILE這樣的SQL語句對數(shù)據(jù)文件進(jìn)行在線重命名和移動。而當(dāng)此數(shù)據(jù)文件正在傳輸時(shí),終端用戶可以執(zhí)行查詢,DML以及DDL方面的任務(wù)。另外,數(shù)據(jù)文件可以在存儲設(shè)備間遷移,如從非ASM遷移至ASM,反之亦然。
重命名數(shù)據(jù)文件:
SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users01.dbf' TO '/u00/data/users_01.dbf';
從非ASM遷移數(shù)據(jù)文件至ASM:
SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users_01.dbf' TO '+DG_DATA';
將數(shù)據(jù)文件從一個(gè)ASM磁盤群組遷移至另一個(gè)ASM磁盤群組:
SQL> ALTER DATABASE MOVE DATAFILE '+DG_DATA/DBNAME/DATAFILE/users_01.dbf ' TO '+DG_DATA_02';
在數(shù)據(jù)文件已存在于新路徑的情況下,以相同的命名將其覆蓋:
SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users_01.dbf' TO '/u00/data_new/users_01.dbf' REUSE;
復(fù)制文件到一個(gè)新路徑,同時(shí)在原路徑下保留其拷貝:
SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users_01.dbf' TO '/u00/data_new/users_01.dbf' KEEP;
當(dāng)通過查詢v$session_longops動態(tài)視圖來移動文件時(shí),你可以監(jiān)控這一過程。另外,你也可以引用alert.log,Oracle會在其中記錄具體的行為。
2. 表分區(qū)或子分區(qū)的在線遷移
在Oracle 12c R1中遷移表分區(qū)或子分區(qū)到不同的表空間不再需要復(fù)雜的過程。與之前版本中未分區(qū)表進(jìn)行在線遷移類似,表分區(qū)或子分區(qū)可以在線或是離線遷移至一個(gè)不同的表空間。當(dāng)指定了ONLINE語句,所有的DML操作可以在沒有任何中斷的情況下,在參與這一過程的分區(qū)或子分區(qū)上執(zhí)行。與此相反,分區(qū)或子分區(qū)遷移如果是在離線情況下進(jìn)行的,DML操作是不被允許的。
示例:
SQL> ALTER TABLE table_name MOVE PARTITION|SUBPARTITION partition_name TO tablespace tablespace_name;
SQL> ALTER TABLE table_name MOVE PARTITION|SUBPARTITION partition_name TO tablespace tablespace_name UPDATE INDEXES ONLINE;
第一個(gè)示例是用來在離線狀況下將一個(gè)表分區(qū)或子分區(qū)遷移至一個(gè)新的表空間。第二個(gè)示例是在線遷移表分區(qū)或子分區(qū)并維護(hù)表上任何本地或全局的索引。此外,當(dāng)使用ONLINE語句時(shí),DML操作是不會中斷的。
重要提示:
UPDATE INDEXES語句可以避免出現(xiàn)表中任何本地或全局索引無法使用的情況。
表的在線遷移限制也適用于此。
引入加鎖機(jī)制來完成這一過程,當(dāng)然它也會導(dǎo)致性能下降并會產(chǎn)生大量的redo,這取決于分區(qū)和子分區(qū)的大小。
3. 不可見字段
在Oracle 11g R1中,Oracle以不可見索引和虛擬字段的形式引入了一些不錯(cuò)的增強(qiáng)特性。繼承前者并發(fā)揚(yáng)光大,Oracle 12c R1中引入了不可見字段思想。在之前的版本中,為了隱藏重要的數(shù)據(jù)字段以避免在通用查詢中顯示,我們往往會創(chuàng)建一個(gè)視圖來隱藏所需信息或應(yīng)用某些安全條件。
在12c R1中,你可以在表中創(chuàng)建不可見字段。當(dāng)一個(gè)字段定義為不可見時(shí),這一字段就不會出現(xiàn)在通用查詢中,除非在SQL語句或條件中有顯式的提及這一字段,或是在表定義中有DESCRIBED。要添加或是修改一個(gè)不可見字段是非常容易的,反之亦然。
SQL> CREATE TABLE emp (eno number(6), ename name varchar2(40), sal number(9) INVISIBLE);
SQL> ALTER TABLE emp MODIFY (sal visible);
你必須在INSERT語句中顯式提及不可見字段名以將不可見字段插入到數(shù)據(jù)庫中。虛擬字段和分區(qū)字段同樣也可以定義為不可見類型。但臨時(shí)表,外部表和集群表并不支持不可見字段。
4. 相同字段上的多重索引
在Oracle 12c R1之前,一個(gè)字段是無法以任何形式擁有多個(gè)索引的。或許有人會想知道為什么通常一個(gè)字段需要有多重索引,事實(shí)上需要多重索引的字段或字段集合是很多的。在12c R1中,只要索引類型的形式不同,一個(gè)字段就可以包含在一個(gè)B-tree索引中,同樣也可以包含在Bitmap索引中。注意,只有一種類型的索引是在給定時(shí)間可用的。
5. DDL日志
在之前的版本中沒有可選方法來對DDL操作進(jìn)行日志記錄。而在12c R1中,你現(xiàn)在可以將DDL操作寫入xml和日志文件中。這對于了解誰在什么時(shí)間執(zhí)行了create或drop命令是十分有用的。要開啟這一功能必須對ENABLE_DDL_LOGGING 初始參數(shù)加以配置。這一參數(shù)可以在數(shù)據(jù)庫或會話級加以設(shè)置。當(dāng)此參數(shù)為啟用狀態(tài),所有的DDL命令會記錄在$ORACLE_BASE/diag/rdbms/DBNAME/log|ddl 路徑下的xml和日志文件中。一個(gè)xml中包含DDL命令,IP地址,時(shí)間戳等信息。這可以幫助確定在什么時(shí)候?qū)τ脩艋虮磉M(jìn)行了刪除亦或是一條DDL語句在何時(shí)觸發(fā)。
開啟DDL日志功能
SQL> ALTER SYSTEM|SESSION SET ENABLE_DDL_LOGGING=TRUE;
以下的DDL語句可能會記錄在xml或日志文件中:
CREATE|ALTER|DROP|TRUNCATE TABLE
DROP USER
CREATE|ALTER|DROP PACKAGE|FUNCTION|VIEW|SYNONYM|SEQUENCE
6. 臨時(shí)undo
每個(gè)Oracle數(shù)據(jù)庫包含一組與系統(tǒng)相關(guān)的表空間,例如SYSTEM,SYSAUX,UNDO & TEMP,并且它們在Oracle數(shù)據(jù)庫中每個(gè)都用于不同的目的。在Oracle 12c R1之前,臨時(shí)表生成的undo記錄是存儲在undo表空間里的,通用表和持久表的undo記錄也是類似的。而在12c R12的臨時(shí)undo功能中,臨時(shí)undo記錄可以存儲在一個(gè)臨時(shí)表中,而無需再存儲在undo表空間內(nèi)。這樣做的主要好處在于:減少undo表空間,由于信息不會被記錄在redo日志中,所以減少了redo數(shù)據(jù)的生成。你可以在會話級別或者數(shù)據(jù)庫級別來啟用臨時(shí)undo選項(xiàng)。
啟用臨時(shí)undo功能
要使用這一新功能,需要做以下設(shè)置:
兼容性參數(shù)必須設(shè)置為12.0.0或更高
啟用 TEMP_UNDO_ENABLED 初始化參數(shù)
由于臨時(shí)undo記錄現(xiàn)在是存儲在一個(gè)臨時(shí)表空間中的,你需要有足夠的空間來創(chuàng)建這一臨時(shí)表空間
對于會話級,你可以使用:ALTER SYSTEM SET TEMP_UNDO_ENABLE=TRUE;
查詢臨時(shí)undo信息
以下所列的字典視圖是用來查看或查詢臨時(shí)undo數(shù)據(jù)相關(guān)統(tǒng)計(jì)信息的:
V$TEMPUNDOSTAT
DBA_HIST_UNDOSTAT
V$UNDOSTAT
要禁用此功能,你只需做以下設(shè)置:
SQL> ALTER SYSTEM|SESSION SET TEMP_UNDO_ENABLED=FALSE;
7. 備份特定用戶特權(quán)
在11g R2中,引入了SYSASM特權(quán)來執(zhí)行ASM的特定操作。同樣地,在12c中引入了SYSBACKUP特權(quán)用來在 RMAN中執(zhí)行備份和恢復(fù)命令。因此,你可以在數(shù)據(jù)庫中創(chuàng)建一個(gè)本地用戶并在不授予其SYSDBA權(quán)限的情況下,通過授予SYSBACKUP權(quán)限讓其能夠在RMAN中執(zhí)行備份和恢復(fù)相關(guān)的任務(wù)。
$ ./rman target "username/password as SYSBACKUP"
8. 如何在RMAN中執(zhí)行SQL語句
在12c中,你可以在不需要SQL前綴的情況下在RMAN中執(zhí)行任何SQL和PL/SQL命令,即你可以從RMAN直接執(zhí)行任何SQL和PL/SQL命令。如下便是在RMAN中執(zhí)行SQL語句的示例:
RMAN> SELECT username,machine FROM v$session;
RMAN> ALTER TABLESPACE users ADD DATAFILE SIZE 121m;
9. RMAN中的表恢復(fù)和分區(qū)恢復(fù)
Oracle數(shù)據(jù)庫備份主要分為兩類:邏輯和物理備份。每種備份類型都有其自身的優(yōu)缺點(diǎn)。在之前的版本中,利用現(xiàn)有物理備份來恢復(fù)表或分區(qū)是不可行的。為了恢復(fù)特定對象,邏輯備份是必需的。對于12c R1,你可以在發(fā)生drop或truncate的情況下從RMAN備份將一個(gè)特定的表或分區(qū)恢復(fù)到某個(gè)時(shí)間點(diǎn)或SCN。
當(dāng)通過RMAN發(fā)起一個(gè)表或分區(qū)恢復(fù)時(shí),大概流程是這樣的:
確定要恢復(fù)表或分區(qū)所需的備份集
在恢復(fù)表或分區(qū)的過程中,一個(gè)輔助數(shù)據(jù)庫會臨時(shí)設(shè)置為某個(gè)時(shí)間點(diǎn)
利用數(shù)據(jù)泵將所需表或分區(qū)導(dǎo)出到一個(gè)dumpfile
你可以從源數(shù)據(jù)庫導(dǎo)入表或分區(qū)(可選)
在恢復(fù)過程中進(jìn)行重命名操作
以下是一個(gè)通過RMAN對表進(jìn)行時(shí)間點(diǎn)恢復(fù)的示例(確保你已經(jīng)對稍早的數(shù)據(jù)庫進(jìn)行了完整備份):
RMAN> connect target "username/password as SYSBACKUP";
RMAN> RECOVER TABLE username.tablename UNTIL TIME 'TIMESTAMP…'
AUXILIARY DESTINATION '/u01/tablerecovery'
DATAPUMP DESTINATION '/u01/dpump'
DUMP FILE 'tablename.dmp'
NOTABLEIMPORT -- this option avoids importing the table automatically.(此選項(xiàng)避免自動導(dǎo)入表)
REMAP TABLE 'username.tablename': 'username.new_table_name'; -- can rename table with this option.(此選項(xiàng)可以對表重命名)
重要提示:
確保對于輔助數(shù)據(jù)庫在/u01文件系統(tǒng)下有足夠的可用空間,同時(shí)對數(shù)據(jù)泵文件也有同樣保證
必須要存在一份完整的數(shù)據(jù)庫備份,或者至少是要有SYSTEM相關(guān)的表空間備份
以下是在RMAN中應(yīng)用表或分區(qū)恢復(fù)的限制和約束:
SYS用戶表或分區(qū)無法恢復(fù)
存儲于SYSAUX和SYSTEM表空間下的表和分區(qū)無法恢復(fù)
當(dāng)REMAP選項(xiàng)用來恢復(fù)的表包含NOT NULL約束時(shí),恢復(fù)此表是不可行的
10. 限制PGA的大小
在Oracle 12c R1之前,沒有選項(xiàng)可以用來限制和控制PGA的大小。雖然你設(shè)置某個(gè)大小為PGA_AGGREGATE_TARGET 的初始參數(shù),Oracle會根據(jù)工作負(fù)載和需求來動態(tài)地增大或減小PGA的大小。而在12c中,你可以通過開啟自動PGA管理來對PGA設(shè)定硬性限制,這需要對PGA_AGGREGATE_LIMIT 參數(shù)進(jìn)行設(shè)置。因此,你現(xiàn)在可以通過設(shè)置新的參數(shù)來對PGA設(shè)定硬性限制以避免過度使用PGA。
SQL> ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=2G;
SQL> ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=0; --disables the hard limit
二、第二部分
1. 對表分區(qū)維護(hù)的增強(qiáng)
在第一部分中,我解釋了如何在線或是離線狀態(tài)下遷移一個(gè)表分區(qū)或子分區(qū)到另一個(gè)不同的表空間。在本文中,主要介紹表分區(qū)其他方面的改進(jìn)。
添加多個(gè)新分區(qū)
在Oracle 12c R1之前,一次只可能添加一個(gè)新分區(qū)到一個(gè)已存在的分區(qū)表。要添加一個(gè)以上的新分區(qū),需要對每個(gè)新分區(qū)都單獨(dú)執(zhí)行一次ALTER TABLE ADD PARTITION語句。而Oracle 12c只需要使用一條單獨(dú)的ALTER TABLE ADD PARTITION 命令就可以添加多個(gè)新分區(qū),這增加了數(shù)據(jù)庫靈活性。以下示例說明了如何添加多個(gè)新分區(qū)到已存在的分區(qū)表:
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)
);
添加兩個(gè)新分區(qū):
SQL> ALTER TABLE emp_part ADD PARTITION
PARTITION p4 VALUES LESS THAN (35000),
PARTITION p5 VALUES LESS THAN (40000);
同樣,只要MAXVALUE分區(qū)不存在,你就可以添加多個(gè)新分區(qū)到一個(gè)列表和系統(tǒng)分區(qū)表。
如何刪除和截?cái)喽鄠€(gè)分區(qū)/子分區(qū)
作為數(shù)據(jù)維護(hù)的一部分,DBA通常會在一個(gè)分區(qū)表上進(jìn)行刪除或截?cái)喾謪^(qū)的維護(hù)任務(wù)。在12c R1之前,對于一個(gè)已存在的分區(qū)表一次只可能刪除或截?cái)嘁粋€(gè)分區(qū)。而對于Oracle 12c, 可以用單條ALTER TABLE table_name {DROP|TRUNCATE} PARTITIONS 命令來撤銷或合并多個(gè)分區(qū)和子分區(qū)。
下例說明了如何在一個(gè)已存在分區(qū)表上刪除或截?cái)喽鄠€(gè)分區(qū):
SQL> ALTER TABLE emp_part DROP PARTITIONS p4,p5;
SQL> ALTER TABLE emp_part TRUNCATE PARTITONS p4,p5;
要保持索引更新,使用UPDATE INDEXES或UPDATE 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 語句的情況下刪除或截?cái)嘁粋€(gè)分區(qū),你可以在USER_INDEXES或USER_IND_PARTITIONS 字典視圖下查詢ORPHANED_ENTRIES 字段以找出是否有索引包含任何的過期條目。
將單個(gè)分區(qū)分割為多個(gè)新分區(qū)
在12c中新增強(qiáng)的SPLIT PARTITION 語句可以讓你只使用一個(gè)單獨(dú)命令將一個(gè)特定分區(qū)或子分區(qū)分割為多個(gè)新分區(qū)。下例說明了如何將一個(gè)分區(qū)分割為多個(gè)新分區(qū):
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);
將多個(gè)分區(qū)合并為一個(gè)分區(qū)
你可以使用單條ALTER TBALE MERGE PARTITIONS 語句將多個(gè)分區(qū)合并為一個(gè)單獨(dú)分區(qū):
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;
如果分區(qū)范圍形成序列,你可以使用如下示例:
SQL> ALTER TABLE emp_part MERGE PARTITIONS p3 TO p5 INTO PARTITION p_merge;
2. 數(shù)據(jù)庫升級改進(jìn)
每當(dāng)一個(gè)新的Oracle版本發(fā)布,DBA所要面臨的挑戰(zhàn)就是升級過程。該部分我將介紹12c中引入的針對升級的兩個(gè)改進(jìn)。
預(yù)升級腳本
在12c R1中,原有的utlu[121]s.sql 腳本由一個(gè)大為改善的預(yù)升級信息腳本preupgrd.sql所取代。除了預(yù)升級檢查驗(yàn)證,此腳本還能以修復(fù)腳本的形式解決在升級過程前后出現(xiàn)的各種問題。
可以對產(chǎn)生的修復(fù)腳本加以執(zhí)行來解決不同級別的問題,例如,預(yù)升級和升級后的問題。當(dāng)手動升級數(shù)據(jù)庫時(shí),腳本必須在實(shí)際升級過程初始化之前加以手動執(zhí)行。然而,當(dāng)使用DBUA工具來進(jìn)行數(shù)據(jù)庫升級時(shí),它會將預(yù)升級腳本作為升級過程的一部分加以自動執(zhí)行,而且會提示你去執(zhí)行修復(fù)腳本以防止報(bào)錯(cuò)。
如何執(zhí)行腳本:
SQL> @$ORACLE_12GHOME/rdbms/admin/preupgrd.sql
以上腳本會產(chǎn)生一份日志文件以及一個(gè)[pre/post]upgrade_fixup.sql 腳本。所有這些文件都位于$ORACLE_BASE/cfgtoollogs 目錄下。在你繼續(xù)真正的升級過程之前,你應(yīng)該瀏覽日志文件中所提到的建議并執(zhí)行腳本以修復(fù)問題。
注意:你要確保將preupgrd.sql和utluppkg.sql 腳本從12c Oracle的目錄home/rdbms/admin directory拷貝至當(dāng)前的Oracle的database/rdbms/admin路徑。
并行升級功能
數(shù)據(jù)庫升級時(shí)間的長短取決于數(shù)據(jù)庫上所配置的組件數(shù)量,而不是數(shù)據(jù)庫的大小。在之前的版本中,我們是無法并行運(yùn)行升級程序,從而快速完成整個(gè)升級過程的。
在12c R1中,原有的catupgrd.sql 腳本由catctl.pl 腳本(并行升級功能)替代,現(xiàn)在我們可以采用并行模式運(yùn)行升級程序了。
以下流程說明了如何初始化并行升級功能(3個(gè)過程);你需要在升級模式下在啟動數(shù)據(jù)庫后運(yùn)行這一腳本:
cd $ORACLE_12_HOME/perl/bin
$ ./perl catctl.pl –n 3 -catupgrd.sql
以上兩個(gè)步驟需要在手動升級數(shù)據(jù)庫時(shí)運(yùn)行。而DBUA也繼承了這兩個(gè)新變化。
3. 通過網(wǎng)絡(luò)恢復(fù)數(shù)據(jù)文件
在12c R1中另一個(gè)重要的增強(qiáng)是,你現(xiàn)在可以在主數(shù)據(jù)庫和備用數(shù)據(jù)庫之間用一個(gè)服務(wù)名重新獲得或恢復(fù)數(shù)據(jù)文件、控制文件、參數(shù)文件、表空間或整個(gè)數(shù)據(jù)庫。這對于同步主數(shù)據(jù)庫和備用數(shù)據(jù)庫極為有用。
當(dāng)主數(shù)據(jù)庫和備用數(shù)據(jù)庫之間存在相當(dāng)大的差異時(shí),你不再需要復(fù)雜的前滾流程來填補(bǔ)它們之間的差異。RMAN能夠通過網(wǎng)絡(luò)執(zhí)行備用恢復(fù)以進(jìn)行增量備份,并且可以將它們應(yīng)用到物理備用數(shù)據(jù)庫。你可以用服務(wù)名直接將所需數(shù)據(jù)文件從備用點(diǎn)拷貝至主站,這是為了防止主數(shù)據(jù)庫上數(shù)據(jù)文件、表空間的丟失,或是沒有真正從備份集恢復(fù)數(shù)據(jù)文件。
以下流程演示了如何用此新功能執(zhí)行一個(gè)前滾來對備用數(shù)據(jù)庫和主數(shù)據(jù)庫進(jìn)行同步:
在物理備用數(shù)據(jù)庫上:
./rman target "username/password@standby_db_tns as SYSBACKUP"
RMAN> RECOVER DATABASE FROM SERVICE primary_db_tns USING COMPRESSED BACKUPSET;
以上示例使用備用數(shù)據(jù)庫上定義的primary_db_tns 連接字符串連接到主數(shù)據(jù)庫,然后執(zhí)行了一個(gè)增量備份,再將這些增量備份傳輸至備用目的地,接著將應(yīng)用這些文件到備用數(shù)據(jù)庫來進(jìn)行同步。然而,需要確保已經(jīng)對primary_db_tns 進(jìn)行了配置,即在備份數(shù)據(jù)庫端將其指向主數(shù)據(jù)庫。
在以下示例中,我將演示一個(gè)場景通過從備用數(shù)據(jù)庫獲取數(shù)據(jù)文件來恢復(fù)主數(shù)據(jù)庫上丟失的數(shù)據(jù)文件:
在主數(shù)據(jù)庫上:
./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的增強(qiáng)
Data Pump版本有了不少有用的改進(jìn),例如在導(dǎo)出時(shí)將視圖轉(zhuǎn)換為表,以及在導(dǎo)入時(shí)關(guān)閉日志記錄等。
關(guān)閉redo日志的生成
Data Pump中引入了新的TRANSFORM選項(xiàng),這對于對象在導(dǎo)入期間提供了關(guān)閉重做生成的靈活性。當(dāng)為TRANSFORM選項(xiàng)指定了DISABLE_ARCHIVE_LOGGING 值,那么在整個(gè)導(dǎo)入期間,重做生成就會處于關(guān)閉狀態(tài)。這一功能在導(dǎo)入大型表時(shí)緩解了壓力,并且減少了過度的redo產(chǎn)生,從而加快了導(dǎo)入。這一屬性還可應(yīng)用到表以及索引。以下示例演示了這一功能:
$ ./impdp directory=dpump dumpfile=abcd.dmp logfile=abcd.log TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y
將視圖轉(zhuǎn)換為表
這是Data Pump中另外一個(gè)改進(jìn)。有了VIEWS_AS_TABLES 選項(xiàng),你就可以將視圖數(shù)據(jù)載入表中。以下示例演示了如何在導(dǎo)出過程中將視圖數(shù)據(jù)載入到表中:
$ ./expdp directory=dpump dumpfile=abcd.dmp logfile=abcd.log views_as_tables=my_view:my_table
5. 實(shí)時(shí)自動數(shù)據(jù)診斷監(jiān)視器 (ADDM) 分析
通過使用諸如AWR、ASH以及ADDM之類的自動診斷工具來分析數(shù)據(jù)庫的健康狀況,是每個(gè)DBA日程工作的一部分。盡管每種工具都可以在多個(gè)層面衡量數(shù)據(jù)庫的整體健康狀況和性能,但沒有哪個(gè)工具可以在數(shù)據(jù)庫反應(yīng)遲鈍或是完全掛起的時(shí)候使用。
當(dāng)數(shù)據(jù)庫反應(yīng)遲鈍或是掛起狀態(tài)時(shí),而且你已經(jīng)配置了Oracle 企業(yè)管理器 12c的云控制,你就可以對嚴(yán)重的性能問題進(jìn)行診斷。這對于你了解當(dāng)前數(shù)據(jù)庫發(fā)生了什么狀況有很大幫助,而且還能夠?qū)Υ藛栴}給出解決方案。
以下步驟演示了如何在Oracle 企業(yè)管理器 12c上分析數(shù)據(jù)庫狀態(tài):
在訪問數(shù)據(jù)庫訪問主頁面從Performance菜單選擇Emergency Monitoring 選項(xiàng)。這會顯示掛起分析表中排名靠前的阻止會話。
在Performance菜單選擇Real-Time ADDM 選項(xiàng)來執(zhí)行實(shí)時(shí)ADDM分析。
在收集了性能數(shù)據(jù)后,點(diǎn)擊Findings標(biāo)簽以獲得所有結(jié)果的交互總結(jié)。
6. 同時(shí)在多個(gè)表上收集統(tǒng)計(jì)數(shù)據(jù)
在之前的Oracle數(shù)據(jù)庫版本中,當(dāng)你執(zhí)行一個(gè)DBMS_STATS 程序來收集表、索引、模式或者數(shù)據(jù)庫級別的統(tǒng)計(jì)數(shù)據(jù)時(shí),Oracle習(xí)慣于一次一個(gè)表的收集統(tǒng)計(jì)數(shù)據(jù)。如果表很大,那么推薦你采用并行方式。在12c R1中,你現(xiàn)在可以同時(shí)在多個(gè)表、分區(qū)以及子分區(qū)上收集統(tǒng)計(jì)數(shù)據(jù)。在你開始使用它之前,你必須對數(shù)據(jù)庫進(jìn)行以下設(shè)置以開啟此功能:
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');
三、第三部分包括:
1. ASM中的增強(qiáng)
2. 網(wǎng)格基礎(chǔ)架構(gòu)的增強(qiáng)
3. Oracle RAC的增強(qiáng)
1. 自動存儲管理(ASM)中的增強(qiáng)
Flex ASM
在一個(gè)典型的網(wǎng)格基礎(chǔ)架構(gòu)安裝環(huán)境中,每個(gè)節(jié)點(diǎn)都運(yùn)行自身的ASM實(shí)例,并將其作為運(yùn)行于此節(jié)點(diǎn)上數(shù)據(jù)庫的存儲容器。但這種設(shè)置會存在相應(yīng)的單點(diǎn)故障危險(xiǎn)。例如,如果此節(jié)點(diǎn)上的ASM實(shí)例發(fā)生故障,則運(yùn)行于此節(jié)點(diǎn)上的所有數(shù)據(jù)庫和實(shí)例都會受到影響。為了避免ASM實(shí)例的單點(diǎn)故障,Oracle 12c提供了一個(gè)名為Flex ASM的功能。Flex ASM是一個(gè)不同的概念和架構(gòu),只有很少數(shù)量的ASM實(shí)例需要運(yùn)行在集群中的一些服務(wù)器上。當(dāng)某節(jié)點(diǎn)上的一個(gè)ASM實(shí)例發(fā)生故障,Oracle集群就會在另一個(gè)不同的節(jié)點(diǎn)上自動啟動替代ASM實(shí)例以加強(qiáng)可用性。另外,這一設(shè)置還為運(yùn)行在此節(jié)點(diǎn)上的實(shí)例提供了ASM實(shí)例負(fù)載均衡能力。Flex ASM的另一個(gè)優(yōu)勢就是可以在單獨(dú)節(jié)點(diǎn)上加以配置。
當(dāng)選擇Flex Cluster選項(xiàng)作為集群安裝環(huán)境的第一部分時(shí),鑒于Flex Cluster的要求,F(xiàn)lex ASM配置就會被自動選擇。傳統(tǒng)集群同樣也適用于Flex ASM。當(dāng)你決定使用Flex ASM時(shí),你必須保證所需的網(wǎng)絡(luò)是可用的。你可以選擇Flex ASM存儲選項(xiàng)作為集群安裝環(huán)境的一部分,或是使用ASMCA在一個(gè)標(biāo)準(zhǔn)集群環(huán)境下啟用Flex ASM。
以下命令顯示了當(dāng)前的ASM模式:
$ ./asmcmd showclustermode
$ ./srvctl config asm
或是連接到ASM實(shí)例并查詢INSTANCE_TYPE參數(shù)。如果輸出值為ASMPROX,那么,就說明Flex ASM已經(jīng)配置好了。
ASM存儲限制放寬
ASM存儲硬性限額在最大ASM 磁盤群組和磁盤大小上已經(jīng)大幅提升。在 12c R1中,ASM支持511個(gè)ASM磁盤群組,而在11g R2中只支持63個(gè)。同樣,相比起在11g R2中20 PB的磁盤大小,現(xiàn)在已經(jīng)將這一數(shù)字提高到32 PB。
對ASM均衡操作的優(yōu)化
12c 中新的EXPLAIN WORK FOR 語句用于衡量一個(gè)給定ASM均衡操作所需的工作量,并在V$ASM_ESTIMATE動態(tài)視圖中輸入結(jié)果。使用此動態(tài)視圖,你可以調(diào)整POWER LIMIT 語句對重新平衡操作工作進(jìn)行改善。例如,如果你想衡量添加一個(gè)新ASM磁盤所需的工作量,在實(shí)際執(zhí)行手動均衡操作之前,你可以使用以下命令:
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’;
你可以根據(jù)從動態(tài)視圖中獲取的輸出來調(diào)整POWER的限制以改善均衡操作。
ASM 磁盤清理
在一個(gè)ASM磁盤群組中,新的ASM磁盤清理操作分為正?;蚋呷哂鄡蓚€(gè)級別,它可以檢驗(yàn)ASM磁盤群組中所有磁盤的邏輯數(shù)據(jù)破壞,并且可以自動對邏輯破壞進(jìn)行修復(fù),如果檢測到有邏輯數(shù)據(jù)破壞,就會使用ASM鏡像磁盤。磁盤清理可以在磁盤群組,特定磁盤或是某個(gè)文件上執(zhí)行,這樣其影響可降到最小程度。以下演示了磁盤清理場景:
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 動態(tài)視圖現(xiàn)在還可以提供ASM實(shí)例的活動會話抽樣。然而,診斷包的使用是受到許可限制的。
2. 網(wǎng)格(Grid)基礎(chǔ)架構(gòu)的增強(qiáng)
Flex 集群
Oracle 12c 在集群安裝時(shí)支持兩類配置:傳統(tǒng)標(biāo)準(zhǔn)集群和Flex集群。在一個(gè)傳統(tǒng)標(biāo)準(zhǔn)集群中,所有集群中的節(jié)點(diǎn)都彼此緊密地整合在一起,并通過私有網(wǎng)絡(luò)進(jìn)行互動,而且可以直接訪問存儲。另一方面,F(xiàn)lex集群在Hub和Leaf節(jié)點(diǎn)結(jié)構(gòu)間引入了兩類節(jié)點(diǎn)。分配在Hub中的節(jié)點(diǎn)類似于傳統(tǒng)標(biāo)準(zhǔn)集群,它們通過私有網(wǎng)絡(luò)彼此互連在一起并對存儲可以進(jìn)行直接讀寫訪問。而Leaf節(jié)點(diǎn)不同于Hub節(jié)點(diǎn),它們不需要直接訪問底層存儲;相反的是,它們通過Hub節(jié)點(diǎn)對存儲和數(shù)據(jù)進(jìn)行訪問。
你可以配置多達(dá)64個(gè)Hub節(jié)點(diǎn),而Leaf節(jié)點(diǎn)則可以更多。在Oracle Flex集群中,無需配置Leaf節(jié)點(diǎn)就可以擁有Hub節(jié)點(diǎn),而如果沒有Hub節(jié)點(diǎn)的話,Leaf節(jié)點(diǎn)是不會存在的。對于一個(gè)單獨(dú)Hub節(jié)點(diǎn),你可以配置多個(gè)Leaf節(jié)點(diǎn)。在Oracle Flex集群中,只有Hub節(jié)點(diǎn)會直接訪問OCR和Voting磁盤。當(dāng)你規(guī)劃大規(guī)模的集群環(huán)境時(shí),這將是一個(gè)非常不錯(cuò)的功能。這一系列設(shè)置會大大降低互連擁堵,并為傳統(tǒng)標(biāo)準(zhǔn)集群提供空間以擴(kuò)大集群。
部署Flex 集群的兩種途徑:
1. 在配置一個(gè)全新集群的時(shí)候部署
2. 升級一個(gè)標(biāo)準(zhǔn)集群模式到Flex集群
如果你正在配置一個(gè)全新的集群,你需要在步驟3中選擇集群配置的類型,選擇配置一個(gè)Flex集群選項(xiàng),然后你需要在步驟6中對Hub和Leaf節(jié)點(diǎn)進(jìn)行分類。對于每個(gè)節(jié)點(diǎn),選擇相應(yīng)角色是Hub或是Leaf,而虛擬主機(jī)名也是可選的。
將一個(gè)標(biāo)準(zhǔn)集群模式轉(zhuǎn)換為Flex 集群模式需要以下步驟:
1. 用以下命令獲取集群的當(dāng)前狀態(tài):
$ ./crsctl get cluster mode status
2. 以root用戶執(zhí)行以下命令:
$ ./crsctl set cluster mode flex
$ ./crsctl stop crs
$ ./crsctl start crs –wait
3. 根據(jù)設(shè)計(jì)改變節(jié)點(diǎn)角色:
$ ./crsctl get node role config
$ ./crsctl set node role hub|leaf
$ ./crsctl stop crs
$ ./crsctl start crs -wait
注意:
你無法從Flex恢復(fù)回標(biāo)準(zhǔn)集群模式
改變集群節(jié)點(diǎn)模式需要集群棧停止
確保以一個(gè)固定的VIP配置GNS
ASM磁盤群組中的OCR備份
對于12c,OCR現(xiàn)在可以在ASM磁盤群組中得以備份。這簡化了通過所有節(jié)點(diǎn)對OCR備份文件的訪問。為了防止OCR的恢復(fù),你不必?fù)?dān)心OCR最新的備份是在哪個(gè)節(jié)點(diǎn)上??梢詮娜魏喂?jié)點(diǎn)輕易識別存儲在ASM中的最新備份并能很容易地執(zhí)行恢復(fù)。
以下演示了如何將ASM磁盤群組設(shè)置為OCR備份位置:
$ ./ocrconfig -backuploc +DG_OCR
支持IPv6協(xié)議
對于12c,Oracle是支持IPv6網(wǎng)絡(luò)協(xié)議配置的。你現(xiàn)在可以在IPv4或IPv6上配置共有或私有網(wǎng)絡(luò)接口,盡管如此,你需要確保在所有集群中的節(jié)點(diǎn)上使用相同的IP協(xié)議。
3. RAC數(shù)據(jù)庫的增強(qiáng)
What-if命令評估
通過srvctl使用新的What-if命令評估選項(xiàng),現(xiàn)在可以確定運(yùn)行此命令所造成的影響。這一新添加到srvctl的命令,可以在沒有實(shí)際執(zhí)行或是不對當(dāng)前系統(tǒng)做任何改變的情況下模擬此命令。這在想要對一個(gè)已存在的系統(tǒng)進(jìn)行更改卻對結(jié)果不確定的時(shí)候特別有用。這樣,此命令就會提供進(jìn)行變更的效果。而–eval 選項(xiàng)也可以通過crsctl 命令來使用。
例如,如果你想要知道停止一個(gè)特定數(shù)據(jù)庫會發(fā)生什么,那么你就可以使用以下示例:
$ ./srvctl stop database –d MYDB –eval
$ ./crsctl eval modify resource -attr “value”
srvctl的改進(jìn)
對于srvctl命令還有一些新增功能。以下演示了如何用這些新增功能停止或啟動集群上的數(shù)據(jù)庫或?qū)嵗Y源。
srvctl start database|instance –startoption NOMOUNT|MOUNT|OPEN
srvctl stop database|instance –stopoption NOMOUNT|MOUNT|OPEN
四、第四部分包括:
如何在子表包含數(shù)據(jù)的情況下截?cái)嘁粋€(gè)主表
限制Top-N查詢結(jié)果的記錄
SQL*Plus的各種增強(qiáng)
會話級序列
WITH語句的改善
擴(kuò)展數(shù)據(jù)類型
截?cái)啾鞢ASCADE
在之前的版本中,在子表引用一個(gè)主表以及子表存在記錄的情況下,是不提供截?cái)啻酥鞅聿僮鞯摹6?2c中的帶有CASCADE操作的TRUNCATE TABLE可以截?cái)嘀鞅碇械挠涗?,并自動對子表進(jìn)行遞歸截?cái)?,并作為DELETE ON CASCADE服從外鍵引用。由于這是應(yīng)用到所有子表的,所以對遞歸層級的數(shù)量是沒有CAP的,可以是孫子表或是重孫子表等等。
這一增強(qiáng)擯棄了要在截?cái)嘁粋€(gè)主表之前先截?cái)嗨凶颖碛涗浀那疤?。新的CASCADE語句同樣也可以應(yīng)用到表分區(qū)和子表分區(qū)等。
SQL> TRUNCATE TABLE CASCADE;
SQL> TRUNCATE TABLE PARTITION CASCADE;
如果對于子表的外鍵沒有定義ON DELETE CASCADE 選項(xiàng),便會拋出一個(gè)ORA-14705錯(cuò)誤。
對Top-N查詢結(jié)果限制記錄
在之前的版本中有多種間接手段來對頂部或底部記錄獲取Top-N查詢結(jié)果。而在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的標(biāo)準(zhǔ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;
所有這些限制同樣可以很好的應(yīng)用于PL/SQL塊。
BEGIN
SELECT sal BULK COLLECT INTO sal_v FROM EMP
FETCH FIRST 100 ROWS ONLY;
END;
對SQL*Plus的各種增強(qiáng)
SQL*Plus的隱式結(jié)果:12c中,在沒有實(shí)際綁定某個(gè)RefCursor的情況下,SQL*Plus從一個(gè)PL/SQL塊的一個(gè)隱式游標(biāo)返回結(jié)果。這一新的dbms_sql.return_result過程將會對PL/SQL 塊中由SELECT 語句查詢所指定的結(jié)果加以返回并進(jìn)行格式化。以下代碼對此用法進(jìn)行了描述:
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;
當(dāng)此過程得以執(zhí)行,會在SQL*Plus上返回格式化的記錄。
顯示不可見字段:在本系列文章的第一部分,我已經(jīng)對不可見字段的新特性做了相關(guān)闡述。當(dāng)字段定義為不可見時(shí),在描述表結(jié)構(gòu)時(shí)它們將不會顯示。然而,你可以通過在SQL*Plus提示符下進(jìn)行以下設(shè)置來顯示不可見字段的相關(guān)信息:
SQL> SET COLINVISIBLE ON|OFF
以上設(shè)置僅對DESCRIBE 命令有效。目前它還無法對不可見字段上的SELECT 語句結(jié)果產(chǎn)生效果。
會話級序列
在12c中現(xiàn)在可以創(chuàng)建新的會話級數(shù)據(jù)庫序列來支持會話級序列值。這些序列的類型在有會話級的全局臨時(shí)表上最為適用。
會話級序列會產(chǎn)生一個(gè)獨(dú)特范圍的值,這些值是限制在此會話內(nèi)的,而非超越此會話。一旦會話終止,會話序列的狀態(tài)也會消失。以下示例解釋了創(chuàng)建一個(gè)會話級序列:
SQL> CREATE SEQUENCE my_seq START WITH 1 INCREMENT BY 1 SESSION;
SQL> ALTER SEQUENCE my_seq GLOBAL|SESSION;
對于會話級序列,CACHE, NOCACHE, ORDER 或 NOORDER 語句會予以忽略。
WITH語句的改善
在12c中,你可以用SQL更快的運(yùn)行PL/SQL函數(shù)或過程,這些是由SQL語句的WITH語句加以定義和聲明的。以下示例演示了如何在WITH語句中定義和聲明一個(gè)過程或函數(shù):
WITH
PROCEDURE|FUNCTION test1 (…)
BEGIN
END;
SELECT FROM table_name;
/
盡管你不能在PL/SQL單元直接使用WITH語句,但其可以在PL/SQL單元中通過一個(gè)動態(tài)SQL加以引用。
擴(kuò)展數(shù)據(jù)類型
在12c中,與早期版本相比,諸如VARCHAR2, NAVARCHAR2以及 RAW這些數(shù)據(jù)類型的大小會從4K以及2K字節(jié)擴(kuò)展至32K字節(jié)。只要可能,擴(kuò)展字符的大小會降低對LOB數(shù)據(jù)類型的使用。為了啟用擴(kuò)展字符大小,你必須將MAX_STRING_SIZE的初始數(shù)據(jù)庫參數(shù)設(shè)置為EXTENDED。
要使用擴(kuò)展字符類型需要執(zhí)行以下過程:
1. 關(guān)閉數(shù)據(jù)庫
2. 以升級模式重啟數(shù)據(jù)庫
3. 更改參數(shù): ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED;
4. 執(zhí)行 utl32k.sql as sysdba : SQL> @?/rdbms/admin/utl32k.sql
5. 關(guān)閉數(shù)據(jù)庫
6. 以讀寫模式重啟數(shù)據(jù)庫
對比LOB數(shù)據(jù)類型,在ASSM表空間管理中,擴(kuò)展數(shù)據(jù)類型的字段以SecureFiles LOB加以存儲,而在非ASSM表空間管理中,它們則是以BasciFiles LOB進(jìn)行存儲的。
注意:一旦更改,你就不能再將設(shè)置改回STANDARD。
關(guān)于oracle12c新特性指的是哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。