شنبه, ۸ اردیبهشت, ۱۴۰۳ / 27 April, 2024
مجله ویستا

نگاهی به امکانات نسخه جدید SQL Server ۲۰۰۵


نگاهی به امکانات نسخه جدید SQL Server ۲۰۰۵
Snapshot Isolation Level
یكی از روش‌هایی كه به انواع متدهای قفل كردن ردیف‌های یك جدول بانك‌اطلاعاتی در نسخه جدید اضافه شده است، شیوه تصویربرداری از ركورد است. در روش‌های قبلی، اگر یك یا چند ركورد بانك اطلاعاتی توسط دستور BeginTrans كه شروع یك فرآیند را مشخص می‌كند در شرف تغییر یا حذف قرار می‌گرفتند، تا مادامی‌ كه فرآیند مذكور توسط دستور Commit Trans تأیید یا توسط RollBack منتفی نشود، از هیچ جا و برنامه‌ای نمی‌توان ركوردهای مذكور را حتی با دستور ساده SELECT خواند. اما در روش جدید قفل‌گذاری، در صورت بروز چنین رویدادی سایر كاربران می‌توانند همواره آخرین ارزش ركوردهای مذكور را با این فرض كه هنوز هیچ تغییری در آن‌ها ایجاد نشده است بخوانند و مورد استفاده قرار دهند.
. باز هم دات‌نت
با نسخه جدید SQL Server، برنامه‌نویسان بانك‌های اطلاعاتی قادرند از امكانات و قابلیت‌های موجود در پلتفرم دات‌نت و كلیه توابع و كلاس‌های ساخته شده در آن بهره‌مند شوند. یكی از ابتدایی‌ترین و در عین حال اساسی‌ترین این قابلیت‌ها، امكان استفاده از دو زبان مهم و كاربرپسند دات‌نت یعنی ویژوال بیسیك و سی‌شارپ در پیاده‌سازی اجزای مختلف یك بانك‌اطلاعاتی است. این عامل نه‌تنها باعث می‌شود كه برنامه‌نویسان برای نوشتن ماژول‌هایی مثل تریگرها، روال‌ها (Stored Procedures) در توابع به جای استفاده از زبان استاندارد و در عین حال پیچیده T-SQL ، بتوانند از زبان‌های محیط دات‌نت با تمام ساختارها، دستورات، كلاس‌ها، آرایه‌ها، و خلاصه تمام ویژگی‌های یك زبان شی گرا استفاده كنند، بلكه این همكاری نزدیك بین موتور برنامه‌نویسی دات‌نت یعنی CLR (كه مسؤول تبدیل كدهای نوشته شده دات‌نت به زبان سیستم‌عامل است) و موتور بانك اطلاعاتی SQLServer باعث شده تا به غیر از تنوع زبان‌های برنامه‌نویسی قابل استفاده درSQLServer، تغییر قابل توجهی نیز در كارایی ماژول‌های مذكور پیش آید. در واقع موضوع از این قرار است كه اصولاً كدهای نوشته شده به زبان‌های دات‌نت، ابتدا توسط كامپایلر به زبان (IL) ترجمه می‌شوند. سپس CLR این كد میانی را به كد قابل فهم سیستم‌عامل تبدیل و آماده اجرا می‌نماید. این كار سبب می‌شود تا كدهای نهایی به دلیل این‌كه بسیار به سیستم‌عامل نزدیك می‌باشد سریع‌تر از كدهای TSQL (كه فقط توسط موتور بانك اطلاعاتی قابل اجرا هستند) اجرا شوند و در زمان اجرا از كارایی بیشتری برخوردار باشند. البته این مسأله بدین معنی نیست كه استفاده از زبان‌های دات‌نت همیشه بر زبان‌های SQL ارجحیت دارد، بلكه منظور آن است كه در برخی موارد ممكن است آن قدر منطق و الگوریتم یك ماژول پیچیده باشد كه برنامه‌نویس استفاده از زبان‌های دات‌نت را به دلیل آسان‌تر بودن ساختار و دستورات آن به زبان SQL ترجیح دهد. بنابراین زمانی كه بیشترعملیات یك ماژول مربوط به خواندن و نوشتن اطلاعات باشد بهتر است از همان دستورات استاندارد SQL یعنی SELECT ،UPDATE ،DELETE وINSERT استفاده كرده و بی‌جهت منابع سیستم را صرف تعریف متغیرها و كلاس‌های دات‌نت ننماید. اما در ماژول‌هایی كه بیشتر عملیاتشان شامل پردازش اطلاعات مثل انجام عملیات‌های ریاضی یا مقایسه اطلاعات با یكدیگر است بهتر است تا هم از امكانات برنامه‌نویسی و هم از سرعت و كارایی بالای دات‌نت در این زمینه بهره برد و ماژول‌های مذكور را با زبان‌های دات‌نت پیاده‌سازی كرد.
. ADO .NET وارد می‌شود
طبق یك سنت نه‌چندان قدیمی برنامه‌نویسی در محیط ویندوز، برنامه‌نویسان SQLServer، بانك اطلاعاتی موردنظرشان را برروی سرور و برنامه كاربردی نوشته شده با زبانی مثل ویژوال بیسیك را بر روی كلاینت‌ها قرار می‌دهند. سپس از طریق این برنامه كاربردی و با استفاده از اشیایی از جنس ADO داده‌های موردنیاز خود را از سمت سرور دریافت كرده و یا به آن ارسال می‌كنند. اكنون این ارتباط به لطف نسخه جدید SQLServer و همچنین محیط دات‌نت، با امكانات جدیدADO.NET بسیار كامل‌تر از قبل شده است. این ارتباط جدید با استفاده از مكانیسمی به نام اعلان (Notification) به یك ارتباط دو‌طرفه فعال تبدیل شده به طوری كه ADO.NET قادر است پیغام‌هایی را از سمت پایگاه داده به سمت كلاینت ارسال كند. به عنوان مثال فرض كنید كه شما با استفاده ازADO تعدادی از ركوردهای یك جدول بانك اطلاعاتی را انتخاب كرده و مشغول كار برروی آن‌ها هستید. در همین هنگام كاربر دیگری از طریق كلاینت و ADO خود، ركوردی در محدوده ركوردهای مورد انتخاب شما را تغییر می‌دهد یا حذف می‌كند. در این وقت موتور پایگاه داده با ارسال پیغامی به ADO شما، این مسأله را با استفاده از فراخوانی یك رخداد (Event) شی ADO به اطلاعتان می‌رساند. علاوه براین قابلیت جدید، فناوری جدید دیگری هم با استفاده ازADO.NET به نسخه جدید SQLServer اضافه شده و آن امكان چند پرس‌وجوی همزمان توسط یك شی ADO است. در این شیوه اگر یك شی ADO با استفاده از دستور SELECT مشغول خواندن تعدادی از ركوردهای یك جدول بانك اطلاعاتی باشد، می‌تواند بدون این‌كه منتظر به پایان رسیدن این عملیات شود، تعداد دیگری از ركوردهای یك جدول دیگر بانك اطلاعاتی را بخواند. این قابلیت جدید با نام (Multiple Active Result Set (MARS كه قبلاً فقط در كرسرهای سمت سرور (server side) و آن هم نه با كارایی بالا وجود داشت اكنون در كرسرهای سمت راست كلاینت هم وجود دارد و تفاوت عمده آن با شكل قدیمی هم علاوه بر مورد مذكور، امكان ایجاد چند كرسر در یك شی ADO به صورت همزمان است. SQLServer نسخه ۲۰۰۵ به خوبی از تمام این ویژگی‌ها، پشتیبانی می‌كند.
. تكنولوژی XML
اكنون كه XML به یك استاندارد ارتباطی بین سكوهای مختلف تبدیل شده است، نسخه جدید SQLServer هم از توجه كافی به آن و ایجاد یك انقلاب در ساده‌تر استفاده كردن از آن طفره نرفته است. در نسخه ۲۰۰۰ كاربران قادر بودند تا با استفاده از دستور FOR XML نتیجه یك پرس‌وجوی SELECT از یك بانك اطلاعاتی را به درون یك فایل XML بریزند یا مثلاً با دستور OPEN XML می‌توانستند یك فایل XML را باز كرده و شروع به خواندن دستورات درون آن نمایند. از آن‌جا كه در نسخه جدید SQLServer توجه خاصی به این استاندارد و زبان ارتباطی شده است، یك نوع داده جدید (Data type) به انواع داده‌های قبلی و استاندارد SQL مثل int ، char و امثال آن اضافه شده است. این نوع داده جدید كه XML نام دارد و دارای خصوصیات یك نوع داده موجود در یك محیط شی‌گرا است، دارای متدهای پیشرفته‌ای چون ()nodes() ،Value() ،exist() ،query و ()modify بوده و قادر است انواع پردازش‌های قابل انجام برروی اسناد XML را به راحتی انجام دهد. عملیات جستجو، تغییر، حذف و درج مقادیر موردنظر در داخل یك فایل XML را می‌توان با استفاده از متدهای مذكور و صرفاً با چند خط برنامه‌نویسی انجام داد. همچنین در این نسخه برخلاف نسخه ۲۰۰۰، با استفاده از دستور FOR XML می‌توان یك شیء از جنس XML را بدون ارسال آن به كلاینت، برروی سرور ساخته و از آن نگهداری كرد. با این كار می‌توان جداولی را كه مرتباً مورد رجوع كاربران قرار می‌گیرند هراز گاهی در قالب XML به داخل حافظه آورد و كاربران مذكور به جای رجوع به جداول اصلی در هارددیسك، با استفاده از دستورات ویژه جستجو درXML ، متغیر مذكور را در حافظه سرور مورد جستجو قرار دهند و بدین‌وسیله یك نوع عمل Cache كردن را جهت افزایش سرعت دسترسی به اطلاعات تكراری شبیه‌سازی كنند. در این حالت، كاربران به جای استفاده از دستورSELECT استاندارد می‌توانند از OPEN XML كه در نسخه ۲۰۰۵ قادر است متغیرهای جدید از نوع XML را بخواند استفاده كرده و به سرعت به اطلاعات موردنیاز خود دسترسی پیدا كنند. این قابلیت جدید آن‌قدر در سریع‌تر كردن جستجو در برنامه‌های تحت وب مهم و مؤثر است كه جای هیچ مشكلی را در استفاده از آن باقی نمی‌گذارد.
. سرویس اعلان (Notification)
همان‌طور كه گفتیم سیستم اعلان درSQLServer قادر است پیغام‌هایی را طی زمان‌های مشخص به سمت كاربران بفرستد. مثلاً تصور كنید كه تعدادی كاربر در حال اتصال به یك بانك حاوی اطلاعات مربوط به ارزش سهام در بورس هستند. از آن‌جایی كه ممكن است قیمت سهام هر شركت یا مؤسسه برای تعدادی از كاربران از اهمیت زیادی برخوردار باشد، می‌توان این سیستم را طوری تنظیم كرد تا هرگاه ارزش سهام خاصی كه موردنظر هر كاربر است تغییر كرد، به صورت اتوماتیك به وی اعلام شود. كاربر هم می‌تواند این تغییرات را برروی برنامه كاربردی خود، تلفن همراه (در قالب Windows Messenger ،(SMS و یا ایمیل به‌صورت مرتب دریافت و مشاهده كند.. سرویس گزارش‌گیری
سرویس جدید تولید گزارش‌های متنوع در نسخه ۲۰۰۵ به یكی از جالب‌ترین و پركاربردترین قابلیت‌های این نسخه تبدیل شده است، وجود یك موتور گزارشگر قوی در سمت سرور و یك ابزار مناسب ساخت گزارش با واسط كاربر عالی، باعث شده تا برنامه‌نویسان بتوانند گزارش‌های موردنظر خود را با كارایی و سرعت مناسب در سمت سرور بسازند به طوری كه این گزارش‌های سمت سرور توسط هر برنامه كاربردی سمت كلاینت در هر پلتفرمی با همان امكانات اتصال به SQLServer قابل مشاهده است.
. بهبودهای ایجاد شده در زبان
در ۲۰۰۵ SQLServer تغییرات بسیار مثبتی در زبان SQL T ایجاد شده است. این تغییرات در زمینه‌های مختلف مثل مدیریت خطاها، جستجوهای بازگشتی (Recursive Query) و حتی در بدنه موتور پایگاه داده‌ها انجام شده و كارایی كلی ذخیره و یا خواندن اطلاعات را به نحو مطلوبی افزایش داده است. به عنوان مثال دردستورات TSQL، دو اپراتور جدید دیده می‌شود، كه PIVOT وUNPIVOT نام دارند. این دو اپراتور كه در قسمت FROM یك پرس‌وجو مورد استفاده قرار می‌گیرند می‌توانند نتیجه یك جستجوی انجام شده توسط دستور SELECT را به جای برگرداندن در قالب ردیف‌ها یا ركوردهای پشت‌سرهم، به صورت ستون‌های مختلف یك یا چند ركورد برگردانند. در این روش یكی از ستون‌های (فیلدهای) یك جستجو به عنوان محور معرفی شده و بقیه ستون‌ها براساس آن به صورت افقی طبقه‌بندی می‌شوند. به یك مثال توجه كنید:
SELECT CUSTOMER ID, order No
FROM orders PIVOT CustomerID

Order No Order No Order No Order No Customer ID
- ۴۴۰۰ ۱۱۲۰ ۲۵ ۱
- - - ۳۵۰ ۲
- - ۱۷۸۰ ۴۴۳ ۳
۸۹۸۹ ۲۲۲۲ ۱۹۸۰ ۵۵۵ ۴
. نتیجه جستجوی فوق چیزی شبیه موارد بالا‌ خواهد بود
همان‌طور كه مشاهده می‌كنید با استفاده از اپراتور مذكور، نتیجه پرس‌وجوی انجام شده به این صورت كه هر ردیف به یك شماره مشتری و چندین شماره سفارش مربوطه به آن مشتری در قالب ستون‌های مختلف است، در می‌آید. این همان چیزی است كه سال‌ها درSQLServer وجود نداشت و ابزارهای مختلف گزارش‌سازی مثل CrystalReport آن را با نام Cross Tab به كاربران خود ارایه می‌دادند. در همین رابطه اپراتورUNPIVOT هم عمل عكس اپراتور مذكور را انجام می‌دهد.اپراتور دیگری كه می‌تواند نقش مهمی را در دستورات SQL بازی كند APPLY نام دارد كه در قسمت FROM یك دستور SQL به كار می‌رود. با استفاده از این دستور می‌توان خروجی یك تابع (Function) را با یك یا چند جدول دیگر تركیب (Join) كرد همان‌طور كه می‌دانید در ۲۰۰۵ SQLServer توابع می‌توانند یك یا چند ردیف یك جدول اطلاعاتی را برگردانند كه این خروجی می‌تواند با یك جدول دیگر با استفاده از اپراتور مذكور تركیب شود.
. مدیریت خطا
در نسخه‌های قدیمی SQLServer برای كشف و مدیریت خطا از سیستم Error Handling استفاده می‌شد. این شیوه كشف خطا كه در زبانی مثل ویژوال بیسیك ۶ هم مورد استفاده قرار می‌گرفت با استفاده از دستور GOTO می‌توانست كنترل و خط اجرای روال را از یك محل به محل دیگر و در واقع از محل بروز خطا به محل مدیریت و آشكار كردن (Raise) آن ببرد و بدین‌وسیله پیغام خطایی را به كار نشان دهد. نسخه جدید SQLServer با تأثیر از پلتفرم دات‌نت، از دستورات ویژه كشف و مدیریت خطا با عنوان Exception Handling استفاده می‌كند. این روش با استفاده از دستورات جدید TRY/CATCH شیوه بهتری از مدیریت خطا را به اجرا می‌گذارد. در این روش برخلاف روش قبل، تمام خطاهای اتفاق‌افتادنی مثل خطاهای مربوط به تبدیل داده‌ها به یكدیگر (DataConversion) به خوبی مدیریت شده و از بروز خطاهایی كه منجر به اتمام ناقص عملیات یك روال یا تریگر می‌شود جلوگیری به عمل می‌آید.
منبع : ماهنامه شبکه


همچنین مشاهده کنید