2015-01-30 13 views
8

Yıllardır kullandığım bir sorgu aniden garip bir hata atmaya başladı. Sorguya bir kozmetik değişiklik yaptığımda (x + 1 yerine 1 + x), hata artık oluşmaz. Sunucuda bile bulunmayan şikayetçi proc artık!Neden bu sybase hatası, sorgudaki herhangi bir değişiklikle birlikte gider?

Sorunun ne olduğu ve bu "değişiklik" in neden düzeltildiği konusunda herhangi bir fikri olup olmadığını merak ediyorum.

sorgu önce:

UPDATE SOME_DB..JOB_QUEUE 
SET ERROR_COUNT = ERROR_COUNT + 1, 
    JOB_START_TIME = '{1}' 
WHERE JOB_ID = {0} 

sorgu sonrası:

UPDATE SOME_DB..JOB_QUEUE 
SET ERROR_COUNT = 1 + ERROR_COUNT, 
    JOB_START_TIME = '{1}' 
WHERE JOB_ID = {0} 

o atar hatası:

Sybase.Data.AseClient.AseException: Procedure sp_net_dblatency expects parameter @heartbeat, which was not supplied. 

Herkes neler oluyor herhangi bir fikir olup olmadığını merak edildi İşte?

Düzeltme. Burada saklı proc.

create procedure sp_net_dblatency 
    @heartbeat datetime 
as 
    update DATABASE_1234..LATENCY set [email protected], END_UTC_TIME=getutcdate() where DATABASE_NAME=db_name() 
    if (@@ROWCOUNT = 0) 
     insert DATABASE_1234..LATENCY (DATABASE_NAME, START_UTC_TIME, END_UTC_TIME) values (db_name(), @heartbeat, getutcdate()) 
+0

Belki de sp'nin saldırıya uğradı ve kod içine @hearbeat parametresi eklendi. Basit düzeltmeniz, yeniden derlenmeye neden oldu. –

+0

Mevcut sp kullanılır ve @heartbeat bir parametredir. Fakat sp aylar önce silinmiştir. – anthonybell

+0

Sp_netiq_dblatency ile ilişkili tüm eş anlamlılar kaldırıldı mı? – xQbert

cevap

3

Sybase'in eniyileyicisi, silinen prosedürü hatalı olarak gönderen bir planı önbelleğe almış olabilir. Tarihe dikkat eder ve her türlü istatistikleri önbelleğe alır ve önbelleğe alınmış birçok bilgiye dayanan planlar üretir. Bazen çok büyük sorgularda çok kötü planlar üretmeye başlayabileceğimi fark ettim. Bunu birkaç kez yaşadım ve bunu Sybase'e bir hata olarak rapor ettim, ancak bunları yeniden üretemediler (ve ben de onu güvenilir şekilde yeniden üretemedim).

Çözüm, ya sorguyu biraz değiştirmek veya hatalı planları geçersiz kılmak için bir plan deyimi eklemek. PLAN deyimleriyle yapılan sorgular, sağlanan planı bir tane oluşturmak yerine kullanır. Umarım yardımcı olur.

İlgili konular