Запрос связанного сервера выполняется, но не завершается? - PullRequest
0 голосов
/ 28 июня 2010

29 июня 2010 г. - у меня было незафиксированное действие из предыдущего оператора удаления.Я совершил действие и получил еще одну ошибку о конфликте основных идентификаторов.Я могу это исправить.Итак, боевой дух истории, совершите свои действия.

Оригинальный вопрос -

Я пытаюсь выполнить этот запрос:

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 голосов
/ 29 июня 2010

Если вы выполните только выбор без вставки, сколько записей будет возвращено?Данные выглядят правильно или из-за объединения есть несколько записей?

Есть ли в таблице триггеры, в которые вы вставляете данные?Если вы возвращаете много записей, и в таблице есть триггеры, предназначенные для запуска строки-строки, это может замедлить процесс.Вы также отправляете на другой сервер, поэтому сетевой конвейер может быть тем, что вас тормозит.Возможно, было бы лучше отправить данные бюджета на сервер Oracle и выполнить вставку оттуда, а не с SQL Server.

0 голосов
/ 28 июня 2010

Вы не включили никаких показателей объема.Но я бы порекомендовал использовать временную таблицу для сбора результатов.

Затем вы должны попытаться вставить первую пару строк.Если это удастся, у вас будет сильный индикатор того, что все в порядке.

Попробуйте разбить каждую задачу вставки по project_id или emplid, чтобы избежать больших журналов транзакций.

Вам также следует подумать об обработкемассовая обработка.

...