29 juin 2010 - J'ai eu une action non-validée à partir d'une instruction delete précédente. J'ai commis l'action et j'ai eu une autre erreur à propos des identifiants primaires en conflit. Je peux réparer cela. Alors le moral de l'histoire, commettez vos actions.La requête de serveur lié s'exécute mais ne se termine pas?
Original Question -
Je suis en train d'exécuter cette requête:
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';
Fondamentalement, je sélectionne une table de IRPROD (un oracle db), rejoignant avec une table locale, et l'insertion des résultats sur IRPROD.
Le problème que j'ai est que pendant que la requête s'exécute, elle ne s'arrête jamais. Je l'ai laissé courir pendant une heure et ça continue jusqu'à ce que je l'annule. Je peux voir sur un moniteur de bande passante sur les données SQL Server entrant et sortant. En outre, si je viens d'exécuter la partie select de la requête, elle renvoie les résultats en 4 secondes.
Des idées pour lesquelles ce n'est pas fini? J'ai d'autres requêtes installées d'une manière similaire et je n'ai aucun problème (accordé ces insertions à partir de tables locales et non d'une table distante).
Avez-vous regardé le côté Oracle du tout? C'est là où vous insérez, c'est là que les verrous et les contraintes seraient probablement. –
@Stephanie N'a pas regardé le côté Oracle. S'il y avait une contrainte, une erreur ne se produirait-elle pas? Je vais vérifier de plus près de ce côté mais mon problème est que je ne suis pas aussi familier avec Oracle que je suis SQL Server. –
Créer une table, avec une seule colonne, contrainte unique. Commencer deux insert de session 1 à partir d'une session, puis insérer 1 à partir de la seconde. Le second attendra que le premier commette ou soit annulé. Il y a seulement une erreur si on commet. Mais il peut attendre pour toujours. Mais quelles attentes indéterminées POSSIBLE pourriez-vous rencontrer READING de SQL Server? Oui, il y a probablement 1 thread mais mais pourquoi regarder le côté avec ZERO chance de bloquer? Seulement parce que vous êtes le plus familier? C'est comme regarder la jauge de carburant vide dans la voiture et se demander pourquoi il n'y a pas de gaz qui sort de la pompe. –