Sadece var olan bazı temerrütler vardır, çünkü kimse onları değiştirmenin etkisinin ne olacağını gerçekten bilmiyor. Örneğin, işletim sistemi dili olarak "ABD İngilizcesi" kullanan bir sisteme yüklenirken varsayılan örnek düzeyi harmanlama SQL_Latin1_General_CP1_CI_AS
. SQL_*
Harmanlamaları SQL Server 2000 öncesi uyumluluk için olduğundan bu bir anlam ifade etmiyor . SQL Server 2000'de başlayan aslında Windows harmanlama seçebilir ve ABD ingilizce sistemleri için varsayılan böylece gerektiğini değiştirilmiştir Latin1_General_CI_AS
. AMA, sanırım Microsoft'ta kimse çeşitli potansiyel alt sistemler ve sistem saklı yordamları vb. Üzerindeki etkisinin ne olacağını gerçekten bilmiyor.
Bu nedenle, bir veritabanı varsayılanı veya hatta örnek çapında ON olarak ayarlamanın herhangi bir olumsuz etkisinin farkında değilim. Aynı zamanda test etmedim. Ancak test etsem bile, uygulamanızla aynı kod yollarını kullanmayabilirim, bu yüzden bu gerçekten ortamınızda test etmeniz gereken bir şey. Olarak ayarlaON
Geliştirici ve KG ortamlarınızdaki örnek düzeyinde ve bunun bir veya iki ay boyunca nasıl çalıştığını görün. Ardından Evreleme / UAT'de etkinleştirin. Her şey birkaç hafta boyunca iyi gitmeye devam ederse, bu yapılandırma değişikliğini Üretim olarak değiştirin. Anahtar, her gün vurulmayan çeşitli kod yollarını test etmek için mümkün olduğunca fazla zaman vermektir. Bazıları haftalık, aylık veya yıllık olarak vurulur. Bazı kod yolları yalnızca destekle, ya da yıllar önce birisinin yarattığı ve size hiç söylemediği ve sadece rastgele aralıklarla (nah, bu asla olmaz ;-)) kullanılan bazı geçici raporlar veya bakım işlemleri tarafından vurulur.
Bu yüzden, daha önce hiç değiştirmediğim için varsayılan "kullanıcı seçenekleri" ayarına sahip bir örnek üzerinde bazı testler yaptım.
Lütfen aklınızda bulundurun:
@@OPTIONS
/ 'user options'
bitmask değerdir
- 64 bunun için biraz
ARITHABORT ON
KURMAK
Hem SQLCMD (ODBC kullanan) hem de LINQPad (.NET SqlClient kullanan) ile test:
SQLCMD -W -S (local) ^
-Q"SELECT CONCAT(DB_NAME(), N': ', @@OPTIONS & 64, N' (', ses.[client_interface_name], N')') FROM sys.dm_exec_sessions ses WHERE ses.[session_id] = @@SPID;"
echo .
( ^
DOS satır devam karakteridir; .
son satırda sadece ekstra satırı kopyalayıp yapıştırmayı kolaylaştırmak için zorlamak gerekir)
LINQPad'de:
using (SqlConnection connection =
new SqlConnection(@"Server=(local);Trusted_Connection=true;Database=tempdb;"))
{
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = @"SELECT @RetVal =
CONCAT(DB_NAME(), N': ', @@OPTIONS & 64, N' (', ses.[client_interface_name], N')')
FROM sys.dm_exec_sessions ses
WHERE ses.[session_id] = @@SPID;";
SqlParameter paramRetVal = new SqlParameter("@RetVal", SqlDbType.NVarChar, 500);
paramRetVal.Direction = ParameterDirection.Output;
command.Parameters.Add(paramRetVal);
connection.Open();
command.ExecuteNonQuery();
Console.WriteLine(paramRetVal.Value.ToString());
}
}
TEST 1: Öncesi
SQLCMD şunu döndürür:
master: 0 (ODBC)
LINQPad şunu döndürür:
tempdb: 0 (.Net SqlClient Data Provider)
VARSAYILAN BAĞLANTI SEÇENEĞİNİ DEĞİŞTİR:
Aşağıdaki T-SQL, ARITHABORT
ayarlanabilecek diğer seçenekleri kaldırmadan ARITHABORT
ve bitmasked değerinde önceden ayarlanmışsa hiçbir şeyi değiştirmeden etkinleştirir.
DECLARE @UserOptions INT;
-- Get current bitmasked value and ensure ARITHABORT is enabled:
SELECT @UserOptions = CONVERT(INT, cnf.[value_in_use]) | 64 -- enable "ARITHABORT"
FROM sys.configurations cnf
WHERE cnf.[configuration_id] = 1534 -- user options
-- Apply new default connection options:
EXEC sys.sp_configure N'user options', @UserOptions;
RECONFIGURE;
TEST 2: Sonra
SQLCMD şunu döndürür:
master: 64 (ODBC)
LINQPad şunu döndürür:
tempdb: 64 (.Net SqlClient Data Provider)
Sonuç
Verilen:
- Sahip olmanın herhangi bir faydası yok gibi görünüyor
ARITHABORT OFF
- Sahip olmanın faydası var
ARITHABORT ON
- Varsayılan bağlantı ayarı (bağlantı tarafından geçersiz kılınmadıkça) =
OFF
- ODBC veya OLEDB / .NET SqlClient'in ayarlamaya çalıştığı görünmüyor
ARITHABORT
, bu nedenle varsayılan ayarı kabul ediyorlar
Örnek çapında varsayılan bağlantı seçeneklerini değiştirmenizi öneririm (yukarıda gösterildiği gibi). Bu, uygulamayı güncellemekten daha az rahatsız edicidir. Sadece app güncelliyorduk eğer sen örneği çapında ayarı değiştirme ile ilgili bir sorun bulmak.
PS I değişen basit bir test yaptım tempdb
ve değil örneği çapında ayarı değiştirme ve işe görünmüyordu.