در این نوشتار ١٠ مشکلی که در SQL Server 2000 بیشتر اتفاق می‌افتد همراه با راه حل آن‌ها ذکر شده است. عناوین خطا‌ها به شرح زیر هستند:

  1. شکایت کاربران از کندی غیر عادی زمان اجرای دستور‌های پرس و جو (Query)
  2. کاربران پیغام خطای «دسترسی ممنوع» (Permission denied) را بعد از آن که شما مجوز دسترسی به یک روال ذخیره شده (stored procedure) را داده اید دریافت می‌کنند.
  3. کاربران پیام خطای فضای ناکافی (out of space) را دریافت می‌کنند
  4. جلسه (session) کلاینت‌ها بدون قطع اتصال از بین می‌رود.
  5. یک پرس و جوی سریع کل سیستم را کند می‌کند
  6. یک روال زمان بندی شده (scheduled job) اجرا نمی‌شود
  7. بانک اطلاعاتی به حالت مشکوک (suspect) نمایش داده می‌شود.
  8. شما می‌توانید به یک نمونه (instance) محلی SQL متصل شوید ولی از طریق شبکه متصل نمی‌شوید.
  9. شما بانک اطلاعاتی را به سرور جدید منتقل می‌کنید ولی کاربران نمی‌توانند به آن متصل شوند
  10. کاربران گزارش خطای بن بست (deadlock) سیستم را می‌دهند.

١- شکایت کاربران از کندی غیر عادی زمان اجرای دستور های پرس و جو (Query)

اگر دستور های پرس و جوی عادی بیش از حد معمول کند اجرا می شوند، ممکن است منشاء اصلی آن درگیر شدن منابع بر اثر قفل شدن آن ها باشد. معمولا به هنگام اضافه شدن یک پردازش جدید به سیستم یا افزایش بار سیستم این اتفاق می افتد. برای عیب یابی باید از فرمان SP_WHO2 در محیط Query Analyser استفاده کنیم. خروجی این دستور حاوی یک فیلد BlkBy است. اگر SPID ها بلوکه شوند، خروجی فرمان، شماره SPID مشکل دار را نشان خواهد داد. برای پیدا کردن منشاء اصلی باید بلوک های زیادی را بررسی نمایید. حال می توانید با استفاده از فرمان dbcc inputbuffer دستور SQL را که SPID آن را اجرا می کند، ببینید. این به شما کمک خواهد کرد که علت مشکل را پیدا کنید.

٢- کاربران پیغام خطای «دسترسی ممنوع» (Permission denied) را بعد از آن که شما مجوز دسترسی به یک روال ذخیره شده (stored procedure) را داده اید دریافت می کنند.

حتی اگر به کاربران مجوز دسترسی اجرای یک روال ذخیره شده را داده باشید، لازم است که مجوز های مناسب را برای دسترسی به اشیاء مورد استفاده روال ذخیره شده مذکور نیز به کاربران بدهید. به عنوان مثال شما یک روال ذخیره شده دارید که یک دستور select را از جدول customers اجرا کند؛ شما باید به کاربران مجوز اجرای دستور select را بر روی جدول customers بدهید.

٣- کاربران پیام خطای فضای ناکافی (out of space) را دریافت می کنند

اگر کاربران پیامی مبنی بر فضای ناکافی بانک اطلاعاتی دریافت می کنند، ممکن است دو راه حل وجود داشته باشد. نخست ممکن است درایو (پارتیشن) هارد دیسک که فایل اصلی بانک اطلاعاتی یا فایل گزارش تراکنش ها (transaction log) را نگه می دارد، پر شده باشد. در این صورت هارد مذکور را برای فایل (ها) یی که به سرعت بزرگ می شوند یا هر مشکل مشابه دیگری بررسی کنید. به علاوه ممکن است برای هر کدام از دو فایل ذکر شده حداکثر حجم مجاز تعیین شده باشد. در این صورت حداکثر حجم مجاز را افزایش دهید.

کاربران همچنین ممکن است پیغام خطای پر شدن بانک اطلاعاتی موقت (tempdb) را دریافت کنند. در این حالت سرویس MSSQL را راه اندازی مجدد (Restart) کنید تا بانک اطلاعاتی موقت را مجدد ایجاد کند. در عین حال در صورت محدودیت اندازه tempdb حداکثر اندازه مجاز آن ها را نیز می توانید افزایش دهید.

 

۴- جلسه (session) کلاینت ها بدون قطع اتصال از بین می رود.

گاهی اوقات ممکن است کلاینت ها اتصال خود را به SQL Server از دست بدهند. این امر ممکن است باعث شود که SPID آن ها زمانی که منتظر پایان وقفه (time out) است، یک قفل روی منبعی (شیء) که با آن کار می کند نگه دارد. این مشکل در کلاینت هایی که نگارش قدیمی اکسس میکروسافت را استفاده می کنند نیز به دفعات اتفاق می افتد.  برای رفع مشکل فرمان SP_WHO2 و KILL را برای حذف پردازش قطع شده از سرور (orphaned) اجرا نمایید. همچنین می توانید زمان وقفه (time out) کلاینت ها را کمتر کنید تا سرور سریع تر پردازش های قطع شده را از بین ببرد.

 

