1. 內容提要sql
1) 表分區維護的加強。數據庫
2) 數據庫升級改善。網絡
3) 跨網絡還原/恢復數據文件。併發
4) 數據泵的加強。工具
5) 實時ADDM。post
6) 併發統計信息收集。性能
2. 表分區維護的加強學習
在其餘文章中,我說明了如何在線或離線把一個表分區或子分區移到一個不一樣的表空間。這部分,你將學習和表分區相關的其餘方面的加強。日誌
2.1. 增長多個新分區。orm
12c R1以前,在一個已分區表上只能一次增長一個分區。爲了增長多個分區,你必須每增長一個新分區單獨執行一個ALTER TABLE ADD PARTITION語句。 12c支持用一個ALTER TABLE ADD PARTITION命令增長多個新分區。下例說明如何往一個已有分區表上增長多個新分區:
SQL> CREATE TABLE emp_part(eno number(8), ename varchar2(40), salnumber (6))
PARTITION BY RANGE (sal)
(PARTITION p1 VALUES LESS THAN(10000),
PARTITION p2 VALUES LESS THAN(20000),
PARTITION p3 VALUES LESS THAN(30000)
);
下面讓咱們增長几個新分區:
SQL> ALTER TABLE emp_part ADD PARTITION
PARTITION p4 VALUES LESS THAN(35000),
PARTITION p5 VALUES LESS THAN(40000);
一樣,你能給列表和系統分區表上增長多個新分區,前提是這些分區表上不存在maxvalue分區。
2.2. 若是刪除和截斷多個分區或子分區
做爲數據維護的一部分,典型的你能夠刪除或截斷分區表上分區。12c R1前,只能一次一個的刪除或截斷分區表的分區。12c中,用一個ALTER TABLE table_name {DROP|TRUNCATE}PARTITIONS 命令能夠刪除或截斷多個分區或子分區。下例說明如何刪除或截斷分區表上的多個分區:
SQL> ALTER TABLEemp_part DROP PARTITIONS p4,p5;
SQL> ALTER TABLEemp_part TRUNCATE PARTITONS p4,p5;
爲了同時也維護索引,使用UPDATE INDEXES or UPDATE GLOBAL INDEXES 子句,
以下:
SQL> ALTERTABLE emp_part DROP PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;
SQL> ALTERTABLE emp_part TRUNCATE PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;
若是你刪除或截斷分區時不帶UPDATE GLOBAL INDEXES子句,你能夠查詢USER_INDEXES或USER_IND_PARTITIONS字典視圖的ORPHANED_ENTRIES,以便發現索引是否包含陳舊索引項。
2.3. 將一個分區劈成多個新分區
12c中,新加強的SPLITPARTITION子句可讓你用一個命令將一個特定的分區或子分區劈成多個新分區:
SQL> CREATE TABLE emp_part
(eno number(8), enamevarchar2(40), sal number (6))
PARTITION BY RANGE (sal)
(PARTITION p1 VALUES LESS THAN(10000),
PARTITION p2 VALUES LESS THAN(20000),
PARTITION p_max VALUES LESSTHAN (MAXVALUE)
);
SQL> ALTER TABLE emp_part SPLIT PARTITION p_max INTO
(PARTITION p3 VALUES LESS THAN(25000),
PARTITION p4 VALUES LESS THAN(30000), PARTITION p_max);
2.4. 將多個分區合併成一個分區
你能夠用一個ALTER TBALE MERGE PARTITIONS語句將多個分區合併成一個分區:
SQL> CREATETABLE emp_part
(eno number(8), ename varchar2(40), salnumber (6))
PARTITION BY RANGE (sal)
(PARTITION p1 VALUES LESS THAN (10000),
PARTITION p2 VALUES LESS THAN (20000),
PARTITION p3 VALUES LESS THAN (30000),
PARTITION p4 VALUES LESS THAN (40000),
PARTITION p5 VALUES LESS THAN (50000),
PARTITION p_max (MAXVALUE)
);
SQL> ALTERTABLE emp_part MERGE PARTITIONS p3,p4,p5 INTO PARTITION p_merge;
若是這些分區包含分區鍵值範圍,你也能用下例命令:
SQL> ALTERTABLE emp_part MERGE PARTITIONS p3 TO p5 INTO PARTITION p_merge;
3. 數據庫升級改善
不管什麼時候新版本發佈,每一個DBA必須馬上面對的就是升級。這部分,將會說明兩個新引進的升級到12c的改善。
3.1. 升級前腳本
12c R1中,一個新的、獲得極大改善的升級前信息腳本preupgrd.sql,替換了以前的utlu[121]s.sql腳本。除了作升級前檢查驗證,該腳本還能以fixup腳本的方式解決升級過程先後產生的各類問題。產生的fixup腳本能被執行來解決不一樣層面的問題。例如:升級前和升級後。當手工升級數據庫時,開始實際數據庫升級前,腳本必須被手工運行。但是,當用DBUA工具升級數據庫時,會被做爲升級過程的一部分,自動運行升級前腳本,當出現任何錯誤時,都會提示你運行fixup腳本。下例說明如何運行該腳本:
SQL> @$ORACLE_12GHOME/rdbms/admin/preupgrd.sql
上面腳本會產生一個日誌文件和一個[pre/post]upgrade_fixup.sql 腳本。全部這些文件都在$ORACLE_BASE/cfgtoollogs 目錄下。在你繼續真正升級前,你該查看日誌並運行日誌中推薦的操做和腳原本解決存在的任何問題。
注意:確信你把preupgrd.sql和utluppkg.sql 腳本都從12c的Oracle的主目錄 home/rdbms/admin拷貝到了目前的數據庫/rdbms/admin位置。
3.2. 並行更新功能
數據庫升級時間和數據庫配置的組件多少成正比,而不是和數據庫大小成正比。以前的版本,沒有直接或間接可用選項來並行快速的完成整個升級過程。
12c R1中的catctl.pl (並行升級功能)替換了以前的catupgrd.sql腳本,12c R1中的腳本有個選項用以並行升級,從而能夠縮短完成整個升級過程所需的時間。下面的過程說明如何啓動並行(3個進程)升級功能,以upgrade模式啓動數據庫後再運行下列命令:
cd $ORACLE_12_HOME/perl/bin
$ ./perl catctl.pl –n 3 -catupgrd.sql
當數據庫被手工升級時,以上兩個步驟須要被顯式運行。然而,DBUA工具包含上面這兩個變化。
4. 經過網絡還原/恢復數據文件
12c R1中,另外一個很大的加強是,你如今能夠經過服務名(service name)在主備庫之間還原或恢復數據文件,控制文件,spfile,表空間或整個庫。在同步主備庫時,這是很是有用的。
當在主備庫之間發現一個很長的延遲時(gap),你再也不須要複雜的前滾過程來填充主備庫間的延遲了。RMAN能經過網絡獲得增量備份而且在物理備庫上應用這些備份來恢復備庫。像已經說過的,你能用服務名直接把須要的數據文件從備庫拷貝到主庫上,例如:主庫上的一個數據文件或表空間丟了,或者沒有從備份集還原數據文件等。
下列過程說明如何用新特色執行前滾來同步主備庫:
物理備庫端:
./rman target"username/password@standby_db_tns as SYSBACKUP"
RMAN> RECOVERDATABASE FROM SERVICE primary_db_tns USING COMPRESSED BACKUPSET;
上面的例子使用備庫上的鏈接串primary_db_tns鏈接主庫來執行一個增量備份,而後把這些增量備份傳輸到備庫,並應用這些文件來同步備庫。但是,你須要確信已經在備庫端配置了 指向主庫的鏈接串primary_db_tns。
下例中,我將經過從備庫獲取並恢復主庫上丟失的數據文件來講明一個場景:
主庫端:
./rman target"username/password@primary_db_tns as SYSBACKUP"
RMAN> RESTOREDATAFILE ‘+DG_DISKGROUP/DBANME/DATAFILE/filename’ FROM SERVICE standby_db_tns;
5. 數據泵加強
這部分主要介紹數據泵方面的加強。有不少有用的加強,例如:導出時將試圖轉化爲表,導入時關閉日誌等。
5.1. 關閉日誌產生
數據泵導入被新引進的TRANSFORM選項支持在導入過程當中不產生對象redo。當肯定TRANSFORM選項的值爲DISABLE_ARCHIVE_LOGGING時,整個導入過程當中上下文中對象將不產生redo。當導入大表時,該特色會很大的減輕系統壓力和產生的redo,從而減速導入進程。該特色能夠應用到表和索引,下例說明了該特色:
$ ./impdp directory=dpump dumpfile=abcd.dmp logfile=abcd.logTRANSFORM=DISABLE_ARCHIVE_LOGGING:Y
5.2. 把視圖轉換爲表
這是數據泵的另外一個加強。利用VIEWS_AS_TABLES選項,你能把視圖導出爲一個表。下列例子描述瞭如何在導出期間將視圖導出爲一個表:
$ ./impdp directory=dpump dumpfile=abcd.dmp logfile=abcd.logTRANSFORM=DISABLE_ARCHIVE_LOGGING:Y
6. 實時進行ADDM分析
經過像AWR,ASH和ADDM等工具去分析過去和目前數據庫健康狀態是每一個DBA生活的一部分。雖然每一個工具能在各個層面來測量數據庫的總體健康和性能,但當整個數據庫沒反應或」hang」時,每個工具可使用。
當你碰到數據庫沒反應或被hang住時,若是你已經配置了Oracle企業管理器12c雲控制,你就能診斷嚴重的性能問題。這將會給你提供一個數據庫中當前什麼在發生的總體描述,也許也會給你提供一個解決問題的補救措施。
下面一步步的說明如何利用Oracle企業管理器雲控制來分析數據庫狀態:
1) 在存取數據庫主頁上從Performance菜單選擇EmergencyMonitoring選項,這將會顯示hang分析表中排在最前面的阻塞會話。
2) 從Performance選擇Real-TimeADDM選項來執行實時ADDM分析。
3) 收集性能數據後,點擊Findings頁來獲取全部發現的交互總結。
7. 並行的收集多張表的統計信息
在先前的Oracle版本中,不管何時你運行DBMS_STATS過程來收集表,索引,模式或數據庫級別的統計信息,Oracle都是一次收集一張表。若是表很大,那麼推薦增長並行度。12c R1中,你如今能夠同時收集多張表、分區和子分區的統計信息。 在開始使用該特色時,你必須在數據庫層面進行以下設置以啓用該特色:
SQL>ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='DEFAULT_MAIN';
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=4;
SQL>EXEC DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT', 'ALL');
SQL>EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT');