Sql server 2008 r2 具有链接服务器的sql server中发生连接超时

Sql server 2008 r2 具有链接服务器的sql server中发生连接超时,sql-server-2008-r2,oracle10g,linked-server,ora-12170,Sql Server 2008 R2,Oracle10g,Linked Server,Ora 12170,我从Sql Server 2008 R2以链接服务器的身份连接到Oracle 执行20-30分钟后,我发现以下错误: OLE DB provider "OraOLEDB.Oracle" for linked server "CBSLINKED" returned message "ORA-12170: TNS:Connect timeout occurred". Cannot initialize the data source object of OLE DB provide

我从Sql Server 2008 R2以链接服务器的身份连接到Oracle 执行20-30分钟后,我发现以下错误:

    OLE DB provider "OraOLEDB.Oracle" for linked server "CBSLINKED"
 returned message "ORA-12170: TNS:Connect timeout occurred".
    Cannot initialize the data source object of OLE DB provider
 "OraOLEDB.Oracle" for linked server "CBSLINKED".
脚本:

set @query = '   
      INSERT INTO dbo.tbl_MyTable  
 (  
  AccNo,  
  BranchCode,  
  BranchName,  
  CustomerName,  
  ScanDate,  
  TranCount,  
  TranAmount,  
  AccType  
 )    
   select AccNo,BranchCode,BranchName,LongName,  
  '''+CONVERT(CHAR(10),@RunningDate,111 )+'''   
   ,TranCount,TranAmount,AccType  

  from OPENQUERY(CBSLINKED,''select TBM.AC as AccNo,  
      TBM.BC as BranchCode ,CM.CNM, COUNT(*) TranCount,    
  SUM(TBM.AMT) TranAmount, TBM.AH  as AccType,CM.CNM as LongName  
     ,BM.BR_NM as BranchName  
     from BKP.T_2014 TBM  
     LEFT OUTER JOIN BKP.ACMST AM  
     ON TBM.AC=AM.AC   and TBM.BC=AM.BC  
     and TBM.AH=AM.AH  
     LEFT OUTER JOIN BKP.BCMST  BM  
     ON TBM.BC=BM.BC  
     LEFT OUTER JOIN BKP.CLMST CM  
     ON TBM.CN=CM.CNO  
   where    TBM.AMT>=''''' +CONVERT(CHAR(50),@MinAmt,111)+ ''''' and
   CM.CNM NOT LIKE ''''CENTRALISE%'''' and  
   TBM.NR NOT LIKE ''''%Del%'''' and  
      CAST(TBM.DT as DATE) = '''''+CONVERT(CHAR(10),@RunningDate,111 )+'''''   
   AND TBM.DC= ''''D''''   
    AND (TC=''''CP'''' OR TC=''''CR'''')  
    GROUP BY  
  TBM.BC,TBM.AH,  
  TBM.AC,CM.CNM,BM.BR_NM  
   '')where AccType IN (select AccTypeCode from  tbl_ACCMAST where AccType IN (  
  select distinct AccType from RuleMaster where RuleID=6))  
     '  
   print @query  
  execute sp_executesql @query 

sp_配置值“>
使用Control+鼠标滚动来放大图像

我配置了两件事,它对我来说很有用

1.将远程查询超时设置为无限

2.将远程登录超时设置为2147483647

sp_配置“远程登录超时”,2147483647

使用覆盖重新配置


链接服务器有一个超时条目。另外,如果它运行了20-30分钟,然后超时,我会重新评估您的方法,并可能使用rownum值批量执行查询。@DaveBrown您可以在图像中看到,我已经使用
sp_configure“remote query timeout”将远程查询超时设置为无限长,0转到重新配置h override go
是的,但您是否也考虑过它可能在Oracle引擎中执行时超时,并将其返回SQL Server?仅仅因为链接服务器配置为允许无限超时,并不意味着Oracle会突然进入超限设置(不是说是这种情况,但是你必须考虑Oracle DB)。你的意思是说我也必须在Oracle 10g中设置连接/查询超时,我作为链接服务器连接。我不能确定这一点,但既然链接服务器设置正确,这就是我所能建议的。多年前,我们在开发Oracle box时遇到过类似的情况-一旦DBA取消了查询限制,我们就可以解决这个问题这充其量只是一个猜测,但它与信息相符。我仍然强烈敦促任何人,如果有需要那么长时间才能执行的查询,请以不同的方式执行-使用RowNum返回较小的“chunk”(有很多关于stackoverflow的示例专门针对Oracle),并以较小的数量插入它们。
sp_configure 'remote query timeout', 0  
go  
reconfigure with override  
go