標籤:des style blog http color io os 使用 ar
本系列文章是Oracle ACE總監Syed Jaffer Hussain對Oracle資料庫12c的一些新特性總結,包括資料庫管理、RMAN、高可用性以及效能調優等內容。
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資料表空間中的,這更類似於一個通用或持久的表撤銷記錄。然而,由於在12c R1中引入了臨時undo功能,那些臨時undo記錄現在就可以儲存在暫存資料表中,而不是儲存在undo資料表空間中。臨時undo的主要好處在於:由於資訊不會寫入undo日誌,undo資料表空間的開銷得以減少並且產生的undo資料會更少。而對於在會話級還是資料庫級開啟臨時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中執行備份和恢複相關的任務。
8. 如何在RMAN中執行SQL語句
$ ./rman target "username/password as SYSBACKUP"
在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中的表恢複和分區恢複
OracleDatabase Backup主要分為兩類:邏輯和物理備份。每種備份類型都有其自身的優缺點。在之前的版本中,利用現有物理備份來恢複表或分區是不可行的。為了恢複特定對象,邏輯備份是必需的。對於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檔案系統下有足夠的可用空間,同時對資料泵檔案也有同樣保證
•必須要存在一份完整的Database Backup,或者至少是要有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記憶體。
原文連結:http://www.searchdatabase.com.cn/showcontent_74721.htm
Oracle Database 12c 新特性總結(一)