您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Oracle 數據庫12c新特性有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
1. 在線重命名和重新定位活躍數據文件
不同于以往的版本,在Oracle數據庫12c R1版本中對數據文件的遷移或重命名不再需要太多繁瑣的步驟,即把表空間置為只讀模式,接下來是對數據文件進行離線操作。在12c R1中,可以使用ALTER DATABASE MOVE DATAFILE這樣的SQL語句對數據文件進行在線重命名和移動。而當此數據文件正在傳輸時,終端用戶可以執行查詢,DML以及DDL方面的任務。另外,數據文件可以在存儲設備間遷移,如從非ASM遷移至ASM,反之亦然。
重命名數據文件:
SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users01.dbf' TO '/u00/data/users_01.dbf'; |
從非ASM遷移數據文件至ASM:
SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users_01.dbf' TO '+DG_DATA'; |
將數據文件從一個ASM磁盤群組遷移至另一個ASM磁盤群組:
SQL> ALTER DATABASE MOVE DATAFILE '+DG_DATA/DBNAME/DATAFILE/users_01.dbf ' TO '+DG_DATA_02'; |
在數據文件已存在于新路徑的情況下,以相同的命名將其覆蓋:
SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users_01.dbf' TO '/u00/data_new/users_01.dbf' REUSE; |
復制文件到一個新路徑,同時在原路徑下保留其拷貝:
SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users_01.dbf' TO '/u00/data_new/users_01.dbf' KEEP; |
當通過查詢v$session_longops動態視圖來移動文件時,你可以監控這一過程。另外,你也可以引用alert.log,Oracle會在其中記錄具體的行為。
2. 表分區或子分區的在線遷移
在Oracle 12c R1中遷移表分區或子分區到不同的表空間不再需要復雜的過程。與之前版本中未分區表進行在線遷移類似,表分區或子分區可以在線或是離線遷移至一個不同的表空間。當指定了ONLINE語句,所有的DML操作可以在沒有任何中斷的情況下,在參與這一過程的分區或子分區上執行。與此相反,分區或子分區遷移如果是在離線情況下進行的,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; |
第一個示例是用來在離線狀況下將一個表分區或子分區遷移至一個新的表空間。第二個示例是在線遷移表分區或子分區并維護表上任何本地或全局的索引。此外,當使用ONLINE語句時,DML操作是不會中斷的。
重要提示:
UPDATE INDEXES語句可以避免出現表中任何本地或全局索引無法使用的情況。
表的在線遷移限制也適用于此。
引入加鎖機制來完成這一過程,當然它也會導致性能下降并會產生大量的redo,這取決于分區和子分區的大小。
3. 不可見字段
在Oracle 11g R1中,Oracle以不可見索引和虛擬字段的形式引入了一些不錯的增強特性。繼承前者并發揚光大,Oracle 12c R1中引入了不可見字段思想。在之前的版本中,為了隱藏重要的數據字段以避免在通用查詢中顯示,我們往往會創建一個視圖來隱藏所需信息或應用某些安全條件。
在12c R1中,你可以在表中創建不可見字段。當一個字段定義為不可見時,這一字段就不會出現在通用查詢中,除非在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語句中顯式提及不可見字段名以將不可見字段插入到數據庫中。虛擬字段和分區字段同樣也可以定義為不可見類型。但臨時表,外部表和集群表并不支持不可見字段。
4. 相同字段上的多重索引
在Oracle 12c R1之前,一個字段是無法以任何形式擁有多個索引的。或許有人會想知道為什么通常一個字段需要有多重索引,事實上需要多重索引的字段或字段集合是很多的。在12c R1中,只要索引類型的形式不同,一個字段就可以包含在一個B-tree索引中,同樣也可以包含在Bitmap索引中。注意,只有一種類型的索引是在給定時間可用的。
5. DDL日志
在之前的版本中沒有可選方法來對DDL操作進行日志記錄。而在12c R1中,你現在可以將DDL操作寫入xml和日志文件中。這對于了解誰在什么時間執行了create或drop命令是十分有用的。要開啟這一功能必須對ENABLE_DDL_LOGGING 初始參數加以配置。這一參數可以在數據庫或會話級加以設置。當此參數為啟用狀態,所有的DDL命令會記錄在$ORACLE_BASE/diag/rdbms/DBNAME/log|ddl 路徑下的xml和日志文件中。一個xml中包含DDL命令,IP地址,時間戳等信息。這可以幫助確定在什么時候對用戶或表進行了刪除亦或是一條DDL語句在何時觸發。
開啟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數據庫包含一組與系統相關的表空間,例如SYSTEM,SYSAUX,UNDO & TEMP,并且它們在Oracle數據庫中每個都用于不同的目的。在Oracle 12c R1之前,臨時表生成的undo記錄是存儲在undo表空間里的,通用表和持久表的undo記錄也是類似的。而在12c R12的臨時undo功能中,臨時undo記錄可以存儲在一個臨時表中,而無需再存儲在undo表空間內。這樣做的主要好處在于:減少undo表空間,由于信息不會被記錄在redo日志中,所以減少了redo數據的生成。你可以在會話級別或者數據庫級別來啟用臨時undo選項。
啟用臨時undo功能
要使用這一新功能,需要做以下設置:
兼容性參數必須設置為12.0.0或更高
啟用 TEMP_UNDO_ENABLED 初始化參數
由于臨時undo記錄現在是存儲在一個臨時表空間中的,你需要有足夠的空間來創建這一臨時表空間
對于會話級,你可以使用:ALTER SYSTEM SET TEMP_UNDO_ENABLE=TRUE;
查詢臨時undo信息
以下所列的字典視圖是用來查看或查詢臨時undo數據相關統計信息的:
V$TEMPUNDOSTAT
DBA_HIST_UNDOSTAT
V$UNDOSTAT
要禁用此功能,你只需做以下設置:
SQL> ALTER SYSTEM|SESSION SET TEMP_UNDO_ENABLED=FALSE; |
7. 備份特定用戶特權
在11g R2中,引入了SYSASM特權來執行ASM的特定操作。同樣地,在12c中引入了SYSBACKUP特權用來在 RMAN中執行備份和恢復命令。因此,你可以在數據庫中創建一個本地用戶并在不授予其SYSDBA權限的情況下,通過授予SYSBACKUP權限讓其能夠在RMAN中執行備份和恢復相關的任務。
$ ./rman target "username/password as SYSBACKUP" |
8. 如何在RMAN中執行SQL語句
在12c中,你可以在不需要SQL前綴的情況下在RMAN中執行任何SQL和PL/SQL命令,即你可以從RMAN直接執行任何SQL和PL/SQL命令。如下便是在RMAN中執行SQL語句的示例:
RMAN> SELECT username,machine FROM v$session; RMAN> ALTER TABLESPACE users ADD DATAFILE SIZE 121m; |
9. RMAN中的表恢復和分區恢復
Oracle數據庫備份主要分為兩類:邏輯和物理備份。每種備份類型都有其自身的優缺點。在之前的版本中,利用現有物理備份來恢復表或分區是不可行的。為了恢復特定對象,邏輯備份是必需的。對于12c R1,你可以在發生drop或truncate的情況下從RMAN備份將一個特定的表或分區恢復到某個時間點或SCN。
當通過RMAN發起一個表或分區恢復時,大概流程是這樣的:
確定要恢復表或分區所需的備份集
在恢復表或分區的過程中,一個輔助數據庫會臨時設置為某個時間點
利用數據泵將所需表或分區導出到一個dumpfile
你可以從源數據庫導入表或分區(可選)
在恢復過程中進行重命名操作
以下是一個通過RMAN對表進行時間點恢復的示例(確保你已經對稍早的數據庫進行了完整備份):
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.(此選項避免自動導入表) REMAP TABLE 'username.tablename': 'username.new_table_name'; -- can rename table with this option.(此選項可以對表重命名) |
重要提示:
確保對于輔助數據庫在/u01文件系統下有足夠的可用空間,同時對數據泵文件也有同樣保證
必須要存在一份完整的數據庫備份,或者至少是要有SYSTEM相關的表空間備份
以下是在RMAN中應用表或分區恢復的限制和約束:
SYS用戶表或分區無法恢復
存儲于SYSAUX和SYSTEM表空間下的表和分區無法恢復
當REMAP選項用來恢復的表包含NOT NULL約束時,恢復此表是不可行的
10. 限制PGA的大小
在Oracle 12c R1之前,沒有選項可以用來限制和控制PGA的大小。雖然你設置某個大小為PGA_AGGREGATE_TARGET 的初始參數,Oracle會根據工作負載和需求來動態地增大或減小PGA的大小。而在12c中,你可以通過開啟自動PGA管理來對PGA設定硬性限制,這需要對PGA_AGGREGATE_LIMIT 參數進行設置。因此,你現在可以通過設置新的參數來對PGA設定硬性限制以避免過度使用PGA。
SQL> ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=2G; SQL> ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=0; --disables the hard limit |
重要提示:
當超過了當前PGA的限制,Oracle會自動終止/中止會話或進程以保持最合適的PGA內存。
關于“Oracle 數據庫12c新特性有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。