最近由於一些原因,
把公司用的開發環境搭建了一遍,
具體是orcle11g+weblogic12.1,
過程中總結出一些問題,
在此少做介紹。
OracleDBConsole[SID]服務簡介:
OracleDBConsole[SID]服務負責Windows平臺下啟動Oracle企業管理器, 從Oracle 10g開始引入這個服務, 也是從Oracle 10g開始, Oracle的企業管理器從用戶端形式變為流覽器操作模式, 這裡的[SID]即Oracle SID, 如果是默認安裝就是orcl, 故這個服務在你的機器上可能就是OracleDBConsoleORCL, 事實上在我的機器上也是它。
本文基於Oracle 11g, 作業系統為Windows 7 x64, 故本文描述的解決辦法僅供參考。
故障描述
啟動OracleDBConsoleORCL服務時, 報:
Windows 不能在 本地電腦 啟動 OracleDBConsoleORCL。 有關更多資訊, 查閱系統事件日誌。
在應用程式事件日誌中記錄了如下錯誤資訊:
Process exited abnormally during initialization.
解決過程
嘗試從命令列下啟動該服務, 也以失敗告終, 正尋思著是否刪除資料庫再重新安裝, 突然想起Oracle企業管理器其實是一個單獨的元件, 可以將其單獨刪除, 再重新安裝的, 其實這裡並不是刪除Oracle企業管理器, 而是Oracle資料庫控制台資料檔案庫, 刪除資料檔案庫會同時刪除OracleDBConsoleORCL服務, 並刪除使用者SYSMAN及其所屬物件, 重新創建資料檔案庫就會重新添加OracleDBConsoleORCL服務, 並創建SYSMAN使用者及其所屬對象。 搞清楚這一點關係後, 開始動手實施修復。
首先刪除資料檔案庫, 注意此時Oracle的監聽器服務和資料庫服務必須處於啟動狀態,
C:>emca -repos drop
EMCA 開始於 2009-1-31 9:13:24
EM Configuration Assistant, 11.1.0.5.0 正式版
版權所有 (c) 2003, 2005, Oracle。 保留所有權利。
輸入以下資訊:
資料庫 SID: orcl
監聽程式埠號: 1521
SYS 用戶的口令:【輸入SYS使用者的口令, 輸入口令時螢幕不會回顯】
SYSMAN 使用者的口令:【輸入SYSMAN用戶的口令】
SYSMAN 用戶的口令:
是否繼續? [是(Y)/否(N)]: y
2009-1-31 9:15:04 oracle.sysman.emcp.EMConfig perform
信息: 正在將此操作記錄到 c:appAdministratorcfgtoollogsemcaorclemca_2009_01
_31_09_13_24.log。
2009-1-31 9:15:05 oracle.sysman.emcp.EMReposConfig invoke
信息: 正在刪除 EM 資料檔案庫 (此操作可能需要一段時間)...
開始等待刪除, 這個過程可能比較長, 朋友們可以去技術棧的網站, www.jishux.com參觀一下。
刪除結束後, 往往有人會想到使用命令重新創建資料檔案庫, 但經過我多次嘗試, 使用這種辦法創建好資料檔案庫後, OracleDBConsoleORCL服務仍然無法啟動, 企業管理器依舊無法使用, 於是想到使用dbca來創建, 於是在運行視窗輸入:dbca,
如果在刪除EM資料檔案庫時, 刪除了SYSMAN使用者及其所屬對象, 但OracleDBConsole[SID]服務沒有刪除時, 如果該服務還能夠啟動,
總結
經過這次冒險, 總覺得Oracle的OracleDBConsole[SID]服務很脆弱, 在沒有任何誤操作的情況下, 重新開機電腦後, 它也可能就啟動不了了, 但在這時, 大家一定要保持冷靜, 多思考, 辦法總是有的, 不到萬不得已, 不要重新安裝, 建議大家在重新開機系統前, 先手動停止OracleDBConsole[SID]服務、監聽器服務和資料庫服務。
ORACLE導入遇到ORACLE錯誤959解決方法如果讀者朋友們按照上述方法, 還是啟動不了本地資料庫, 本著解決問題的辦法, 還是重裝11g比較好, 畢竟win上的服務端不是太穩定。 安裝好Oracle11g之後, 利用plsql連接本地orcl, 在導入dmp檔時, 有一張表未導入成功,報了如下錯誤:
IMP-00003: 遇到 ORACLE 錯誤 959ORA-00959: 表空間 'XXXXXXXXXXX' 不存在。查詢的確沒有對應的表空間:
添加上對應的表空間, 再重新導入:
create tablespace ts_something logging datafile '/dbf1/ts_sth.dbf' size 32m autoextend on next 32m maxsize 2048m extent management local; 1234567導入成功。
注:表空間自增長, 其大小也不會超過最大大小, 因此在設置大小時可以將MAXSIZE 設置為unlimited;
Oracle sys和system使用者、sysdba 和sysoper系統許可權、sysdba和dba角色的區別sys和system用戶區別
1)最重要的區別, 存儲的資料的重要性不同
sys所有oracle的資料字典的基表和視圖都存放在sys用戶中, 這些基表和視圖對於oracle的運行是至關重要的, 由資料庫自己維護, 任何使用者都不能手動更改。 sys用戶擁有dba, sysdba, sysoper等角色或許可權, 是oracle許可權最高的用戶。
system使用者用於存放次一級的內部資料, 如oracle的一些特性或工具的管理資訊。 system用戶擁有普通dba角色許可權。
2)其次的區別, 許可權的不同
system用戶只能用normal身份登陸em, 除非你對它授予了sysdba的系統許可權或者syspoer系統許可權。
sys使用者具有“SYSDBA”或者“SYSOPER”系統許可權,登陸em也只能用這兩個身份,不能用normal。
以sys用戶登陸Oracle,執行select * from V_$PWFILE_USERS;可查詢到具有sysdba許可權的用戶,如:
SQL> select * from V_$PWFILE_USERS;
USERNAME SYSDBA SYSOPER
SYS TRUE TRUE
Sysdba和sysoper兩個系統許可權區別
normal 、sysdba、 sysoper有什麼區別
normal 是普通用戶
另外兩個,你考察他們所具有的許可權就知道了
sysdba擁有最高的系統許可權,登陸後是 sys
sysoper主要用來啟動、關閉資料庫,sysoper 登陸後使用者是 public
sysdba和sysoper屬於system privilege,也稱為administrative privilege,擁有例如資料庫開啟關閉之類一些系統管理級別的許可權sysdba和sysoper具體的許可權可以看下表:
系統許可權
sysdba
sysoper
區別
Startup(啟動資料庫)
startup
Shutdown(關閉資料庫)
shutdown
alter database open/mount/backup
alter database open/mount/backup
改變字元集
none
create database(創建資料庫)
None不能創建資料庫
drop database(刪除資料庫)
none
create spfile
create spfile
alter database archivelog(歸檔日誌)
alter database archivelog
alter database recover(恢復資料庫)
只能完全恢復,不能執行不完全恢復
擁有restricted session(會話限制)許可權
擁有restricted session許可權
可以讓用戶作為sys用戶連接
可以進行一些基本的操作,但不能查看使用者資料
登錄之後使用者是sys
登錄之後用戶是public
system如果正常登錄,它其實就是一個普通的dba用戶,但是如果以as sysdba登錄,其結果實際上它是作為sys用戶登錄的,這一點類似Linux裡面的sudo的感覺,從登錄資訊裡面我們可以看出來。因此在as sysdba連接資料庫後,創建的物件實際上都是生成在sys中的。其他用戶也是一樣,如果 as sysdba登錄,也是作為sys用戶登錄的,看以下實驗:
SQL> create user strong identified by strong;
用戶已創建。
SQL> conn strong/strong@magick as sysdba;
已連接。
SQL> show user;
USER 為 "SYS"
SQL> create table test(a int);
表已創建。
SQL> select owner from dba_tables where table_name='test';
未選定行 //因為創建表時oracle自動轉為大寫,所以用小寫查的時候是不存在的;
SQL> select owner from dba_tables where table_name='TEST';
OWNER
------------------------------
SYS
dba和sysdba的區別
dba、sysdba這兩個系統角色有什麼區別呢:
在說明這一點之前我需要說一下oracle服務的創建過程
創建實例→·啟動實例→·創建資料庫(system表空間是必須的)
啟動過程:
實例啟動→·裝載資料庫→·打開資料庫
sysdba,是管理oracle實例的,它的存在不依賴于整個資料庫完全啟動,只要實例啟動了,他就已經存在,以sysdba身份登陸,裝載資料庫、打開資料庫。只有資料庫打開了,或者說整個資料庫完全啟動後,dba角色才有了存在的基礎!
Oracle如何創建用戶重裝好orcle11g之後,資料庫的使用者必然也要重建,下面我來講一下創建用戶操作。什麼,你hibernate裡面jdbc配置的是sys帳戶?那當我沒說(笑哭)。
1、打開oracle協力廠商工具,如plsq,然後用一個具有dba許可權的用戶登錄。
2、然後打開一個SQL視窗。
3、執行語句:
create user 用戶名 identified by 密碼;--其中用戶名為英文,密碼為數位或字母或英文符號或組合。
4、執行完畢後,可按需要給使用者賦予相應的許可權,如:
grant connect,resource,dba to 用戶名;--賦予該用戶許可權
切換資料來源當我們需要切換weblogic資料來源位址的時候,會經常出現啟動更改失敗的情況,通常遇到這種情況的解決辦法是
將部署伺服器取消勾選,然後再切換資料來源ip位址,這樣大部分都能啟動更改。切換好之後,在監視-測試裡面,可以測試一下位址是否OK。
常見異常之——java.lang.classnotfoundexception 資料庫和中介軟體都安裝好了,下面開始導入專案,打開myeclipse導入專案的workspace檔,設置weblogic啟動參數,啟動,可是一直報java.lang.classnotfoundexception的錯,找了半天沒查出原因,按理說之前項目都是可以運行的,不懂這次為什麼會報錯。後來發現,原來是bulidpath裡面的jar包衝突所致。
抱著學習的心態整理一下這個異常,避免以後走彎路,有對這個異常比較瞭解的大神也請多多指教!
ClassNotFoundException是無法找到指定的類異常。
當應用程式試圖使用以下方法通過字串名載入類時,拋出該異常:
1、Class 類中的 forName 方法。
2、 ClassLoader 類中的 findSystemClass 方法。
3、 ClassLoader 類中的 loadClass 方法。
造成異常的常見原因:
1 所需要的支援類庫放錯了地方,並沒有放在類路徑(CLASSPATH環境變數)裡面。
2 使用了重複的類庫,且版本不一致。導致低版本的被優先使用。
3 類名錯了,一般是使用Class.forName的時候,手工指定了類名的情況。
4 沒有導入純JAVA驅動包。
建議的解決方案:
1 確認你的類庫在系統的CLASSPATH下面,如果是Tomcat,則可以放在tomcat/lib/目錄下面。
2 刪除重複的類庫,只保留最新的。
sys使用者具有“SYSDBA”或者“SYSOPER”系統許可權,登陸em也只能用這兩個身份,不能用normal。
以sys用戶登陸Oracle,執行select * from V_$PWFILE_USERS;可查詢到具有sysdba許可權的用戶,如:
SQL> select * from V_$PWFILE_USERS;
USERNAME SYSDBA SYSOPER
SYS TRUE TRUE
Sysdba和sysoper兩個系統許可權區別
normal 、sysdba、 sysoper有什麼區別
normal 是普通用戶
另外兩個,你考察他們所具有的許可權就知道了
sysdba擁有最高的系統許可權,登陸後是 sys
sysoper主要用來啟動、關閉資料庫,sysoper 登陸後使用者是 public
sysdba和sysoper屬於system privilege,也稱為administrative privilege,擁有例如資料庫開啟關閉之類一些系統管理級別的許可權sysdba和sysoper具體的許可權可以看下表:
系統許可權
sysdba
sysoper
區別
Startup(啟動資料庫)
startup
Shutdown(關閉資料庫)
shutdown
alter database open/mount/backup
alter database open/mount/backup
改變字元集
none
create database(創建資料庫)
None不能創建資料庫
drop database(刪除資料庫)
none
create spfile
create spfile
alter database archivelog(歸檔日誌)
alter database archivelog
alter database recover(恢復資料庫)
只能完全恢復,不能執行不完全恢復
擁有restricted session(會話限制)許可權
擁有restricted session許可權
可以讓用戶作為sys用戶連接
可以進行一些基本的操作,但不能查看使用者資料
登錄之後使用者是sys
登錄之後用戶是public
system如果正常登錄,它其實就是一個普通的dba用戶,但是如果以as sysdba登錄,其結果實際上它是作為sys用戶登錄的,這一點類似Linux裡面的sudo的感覺,從登錄資訊裡面我們可以看出來。因此在as sysdba連接資料庫後,創建的物件實際上都是生成在sys中的。其他用戶也是一樣,如果 as sysdba登錄,也是作為sys用戶登錄的,看以下實驗:
SQL> create user strong identified by strong;
用戶已創建。
SQL> conn strong/strong@magick as sysdba;
已連接。
SQL> show user;
USER 為 "SYS"
SQL> create table test(a int);
表已創建。
SQL> select owner from dba_tables where table_name='test';
未選定行 //因為創建表時oracle自動轉為大寫,所以用小寫查的時候是不存在的;
SQL> select owner from dba_tables where table_name='TEST';
OWNER
------------------------------
SYS
dba和sysdba的區別
dba、sysdba這兩個系統角色有什麼區別呢:
在說明這一點之前我需要說一下oracle服務的創建過程
創建實例→·啟動實例→·創建資料庫(system表空間是必須的)
啟動過程:
實例啟動→·裝載資料庫→·打開資料庫
sysdba,是管理oracle實例的,它的存在不依賴于整個資料庫完全啟動,只要實例啟動了,他就已經存在,以sysdba身份登陸,裝載資料庫、打開資料庫。只有資料庫打開了,或者說整個資料庫完全啟動後,dba角色才有了存在的基礎!
Oracle如何創建用戶重裝好orcle11g之後,資料庫的使用者必然也要重建,下面我來講一下創建用戶操作。什麼,你hibernate裡面jdbc配置的是sys帳戶?那當我沒說(笑哭)。
1、打開oracle協力廠商工具,如plsq,然後用一個具有dba許可權的用戶登錄。
2、然後打開一個SQL視窗。
3、執行語句:
create user 用戶名 identified by 密碼;--其中用戶名為英文,密碼為數位或字母或英文符號或組合。
4、執行完畢後,可按需要給使用者賦予相應的許可權,如:
grant connect,resource,dba to 用戶名;--賦予該用戶許可權
切換資料來源當我們需要切換weblogic資料來源位址的時候,會經常出現啟動更改失敗的情況,通常遇到這種情況的解決辦法是
將部署伺服器取消勾選,然後再切換資料來源ip位址,這樣大部分都能啟動更改。切換好之後,在監視-測試裡面,可以測試一下位址是否OK。
常見異常之——java.lang.classnotfoundexception 資料庫和中介軟體都安裝好了,下面開始導入專案,打開myeclipse導入專案的workspace檔,設置weblogic啟動參數,啟動,可是一直報java.lang.classnotfoundexception的錯,找了半天沒查出原因,按理說之前項目都是可以運行的,不懂這次為什麼會報錯。後來發現,原來是bulidpath裡面的jar包衝突所致。
抱著學習的心態整理一下這個異常,避免以後走彎路,有對這個異常比較瞭解的大神也請多多指教!
ClassNotFoundException是無法找到指定的類異常。
當應用程式試圖使用以下方法通過字串名載入類時,拋出該異常:
1、Class 類中的 forName 方法。
2、 ClassLoader 類中的 findSystemClass 方法。
3、 ClassLoader 類中的 loadClass 方法。
造成異常的常見原因:
1 所需要的支援類庫放錯了地方,並沒有放在類路徑(CLASSPATH環境變數)裡面。
2 使用了重複的類庫,且版本不一致。導致低版本的被優先使用。
3 類名錯了,一般是使用Class.forName的時候,手工指定了類名的情況。
4 沒有導入純JAVA驅動包。
建議的解決方案:
1 確認你的類庫在系統的CLASSPATH下面,如果是Tomcat,則可以放在tomcat/lib/目錄下面。
2 刪除重複的類庫,只保留最新的。