共計 5054 個字符,預(yù)計需要花費(fèi) 13 分鐘才能閱讀完成。
這篇文章將為大家詳細(xì)講解有關(guān) Oracle 數(shù)據(jù)庫 12c 新特性有哪些,丸趣 TV 小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
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ù)文件正在傳輸時,終端用戶可以執(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ù)文件從一個 ASM 磁盤群組遷移至另一個 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ù)制文件到一個新路徑,同時在原路徑下保留其拷貝:
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)視圖來移動文件時,你可以監(jiān)控這一過程。另外,你也可以引用 alert.log,Oracle 會在其中記錄具體的行為。
2. 表分區(qū)或子分區(qū)的在線遷移
在 Oracle 12c R1 中遷移表分區(qū)或子分區(qū)到不同的表空間不再需要復(fù)雜的過程。與之前版本中未分區(qū)表進(jìn)行在線遷移類似,表分區(qū)或子分區(qū)可以在線或是離線遷移至一個不同的表空間。當(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;
第一個示例是用來在離線狀況下將一個表分區(qū)或子分區(qū)遷移至一個新的表空間。第二個示例是在線遷移表分區(qū)或子分區(qū)并維護(hù)表上任何本地或全局的索引。此外,當(dāng)使用 ONLINE 語句時,DML 操作是不會中斷的。
重要提示:
UPDATE INDEXES 語句可以避免出現(xiàn)表中任何本地或全局索引無法使用的情況。
表的在線遷移限制也適用于此。
引入加鎖機(jī)制來完成這一過程,當(dāng)然它也會導(dǎo)致性能下降并會產(chǎn)生大量的 redo,這取決于分區(qū)和子分區(qū)的大小。
3. 不可見字段
在 Oracle 11g R1 中,Oracle 以不可見索引和虛擬字段的形式引入了一些不錯的增強(qiáng)特性。繼承前者并發(fā)揚(yáng)光大,Oracle 12c R1 中引入了不可見字段思想。在之前的版本中,為了隱藏重要的數(shù)據(jù)字段以避免在通用查詢中顯示,我們往往會創(chuàng)建一個視圖來隱藏所需信息或應(yīng)用某些安全條件。
在 12c R1 中,你可以在表中創(chuàng)建不可見字段。當(dāng)一個字段定義為不可見時,這一字段就不會出現(xiàn)在通用查詢中,除非在 SQL 語句或條件中有顯式的提及這一字段,或是在表定義中有 DESCRIBED。要添加或是修改一個不可見字段是非常容易的,反之亦然。
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ū)字段同樣也可以定義為不可見類型。但臨時表,外部表和集群表并不支持不可見字段。
4. 相同字段上的多重索引
在 Oracle 12c R1 之前,一個字段是無法以任何形式擁有多個索引的。或許有人會想知道為什么通常一個字段需要有多重索引,事實(shí)上需要多重索引的字段或字段集合是很多的。在 12c R1 中,只要索引類型的形式不同,一個字段就可以包含在一個 B -tree 索引中,同樣也可以包含在 Bitmap 索引中。注意,只有一種類型的索引是在給定時間可用的。
5. DDL 日志
在之前的版本中沒有可選方法來對 DDL 操作進(jìn)行日志記錄。而在 12c R1 中,你現(xiàn)在可以將 DDL 操作寫入 xml 和日志文件中。這對于了解誰在什么時間執(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 和日志文件中。一個 xml 中包含 DDL 命令,IP 地址,時間戳等信息。這可以幫助確定在什么時候?qū)τ脩艋虮磉M(jìn)行了刪除亦或是一條 DDL 語句在何時觸發(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. 臨時 undo
每個 Oracle 數(shù)據(jù)庫包含一組與系統(tǒng)相關(guān)的表空間,例如 SYSTEM,SYSAUX,UNDO TEMP,并且它們在 Oracle 數(shù)據(jù)庫中每個都用于不同的目的。在 Oracle 12c R1 之前,臨時表生成的 undo 記錄是存儲在 undo 表空間里的,通用表和持久表的 undo 記錄也是類似的。而在 12c R12 的臨時 undo 功能中,臨時 undo 記錄可以存儲在一個臨時表中,而無需再存儲在 undo 表空間內(nèi)。這樣做的主要好處在于:減少 undo 表空間,由于信息不會被記錄在 redo 日志中,所以減少了 redo 數(shù)據(jù)的生成。你可以在會話級別或者數(shù)據(jù)庫級別來啟用臨時 undo 選項。
啟用臨時 undo 功能
要使用這一新功能,需要做以下設(shè)置:
兼容性參數(shù)必須設(shè)置為 12.0.0 或更高
啟用 TEMP_UNDO_ENABLED 初始化參數(shù)
由于臨時 undo 記錄現(xiàn)在是存儲在一個臨時表空間中的,你需要有足夠的空間來創(chuàng)建這一臨時表空間
對于會話級,你可以使用:ALTER SYSTEM SET TEMP_UNDO_ENABLE=TRUE;
查詢臨時 undo 信息
以下所列的字典視圖是用來查看或查詢臨時 undo 數(shù)據(jù)相關(guān)統(tǒng)計信息的:
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)建一個本地用戶并在不授予其 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 備份將一個特定的表或分區(qū)恢復(fù)到某個時間點(diǎn)或 SCN。
當(dāng)通過 RMAN 發(fā)起一個表或分區(qū)恢復(fù)時,大概流程是這樣的:
確定要恢復(fù)表或分區(qū)所需的備份集
在恢復(fù)表或分區(qū)的過程中,一個輔助數(shù)據(jù)庫會臨時設(shè)置為某個時間點(diǎn)
利用數(shù)據(jù)泵將所需表或分區(qū)導(dǎo)出到一個 dumpfile
你可以從源數(shù)據(jù)庫導(dǎo)入表或分區(qū) (可選)
在恢復(fù)過程中進(jìn)行重命名操作
以下是一個通過 RMAN 對表進(jìn)行時間點(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.(此選項避免自動導(dǎo)入表)
REMAP TABLE username.tablename : username.new_table_name — can rename table with this option.(此選項可以對表重命名)
重要提示:
確保對于輔助數(shù)據(jù)庫在 /u01 文件系統(tǒng)下有足夠的可用空間,同時對數(shù)據(jù)泵文件也有同樣保證
必須要存在一份完整的數(shù)據(jù)庫備份,或者至少是要有 SYSTEM 相關(guān)的表空間備份
以下是在 RMAN 中應(yīng)用表或分區(qū)恢復(fù)的限制和約束:
SYS 用戶表或分區(qū)無法恢復(fù)
存儲于 SYSAUX 和 SYSTEM 表空間下的表和分區(qū)無法恢復(fù)
當(dāng) REMAP 選項用來恢復(fù)的表包含 NOT NULL 約束時,恢復(fù)此表是不可行的
10. 限制 PGA 的大小
在 Oracle 12c R1 之前,沒有選項可以用來限制和控制 PGA 的大小。雖然你設(shè)置某個大小為 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
重要提示:
當(dāng)超過了當(dāng)前 PGA 的限制,Oracle 會自動終止 / 中止會話或進(jìn)程以保持最合適的 PGA 內(nèi)存。
關(guān)于“Oracle 數(shù)據(jù)庫 12c 新特性有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。