Oracle12c功能增強 新特性之管理功能的增強

sqysl發表於2016-06-11

1.    資料檔案線上重新命名和遷移

不想先前的版本,在Oracle12cR1中,資料檔案的遷移或重新命名不再要求一系列的步驟,例如:將表空間至於只讀模式,然後資料檔案邏輯等操作。在12cR1中,資料檔案能透過SQL語句“ALTERDATABASE MOVE DATAFILE”很容易的線上完成。在移動資料檔案的過程中,使用者可以執行查詢,DML和DDL任務。另外,資料檔案能在儲存間遷移,例如:從非ASM到ASM,反之亦然。

1.1.   重新命名資料檔案:

SQL> ALTER DATABASE MOVE DATAFILE '/u01/data/users01.dbf'TO '/u01/data/users_02.dbf';

1.2.   從非ASM儲存遷移資料檔案到ASM:

SQL> ALTER DATABASE MOVE DATAFILE'/u01/data/users_01.dbf' TO '+DG_DATA';

資料檔案從一個ASM磁碟組遷移到另一個:

SQL> ALTER DATABASE MOVE DATAFILE'+DG_DATA/users_01.dbf ' TO '+DG_DATA_02';

1.3.   如果資料檔案在新位置也存在,則覆蓋同名的資料檔案:

SQL> ALTER DATABASE MOVE DATAFILE'/u01/data/users_01.dbf' TO '/u02/data_new/users_01.dbf' REUSE;

1.4.   資料檔案複製到新位置,舊位置保留舊的複製:

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.    表分割槽或子分割槽的線上遷移

在Oracle12c中,把表分割槽或子分割槽遷移到一個不同表空間的操作不再要求一個複雜過程。類似之前版本中線上遷移一個非分割槽表,表分割槽或子分割槽可以線上或離線遷移到一個不同的表空間中。當確定ONLINE子句時,所有在和該遷移過程相關的分割槽或子分割槽上的DML操作不會被打斷。相反,如果分割槽或子分割槽被離線遷移,所有的DML操作都不會被允許。

下面是相關例子:

SQL> ALTER TABLE table_name  MOVE PARTITION|SUBPARTITIONpartition_name  TO tablespacetablespace_name;

SQL> ALTER TABLE table_name  MOVE PARTITION|SUBPARTITIONpartition_name  TO tablespacetablespace_name UPDATE INDEXES ONLINE;

第一個例子是把表分割槽或子分割槽離線遷移到一個新表空間上。第二個例子是線上遷移表分割槽或子分割槽,並且同時維護表上的本地和全域性索引。另外,當確定ONLINE子句時,DML操作不會被打斷。

注意:

1)  UPDATEINDEXES子句將避免表上的本地和全域性索引變得不可用。

2)  表線上遷移的限制在這裡也同樣使用。

3)  在遷移過程中將會加鎖,這也許會導致效能降低,並且會產生大量的redo,這樣看分割槽或子分割槽的大小。

3.    不可見列

Oracle 11g R1中, Oracle在不可見索引和虛擬列方面引進了幾個增強。對這些特性進一步發展,Oracle12cR1中引進了不看見列的概念。還記得,在先前的版本中,為了在一個普通查詢中隱藏一些重要的資料列,我們常常建立一個檢視,以此來隱藏必要的資訊或應用一些安全條件。

12c R1中,在表中可以建一個不可見的列。當列被定義為不可見時,在普通查詢中這個列不會出現,除非該列在SQL語句或條件中被顯式的參考,或者在表定義中被DESCRIBED。增加或修改一個不可見列非常容易,反之亦然。

SQL> CREATE TABLE emp (eno number(6), ename namevarchar2(40), sal number(9) INVISIBLE);

SQL> ALTER TABLE emp MODIFY (sal visible);

為了把資料插入不可見列,你必須顯式的參考它。一個虛擬列或分割槽列也能被定義為不可見列。可是,臨時表,外部表和簇表不支援不可見列。

4.    相同列上建多個索引

Oracle 12c前,在相同列或相同一組列上不可以建立多個索引。例如:如果你在列(a)或列(a,b)上有一個索引,你就不能按照相同順序在同一列或同一組列上建立另一個索引。12c中,在同一個列或同一組列上你可以建立多個索引,只要索引型別不同就可以。可是,在任何時刻,只能有一種索引是可用的或可見的。為了測試不可見索引,你需要設定引數optimizer_use_use_invisible_indexes=true,下面是一個例子:

SQL> CREATEINDEX emp_ind1 ON EMP(ENO,ENAME);

SQL> CREATEBITMAP INDEX emp_ind2 ON EMP(ENO,ENAME) INVISIBLE;

5.    DDL日誌

先前的版本中,沒有記錄DDL操作的命令選項。12cR1中,你能把DDL操作記錄到xml和日誌檔案裡。這在想知道什麼時候,是誰執行了刪除和建立命令時會非常有用。為了開啟該特性,必須配置初始化引數ENABLE_DDL_LOGGING,該引數能在資料庫和會話級別設定。當該引數被啟用時,所有的DDL命令被記錄在$ORACLE_BASE/diag/rdbms/DBNAME/log|ddl下的xml和日誌檔案裡。每個xml檔案包含像DDL命令,IP地址,時間戳等資訊。這有助於鑑定何時刪除了使用者或表,或DDL語句何時被觸發。

