国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle 10g第2版新特性之可管理性特性

2024-08-29 13:35:53
字體:
來源:轉載
供稿:網友
ASM 命令行工具

  Oracle 自動存儲治理(ASM;請參閱本系列的第 1 部分)是 Oracle 數據庫 10g 第 1 版中引入的專用文件系統,為數據文件的治理提供了急需的支持。

  ASM 通過 SQL 命令治理,必要時也可以通過 Oracle EnterPRise Manager 界面治理。同樣,您也可以通過 SQL 接口或 GUI 看到它。大多數 DBA 都能接受該方法,但對那些不熟悉 SQL 的系統治理員來說學習 SQL 是件不大情愿的事。而作為一名 DBA,您可能不大愿意授予非 DBA Oracle Enterprise Manager 的訪問權限。

  在 Oracle 數據庫 10g 第 2 版中,一個新的 ASM 命令行工具消除了這個隔閡。此接口稱為 asmcmd,通過它您可以對 ASM 磁盤組中存儲的數據文件(類似于文件系統和相應的文件)執行大量操作。該工具基于 Perl,因此后者應位于相應的路徑中。假如未正確設置 Perl 的路徑,則可能需要創建一個指向 Perl 所在目錄的軟鏈接,或只需修改文件 asmcmd 以反映 Perl 可執行文件的正確路徑。

  切記將 ORACLE_SID 設置為 ASM 實例(通常為 +ASM),而不是在服務器上運行的實際數據庫實例。通過鍵入以下指令調用該命令 asmcmd -p   使用 -p 選項可以在提示中顯示當前路徑。

  現在,嘗試一些非常簡單的命令。調用命令行提示 (ASMCMD >) 后,鍵入 ls 查看已掛載的所有磁盤組。 ASMCMD [+] > ls DGROUP1/ DGROUP10/ DGROUP2/ DGROUP3/ DGROUP4/ DGROUP5/ DGROUP6/ DGROUP7/ DGROUP8/ DGROUP9/   可以在此處看到在 ASM 實例中創建和掛載的所有磁盤組(DGROUP1 至 DGROUP10)。

  現在,考察磁盤組 DGROUP1。可以使用 cd 命令像更改目錄那樣更改此磁盤組。 ASMCMD [+] > cd dgroup1   甚至可以像在類 UNIX 或 Windows 這樣的操作系統中那樣,通過鍵入 cd .. 轉到父目錄。現在,確認在該磁盤組中創建了哪些文件。 ASMCMD [+dgroup1] > ls ORCL/   好了,該磁盤組的下面增加了一個目錄 ORCL。從它后面的正斜線 (/) 即可看出它是一個目錄。使用 cd 命令進入該目錄,然后執行命令 ls 顯示內容。 ASMCMD [+dgroup1] > cd orcl ASMCMD [+dgroup1/orcl] > ls CONTROLFILE/ PARAMETERFILE/ control01.ctl => +DGROUP1/ORCL/CONTROLFILE/Current.256.551928759 spfileorcl.ora => +DGROUP1/ORCL/PARAMETERFILE/spfile.257.551932189 ASMCMD [+dgroup1/orcl] >   除了 cd 和 ls 命令外,還可以使用其他類 UNIX 的命令,如 rm(用于刪除目錄或文件)、mkdir(用于創建目錄)和 find(用于查找文件和目錄)。

  以下是一些其他命令:

  lsdg(list diskgroup 的縮寫)- 要查看該 ASM 實例掛載的磁盤,使用 lsdg 命令。 ASMCMD [+] > lsdg State Type Rebal Unbal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Name MOUNTED EXTERN N N 512 4096 1048576 100 40 0 40 0 DGROUP1/ MOUNTED EXTERN N N 512 4096 1048576 100 33 0 33 0 DGROUP10/ MOUNTED EXTERN N N 512 4096 1048576 100 41 0 41 0 DGROUP2/ MOUNTED EXTERN N N 512 4096 1048576 1000 787 0 787 0 DGROUP3/ MOUNTED EXTERN N N 512 4096 1048576 1000 537 0 537 0 DGROUP4/
