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 阅读(879) 评论(0)  编辑  收藏 所属分类: 11.BI

只有注册用户登录后才能发表评论。


网站导航: