命令列介面下使用emca安裝配置Oracle Database Control實戰,emcaoracle
作為命令列忠實使用者,伺服器端軟體的營運都傾向於使用命令或 指令碼完成,非常討厭資源佔用很大的GUI。Oracle資料庫作為重要的伺服器端軟體,其安裝營運自然也完全支援純命令列方式,儘管同時提供了OUI這個GUI安裝程式。至於純命令列下靜默安裝Oracle11g,本人之前寫過詳細的博文,有需要的請參考之,博文地址http://blog.csdn.net/smstong/article/details/7352036。按照這篇博文安裝的資料庫完全可用。本文算是對前面這篇博文的一個補充,就是在資料庫安裝完成的基礎上安裝配置Oracle Enterprise Manager,使得管理員在厭倦單純sqlplus的情況下,可以使用瀏覽器來管理Oracle資料庫。
1 Oracle Enterprise Manager與Oracle Database Control
OEM是一個統稱,是Oracle提供的圖形化企業級管理工具的統稱。具體有三種可用的工具:
(1)Database Control
它用於管理一個資料庫(可以是RAC叢集資料庫),具有即時管理和監視的功能,運行調度作業功能,警示功能。
(2)Application Server Control
用於管理一個或者多個應用伺服器執行個體。
(3)Grid Control
Grid Control可以管理多個資料庫和應用伺服器,還可以管理電腦節點,支援通過第三方外掛程式管理第三方產品。
在Oracle9i以及之前,OEM是以C/S架構出現的,從10g開始,使用B/S架構,使得管理員無需安裝用戶端即可直接通過瀏覽器進行管理。本文專註於Database Control這個工具,Database Control無需單獨安裝,在安裝oracle的時候,它是自動一起安裝的,但是必須經過仔細的配置才能使用。
2 Oracle Database Control 目錄結構與工作原理分析任何軟體都需要從靜態和動態兩個方面著手,靜態對應的是軟體安裝後的物理目錄和檔案布局;動態對應的是軟體運行時各個部分之間的互動過程和記憶體布局。2.1 目錄結構
Database Control在10g和11g中的目錄結構有細微差異,本文以11g為基礎說明。
在安裝完oracle 11g之後,$ORACLE_HOME目錄下會有專門為Database Control提供服務的目錄,如所示。其中oc4j是oracle container for j2ee的縮寫,是oracle專用的j2ee容器與tomcat類似。
2.2 工作原理從本質上說,Database Control本身就是一個j2EE應用,只是這個應用的功能很單一,就是管理Oracle資料庫。它運行在oracle為其定製的j2EE容器中,使用其管理的oracle資料庫來存放自身資料,使用代理進程來收集資料庫之外的系統資訊。
單純從程式角度來說,Database Control其實本身與其管理的oracle資料庫(稱之為目標資料庫)並無關聯,完全可以使用單獨的資料庫(如單獨的oracle資料庫或者mysql資料庫)來存放自身資料,也可以運行在單獨機器的符合j2EE標準的容器中(如Tomcat)。但是Oracle公司考慮到效率和配置,為其定製了專門的容器,並且本身使用目標資料庫來存放管理資料,而且運行在目標資料庫執行個體所在的機器上。
Database Control的工作原理如所示。
Database Control自身使用的管理資料都存放到SYSMAN這個模式下。
瞭解了工作原理,其配置就容易理解了。與部署其他的j2EE程式一樣,需要從資料和程式檔案兩個方面進行。從本質上說,所有這些操作都可以通過手工來一一完成,但是無論是建立大量的設定檔還是建立大量的資料表,純手工方式都會很低效,也容易出錯。所以Oracle公司為部署Database Control提供了專門的工具軟體。
如果使用OUI來安裝Oracle可以在安裝階段配置Database Control,在安裝完成後還可以通過DBCA來配置,這些都是好用的GUI工具,但是本文的目的是在純命令列下進行配置,所以上述方式不可用。
為了應對命令列模式下的配置,ORACLE公司為Database Control專門提供了配置助手emca(Enterprise manager Configuration Assistant)。
3 使用EMCA配置Database Control3.1 配置資料
使用的命令是: emca -repos create
它的作用是為Database Control在資料庫中建立必要的使用者(模式)(sysman, dbsnmp等)和模式對象(預存程序,表,索引等等)。emca本身是一個指令檔,最終調用的是java程式來完成實際的工作。由於在建立對象的過程中,需要以sysman使用者身份調用Oracle資料庫提供的一些函數或過程,所以必須要確保sysman擁有相關的許可權。這也是配置中通常會出問題的地方。
需要注意的是emca首先以sys身份建立sysman賬戶,然後以sysman賬戶進行後續對象的建立。然後這兩者之間是連續的,沒有給我們修改sysman許可權的機會。所以我們要在運行emca之前把sysman需要的許可權賦予public賬戶,這樣當sysman賬戶被建立後自動就會有相應的許可權了。
那麼到底需要賦予sysman那些許可權呢?答案是很多。我的方法是,首先運行emca,如果許可權有問題emca就會爆粗,然後根據錯誤記錄檔找到缺少的許可權,之後把這個許可權賦給public,然後emca -repos recreate。
下面給出一個排錯的例子:
[oracle@db001 ~]$ emca -repos recreate;STARTED EMCA at Jul 10, 2014 4:18:24 PMEM Configuration Assistant, Version 11.2.0.0.2 ProductionCopyright (c) 2003, 2005, Oracle. All rights reserved.Enter the following information:Database SID: xgdbListener port number: 1521Password for SYS user:Password for SYSMAN user:Password for SYSMAN user:Do you wish to continue? [yes(Y)/no(N)]: yJul 10, 2014 4:18:37 PM oracle.sysman.emcp.EMConfig performINFO: This operation is being logged at /oracle/cfgtoollogs/emca/xgdb/emca_2014_07_10_16_18_24.log.Jul 10, 2014 4:18:37 PM oracle.sysman.emcp.EMReposConfig invokeINFO: Dropping the EM repository (this may take a while) ...Jul 10, 2014 4:19:44 PM oracle.sysman.emcp.EMReposConfig invokeINFO: Repository successfully droppedJul 10, 2014 4:19:44 PM oracle.sysman.emcp.EMReposConfig createRepositoryINFO: Creating the EM repository (this may take a while) ...Jul 10, 2014 4:21:53 PM oracle.sysman.emcp.EMReposConfig invokeSEVERE: Error creating the repositoryJul 10, 2014 4:21:53 PM oracle.sysman.emcp.EMReposConfig invokeINFO: Refer to the log file at /oracle/cfgtoollogs/emca/xgdb/emca_repos_create_<date>.log for more details.Jul 10, 2014 4:21:53 PM oracle.sysman.emcp.EMConfig performSEVERE: Error creating the repositoryRefer to the log file at /oracle/cfgtoollogs/emca/xgdb/emca_2014_07_10_16_18_24.log for more details.Could not complete the configuration. Refer to the log file at /oracle/cfgtoollogs/emca/xgdb/emca_2014_07_10_16_18_24.log for more details.
上面是一個出錯的例子,從紅色部分看出,建立資料失敗,根據提供的資訊,查看記錄檔:
313 Jul 10, 2014 4:19:44 PM oracle.sysman.emcp.EMReposConfig createRepository314 CONFIG: Spooling to /oracle/cfgtoollogs/emca/xgdb/emca_repos_create_2014_07_10_16_19_44.log315 Jul 10, 2014 4:19:44 PM oracle.sysman.emcp.EMReposConfig createRepository316 INFO: Creating the EM repository (this may take a while) ...317 Jul 10, 2014 4:21:53 PM oracle.sysman.emcp.EMReposConfig createRepository318 CONFIG: ORA-04063: package body "SYSMAN.MGMT_LOGIN_ASSISTANT" has errors319 ORA-06508: PL/SQL: could not find program unit being called:
這裡已經能看出大概的錯誤是SYSMAN.MGMT_LOGIN_ASSISTANT這個包編譯有問題了,為了擷取詳細錯誤,繼續查看提示的記錄檔。
PL/SQL procedure successfully completed.Commit complete.BEGIN*ERROR at line 1:ORA-04063: package body "SYSMAN.MGMT_LOGIN_ASSISTANT" has errorsORA-06508: PL/SQL: could not find program unit being called:"SYSMAN.MGMT_LOGIN_ASSISTANT"
這就能確定確實是這個包的問題了,那麼究竟為什麼這個包編譯失敗呢?此時,sysman賬戶已經建立,我們以sysman賬戶登入sqlplus,然後手動編譯這個包,看看錯誤究竟在哪裡。
執行 SQL> alter package mgmt_login_assistant compile body;
此時會報錯,繼續查看出錯原因:
SQL> show errors;
顯示 函數ENCRYPT invalid。
這說明magmt_login_assistant這個包依賴ENCRYPT函數,而ENCRYPT函數自身有問題。那麼繼續看看ENCRYPT函數究竟什麼問題。
SQL> alter function encrypt compile;Warning: Function altered with compilation errors.SQL> show errors;Errors for FUNCTION ENCRYPT:9/5 PL/SQL: Statement ignored10/22 PLS-00201: identifier 'SYS.UTL_I18N' must be declared
可見錯誤在於ENCRYPT函數依賴於SYS.UTL_I18N這個包,而這個包沒有聲明,其實是sysman使用者沒有執行許可權。
找到了錯誤根源,解決就容易多了,以sys賬戶登入,然後賦予public角色執行SYS.UTL_I18N這個包的許可權。
SQL> grant execute on UTL_I18N to public;Grant succeeded.
然後重新以sysman登入,並編譯ENCRYPT函數成功,繼續編譯MGMT_LOGIN_ASSISTANT也成功了,這說明找到了問題所在。總結一下上面的依賴情況:
SYSMAN.MGMT_LOGIN_ASSISTANT包 < SYSMAN.ENCRYPT函數 < SYS.UTL_I18N包。
然後退出sql,重新執行 emca -repos recreate。如果還是報錯,請按照上面尋找問題的思路解決問題,直到成功。
[oracle@db001 ~]$ emca -repos recreate;STARTED EMCA at Jul 10, 2014 4:37:11 PMEM Configuration Assistant, Version 11.2.0.0.2 ProductionCopyright (c) 2003, 2005, Oracle. All rights reserved.Enter the following information:Database SID: xgdbListener port number: 1521Password for SYS user:Password for SYSMAN user:Do you wish to continue? [yes(Y)/no(N)]: yJul 10, 2014 4:37:24 PM oracle.sysman.emcp.EMConfig performINFO: This operation is being logged at /oracle/cfgtoollogs/emca/xgdb/emca_2014_07_10_16_37_11.log.Jul 10, 2014 4:37:25 PM oracle.sysman.emcp.EMReposConfig invokeINFO: Dropping the EM repository (this may take a while) ...Jul 10, 2014 4:38:28 PM oracle.sysman.emcp.EMReposConfig invokeINFO: Repository successfully droppedJul 10, 2014 4:38:29 PM oracle.sysman.emcp.EMReposConfig createRepositoryINFO: Creating the EM repository (this may take a while) ...Jul 10, 2014 4:42:47 PM oracle.sysman.emcp.EMReposConfig invokeINFO: Repository successfully createdEnterprise Manager configuration completed successfullyFINISHED EMCA at Jul 10, 2014 4:42:47 PM
3.2 設定檔布局使用emca -config dbcontrol db命令來建立必要的設定檔。這個操作一般不會出錯,注意填正確各個賬戶的密碼就可以了。
[oracle@db001 ~]$ emca -config dbcontrol dbSTARTED EMCA at Jul 10, 2014 4:47:43 PMEM Configuration Assistant, Version 11.2.0.0.2 ProductionCopyright (c) 2003, 2005, Oracle. All rights reserved.Enter the following information:Database SID: xgdbListener port number: 1521Listener ORACLE_HOME [ /oracle/11.2.0 ]:Password for SYS user:Password for DBSNMP user:Password for SYSMAN user:Email address for notifications (optional):Outgoing Mail (SMTP) server for notifications (optional):-----------------------------------------------------------------You have specified the following settingsDatabase ORACLE_HOME ................ /oracle/11.2.0Local hostname ................ localhostListener ORACLE_HOME ................ /oracle/11.2.0Listener port number ................ 1521Database SID ................ xgdbEmail address for notifications ...............Outgoing Mail (SMTP) server for notifications ...............-----------------------------------------------------------------Do you wish to continue? [yes(Y)/no(N)]: yJul 10, 2014 4:48:05 PM oracle.sysman.emcp.EMConfig performINFO: This operation is being logged at /oracle/cfgtoollogs/emca/xgdb/emca_2014_07_10_16_47_43.log.Jul 10, 2014 4:48:08 PM oracle.sysman.emcp.EMReposConfig uploadConfigDataToRepositoryINFO: Uploading configuration data to EM repository (this may take a while) ...Jul 10, 2014 4:49:06 PM oracle.sysman.emcp.EMReposConfig invokeINFO: Uploaded configuration data successfullyJul 10, 2014 4:49:08 PM oracle.sysman.emcp.util.DBControlUtil configureSoftwareLibINFO: Software library configured successfully.Jul 10, 2014 4:49:08 PM oracle.sysman.emcp.EMDBPostConfig configureSoftwareLibraryINFO: Deploying Provisioning archives ...Jul 10, 2014 4:49:34 PM oracle.sysman.emcp.EMDBPostConfig configureSoftwareLibraryINFO: Provisioning archives deployed successfully.Jul 10, 2014 4:49:34 PM oracle.sysman.emcp.util.DBControlUtil secureDBConsoleINFO: Securing Database Control (this may take a while) ...Jul 10, 2014 4:50:11 PM oracle.sysman.emcp.util.DBControlUtil secureDBConsoleINFO: Database Control secured successfully.Jul 10, 2014 4:50:11 PM oracle.sysman.emcp.util.DBControlUtil startOMSINFO: Starting Database Control (this may take a while) ...Jul 10, 2014 4:50:29 PM oracle.sysman.emcp.EMDBPostConfig performConfigurationINFO: Database Control started successfullyJul 10, 2014 4:50:29 PM oracle.sysman.emcp.EMDBPostConfig performConfigurationINFO: >>>>>>>>>>> The Database Control URL is https://localhost:1158/em <<<<<<<<<<<Jul 10, 2014 4:50:34 PM oracle.sysman.emcp.EMDBPostConfig invokeWARNING:************************ WARNING ************************Management Repository has been placed in secure mode wherein Enterprise Manager data will be encrypted. The encryption key has been placed in the file: /oracle/11.2.0/localhost_xgdb/sysman/config/emkey.ora. Please ensure this file is backed up as the encrypted data will become unusable if this file is lost.***********************************************************Enterprise Manager configuration completed successfullyFINISHED EMCA at Jul 10, 2014 4:50:34 PM
4 瀏覽器訪問Database Control上面配置以後,Database Control已經自動啟動了。可以使用emctl status dbconsole查看狀態。
[oracle@db001 ~]$ emctl status dbconsole;Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0Copyright (c) 1996, 2009 Oracle Corporation. All rights reserved.https://localhost:1158/em/console/aboutApplicationOracle Enterprise Manager 11g is running.------------------------------------------------------------------Logs are generated in directory /oracle/11.2.0/localhost_xgdb/sysman/log[oracle@db001 ~]$
可以使用emctl stop dbconsole 停止Database Control。可以使用emctl start dbconsole 啟動Database Control。
[oracle@db001 ~]$ emctl stop dbconsoleOracle Enterprise Manager 11g Database Control Release 11.2.0.1.0Copyright (c) 1996, 2009 Oracle Corporation. All rights reserved.https://localhost:1158/em/console/aboutApplicationStopping Oracle Enterprise Manager 11g Database Control ... ... Stopped.[oracle@db001 ~]$ emctl start dbconsoleOracle Enterprise Manager 11g Database Control Release 11.2.0.1.0Copyright (c) 1996, 2009 Oracle Corporation. All rights reserved.https://localhost:1158/em/console/aboutApplicationStarting Oracle Enterprise Manager 11g Database Control ........ started.------------------------------------------------------------------Logs are generated in directory /oracle/11.2.0/localhost_xgdb/sysman/log
確保Database Conrol啟動後,使用瀏覽器訪問:https://IP:1158/em即可。
oracle emca怎操作
可以直接執行emca,不帶任何參數,能看到命令的說明
給你些常用的命令使用方式:
1. 配置dbconsole
建立一個EM資料庫:emca -repos create
重建一個EM資料庫:emca -repos recreate
刪除一個EM資料庫:emca -repos drop
2. 設定資料庫的 Database Control :emca -config dbcontrol db
3. 刪除資料庫的 Database Control配置:emca -deconfig dbcontrol db
4. 重新設定db control的連接埠(預設連接埠在1158 )
emctl start dbconsole
emca -reconfig ports -dbcontrol_http_port 1160
emca -reconfig ports -agent_port 3940
emca -repos create
emca -config dbcontrol db
emctl start dbconsole
5. 重新設定dbconsole的步驟
emca -repos drop
emca -repos create
emca -config dbcontrol db
6. 其它emctl命令
先設定ORACLE_SID環境變數後,啟動EM console服務 emctl start dbconsole
先設定ORACLE_SID環境變數後,停止EM console服務 emctl stop dbconsole
先設定ORACLE_SID環境變數後,查看EM console服務的狀態 emctl status dbconsole
問你安裝oracle11g後,沒有database control這個問題是怎解決的?我在安裝過程中也是讓配置EM不知你
在資料庫的啟動狀態下,命令列運行
<ORACLE_HOME>/bin/emca -config dbcontrol db -repos recreate