MOUNTED EXTERN N N 512 4096 1048576 1000 928 0 928 0 DGROUP5/ MOUNTED EXTERN N N 512 4096 1048576 1000 742 0 742 0 DGROUP6/ MOUNTED EXTERN N N 512 4096 1048576 1000 943 0 943 0 DGROUP7/ MOUNTED EXTERN N N 512 4096 1048576 1000 950 0 950 0 DGROUP8/ MOUNTED EXTERN N N 512 4096 1048576 100 33 0 33 0 DGROUP9/   除了顯示磁盤名稱以外,lsdg 還顯示了其他相關信息,如已分配的空間大小、可用空間大小和脫機磁盤。該信息簡化了問題的診斷。

  du(disk utilization 的縮寫)— 由于您已經在 ASM 磁盤上填充了數據,因此可能要查明磁盤組內部占用的空間大小。為此,可以像在 UNIX、linux 或 Windows 中那樣使用 du 命令。要了解目錄內部已使用的空間大小,只需使用 ASMCMD [+] > du /dgroup1 Used_MB Mirror_used_MB 9 9   以上命令顯示已經使用了 9MB。由于您已經使用了外部鏡像,因此所使用的磁盤空間總大小仍為 9MB (Mirror_used_MB)。假如使用了 ASM 磁盤的標準冗余參數,則該數字將有所不同。

  help — 沒有幫助那還叫什么工具!您不必記住每一個命令。只需鍵入 help 即可顯示一個命令列表。然后,可以鍵入 help <command> 查看特定命令的信息。例如,在此您要查看 mkalias 命令。 ASMCMD [+] > help mkalias mkalias <system_alias> <user_alias> Create the specified user_alias for the system_alias.The user_alias must reside in the same diskgroup as the system_alias, and only one user_alias is permitted per file.The SQLPLUS equivalent is "alter diskgroup <dg_name> add alias <user_alias> for <system_alias>".   您可以看到,這個豐富的命令集使 ASM 成為一個可治理性很高的文件系統,您甚至不需要研究 SQL 接口或 Oracle Enterprise Manager。還可以將這些命令輕松置于 shell 腳本中,從而為更多用戶所接受。

  刪除空數據文件

  假設您剛剛向錯誤目錄或表空間中添加了一個數據文件 - 一個很常見的錯誤。并不會丟失一切;由于該數據文件不包含任何數據,因此您可以輕松地刪除它,是這樣嗎?

  遺憾的是,您無法刪除它。在 Oracle 數據庫 10g 第 2 版之前,刪除數據文件的唯一有效方法就是刪除整個表空間,然后在沒有該特定文件的情況下重新構建它。假如表空間包含數據,則必須通過既費時又費力的過程將數據存儲到單獨的位置并恢復它。除了不方便以外,該過程還使表空間不可用。

  幸運地是,在 Oracle 數據庫 10g 第 2 版中,該過程已得到簡化:您可以只刪除數據文件。例如,以下命令將從表空間和服務器中刪除指定的數據文件。 alter tablespace users drop datafile '/tmp/users01.dbf' /   但存在一些限制:1數據文件必須為空才能刪除。無法刪除表空間中的最后一個數據文件;必須刪除表空間本身。同時,表空間必須處于聯機和讀寫狀態。 針對掛起/低速系統的直連 SGA 訪問

  當用戶經常抱怨數據庫運行速度慢并經常超時時,大多數 DBA 最先想到的就是以 SYSDBA 連接到數據庫并檢查等待事件。但假如實例掛起,甚至您無法登錄時又會怎樣?這種情況下,即使最強大、最優秀的故障診斷查詢也無濟于事。

  在 Oracle 數據庫 10g 第 2 版中,Oracle Enterprise Manager Grid Control 可以在苛刻環境下根據您的請求直接連接到 SGA,從而從進程狀態中直接收集數據。這個所謂的內存訪問模式增強了您有效使用 Oracle Enterprise Manager 的能力,即使在實例經歷嚴重問題的情況下也是如此。而最重要的是,這是在 SQL 訪問基本無法實現的情況下自動執行的。

  以下是它的工作方式:在 Oracle Enterprise Manager 用戶界面中,選擇 Performance 選項卡,并向下滾動到該頁面底部標記為“Related Links”的部分,這將顯示一個如下所示的屏幕。

