链接服务器查询运行但没有完成?

时间:2010-06-28 18:25:53

标签: sql-server oracle tsql linked-server openquery

2010年6月29日 - 我之前的删除声明中有一个未提交的操作。我提交了这个动作,我得到了另一个关于主要ID冲突的错误。我可以解决这个问题。故事的士气,你的行动。

原始问题 -

我正在尝试运行此查询:

with spd_data as (
select *  
from openquery(IRPROD,'select * from budget_user.spd_data where fiscal_year = 2010')
) 

insert into [IRPROD]..[BUDGET_USER].[SPD_DATA_BUD] 
  (REC_ID, FISCAL_YEAR, ENTITY_CODE, DIVISION_CODE, DEPTID, POSITION_NBR, EMPLID, 
   spd_data.NAME, JOB_CODE, PAY_GROUP_CODE, FUND_CODE, FUND_SOURCE, CLASS_CODE,
   PROGRAM_CODE, FUNCTION_CODE, PROJECT_ID, ACCOUNT_CODE, SPD_ENC_AMT, SPD_EXP_AMT, 
   SPD_FB_ENC_AMT, SPD_FB_EXP_AMT, SPD_TUIT_ENC_AMT, SPD_TUIT_EXP_AMT, 
   spd_data.RUNDATE, HOME_DEPTID, BUD_ORIG_AMT, BUD_APPR_AMT)
SELECT REC_ID, FISCAL_YEAR, ENTITY_CODE, DIVISION_CODE, DEPTID, POSITION_NBR, EMPLID,
       spd_data.NAME, JOB_CODE, PAY_GROUP_CODE, FUND_CODE, FUND_SOURCE, CLASS_CODE, 
       PROGRAM_CODE, FUNCTION_CODE, PROJECT_ID, ACCOUNT_CODE, SPD_ENC_AMT, SPD_EXP_AMT,
       SPD_FB_ENC_AMT, SPD_FB_EXP_AMT, SPD_TUIT_ENC_AMT, SPD_TUIT_EXP_AMT, 
       spd_data.RUNDATE, HOME_DEPTID, lngOrig_amt, lngAppr_amt
  from spd_data
left join Budgets.dbo.tblAllPosDep on project_id = projid 
                                  and job_code = jcc and position_nbr = psno
                                  and emplid = empid
where  OrgProjTest = 'EQUAL';

基本上我是从IRPROD(一个oracle db)中选择一个表,用一个本地表连接它,然后将结果插回IRPROD。

我遇到的问题是,当查询运行时,它永远不会停止。我让它运行了一个小时,它一直持续到我取消它。我可以在带宽监视器上看到进出的SQL Server数据。此外,如果我只运行查询的选择部分,它将在4秒内返回结果。

为什么它没有完成的任何想法?我已经以类似的方式设置了其他查询,并且没有任何问题(从本地表而不是远程表中授予那些插入)。

2 个答案:

答案 0 :(得分:0)

您未包含任何量指标。但我建议使用临时表来收集结果。

然后你应该尝试插入前几行。如果成功,你会有一个强有力的指标,表明一切都很好。

尝试按project_id或emplid细分每个插入任务,以避免大型事务日志。

您还应该考虑制作批量批处理流程。

答案 1 :(得分:0)

如果只运行没有插入的select,会返回多少条记录?由于加入,数据看起来是正确的还是有多个记录?

您插入的桌子上是否有触发器?如果你要返回许多记录和触发器在桌面上设计为逐行运行,这可能会减慢速度。您还要发送到另一台服务器,因此网络管道可能会降低您的速度。也许最好将预算数据发送到Oracle服务器并从那里而不是从SQL Server进行插入。