عنوان:

‫تنظیم درجه سازگاری یک دیتابیس اس کیوال سرور


نویسنده: وحید نصیری
تاریخ: ۱۳۸۸/۰۲/۲۲ ۱۸:۳۷:۰۰
آدرس: www.dntips.ir

اس کیوال سرور خود را به 2008 ارتقاء داده‌اید؟ آیا می‌دانید که مجاز هستید از تمامی امکانات جدید آن در دیتابیس‌های موجود خود استفاده کنید یا خیر؟
به همین منظور ابتدا کوئری زیر را اجرا نمائید:
Use master;
SELECT name, compatibility_level FROM sys.databases
لیست دیتابیس‌های موجود به همراه درجه سازگاری آن‌ها نمایش داده می‌شود. هر کدام که درجه سازگاری مساوی با 100 نداشت یعنی مجاز به استفاده از تمامی امکانات سرور جدید نیست و با آن همانند یک دیتابیس قدیمی بر اساس درجه سازگاری آن رفتار می‌شود.
تفسیر این اعداد مطابق اطلاعات زیر است:
60 = SQL Server 6.0
65 = SQL Server 6.5
70 = SQL Server 7.0
80 = SQL Server 2000
90 = SQL Server 2005
100= SQL Server 2008
برای تغییر این درجه سازگاری می‌توان از یکی از دستورات T-SQL زیر استفاده کرد:

-- Old way:
EXEC sp_dbcmptlevel 'AdventureWorks', 100

-- New way:
ALTER DATABASE 'AdventureWorks' SET COMPATIBILITY_LEVEL = 100 ;
که روش اول منسوخ شده در نظر گرفته شده و روش دوم پیشنهاد می‌شود.
برای مثال کوئری زیر عبارات Alter مورد نظر را جهت ارتقاء دیتابیس‌های موجود که درجه سازگاری آن‌ها 100 نیست (هنوز به اس کیوال سرور 2008 ارتقاء پیدا نکرده‌اند)، تولید می‌کند:

SELECT 'ALTER DATABASE ' + NAME + ' SET COMPATIBILITY_LEVEL = 100;' TSQL
FROM sys.databases
WHERE compatibility_level <> 100


نظرات

  • هادی مزارعی در ۱۴۰۴/۱۰/۰۳ ۰۸:۵۵
    در حقیقت استفاده از نسخه‌های جدید SQL Server با رعایت درجه سازگاری همیشه بلامانع است؟
    • وحید نصیری در ۱۴۰۴/۱۰/۰۳ ۰۹:۱۹
      خیر، استفاده از نسخه‌های جدید SQL Server با رعایت درجه سازگاری (compatibility level) همیشه بلامانع نیست. اگرچه درجه سازگاری به حفظ رفتارهای قدیمی در زمینه نحو T-SQL و پردازش کوئری‌ها کمک می‌کند، اما تضمین‌کننده سازگاری کامل نیست و ممکن است مشکلات یا تغییرات غیرمنتظره‌ای ایجاد شود.

      آنچه درجه سازگاری کنترل می‌کند:
      درجه سازگاری رفتارهای خاصی مانند بهینه‌ساز کوئری (query optimizer)، مدل‌های تخمین cardinality، کلمات کلیدی رزرو شده، و برخی تغییرات نحوی T-SQL را با نسخه قدیمی‌تر SQL Server همخوان می‌کند. این ویژگی اجازه می‌دهد تا پایگاه‌های داده از نسخه‌های قدیمی‌تر را بدون نیاز به تغییرات فوری در برنامه‌ها، به نسخه جدید منتقل کنید.

      آنچه درجه سازگاری کنترل نمی‌کند:
      • عملکردهای منسوخ یا حذف‌شده: ویژگی‌هایی که کاملاً از موتور SQL Server حذف شده‌اند (مانند نکته FASTFIRSTROW که از SQL Server 2012 حذف شد).
      • تغییرات غیرمرتبط با T-SQL: مانند تغییر نام اشیاء سیستمی، حذف پروسیجرهای قدیمی (مانند sp_dboption)، یا تغییرات در ستون‌های ویوهای سیستمی.
      • رفتارهای جدید موتور یا محدودیت‌ها: تغییرات امنیتی مانند الگوریتم‌های هش منسوخ (مانند MD5 یا SHA1 که در سطوح بالاتر محدود می‌شوند)، یا حالت‌های جدید رمزنگاری.
      • ویژگی‌های جدید که توسط درجه سازگاری کنترل نمی‌شوند: برخی توابع جدید (مانند STRING_SPLIT که نیاز به سطح 130 یا بالاتر دارد) حتی اگر موتور آن را پشتیبانی کند، در سطوح پایین‌تر کار نمی‌کنند.
      • امنیت و رمزنگاری: تغییرات در استانداردهای امنیتی ممکن است بر داده‌های رمزنگاری‌شده تأثیر بگذارد، بدون اینکه درجه سازگاری آن را پوشش دهد.

      مشکلات احتمالی:
      • کاهش عملکرد: سطوح قدیمی‌تر ممکن است از بهبودهای بهینه‌ساز کوئری، پردازش هوشمند کوئری (مانند بازخورد حافظه یا بهینه‌سازی حساس به پارامتر)، یا ویژگی‌های جدید مانند حالت دسته‌ای (batch mode) بی‌بهره بمانند، که منجر به پلن‌های کوئری ضعیف‌تر شود.
      • ناسازگاری با ویژگی‌های جدید: اگر برنامه به ویژگی‌های جدید وابسته باشد، ممکن است شکست بخورد یا عملکرد متفاوتی داشته باشد.
      • تغییرات نوع داده یا تبدیل‌ها: تبدیل‌های ضمنی (مانند datetime به datetime2) ممکن است دقت یا نتایج را تغییر دهد.
      • تعارض نحوی یا کلمات کلیدی: کلمات کلیدی جدید ممکن است با نام اشیاء قدیمی تداخل ایجاد کنند.
      • مسائل امنیتی: سطوح قدیمی‌تر ممکن است آسیب‌پذیری‌های امنیتی قدیمی را حفظ کنند، هرچند درجه سازگاری فقط سازگاری جزئی ارائه می‌دهد.
      • پیکربندی‌های خاص مانند replication: پایگاه‌های داده توزیع ممکن است سطوحی داشته باشند که در جاهای دیگر پشتیبانی نشود، هرچند بر عملکرد replication تأثیر ندارد.

      توصیه‌ها:
      • فقط در صورتی درجه سازگاری قدیمی را حفظ کنید که برنامه به ویژگی‌های جدید نیاز نداشته باشد و عملکرد قابل قبول باشد.
      • برای توسعه جدید یا سیستم‌های حساس به عملکرد، به سطح جدیدتر ارتقا دهید تا از بهبودها بهره ببرید.
      • همیشه پس از ارتقا، تست کامل انجام دهید، زیرا پروسیجرهای ذخیره‌شده دوباره کامپایل می‌شوند و پلن‌های کوئری ممکن است تغییر کنند.
      • از ابزارهایی مانند Query Store یا Query Tuning Assistant برای ارزیابی تأثیر عملکرد استفاده کنید.

      در نهایت، درجه سازگاری، سازگاری جزئی ارائه می‌دهد، اما تضمین‌کننده کامل نیست و ممکن است نیاز به بررسی و تست دقیق داشته باشد.