Oracle 10g第2版新特性之可治理性特性(圖一)
點擊查看大圖


  注重名為“Monitor in Memory access Mode”的鏈接。單擊該鏈接將顯示一個如下所示的屏幕。注重“View Mode”下拉菜單,其中的“Memory Access”選項處于選中狀態。


Oracle 10g第2版新特性之可治理性特性(圖二)
點擊查看大圖


  可以使用“View Mode”下拉菜單控制 Oracle Enterprise Manager 獲取數據的方式。在本示例中,它顯示從內存獲取的數據(“Memory Access”)。還可以在此處選擇“SQL Access”以從性能視圖中進行選擇。

  請注重,內存訪問模式并不是 SQL 訪問的替代模式;它只適合在 SQL 訪問不可用的緊急情況下使用。此外,內存訪問模式只提供對分析掛起會話有幫助的數據子集。(有關該主題的具體信息請見下個部分 — “性能”特性。)

  聯機重新定義分區

  當大多數 DBA 沒有停機時間來更改表時(如對其進行分區),他們將使用聯機重新定義工具 DBMS_REDEFINITION。使用該工具,您可以更改對象定義,同時使它們保持可訪問狀態。

  但 DBMS_REDEFINITION 有一個限制,這使它在某些情況下無法提供幫助。例如,您可能要將表分區移動到不同的表空間。為此,必須移動整個表,即使已將其分區。假如該表很大,此方法將產生大量的重做和撤消操作,且無法利用現有分區。但假如一次可以移動一個分區,則可以顯著減少時間、空間和重做/撤消要求。

  使用 Oracle 數據庫 10g 第 2 版,您可以完全實現該目標:可以通過 Oracle Enterprise Manager 或命令行重新定義一個表分區。

  我們來看一個使用命令行的示例。在這里,您有一個名為 ACCOUNTS 的表,它包含 11 個分區,所有這些分區都位于同一表空間 USERS 中。您要將它們移到一個專門為該表創建的新表空間 ACCDATA 中。您將以一次移動一個分區的方式移動該表。

  首先,創建一個中間表,其結構與表 ACCOUNTS 相同但現在將數據置于 ACCDATA 表空間上。 SQL> create table accounts_int 2 tablespace accdata 3 as 4 select * from accounts 5 where 1=2 6 /
  注重分區現在所在的位置: SQL> select partition_name, tablespace_name, num_rows 2 from user_tab_partitions 3 / PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------------ ---------- P1 USERS 1014 P2 USERS 1042 P3 USERS 1002 P4 USERS 964 P5 USERS 990 P6 USERS 1042 P7 USERS 915 P8 USERS 983 P9 USERS 1047 P10 USERS 1001 PMAX USERS 0 11 rows selected.
  所有分區均位于 USERS 表空間中。現在,將第一個分區 P1 移到表空間 ACCDATA 中。 SQL> begin 2 dbms_redefinition.start_redef_table ( 3 uname => 'ARUP', 4 orig_table => 'ACCOUNTS', 5 int_table => 'ACCOUNTS_INT', 6 part_name => 'P1' 7 ); 8 end; 9 / PL/SQL procedure sUCcessfully completed.
  注重第 6 行,其中的 part_name 參數指定要重新組織的分區。假如省略該參數,則將同時重新定義所有分區。

  現在,將中間表與原始表同步。(僅當要對表 ACCOUNTS 進行更新時才需要執行該操作。) SQL> begin 2 dbms_redefinition.sync_interim_table ( 3 uname => 'ARUP', 4 orig_table => 'ACCOUNTS', 5 int_table => 'ACCOUNTS_INT', 6 part_name => 'P1'
7 ); 8 end; 9 / PL/SQL procedure successfully completed.   最后,完成重新定義過程。 SQL> begin 2 dbms_redefinition.finish_redef_table ( 3 uname => 'ARUP', 4 orig_table => 'ACCOUNTS', 5 int_table => 'ACCOUNTS_INT', 6 part_name => 'P1' 7 ); 8 end; 9 / PL/SQL procedure successfully completed.   確認分區 P1 確已移到表空間 ACCDATA 中。 SQL> select partition_name, tablespace_name, num_rows 2 from user_tab_partitions 3 / PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------------ ---------- P1 ACCDATA 1014 P2 USERS 1042 P3 USERS 1002 P4 USERS 964 P5 USERS 990 P6 USERS 1042 P7 USERS 915 P8 USERS 983 P9 USERS 1047 P10 USERS 1001 PMAX USERS 0 11 rows selected.
  行了!對其他分區重復該過程。

  相比而言,假如您重新組織了整個表,則將 (a) 需要一個大小與整個表相等的空間,(b) 為整個表生成重做(必須存在),否則將產生錯誤。但通過對單個分區執行此過程,將減少單個分區的空間要求,并減少只為該分區生成的重做。

  使用這個強大而有用的特性,您可以聯機重新組織非常大的對象(就像大多數已分區對象一樣)。此外,還應注重如何將統計信息復制到已重新定義的表上(如以上查詢中的 NUM_RWS 值所示);您不必為新建的表或分區重新生成統計信息。 在內存中檢查數據塊完整性,而非在磁盤上檢查

  活動的數據庫實例將大量數據從用戶會話移動到緩沖區緩存,從緩存移動到磁盤,反之亦然。這些移動可能使數據塊輕易遭到損壞。

  Oracle 通過在將數據塊寫入磁盤之前計算數據值的校驗和確保數據塊的完整性。同時將該檢驗和值寫入磁盤。當從磁盤中讀取該塊時,讀取過程將再次計算校驗和,然后與存儲的值進行對比。假如值已損壞,校驗和將不同,從而表明數據已經損壞。

  由于大多數操作發生在內存中,因此在源本身(即緩沖區緩存)中執行該檢查應謹慎。在 Oracle 數據庫 10g 第 2 版中,還可以通過將初始化參數 DB_BLOCK_CHECKSUM 設置為 FULL 來執行內存檢查。

  在進行此設置后,Oracle 將在進行任何更改之前計算校驗和并將該校驗和與存儲的值進行比較。該方法可以發現內存本身中的任何數據損壞,并在數據損壞時報告錯誤,這對防止磁盤級別的數據損壞以及防止將該損壞傳播到備用數據庫很幫助。

  請注重,默認情況下,該參數設置為 FALSE,這與早期版本不同,那時該參數設置為 TRUE。

  聯機限制更改

  當需要更改在創建數據庫期間定義的參數(MAXDATAFILES、MAXLOGFILES 等)時,您有哪些選擇?在 Oracle 數據庫 10g 第 2 版之前,唯一的選擇就是遵循以下步驟:
  1. 備份要跟蹤的控制文件。
  2. 在跟蹤文件中修改要更改的參數。
  3. 關閉數據庫。
  4. 開始掛載。
  5. 重新創建控制文件。
  6. 在 RESETLOGS 模式下打開數據庫。

  不用說,該方法降低了可用性。此外,由于 RMAN 將有關備份的元數據保存在控制文件和目錄中,因此該信息將在此過程中丟失。由于控制文件是在 RESETLOGS 模式下創建的,因此某些備份信息也將丟失。

  在 Oracle 數據庫 10g 第 2 版中,您無需重新創建控制文件便可更改這些參數。這樣,您將不會丟失其中存儲的 RMAN 信息。

  更快的啟動

  2GB 內存即被視為夠大的年代已像恐龍一樣成為了歷史。現在,100GB 的大型緩沖區緩存并不鮮見。實例啟動時,初始化這樣大小的緩沖區緩存可能需要數分鐘甚至數小時。

  假如您深入研究這種情況將會發現,在數據庫實例啟動時無需啟動整個緩沖區緩存。當實例啟動時,緩沖區緩存是空的;隨著用戶從表中選擇數據,該緩沖區緩存將逐漸填滿。因此,在實例啟動時無需初始化整個緩沖區緩存。

  在 Oracle 數據庫 10g 第 2 版中,此行為在啟動邏輯中受到控制。當啟動實例時,只初始化 10% 的緩沖區緩存;剩余緩沖區緩存在檢查點進程打開數據庫之后才被初始化。這個新方法顯著減少了實例啟動的時間。

  但請注重,在初始化整個緩沖區之前,無法使用緩沖區緩存大小自動調整功能。

  在 Oracle Enterprise Manager 中治理多個對象

  假如某個模式中的多個對象均無效,您通常怎么辦?您很有可能創建一個 SQL 腳本來動態生成另一個編譯這些無效對象的腳本。至少,在缺少第三方工具的情況下,這個方法還不錯。

  但假如可以為此使用 Oracle Enterprise Manager Grid Control 豈不是更好?不是只選擇一個無效對象并單擊編譯,而是同時選擇多個無效對象并通過一次單擊操作編譯它們?

  在 Oracle 數據庫 10g 第 2 版中,您確實可以這么做。如下所示,您所要做的就是選中對象旁邊的復選框。然后,就可以從“Actions”旁邊的下拉列表中選擇“Compile”來同時編譯所有對象。


