ARITHABORT ON olarak değişme riskleri


12

Temel uygulamayı sağladıkları düzenleme ile bir satıcıyla çalışıyorum ve çekirdek uygulamayı değiştirmediğim sürece kendi uzantılarımı oluşturabilirim. Bir SQL Server 2005 veritabanına bağlanan ColdFusion yerleşiktir.

Oluşturduğum bazı raporlar, çekirdek tablolardan hesaplanan işlevleri kullanan görünümlere bağlıdır ve tablolar büyüdükçe raporlar yavaşlamaktadır. Raporları hızlandırmak için dizinlenmiş görünümler kullanmak istiyorum . Ancak test ortamımda dizinlenmiş bir görünüm oluşturduktan sonra, çekirdek uygulama artık çekirdek tablolara eklenemedi ( dizinlenmiş görünümler kullanılırken ARITHABORTolması gereken bir hata iletisi döndürdü ON).

Dizinli görünümleri kullanmak için SET ARITHABORT ON, çekirdek tabloları eklerken / güncelleştirirken çekirdek uygulamasına sahip olmam gerekiyor gibi görünüyor . Bunu test ortamımda çalıştırdım:

ALTER DATABASE MyDatabase SET ARITHABORT ON;

ve iyi çalışıyor gibi görünüyor. Ancak tedarikçim, uygulamada binlerce sorgu bulunduğundan, bu ayarın bu sorgulardan birini kırma riski olabileceğini ve gelecekteki beklenmedik veritabanı sorunumuz varsa varsayılan ayarı geri yüklemem konusunda ısrar edeceğini söylüyor.

Kırılması gereken gerçek sorgular var SET ARITHABORT ONmı? Tutmanın daha iyi olacağı bir durum var mı OFF?

TL; DR Yeni dizinlenmiş görünümlerimin çalışması ARITHABORT ONiçin tüm veritabanı için ayarlamam gerekiyor , ancak satıcım bunun kendi sorumluluğumda olacağı konusunda uyarıyor. Aslında bir risk var mı?

Yanıtlar:


9

Yani SET ARITHABORT ON temelde "sıfırla bölme hatası olursa veya aritmetik bir taşma sorguyu iptal ederse" Bu genellikle istenen davranıştır ve varsayılan örnek genişlik ayarıdır. Bu, satıcınızın sorgularıyla ilgili sorunlara neden olursa, başlangıçta bazı kodlama sorunlarından muzdarip olabileceğini söyleyebilirim. Onlardan neden burada endişe duydukları hakkında daha fazla bilgi istemelerini rica ediyorum.

Dizinlenmiş görünümlerin tüm kuralları arasında , buna ve ayar seçenekleri kurallarının çoğuna en az tartışmalı diyebilirim.

Bu, görünümle etkileşen bağlantılarda ayarlanmalıdır. Dolayısıyla, satıcı ile çalışmak ve gerçekten akıl yürütmelerini denemek ve anlamak ve buradaki büyük anlaşmazlık hakkında ne düşündüklerini taahhüt etmelerini sağlamak istiyorsunuz.

Dedi - Endeksli görüşler biraz büyük. Başka kuralları vardır ve satıcının geliştiricilerinin bina ve performans testleri sırasında sahip oldukları uygulamayı ve varsayımları etkileyebilirler. Dizine alınmış görünümler aracılığıyla çözmeye çalıştığınız iş sorunu hakkında onlarla gerçekten bir konuşma yapmalı ve sorunun nasıl çözüleceğine ilişkin sohbete katılmalısınız.


7

Bu değişikliği yapmanın bariz riski, daha önce doğru çalışan tedarikçi sorgularının hata atmaya veya yanlış sonuçlar döndürmeye başlamasıdır. ARITHABORTAyar kısmen kontrol eder aritmetik taşma ve üçe-sıfıra hatalar dönmek NULLsonucu, bir hata ile deyimi sonlandırmak veya bir hatayla toplu sonlandırabilir. Satıcı kodunun geri dönmek yerine hata veren koda nasıl tepki verebileceği NULL, bir üretim sisteminde denemek istediğiniz bir şey değildir :)

Ancak, veritabanı uyumluluk düzeyiniz 90 veya daha yüksekse ve oturumlarla çalışılıyorsa risk daha düşüktür SET ANSI_WARNINGS ON. Bu ayar ON, dizine eklenmiş görünümleri test ettiğinizde yapılmış olmalıdır , ancak tedarikçi uygulamanızın bağlantıları tarafından kullanılan etkin ayarı onaylamanız gerekir . Management Studio SETbağlanırken satıcı kodu tarafından ayarlanan seçeneklerden farklı seçenekler kullanacak şekilde yapılandırılmış olabilir (ve veritabanı veya örnek varsayılanları olanları geçersiz kılamazsınız). Satıcıya danışın ve SQL Server Profiler kullanarak satıcı kodunu izleyerek onaylayın.

Muhtemelen, daha büyük risk, satıcının ayar geri dönünceye kadar yüklemenizi desteklemeyi reddetmesidir OFF, ancak yine de satıcınızı önerilen SETseçeneklerle çalışacak şekilde kodunu güncellemeye teşvik etmelisiniz , bu yüzden aralarından seçim yapmanız gerekmez. performans ve desteklenen bir kurulum çalıştırma. Alternatif olarak, veritabanının bir kopyasına karşı raporlar çalıştırmak elbette.

-- Recommended effective settings
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT, 
    CONCAT_NULL_YIELDS_NULL, 
    QUOTED_IDENTIFIER, 
    ANSI_NULLS, 
    ANSI_PADDING,
    ANSI_WARNINGS ON;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.