কিছু ডিফল্ট রয়েছে যা কেবলমাত্র বিদ্যমান কারণ কেউই জানে না যে এগুলি পরিবর্তনের প্রভাব কী হবে। উদাহরণস্বরূপ, ওএস ভাষা হিসাবে "ইউএস ইংলিশ" ব্যবহার করে এমন কোনও সিস্টেমে ইনস্টল করার সময় ডিফল্ট উদাহরণস্বরূপ স্তরের কোলেশন SQL_Latin1_General_CP1_CI_AS
। SQL_*
কোলেশনগুলি প্রাক-এসকিউএল সার্ভার 2000 সামঞ্জস্যের জন্য যেহেতু এটি কোনও অর্থ দেয় না । এসকিউএল সার্ভার 2000-এ শুরু করে আপনি আসলে একটি উইন্ডোজ কোলেশন চয়ন করতে পারেন এবং সুতরাং মার্কিন ইংলিশ সিস্টেমগুলির জন্য ডিফল্টটি রূপান্তর করা উচিত ছিল Latin1_General_CI_AS
। কিন্তু, আমি অনুমান করি যে মাইক্রোসফ্টের কেউই সত্যিই জানেন না বিভিন্ন সম্ভাব্য সাব-সিস্টেম এবং সিস্টেমের সঞ্চিত প্রক্রিয়া ইত্যাদির সমস্তটিতে কী প্রভাব পড়বে really
সুতরাং, এটিতে ডেটাবেস ডিফল্ট বা এমনকি উদাহরণস্বরূপ হিসাবে সেট করার কোনও নির্দিষ্ট নেতিবাচক প্রভাব সম্পর্কে আমি অবগত নই। একই সাথে, আমি এটি পরীক্ষাও করিনি। তবে আমি এটি পরীক্ষা করে নিলেও, আমি এখনও আপনার অ্যাপ্লিকেশন হিসাবে একই কোড পাথগুলি ব্যবহার করতে পারি না, সুতরাং এটি আপনার পরিবেশে সত্যই যা পরীক্ষা করা দরকার। এটি সেট করুনON
আপনার দেব এবং কিউএ পরিবেশে উদাহরণ স্তরে এবং দেখুন কীভাবে এটি এক বা দু'মাস ধরে কাজ করে। তারপরে এটি স্টেজিং / ইউএটি তে সক্ষম করুন। বেশ কয়েকটি সপ্তাহ ধরে যদি সব কিছু ঠিকঠাক চলতে থাকে তবে কনফিগারেশনের পরিবর্তনে প্রোডাকশনে রোল করুন। কীটি হ'ল প্রতিদিনের জন্য ব্যবহৃত না হওয়া বিভিন্ন কোড পাথের পরীক্ষার জন্য যথাসম্ভব সময় দেওয়া। কিছু সাপ্তাহিক বা মাস বা বার্ষিকভাবে আঘাত করা হয়। কিছু কোড পাথ কেবল সমর্থনের দ্বারা আঘাত করা হয়, বা কিছু অ্যাডহক প্রতিবেদন বা রক্ষণাবেক্ষণের প্রকল্প যা কেউ কেউ বছর আগে তৈরি করেছিলেন এবং আপনাকে কখনও বলেন নি এবং কেবল এলোমেলো বিরতিতে ব্যবহৃত হয় (না, এটি কখনও হয় না ;-))।
সুতরাং, আমি একটি উদাহরণে কিছু পরীক্ষা করেছি যে এখনও ডিফল্ট "ব্যবহারকারীর বিকল্পগুলি" সেটিংস রয়েছে কারণ আমি এটি কখনও পরিবর্তন করি নি।
দয়া করে নোট করুন:
@@OPTIONS
/ 'user options'
একটি বিটমাস্ক মান
- 64 এর জন্য বিট
ARITHABORT ON
সেটআপ
আমি এসকিউএলসিএমডি (যা ওডিবিসি ব্যবহার করে) এবং লিনকিউপ্যাড (যা। নেট স্ক্যালক্লিয়েন্ট ব্যবহার করে) উভয়ের সাথে পরীক্ষা করেছি:
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 .
(এটি ^
ডস লাইন ধারাবাহিকতা চরিত্র; .
শেষ লাইনে অনুলিপি কেবল অতিরিক্ত লাইনটিকে অনুলিপি-আটকানো সহজ করে তোলে)
লিনকিউপ্যাডে:
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());
}
}
পরীক্ষা 1: আগে
এসকিউএলসিএমডি ফেরত:
master: 0 (ODBC)
লিনকিউপ্যাড ফেরত:
tempdb: 0 (.Net SqlClient Data Provider)
ডিফল্ট সংযোগ বিকল্প পরিবর্তন করুন:
নিম্নলিখিত টি-এসকিউএল ARITHABORT
সেট করা হতে পারে এমন কোনও বিকল্প অপসারণ না করে এবং ARITHABORT
ইতিমধ্যে বিটমাস্ক মানটিতে সেট করা থাকলে কোনও পরিবর্তন না করে সক্ষম করে।
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;
পরীক্ষা 2: পরে
এসকিউএলসিএমডি ফেরত:
master: 64 (ODBC)
লিনকিউপ্যাড ফেরত:
tempdb: 64 (.Net SqlClient Data Provider)
উপসংহার
দেত্তয়া আছে:
- থাকার ফলে কোনও লাভ হবে বলে মনে হয় না
ARITHABORT OFF
- থাকার সুবিধা আছে
ARITHABORT ON
- ডিফল্ট সংযোগ সেটিং (সংযোগ দ্বারা ওভাররাইড না করা পর্যন্ত) =
OFF
- এটি ODBC বা OLEDB / .NET SqlClient উভয়ই সেট করার চেষ্টা করে বলে মনে হয় না
ARITHABORT
, সুতরাং তারা ডিফল্ট সেটিংস গ্রহণ করে
আমি ইনস্ট্যান্স-ওয়াইড ডিফল্ট সংযোগ বিকল্পগুলি (উপরে প্রদর্শিত হিসাবে) পরিবর্তন করার পরামর্শ দেব। অ্যাপ্লিকেশন আপডেট করার চেয়ে এটি কম বাধা হবে। আপনি যদি ইনস্ট্যান্স-ওয়াইড সেটিংস পরিবর্তন করতে কোনও সমস্যা পান তবে আমি কেবলমাত্র অ্যাপটি আপডেট করব ।
PS আমি পরিবর্তন একটি সহজ পরীক্ষা করেনি tempdb
এবং না উদাহরণস্বরূপ ব্যাপী সেটিং পরিবর্তন এবং এটি কাজ বলে মনে হচ্ছে নি।