oracle9i+windows2000
配置透明网关,连接sqlserver2000中的数据
sqlserver中有个数据表大约16000条记录,占857个数据页,也就7M左右。在oracle中执行查询时报错
ora-00600: internal error [733][821568425][uga heap][][][][]
查了一下metlink,说该错误的第二个参数821568425是执行查询时所需的内存大小。
郁闷了,怎么会需要这么大的用户内存?
哪个达人能解释一下oracle利用透明网关导入异构数据时的处理机制,
譬如数据转换时采用的方式等。

解决方案 »

  1.   

    1,在oracle中执行查询语句大致为
      select f1,f2,f3...f10 from dbo.tablename@servername where f1 between 1 and 100
      其中f2字段在sqlserver中定义为varchar(500)
    2,如果选择的时侯不选择f2,则不会报错
    3,我在sqlserver上建立视图,先行过滤,然后在oracle上执行查询也不会报错。所以,我觉得oracle是不是先从sqlserver上获取所有数据到本地之后才执行的过滤;
    另外,对sqlserver的varchar字段,oracle是怎么处理的,怎么会讲8M的数据处理的需要800M啊?
      

  2.   


    没呢,郁闷死我了。
    我在sqlserver上重建一个测试视图,数据字段达20个,每个字段都使用varchar(4000),并且其实际内容长度也超过2000个,居然不出错。
      

  3.   

    oracle内部错误,1,打补丁;2,如果打完补丁也不好使就当自己中奖了
    ----------------------------------可以做如下测试以便验证:
    目前oracle服务器为oracleA,新建oracle服务器oracleB
    目前sqlserver服务器SA,新建sqlserver服务器SB1,在SA服务器上新建不同的表,插入同样内容,然后分别从OracleA,和ORacleB测试
    2,在SB服务器上新建不同的表,插入同样内容,然后分别从OracleA,和ORacleB测试
    如果上面两种情况下错误依旧,说明需要打补丁;
    如果上面两种情况下再出错,说明你中奖了。
      

  4.   

    在sql server上开sql monitor,看看oracle实际上是执行的什么语句。