Decode360's Blog

          業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
            397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
          安裝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)
          ......
          ?
          ??? 看到這個錯誤,就手動執行了一下t_owbrt_sys.sql,發現會用到USERS這個tablespace的,問題是我在設計數據庫的時候就已經把USERS設成了offline,所以SQL里的創建語句出錯。之后我盡力想改變這個默認的創建tablespace位置,但是發現OWB在建立Repository的時候,會非常頻繁得用到USERS,所以無奈只好把USERS設成online。
          ?
          ?
          二、各類的沖突問題
          ?
          ??? 在多次安裝失敗的經驗中總結出來,每次安裝失敗之后,在數據庫中創建的Repository Owner的所有數據是不會自動消除的,所以每一次的安裝失敗之后,都必須要刪除這些失敗的數據。如果沒有全部刪除,則下一次安裝還是失敗。
          ?
          ??? 要刪除的有以下一些內容:
          ?
          drop user OWB cascade; --這是我創建的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"創建的Roles
          drop user OWBRT_SYS cascade; --這個是OWB安裝Repository時自建的用戶
          ?
          ?
          ??? 基本上把這些刪除就可以了,注意Repository User是不用刪除的,那個只是在使用OWB轉換之后用來存放數據的用戶。
          ?
          ?
          三、Design Center中修改locale后的錯誤
          ?
          ??? 花了N久時間,排除了以上兩個錯誤之后,差不多Repository就安裝成功可以打開Design Center了。但是打開Design Center之后,又遇到了一個錯誤,也在這里記錄一下:
          ?
          ??? 因為默認安裝的時候用的是English,所以想改一下語言環境,結果修改之后,重啟無法再連上Design Center,報錯Thread: API5022: cannot connect to specified repository.非常無奈,只能到網上查詢了一下,發現遇到這個問題的人還挺多,后來在oracle forums上找到了解決問題的辦法,地址如下:http://forums.oracle.com/forums/thread.jspa?threadID=418288
          ?
          ??? 基本上可以這樣子進行修改:
          ?
          ??? 1、先修改<OWB Home>\owb\bin\admin\Preference.properties,把locale的參數修改為en
          ?
          ??? 2、修改后可以打開Design Center,但依然報錯,但是不要緊,報錯了只要不點擊關閉,就可以繼續進入到Design Center進行設置
          ?
          ??? 3、在Design Center中把locale的設置重新改回到English-United States,然后再點擊那個錯誤信息,重啟Design Center
          ?
          ?
          四、其他的一些問題
          ?
          ??? 在網上找資料的時候發現別人還遇到過一些問題,也摘錄一下:
          ?
          http://blog.csai.cn/user1/16350/archives/2006/9524.html
          *************************************************************************************
          Oracle Warehouse Builder安裝配置之OWB資料庫安裝
          最近在使用Oracle Warehouse Builder的時候,發現其基本資料庫的安裝配置過程比較繁瑣和笨拙,下面首先說一下安裝過程中出現的問題,然后再比較詳細的說明一下正確安裝配置的過程。由于全部用文本方式說明,很多圖形就略去了,看完本文還有不清楚的可以聯系我。
          ?
          我的OWB安裝環境:
          IBM 本本,P1.3G/40G/512M
          Oracle 10G Express Edition
          Express 的安裝路徑為 E:\oraclexe
          OWB的安裝路徑為:D:\OraHome_1
          ?
          本機的Oracle Express默認服務為xe,數據庫SID為xe
          ?
          安裝過程中經常出現的問題(錯誤)包括:
          1、在剛開始初始化OWB資料庫的時候,系統報監聽器在協議棧中找不到對應的處理句柄錯誤,然后退出安裝。
          2、在重新安裝的時候,不停的報某某對象已經被使用,然后安裝程序退出。
          ?
          問題分析:
          ?
          第一個問題可能是監聽器配置不正確,所以系統會報錯。但是當查看日志文件(在D:\OraHome_1\owb\reposasst\log.txt.0中)可以發現出這個錯誤的時候,系統已經將不少資料庫對象安裝到Express數據庫中去了,也就是前面的對象安裝的時候系統是可以正確找到監聽器信息的,到了某個點上就找不到了。由此,可以進一步推測,OWB資料庫的初始化程序的編寫團隊中存在某些配合方面的問題,可能同一個功能(比如這里的向監聽器發出連接請求)由不同的人實現時采用了完全不同的處理方法,結果前者是正確的,后者可能錯也可能對,因此是不確定的,程序的魯棒性比較差。
          ?
          第二個問題的原因很明顯,那就是OWB資料庫重新安裝的時候,系統并沒有將原有由于沒有成功安裝而留在Express數據庫中的對象清除掉。真搞不清楚為什么OWB的開發團隊會連這個問題都留給用戶手工去解決。雖然在owb的目錄下有很多sql腳本(D:\OraHome_1\owb\reposasst下有幾乎所有的安裝sql腳本) 也有清除腳本,但這么多腳本放在一起,估計不是OWB的開發人員親自上馬,一般用戶很難在短時間之內輕松的清除這些殘留對象,更別說再次安裝了。
          ?
          解決方法:
          對第一個問題只好手工去修改監聽器的配置信息了。
          找到監聽器的配置文件(我的機器上是E:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN\listener.ora,這里千萬當心不要把OWB安裝目錄下的那個listener.ora當成是監聽器的配置文件,因為我使用的是Oracle Express,所以當然監聽程序當然使用Express安裝目錄下的listener.ora作為配置文件),這個文件中原來的內容為:
          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)??????
          ?
          由上面的內容可以看出與TCP協議對應的那個SID_NAME是CLRExtProc,所以OWB安裝程序就會根據這個配置信息在機器上找名為CLRExtProc的實例,當然會失敗,因為我的默認實例名是xe! 于是手工把上面內容修改為:
          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安裝時生成的默認數據庫實例。修改完了之后,別忘記重新啟動監聽程序!
          ?
          針對第二個問題,除了手工刪除數據庫對象之外似乎沒有更好的解決方法了(如果你不想重新安裝Oracle 10g Express的話)
          這里有兩種方法,當然都是基于10g express數據庫的數據字典的。
          1、從dba_sequences,dba_tables,dba_views等系統表中找出安裝用戶所擁有的sequence,表,視圖等數據庫對象,然后drop掉。這個方法比較麻煩,并且需要考慮所有的數據庫對象,忘記一個的話,下次就得重新來過。
          2、從DBA_OBJECTS表中找出安裝用戶所擁有的所有數據庫對象并根據對象類型的不同產生不同的drop語句,然后將這些語句Paste到PL/SQL Developer或者SQL Plus中去執行。
          ??? 該語句的格式類似于:
          SELECT 'DROP '||OBJECT_TYPE||' Ojbect_owner.'||OBJECT_NAME||';' FROM DBA_OBJECTS WHERE OWNER='Ojbect_owner';
          其中的Object_owner是OWB資料庫的所有者。
          使用以上兩個方法其實并沒有把全部的Owb殘留對象從數據庫中清除掉,還要執行以下一條sql語句:
          ?
          ?? drop role owb_Ojbect_owner?? (再次提醒Object_owner是OWB資料庫的所有者,你可以替換為你自己的有意義的名字)
          ?
          這個角色是OWB安裝程序在資料庫中自動創建的,所以重新安裝的時候一定要清楚,不然你就要被那些討厭的報錯信息折磨得發狂了 :)
          ?
          總結:
          ?
          從以上發現問題,分析問題,解決問題的過程中可以發現OWB在很多細節方面做得還很不好,真讓人難以相信這樣的產品是出自Oracle之手(其它方面暫且不論),另外,開發團隊內部的溝通協作是多么的重要,如果沒有必要標新立異就盡量不要重新去發明輪子吧!我想,如果Oracle 的OWB團隊再多花點精力在這些細節上面,可以避免很多人為這些討厭的錯誤而抓狂了也符合Oracle 的王者風范;反之,那就是搬起石頭砸自己的腳了,這樣的產品還是不要退出的好,免得把自己的名氣做壞了。
          ?
          (本文原創,其中的解決方法也是經歷若干次抓狂之后才找到的,如果引用,請加聯結,謝謝!)
          *************************************************************************************
          ?
          ?
          ?
          ?
          posted on 2009-07-15 22:15 decode360 閱讀(890) 評論(0)  編輯  收藏 所屬分類: 11.BI
          主站蜘蛛池模板: 江源县| 剑川县| 三门峡市| 虹口区| 西充县| 都昌县| 萍乡市| 津南区| 昭通市| 瑞安市| 万州区| 金塔县| 武义县| 尼木县| 长治市| 任丘市| 塘沽区| 太湖县| 阿坝县| 遂川县| 玉林市| 拉萨市| 莫力| 弥勒县| 三亚市| 遂川县| 齐齐哈尔市| 大港区| 白河县| 上饶县| 三都| 兴山县| 平陆县| 许昌市| 绍兴县| 白玉县| 鄂尔多斯市| 汶川县| 沙雅县| 杨浦区| 大埔县|