安裝OWB Repository碰到的問題
?
?
??? 在Linux上安裝OWB是比較順利的,基本上和安裝Oracle的過程一樣。但是在之后配置Repository的過程中遇到了不少問題,下面記錄一下:
?
一、安裝到一半錯誤退出
?
??? 在安裝的過程中,前幾次每次安裝到50%左右就自動退出安裝,錯誤信息的log如下:
?
......
va:816):? parseSqlFile() ======= enter file: ../../rtasst/t_owbrt_sys.sql
main.TaskScheduler timer[5]20090427@18:10:34.034: 00> oracle.wh.service.impl.assistant.ProcessEngine.display(ProcessEngine.java:1409):? fileName is ../../rtasst/t_owbrt_sys.sql
main.TaskScheduler timer[5]20090427@18:10:34.034: 00> oracle.wh.service.impl.assistant.RuntimeInstaller.runSqlScript(RuntimeInstaller.java:669): java.sql.SQLException: ORA-01542: tablespace 'USERS' is offline, cannot allocate space in it
main.TaskScheduler timer[5]20090427@18:10:34.034: 00> oracle.wh.service.impl.assistant.RuntimeInstaller.runSqlScript(RuntimeInstaller.java:669)+>ORA-06512: at line 12
......
at oracle.ewt.timer.Timer.doRun(Unknown Source)
main.TaskScheduler timer[5]20090427@18:10:34.034: 00> oracle.wh.service.impl.assistant.ProcessEngine.processRTPS_SQLToken(ProcessEngine.java:1062)+>?????? at oracle.ewt.timer.Timer.run(Unknown Source)
main.TaskScheduler timer[5]20090427@18:10:34.034: 00> oracle.wh.service.impl.assistant.ProcessEngine.processRTPS_SQLToken(ProcessEngine.java:1062)+>?????? at java.lang.Thread.run(Thread.java:534)
......
?
??? 看到這個錯誤,就手動執(zhí)行了一下t_owbrt_sys.sql,發(fā)現(xiàn)會用到USERS這個tablespace的,問題是我在設(shè)計數(shù)據(jù)庫的時候就已經(jīng)把USERS設(shè)成了offline,所以SQL里的創(chuàng)建語句出錯。之后我盡力想改變這個默認(rèn)的創(chuàng)建tablespace位置,但是發(fā)現(xiàn)OWB在建立Repository的時候,會非常頻繁得用到USERS,所以無奈只好把USERS設(shè)成online。
?
?
二、各類的沖突問題
?
??? 在多次安裝失敗的經(jīng)驗(yàn)中總結(jié)出來,每次安裝失敗之后,在數(shù)據(jù)庫中創(chuàng)建的Repository Owner的所有數(shù)據(jù)是不會自動消除的,所以每一次的安裝失敗之后,都必須要刪除這些失敗的數(shù)據(jù)。如果沒有全部刪除,則下一次安裝還是失敗。
?
??? 要刪除的有以下一些內(nèi)容:
?
drop user OWB cascade; --這是我創(chuàng)建的Repository Owner
drop role OWBR_OWB;
drop role OWB_A_OWB;
drop role OWB_D_OWB;
drop role OWB_OWB;
drop role OWB_O_OWB; --以上都是基于"OWB"創(chuàng)建的Roles
drop user OWBRT_SYS cascade; --這個是OWB安裝Repository時自建的用戶
?
?
??? 基本上把這些刪除就可以了,注意Repository User是不用刪除的,那個只是在使用OWB轉(zhuǎn)換之后用來存放數(shù)據(jù)的用戶。
?
?
三、Design Center中修改locale后的錯誤
?
??? 花了N久時間,排除了以上兩個錯誤之后,差不多Repository就安裝成功可以打開Design Center了。但是打開Design Center之后,又遇到了一個錯誤,也在這里記錄一下:
?
?
??? 基本上可以這樣子進(jìn)行修改:
?
??? 1、先修改<OWB Home>\owb\bin\admin\Preference.properties,把locale的參數(shù)修改為en
?
??? 2、修改后可以打開Design Center,但依然報錯,但是不要緊,報錯了只要不點(diǎn)擊關(guān)閉,就可以繼續(xù)進(jìn)入到Design Center進(jìn)行設(shè)置
?
??? 3、在Design Center中把locale的設(shè)置重新改回到English-United States,然后再點(diǎn)擊那個錯誤信息,重啟Design Center
?
?
四、其他的一些問題
?
??? 在網(wǎng)上找資料的時候發(fā)現(xiàn)別人還遇到過一些問題,也摘錄一下:
?
*************************************************************************************
Oracle Warehouse Builder安裝配置之OWB資料庫安裝
最近在使用Oracle Warehouse Builder的時候,發(fā)現(xiàn)其基本資料庫的安裝配置過程比較繁瑣和笨拙,下面首先說一下安裝過程中出現(xiàn)的問題,然后再比較詳細(xì)的說明一下正確安裝配置的過程。由于全部用文本方式說明,很多圖形就略去了,看完本文還有不清楚的可以聯(lián)系我。
?
我的OWB安裝環(huán)境:
IBM 本本,P1.3G/40G/512M
Oracle 10G Express Edition
Express 的安裝路徑為 E:\oraclexe
OWB的安裝路徑為:D:\OraHome_1
?
本機(jī)的Oracle Express默認(rèn)服務(wù)為xe,數(shù)據(jù)庫SID為xe
?
安裝過程中經(jīng)常出現(xiàn)的問題(錯誤)包括:
1、在剛開始初始化OWB資料庫的時候,系統(tǒng)報監(jiān)聽器在協(xié)議棧中找不到對應(yīng)的處理句柄錯誤,然后退出安裝。
2、在重新安裝的時候,不停的報某某對象已經(jīng)被使用,然后安裝程序退出。
?
問題分析:
?
第一個問題可能是監(jiān)聽器配置不正確,所以系統(tǒng)會報錯。但是當(dāng)查看日志文件(在D:\OraHome_1\owb\reposasst\log.txt.0中)可以發(fā)現(xiàn)出這個錯誤的時候,系統(tǒng)已經(jīng)將不少資料庫對象安裝到Express數(shù)據(jù)庫中去了,也就是前面的對象安裝的時候系統(tǒng)是可以正確找到監(jiān)聽器信息的,到了某個點(diǎn)上就找不到了。由此,可以進(jìn)一步推測,OWB資料庫的初始化程序的編寫團(tuán)隊(duì)中存在某些配合方面的問題,可能同一個功能(比如這里的向監(jiān)聽器發(fā)出連接請求)由不同的人實(shí)現(xiàn)時采用了完全不同的處理方法,結(jié)果前者是正確的,后者可能錯也可能對,因此是不確定的,程序的魯棒性比較差。
?
第二個問題的原因很明顯,那就是OWB資料庫重新安裝的時候,系統(tǒng)并沒有將原有由于沒有成功安裝而留在Express數(shù)據(jù)庫中的對象清除掉。真搞不清楚為什么OWB的開發(fā)團(tuán)隊(duì)會連這個問題都留給用戶手工去解決。雖然在owb的目錄下有很多sql腳本(D:\OraHome_1\owb\reposasst下有幾乎所有的安裝sql腳本) 也有清除腳本,但這么多腳本放在一起,估計不是OWB的開發(fā)人員親自上馬,一般用戶很難在短時間之內(nèi)輕松的清除這些殘留對象,更別說再次安裝了。
?
解決方法:
對第一個問題只好手工去修改監(jiān)聽器的配置信息了。
找到監(jiān)聽器的配置文件(我的機(jī)器上是E:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN\listener.ora,這里千萬當(dāng)心不要把OWB安裝目錄下的那個listener.ora當(dāng)成是監(jiān)聽器的配置文件,因?yàn)槲沂褂玫氖荗racle Express,所以當(dāng)然監(jiān)聽程序當(dāng)然使用Express安裝目錄下的listener.ora作為配置文件),這個文件中原來的內(nèi)容為:
SID_LIST_LISTENER =???????????????????????????????????????????????????
? (SID_LIST =?????????????????????????????????????????????????????????
??? (SID_DESC =???????????????????????????????????????????????????????
????? (SID_NAME = PLSExtProc)?????????????????????????????????????????
????? (ORACLE_HOME = E:\oraclexe\app\oracle\product\10.2.0\server)????
????? (PROGRAM = extproc)?????????????????????????????????????????????
??? )?????????????????????????????????????????????????????????????????
??? (SID_DESC =???????????????????????????????????????????????????????
????? (SID_NAME = CLRExtProc)?????????????????????????????????????????
????? (ORACLE_HOME = E:\oraclexe\app\oracle\product\10.2.0\server)????
????? (PROGRAM = extproc)?????????????????????????????????????????????
??? )?????????????????????????????????????????????????????????????????
? )???????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????
LISTENER =????????????????????????????????????????????????????????????
? (DESCRIPTION_LIST =?????????????????????????????????????????????????
??? (DESCRIPTION =????????????????????????????????????????????????????
????? (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))??????????????
????? (ADDRESS = (PROTOCOL = TCP)(HOST =127.0.0.1)(PORT = 1521))??????
??? )?????????????????????????????????????????????????????????????????
? )???????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????
DEFAULT_SERVICE_LISTENER = (XE)??????
?
由上面的內(nèi)容可以看出與TCP協(xié)議對應(yīng)的那個SID_NAME是CLRExtProc,所以O(shè)WB安裝程序就會根據(jù)這個配置信息在機(jī)器上找名為CLRExtProc的實(shí)例,當(dāng)然會失敗,因?yàn)槲业哪J(rèn)實(shí)例名是xe! 于是手工把上面內(nèi)容修改為:
SID_LIST_LISTENER =
? (SID_LIST =
??? (SID_DESC =
????? (SID_NAME = PLSExtProc)
????? (ORACLE_HOME = E:\oraclexe\app\oracle\product\10.2.0\server)
????? (PROGRAM = extproc)
??? )
??
? (SID_DESC =
?????? (GLOBAL_DBNAME =xe)
????? (ORACLE_HOME = E:\oraclexe\app\oracle\product\10.2.0\server)
?????? (SID_NAME = xe)
??? )
? )
?
LISTENER =
? (DESCRIPTION_LIST =
??? (DESCRIPTION =
????? (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
????? (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
?????
??? )
? )
?
DEFAULT_SERVICE_LISTENER = (XE)
?
這里的xe是oracle express 10g安裝時生成的默認(rèn)數(shù)據(jù)庫實(shí)例。修改完了之后,別忘記重新啟動監(jiān)聽程序!
?
針對第二個問題,除了手工刪除數(shù)據(jù)庫對象之外似乎沒有更好的解決方法了(如果你不想重新安裝Oracle 10g Express的話)
這里有兩種方法,當(dāng)然都是基于10g express數(shù)據(jù)庫的數(shù)據(jù)字典的。
1、從dba_sequences,dba_tables,dba_views等系統(tǒng)表中找出安裝用戶所擁有的sequence,表,視圖等數(shù)據(jù)庫對象,然后drop掉。這個方法比較麻煩,并且需要考慮所有的數(shù)據(jù)庫對象,忘記一個的話,下次就得重新來過。
2、從DBA_OBJECTS表中找出安裝用戶所擁有的所有數(shù)據(jù)庫對象并根據(jù)對象類型的不同產(chǎn)生不同的drop語句,然后將這些語句Paste到PL/SQL Developer或者SQL Plus中去執(zhí)行。
??? 該語句的格式類似于:
SELECT 'DROP '||OBJECT_TYPE||' Ojbect_owner.'||OBJECT_NAME||';' FROM DBA_OBJECTS WHERE OWNER='Ojbect_owner';
其中的Object_owner是OWB資料庫的所有者。
使用以上兩個方法其實(shí)并沒有把全部的Owb殘留對象從數(shù)據(jù)庫中清除掉,還要執(zhí)行以下一條sql語句:
?
?? drop role owb_Ojbect_owner?? (再次提醒Object_owner是OWB資料庫的所有者,你可以替換為你自己的有意義的名字)
?
這個角色是OWB安裝程序在資料庫中自動創(chuàng)建的,所以重新安裝的時候一定要清楚,不然你就要被那些討厭的報錯信息折磨得發(fā)狂了 :)
?
總結(jié):
?
從以上發(fā)現(xiàn)問題,分析問題,解決問題的過程中可以發(fā)現(xiàn)OWB在很多細(xì)節(jié)方面做得還很不好,真讓人難以相信這樣的產(chǎn)品是出自O(shè)racle之手(其它方面暫且不論),另外,開發(fā)團(tuán)隊(duì)內(nèi)部的溝通協(xié)作是多么的重要,如果沒有必要標(biāo)新立異就盡量不要重新去發(fā)明輪子吧!我想,如果Oracle 的OWB團(tuán)隊(duì)再多花點(diǎn)精力在這些細(xì)節(jié)上面,可以避免很多人為這些討厭的錯誤而抓狂了也符合Oracle 的王者風(fēng)范;反之,那就是搬起石頭砸自己的腳了,這樣的產(chǎn)品還是不要退出的好,免得把自己的名氣做壞了。
?
(本文原創(chuàng),其中的解決方法也是經(jīng)歷若干次抓狂之后才找到的,如果引用,請加聯(lián)結(jié),謝謝!)
*************************************************************************************
?
?
?
?