۵- یک پرس و جوی سریع کل سیستم را کند می کند

در یک سیستم با چند پردازنده ممکن است برنامه Task Manager یا Performance Monitor یکی از پردازنده ها را به طور ١٠٠% مشغول نشان دهد در حالی که بقیه پردازنده ها بی کار هستند. در این حال شرایط اجرایی روال فعلی نادرست است. درجه پردزاش موازی (parallelism) را برای این پرس و جو تغییر دهید. برای این کار فرمان MaxDop  (Maximum Degree of parallelism) را داخل پرس و جو برای تعیین درجه پردازش موازی اجرا نمایید. ممکن است لازم باشد این فرمان را با پارامتر های مختلف اجرا نمایید تا به صورت تجربی بهترین مقدار را برای آن پیدا کنید.

 

۶- یک روال زمان بندی شده (scheduled job) اجرا نمی شود

اگر کاربری که یک روال زمان بندی شده را در SQL Server Agent ایجاد کرده است، حذف شده یا تغییر نام یابد، روال مذکور اجرا نخواهد شد. شما باید نام کاربر مالک (owner) آن را دوباره به نام کاربر موجود تغییر دهید.

 

٧- بانک اطلاعاتی به حالت مشکوک (suspect) نمایش داده می شود.

بانک اطلاعایت زمانی به حالت مشکوک در SQL Server اعلام می شود که فایل آن دچار مشکل شده باشد، یا فایل های آن روی دیسک نباشند. علت این امر ممکن است تغییر نام یا حذف درایو حاوی فایل های بانک اطلاعاتی باشد. برای حل این مشکل بانک اطلاعاتی مشکل دار را جدا (detach) و فایل های سالم را از محل جدید انتخاب و متصل (attach) نمایید.

 

٨- شما می توانید به یک نمونه (instance) محلی SQL متصل شوید ولی از طریق شبکه متصل نمی شوید.

اگر در شبکه نمی توانید به SQL Server متصل شوید ممکن است پورت پیش فرض آن یعنی ۱۴۳۳ تغییر کرده باشد. شما باید از پورت جدید یا از مسیر نامگذاری شده (named pipes) استفاده کنید. به علاوه برخی نگارش های MSDE ممکن است به طور پیش فرض اجازه اتصال شبکه را به کاربر ندهند. برای رفع این مشکل باید سوئیچ DISABLENETWORKPROTOCOLS=1 را به هنگام نصب استفاده کنید.

 

٩- شما بانک اطلاعاتی را به سرور جدید منتقل می کنید ولی کاربران نمی توانند به آن متصل شوند

اگر شما بانک اطلاعاتی را از یک سرور به سرور دیگر منتقل کنید، کاربران آن به همراه مجوز های شان همراه بانک اطلاعاتی منتقل خواهند شد ولی سیستم جدید SQL آن ها را به عنوان کاربران SQL نمی پذیرد. برای انتقال کاربران می توانید سرویس DTS یا همان Data Transformation Service را استفاده کنید یا از یک اسکریپت در آدرس http://support.microsoft.com/default.aspx?kbid=246133 استفاده کنید.

 

١٠- کاربران گزارش خطای بن بست (deadlock) سیستم را می دهند.

اگر کاربران پیغام خطای مبنی بر مواجهه با بن بست یا پیغام مشابه دیگری (بسته به تنظیم گزارش خطای سیستم) را دریافت می کنند، ممکن است بر اثر تصادم دو دستور پرس و جو اتفاق بیفتد؛ بدین صورت که یک از آن ها منبعی (شیء) را قفل کرده است که دیگری می خواهد آن را کامل کند. گزارش خطا (error log) در SQL Server به هنگام کشف یک مورد بن بست آن را اعلام می کند و این نخستین جایی است که باید به دنبال سوابق این خطا باشید. به علاوه شما می توانید علامت تعقیب خطا (trace flag) را با مقدار –t1204 فعال کنید که به شما امکان می دهد اطلاعات بیشتری در گزارش خطای شما ثبت گردد. نخستین نکته این است که شما سطح درگیری (contention level) را در سیستم مشخص نمایید. آیا دو پرس و جوی همزمان موجب این خطا می شوند؟ در این صورت می توانید طوری آن ها را زمان بندی کنید که هم زمان اجرا نشوند. اگر این پرس و جو ها عموما اجرا می شوند باید باید آن ها را بهینه کنید.

لینک مرتبط

آموزش دستور SQL Join در بانک اطلاعاتی به صورت تصویری