SQL Server Upgrade Sonrası View Problemi ve Çözümü

Merhaba,

Sizlere bugün başımıza gelen ilginç bir olaydan ve bu olayı nasıl çözümlediğimizi anlatacağım.

Dışarıdan destek veren bir firma SQL Server sunucularımızdan birini 2008 versiyonundan 2014 versiyonuna yükseltme yaptılar. Ancak gel görki bu işlem yapıldıktan MicroStrategy tarafından kullanılan view’ların çalışmadığı ve aşağıdaki gibi bir hata aldığımızı gördük.

View or function ‘Test_Database.dbo.VW_Test’ has more column names specified than columns defined.

Arkadaşlardan da destek alamayınca doğal olarak bir dba edasıyla iş yine döndü dolaştı bize geldi.

Ufak bir Google araştırmasından sonra bunun bir SQL bug’ı olduğu ve problemin aşağıdaki stored procedure ile view’leri refresh ederek çözebileceğimizi gördük.

EXEC sp_refreshview 'VW_Test'

Tabiki sistemdeki tüm view’lar için bu stored procedure’i tek tek çalıştıramazdım.

Bunun için hemen tüm view’ları bulan sistem sorgusunu kullanarak aşağıdaki gibi bir loop hazırladım.

DECLARE @view nvarchar(250)

DECLARE cursViewGuncelle CURSOR FOR
select name from sys.views
OPEN cursViewGuncelle
FETCH NEXT FROM cursViewGuncelle into @view
WHILE @@FETCH_STATUS = 0 BEGIN

EXEC sp_refreshview @view

FETCH NEXT FROM cursViewGuncelle into @view
END
CLOSE cursViewGuncelle
DEALLOCATE cursViewGuncelle

Yaklaşık 271 view’i bu şekilde saniyeler içerisinde refresh ederek sorunu çözdük. Sizde de dursun, belki bir gün hayatınızı kurtarabilir 🙂

Kolay gelsin 😉

Bir Cevap Yazın