DBExpress連接兩台Oracle服務器的問題 (200分)

  • 主题发起人 主题发起人 luyear
  • 开始时间 开始时间
L

luyear

Unregistered / Unconfirmed
GUEST, unregistred user!
公司系統增加,多加了一台服務器OraServer2,原來中間層是用DBExpress連接OraServer1
采用Database LINK 连接OraServer2
現在用“Select * from db1@OraServer2”從服務器抓資料就出現
“ORA-02041 從屬端資料庫沒有開始任何交易”的錯誤
用普通的TDatabase連接或在DBExplorer上就一切正常,只有DBExpress不行
用DBExpress單獨連OraServer1,OraServer2也正常
 
当然了,你原来连的ORAServer1用的是这台服务器上的用户名登陆,你从Oraserver抓资料
这个用户名没权限,而且你也没连上Oraserver2这台服务器
 
错误原因及解释如下:
ORA-02041 client database did not begin a transaction
Cause: An update occurred at a coordinated database without the coordinator
beginning a distributed transaction. This may happen if a stored procedure
commits and then performs updates, and the stored procedure is invoked
remotely. It could also happen if an external transaction monitor violates
the XA protocol.
Action: If the cause is the former, check that any commit is not followed by
an update.
你看看是否在此之前执行了其他代码?
 
哈哈!看来楼上的两位兄弟可能没有用过Oracle的 Database LINK
看问题也还不够仔细
 
怎么?公司又加了台Server?!唉,现在很箱想好好学一下linux,装一下Server,只怪自己当初没抓住机会好好向老邱学一学阿!
 
操作系统的东西不是1天2天可以熟练掌握的,想当年刚刚学用DOS的时候,不知道费了多少时间
 
有无先测试一下database link?
有时候你想当然的认为创建是对的,但实际上link并没有发挥作用!
想来一些有关的database link创建的要求你应该都是达到的?如global_names等!

如果在oracle的环境下(server1)你的语句能执行的话,则在delphi中应该没有问题。
此时从server1到server2的连接走的是sql*net自身。
 
>用普通的TDatabase連接或在DBExplorer上就一切正常,只有DBExpress不行
所以不关database link的事了。
 
用普通的TDatabase連接当然OK了,现在就是这样用的
但是用惯了DBExpress,用回TDatabase很不习惯
 
可能是DBExpress的问题???
我这里根本就连不上Oracle? TSQLConnection可以连上,但用Query或Dataset就是打不开表
老是把Delphi6搞死,死了三次我再没信心去动它了
我现在都是用DOA开发。
 
to xianjun:
你不会是把DBexpress用在两层系统里面了?
 
这跟两层、多层的没有关系吧?
随便拉一个SQLConnection,连接Oracle,没有问题
再放一个SQLQuery,设置Connection,写一句SQL,双击Active设为True,Delphi死了。
可能是我的Delphi有问题? 因为有几个文件如dbxdrivers.ini是在
/Program Files/Common Files/Borland Shared/DBExpress目录下的,但一开始DBexpress
就报错说在Delphi6/Bin下找不到这个文件,我只好把它们拷了一份过去,这才连上了Oracle
所以我怀疑我的Delphi是不是哪出错了。
 
delphi就死了,那肯定是delphi或系统的问题了
 
用oracle的synonym可解決
將事務處理交回給oracle自己處理
不要在dbexpress中碰到,否則要對dbexpress做一些設置
 
這個問題我解決了
去http://www.crlab.com下最新的dbxexpress來裝
tsqlconnection中會多出現兩個選項Oracle(Core Lab),Oracle(NET)
選前一個CORE LAB,將可以執行分布的查詢
如果你發現是試用版只能用6列就使用下面方法解決
將delphi7的dbexpora.dll,蓋掉delphi6的就可以出現Oracle(Core Lab),Oracle(NET)
以上測試通過
 
DBExpress這玩藝原來類型是有區別於BDE連接的
我今天把一個老程序的中間層改為DBExpress連接,結果Client程序出現一堆問題
什麼字段類型不匹配了,什麼表名找不到了,煩死了,算了,還是不要改的好
 
這個問題早解決了
該發分了
 
后退
顶部