Oracle 10g第2版新特性之可治理性特性(圖三)
點擊查看大圖


  除了編譯以外,您還可以執行大量其他操作,如創建 DDL 或刪除對象。

  xml 格式的審計跟蹤

  假如您長期以來一直在使用 Oracle 中內置的審計工具則可能會注重到,一個非常有用的特性就是能夠將審計跟蹤寫入一個文件系統中。將條目寫入文件系統而非數據庫本身中可以建立額外級別的安全性。

  您所要做的就是設置兩個初始化參數: audit_file_dest = '/auditfs' audit_trail = xml   并重新啟動該實例。但這兩個參數不是動態的;一旦設置,將把審計跟蹤寫入目錄 /auditfs 中。參數 audit_file_dest 是可選的;默認為 $ORACLE_HOME/rdbms/audit 目錄。這些審計跟蹤文件將為擴展名為 .xml 的 XML 文件。

  以下是一個 XML 格式的審計跟蹤示例: - <Audit xmlns="http://xmlns.oracle.com/oracleas/schema/dbserver_audittrail-10_2.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/oracleas/schema/dbserver_audittrail-10_2.xsd"> <Version>10.2</Version> - <AuditRecord> <Audit_Type>8</Audit_Type> <EntryId>1</EntryId> <Extended_Timestamp>2005-03-05T20:52:51.012045</Extended_Timestamp> <DB_User>/</DB_User> <OS_User>oracle</OS_User> <Userhost>oradba</Userhost> <OS_Process>18067</OS_Process> <Terminal>pts/0</Terminal> <Instance_Number>0</Instance_Number> <Returncode>0</Returncode> <OS_Privilege>SYSDBA</OS_Privilege> <Sql_Text>CONNECT</Sql_Text> </AuditRecord> </Audit>   這些跟蹤文件可被 XML 分析器輕松分析,從中提取有用的信息。您甚至可以將它們作為 XML 類型加載到數據庫中,然后使用 XML 查詢在 SQL 內部查詢它們。

  在 Oracle 數據庫 10g 第 2 版中,可以將此 XML 文件與 SQL 查詢相結合,從中進行選擇,就似乎它是來自一個 SQL 源似的。還有一個預定義的動態視圖 V$XML_AUDIT_TRAIL,用于從固定表 X$XML_AUDIT_TRAIL 中進行選擇。此動態視圖在結構方面類似于常規審計跟蹤視圖 DBA_AUDIT_TRAIL。

  對于 DBA 而言,使用 XML 格式的審計跟蹤就可以通過第三方的 XML 分析器和編輯器操作文件,并可以通過接受 XML 作為輸入的工具發布報表。您不再需要編寫自己的分析器來解釋這些審計跟蹤文件。 自動的 Segment Advisor

  您如何知道哪些段在最高使用標記下具有大量可用空間,并能從重新組織中受益?

  可以使用 Oracle 數據庫 10g 中提供的 Oracle Enterprise Manager 界面指定特定的表空間來發現可能的符合要求的段,但假如您的數據庫有幾百個表空間,則不可能天天執行該操作。即使您能做,但也不是每個表空間都有需要重新組織的段的。因此,假如有一個自動工具可以提前掃描這些段并報告需要重新組織的段豈不很好?

  在 Oracle 數據庫 10g 第 2 版中,所附帶的程序包 DBMS_SPACE 提供了該功能。內置函數 ASA_RECOMMENDATIONS 顯示了段;由于這是一個管道函數,因此必須按如下所示使用它: select * from table (dbms_space.asa_recommendations());   由于列數較多,因此看清楚輸出不太輕易。以下只是一個以垂直格式顯示的記錄。 TABLESPACE_NAME :USERS SEGMENT_OWNER :ARUP SEGMENT_NAME :ACCOUNTS SEGMENT_TYPE :TABLE PARTITION PARTITION_NAME :P7 ALLOCATED_SPACE : 0 USED_SPACE : 0 RECLAIMABLE_SPACE : 0 CHAIN_ROWEXCESS : 17 RECOMMENDATIONS :The object has chained rows that can be removed by re-org. C1 :
