【IT168 評論】甲骨文公司近日正式發(fā)布了新版旗艦級數(shù)據(jù)庫Oracle Database 12c,,而隨著產(chǎn)品正式GA,,相關(guān)技術(shù)文檔也披露了更多關(guān)于12c數(shù)據(jù)庫的細節(jié)。本系列文章是Oracle ACE總監(jiān)Syed Jaffer Hussain對Oracle數(shù)據(jù)庫12c的一些新特性總結(jié),,包括數(shù)據(jù)庫管理,、RMAN、高可用性以及性能調(diào)優(yōu)等內(nèi)容,。 1. 在線重命名和重新定位活躍數(shù)據(jù)文件 不同于以往的版本,,在Oracle數(shù)據(jù)庫12c R1版本中對數(shù)據(jù)文件的遷移或重命名不再需要太多繁瑣的步驟,即把表空間置為只讀模式,,接下來是對數(shù)據(jù)文件進行離線操作,。在12c R1中,可以使用ALTER DATABASE MOVE DATAFILE這樣的SQL語句對數(shù)據(jù)文件進行在線重命名和移動,。而當(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ū)表進行在線遷移類似,,表分區(qū)或子分區(qū)可以在線或是離線遷移至一個不同的表空間,。當(dāng)指定了ONLINE語句,所有的DML操作可以在沒有任何中斷的情況下,,在參與這一過程的分區(qū)或子分區(qū)上執(zhí)行,。與此相反,分區(qū)或子分區(qū)遷移如果是在離線情況下進行的,,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ū)并維護表上任何本地或全局的索引,。此外,,當(dāng)使用ONLINE語句時,DML操作是不會中斷的,。 重要提示: UPDATE INDEXES語句可以避免出現(xiàn)表中任何本地或全局索引無法使用的情況,。 表的在線遷移限制也適用于此。 引入加鎖機制來完成這一過程,,當(dāng)然它也會導(dǎo)致性能下降并會產(chǎn)生大量的redo,,這取決于分區(qū)和子分區(qū)的大小。 3. 不可見字段 在Oracle 11g R1中,,Oracle以不可見索引和虛擬字段的形式引入了一些不錯的增強特性,。繼承前者并發(fā)揚光大,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之前,,一個字段是無法以任何形式擁有多個索引的,。或許有人會想知道為什么通常一個字段需要有多重索引,,事實上需要多重索引的字段或字段集合是很多的,。在12c R1中,只要索引類型的形式不同,,一個字段就可以包含在一個B-tree索引中,,同樣也可以包含在Bitmap索引中。注意,,只有一種類型的索引是在給定時間可用的,。 5. DDL日志 在之前的版本中沒有可選方法來對DDL操作進行日志記錄。而在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行了刪除亦或是一條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記錄是由臨時表產(chǎn)生并存儲在undo表空間中的,這更類似于一個通用或持久的表撤銷記錄,。然而,,由于在12c R1中引入了臨時undo功能,那些臨時undo記錄現(xiàn)在就可以存儲在臨時表中,,而不是存儲在undo表空間中,。臨時undo的主要好處在于:由于信息不會寫入undo日志,undo表空間的開銷得以減少并且產(chǎn)生的undo數(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ù),。 8. 如何在RMAN中執(zhí)行SQL語句 $ ./rman target "username/password as SYSBACKUP" 在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)缺點。在之前的版本中,,利用現(xiàn)有物理備份來恢復(fù)表或分區(qū)是不可行的,。為了恢復(fù)特定對象,邏輯備份是必需的,。對于12c R1,,你可以在發(fā)生drop或truncate的情況下從RMAN備份將一個特定的表或分區(qū)恢復(fù)到某個時間點或SCN。 當(dāng)通過RMAN發(fā)起一個表或分區(qū)恢復(fù)時,,大概流程是這樣的: 確定要恢復(fù)表或分區(qū)所需的備份集 在恢復(fù)表或分區(qū)的過程中,,一個輔助數(shù)據(jù)庫會臨時設(shè)置為某個時間點 利用數(shù)據(jù)泵將所需表或分區(qū)導(dǎo)出到一個dumpfile 你可以從源數(shù)據(jù)庫導(dǎo)入表或分區(qū)(可選) 在恢復(fù)過程中進行重命名操作 以下是一個通過RMAN對表進行時間點恢復(fù)的示例(確保你已經(jīng)對稍早的數(shù)據(jù)庫進行了完整備份): 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ù)工作負載和需求來動態(tài)地增大或減小PGA的大小,。而在12c中,你可以通過開啟自動PGA管理來對PGA設(shè)定硬性限制,,這需要對PGA_AGGREGATE_LIMIT 參數(shù)進行設(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會自動終止/中止會話或進程以保持最合適的PGA內(nèi)存。 原文鏈接:http://www./showcontent_74721.htm |
|
來自: qrzhcd > 《數(shù)據(jù)庫》