1. 數據文件在線重命名和遷移數據庫
不想先前的版本,在Oracle12cR1中,數據文件的遷移或重命名再也不要求一系列的步驟,例如:將表空間至於只讀模式,而後數據文件邏輯等操做。在12cR1中,數據文件能經過SQL語句「ALTERDATABASE MOVE DATAFILE」很容易的在線完成。在移動數據文件的過程當中,用戶能夠執行查詢,DML和DDL任務。另外,數據文件能在存儲間遷移,例如:從非ASM到ASM,反之亦然。安全
1.1. 重命名數據文件:session
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';spa
數據文件從一個ASM磁盤組遷移到另外一個:日誌
SQL> ALTER DATABASE MOVE DATAFILE'+DG_DATA/users_01.dbf ' TO '+DG_DATA_02';xml
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內存的會話。