C2 : C3 : TASK_ID : 261 MESG_ID : 0   此處您將看到,模式 ARUP 中表 ACCOUNTS 的分區 P7 包含鏈接行。執行重新組織將幫助加快該分區全表掃描的速度。

  此信息由在預定義的維護時間窗(周末下午 10 點至早上 6 點以及周六中午 12 點至周一中午 12 點)內運行的自動調度作業收集;您可以使用 Oracle Enterprise Manager 更改這些時間窗。在此時間內,該作業將對段進行掃描以獲取符合要求的段。假如掃描無法及時完成,該作業將暫停并在第二天的時間窗繼續掃描。

  該作業存儲有關在名為 wri$_segadv_objlist 的表中檢查的段和表空間的信息。可以查看有關在視圖 DBA_AUTO_SEGADV_CTL 中檢查的段的信息。

  基于事件的調度

  Oracle 數據庫 10g 第 1 版中引入的 Oracle Scheduler 是下一代作業調度系統,它取代了 DBMS_JOB 附帶的程序包。與該程序包相比,此 Scheduler 工具有一些顯著的優點。

  在 Oracle Scheduler 的第一版中,作業基于時間并根據時間觸發。但假如要使觸發器基于事件該怎么辦?例如,當帳戶的 Account Manager 更改時,您可能希望一個批處理程序自動執行以重新計算收入并重新發布報表。

  可以在 Oracle 數據庫 10g 第 2 版的 Scheduler 工具中實現此類基于事件的觸發。事件通過 Advanced Queueing (AQ)(其中有效載荷是一個對象類型)傳遞給 Scheduler。因此,您首先需要創建一個 AQ(如 proc_queue),在這里將把任意這樣的事件排隊。然后,您必須基于此事件創建一個調度。 begin dbms_scheduler.create_event_schedule ( schedule_name => 'accadmin.acc_mgr_change', start_date => systimestamp, event_condition => 'tab.user_data.event_name = ''acc_mgr_change''', queue_spec => 'proc_queue'); end;   接著,您將創建一個作業以遵循此調度。您也可以直接調度一個作業而不用先創建一個調度。 begin dbms_scheduler.create_job ( job_name => acc_mgr_change, program_name => acc_mgr_change_procs, start_date => 'systimestamp, event_condition => 'tab.user_data.event_name = ''acc_mgr_change''', queue_spec => 'proc_queue' enabled => true); end;   默認值是 UNLIMITED。

  假如事件(而不是特定時間)是觸發作業的決定因素,則基于事件的調度很有幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汶川县| 涪陵区| 措勤县| 长兴县| 宁化县| 横峰县| 宣恩县| 成都市| 池州市| 美姑县| 乐亭县| 旬邑县| 蒙自县| 元氏县| 城步| 华安县| 张北县| 喀喇沁旗| 安塞县| 隆昌县| 南城县| 通道| 绥芬河市| 新民市| 武鸣县| 涞水县| 新昌县| 启东市| 黔江区| 钟祥市| 甘泉县| 红桥区| 当涂县| 高密市| 呼伦贝尔市| 泽州县| 定日县| 会同县| 天水市| 边坝县| 海淀区|