从oracle内访问sqlserver2005的数据时一个错误

oracle的版本为:10gr2,10.2.0.1.0。

利用oracle中的hsodbc连接sqlserver2005数据库。已成功连接。db link的名字为: sql2005fororacle。

执行:select count(*) from sysdatabases@sql2005fororacle; 能够成功执行。

但是,在执行: select count(*) from sysobjects@sql2005fororacle;却导致系统出现了死机症状,无法响应任务的操作,任务管理器看到cpu利用率不高。无奈,只能强制关机。

在alert_<SID>.log文件中发现有这么几句:

Memory Notification: Library Cache Object loaded into SGA
Heap size 2225K exceeds notification threshold (2048K)
KGL object name :XDB.XDbD/PLZ01TcHgNAgAIIegtw==

原来遇到oracle的bug了。上网检索,说 是oracle的一个bug在10g10.2.0.1的各个平台上都出现过。 Oracle10g中,在load较大的对象进library cache中时,会记录以上警告。在版本10.2.0.1中,这个定义大对象的阈值是2M,这是有隐含参数 _kgl_large_heap_warning_threshold 指定的从10.2.0.2起,这个参数的默认值被修改为50M。

解决方法1 :升级到10.2.0.2或者以上。

解决方法2

SQL> alter system set "_kgl_large_heap_warning_threshold"=20388608 scope=spfile ;
SQL> shutdown immediate

SQL> startup

或者将 2038860调成更大的值。

我是通过调整隐式参数的方式解决的,重启后。

下面就是在oracle中访问sqlserver2005数据库的数据的效果:

SQL> select "name" from sysobjects@sql2005fororacle where "type"='U';
name
--------------------------------------------------------------------------------
spt_fallback_db
spt_fallback_dev
spt_fallback_usg
QuestSoftwareProc
pbcattbl
pbcatcol
pbcatfmt
pbcatvld
pbcatedt
spt_monitor
spt_values
name
--------------------------------------------------------------------------------
MSreplication_options
已选择12行。
SQL> desc sysusers@sql2005fororacle
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 uid                                                NUMBER(5)
 status                                             NUMBER(5)
 name                                      NOT NULL VARCHAR2(128 CHAR)
 sid                                                RAW(85)
 roles                                              RAW(2000)
 createdate                                NOT NULL DATE
 updatedate                                NOT NULL DATE
 altuid                                             NUMBER(5)
 password                                           RAW(256)
 gid                                                NUMBER(5)
 environ                                            VARCHAR2(32512 CHAR)
 hasdbaccess                                        NUMBER(10)
 islogin                                            NUMBER(10)
 isntname                                           NUMBER(10)
 isntgroup                                          NUMBER(10)
 isntuser                                           NUMBER(10)
 issqluser                                          NUMBER(10)
 isaliased                                          NUMBER(10)
 issqlrole                                          NUMBER(10)
 isapprole                                          NUMBER(10)
SQL>

  • 本文链接地址:http://www.dbainfo.net/access-sqlserver-from-oracle-by-transgate.htm
  • 本文为dbainfo个人原创,请在尊重作者劳动成果的前提下进行转载;
  • 转载务必注明原始出处 : Sybase数据库技术,数据库恢复专家
  • 对《从oracle内访问sqlserver2005的数据时一个错误》有何疑问或见解,请在本文下方发表;
  • 对网站还有其他问题或建议,请提交在留言板,谢谢!
  • 目前还没有任何评论.
    :wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)