5.1.   為了啟用DDL日誌:

SQL> ALTERSYSTEM|SESSION SET ENABLE_DDL_LOGGING=TRUE;

5.2.   下列DDL語句有可能在xml和日誌檔案裡被記錄:

1)  CREATE|ALTER|DROP|TRUNCATETABLE

2)  DROPUSER

3)  CREATE|ALTER|DROPPACKAGE|FUNCTION|VIEW|SYNONYM|SEQUENCE

6.    臨時Undo

每個Oracle資料庫包含一套系統相關的表空間,例如:SYSTEM, SYSAUX, UNDO & TEMP,在Oracle資料庫中每個表空間其不同的作用。Oracle12cR1之前,臨時表產生的undo記錄被儲存在undo表空間中,和普通或永久表的undo記錄很類似。可是,在12cR1中,臨時undo記錄現在能被儲存在臨時表中而不是儲存在undo表空間中。處包括:減少了undo表空間的佔用及減少了redo資料這個特性的好的產生,因為這些資訊不會被記錄在redo日誌中。你可以在會話或資料庫級別啟用臨時undo選項。

6.1.   啟用臨時undo

為了使用該新特性,需要做如下設定

1)  Compatibility引數必須被設定為12.0.0或更高。

2)  開啟TEMP_UNDO_ENABLED初始化引數。

3)  由於現在臨時undo記錄儲存在臨時表空間,你需要保證臨時表空間有足夠的空間。

4)  你能用該命令在會話級別開啟臨時undo特性:ALTERSESSION SET TEMP_UNDO_ENABLE=TRUE;

6.2.   查詢臨時undo資訊

下面被列出的字典檢視被用來瀏覽或查詢關於臨時undo資料的統計資訊:

1)  V$TEMPUNDOSTAT

2)  DBA_HIST_UNDOSTAT

3)  V$UNDOSTAT

6.3.   為了關閉該特性,你只需要做以下設定:

SQL> ALTER SYSTEM|SESSION SET TEMP_UNDO_ENABLED=FALSE;

7.    備份確定的使用者許可權

在11g R2中,SYSASM許可權被引進來執行ASM特定的操作。類似的,在12c中,也引進了執行備份和恢復的特定操作的許可權SYSBACKUP,以便在RMAN中執行備份和恢復操作。所以,你可以在資料庫中建立一個本地使用者,然後不需要SYSDBA許可權,而只需授予SYSBACKUP許可權來在RMAN中執行備份和恢復任務。

$ ./rman target "username/password asSYSBACKUP"

8.    如何在RMAN中執行SQL語句

12c中,在RMAN中你可以不需要帶SQL字首來執行任何SQL和PL/SQL命令,你可以在RMAN中直接執行任何SQL和PL/SQL命令。在RMAN中如何來執行SQL語句呢?

RMAN> SELECT username,machine FROM v$session;

RMAN> ALTER TABLESPACE users ADD DATAFILE SIZE 500m;

9.    RMAN中恢復表和分割槽

Oracle資料庫備份主要分為兩類:邏輯和物理。每種備份型別有自己的優缺點。在先前的版本,用現有的物理備份恢復一個表或分割槽不合適,為了恢復一個特定的物件,你必須有邏輯備份。12cR1中,在意外刪除或截斷髮生後,你能從RMAN備份把一個特定表或分割槽恢復到一個時間點或SCN。

9.1.   當開始透過RMAN去恢復一個表或分割槽時,需執行如下操作:

1)  準備恢復表或分割槽需要的備份集。

2)  在恢復表或分割槽的過程中,需要臨時配置一個輔助資料庫到某個時間點。

3)  需要的表或分割槽需要用資料泵匯出成dumpfile。

4)  可選地,你能把表或分割槽匯入源庫。

5)  恢復時可以重新命名。

9.2.   透過RMAN對一張表進行時間點恢復的例子(確信你已有較早的全庫備份):

     RMAN> connect target"username/password as SYSBACKUP";

     RMAN> RECOVER TABLE username.tablenameUNTIL TIME 'TIMESTAMP…'

          AUXILIARYDESTINATION '/u01/tablerecovery'

          DATAPUMPDESTINATION '/u01/dpump'

          DUMPFILE 'tablename.dmp'

          NOTABLEIMPORT    --該選項避免表被自動匯入。

REMAPTABLE 'username.tablename': 'username.new_table_name';    --用該選項可以重新命名錶。

9.3.   注意:

1)  確信在/u01檔案系統下有足夠的空閒可用空間來儲存輔助資料庫和資料泵檔案。

2)  全資料庫備份必須存在,或至少SYSTEM相關的表空間存在。

下列的限制適用RMAN恢復表或分割槽:

1)  SYS使用者表或分割槽不能恢復。

2)  儲存在SYSAUX和SYSTEM表空間的表或分割槽不能恢復。

3)  不能使用REMAP選項來恢復一個包含NOT NULL約束的一個表。

10.  限制PGA大小

Oracle12c R1之前,沒有選項可以限制和控制PGA的大小。雖然你能把PGA_AGGREGATE_TARGET設定為某個確定值,Oracle還是可以基於負載和需求動態的增加或減少PGA的大小。12c中,可以透過啟用PGA自動管理來給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記憶體的會話。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-2118670/,如需轉載,請註明出處,否則將追究法律責任。

相關文章