نگاهي به امكانات نسخه جديد SQL Server 2005

ToFaN

Well-Known Member
1001366_b.jpg


اشاره :
عرضه شدن نسخه 2005 پايگاه داده‌اي مشهور مايكروسافت يعني SQLServer، بازار نرم‌افزارهاي بانك اطلاعاتي را به شدت تحت تأثير خود قرار داد. امكانات گسترده‌اي كه در اين نسخه جديد تعبيه شده، طراحي و پياده‌سازي بانك‌هاي اطلاعاتي را سرعت بخشيده و تلفيق و انطباق آن با انواع فناوري‌هاي نو مانند XML وADO.NET، باعث افزايش قدرت و كارايي آن شده است. در اين مقاله به برخي از ويژگي‌هاي جديد اين برنامه نگاهي خواهيم داشت.




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 نسخه 2005 به خوبي از تمام اين ويژگي‌ها، پشتيباني مي‌كند.

تكنولوژي XML

اكنون كه XML به يك استاندارد ارتباطي بين سكوهاي مختلف تبديل شده است، نسخه جديد SQLServer هم از توجه كافي به آن و ايجاد يك انقلاب در ساده‌تر استفاده كردن از آن طفره نرفته است. در نسخه 2000 كاربران قادر بودند تا با استفاده از دستور FOR XML نتيجه يك پرس‌وجوي SELECT از يك بانك اطلاعاتي را به درون يك فايل XML بريزند يا مثلاً با دستور OPEN XML مي‌توانستند يك فايل XML را باز كرده و شروع به خواندن دستورات درون آن نمايند.
از آن‌جا كه در نسخه جديد SQLServer توجه خاصي به اين استاندارد و زبان ارتباطي شده است، يك نوع داده جديد (Data type) به انواع داده‌هاي قبلي و استاندارد SQL مثل int ، char و امثال آن اضافه شده است. اين نوع داده جديد كه XML نام دارد و داراي خصوصيات يك نوع داده موجود در يك محيط شي‌گرا است، داراي متدهاي پيشرفته‌اي چون ()nodes() ،Value() ،exist() ،query و ()modify بوده و قادر است انواع پردازش‌هاي قابل انجام برروي اسناد XML را به راحتي انجام دهد. عمليات جستجو، تغيير، حذف و درج مقادير موردنظر در داخل يك فايل XML را مي‌توان با استفاده از متدهاي مذكور و صرفاً با چند خط برنامه‌نويسي انجام داد. همچنين در اين نسخه برخلاف نسخه 2000، با استفاده از دستور FOR XML مي‌توان يك شيء از جنس XML را بدون ارسال آن به كلاينت، برروي سرور ساخته و از آن نگهداري كرد. با اين كار مي‌توان جداولي را كه مرتباً مورد رجوع كاربران قرار مي‌گيرند هراز گاهي در قالب XML به داخل حافظه آورد و كاربران مذكور به جاي رجوع به جداول اصلي در هاردديسك، با استفاده از دستورات ويژه جستجو درXML ، متغير مذكور را در حافظه سرور مورد جستجو قرار دهند و بدين‌وسيله يك نوع عمل Cache كردن را جهت افزايش سرعت دسترسي به اطلاعات تكراري شبيه‌سازي كنند. در اين حالت، كاربران به جاي استفاده از دستورSELECT استاندارد مي‌توانند از OPEN XML كه در نسخه 2005 قادر است متغيرهاي جديد از نوع XML را بخواند استفاده كرده و به سرعت به اطلاعات موردنياز خود دسترسي پيدا كنند. اين قابليت جديد آن‌قدر در سريع‌تر كردن جستجو در برنامه‌هاي تحت وب مهم و مؤثر است كه جاي هيچ مشكلي را در استفاده از آن باقي نمي‌گذارد.

سرويس اعلان (Notification)
همان‌طور كه گفتيم سيستم اعلان درSQLServer قادر است پيغام‌هايي را طي زمان‌هاي مشخص به سمت كاربران بفرستد. مثلاً تصور كنيد كه تعدادي كاربر در حال اتصال به يك بانك حاوي اطلاعات مربوط به ارزش سهام در بورس هستند. از آن‌جايي كه ممكن است قيمت سهام هر شركت يا مؤسسه براي تعدادي از كاربران از اهميت زيادي برخوردار باشد، مي‌توان اين سيستم را طوري تنظيم كرد تا هرگاه ارزش سهام خاصي كه موردنظر هر كاربر است تغيير كرد، به صورت اتوماتيك به وي اعلام شود. كاربر هم مي‌تواند اين تغييرات را برروي برنامه كاربردي خود، تلفن همراه (در قالب Windows Messenger ،(SMS و يا ايميل به‌صورت مرتب دريافت و مشاهده كند.

سرويس گزارش‌گيري
سرويس جديد توليد گزارش‌هاي متنوع در نسخه 2005 به يكي از جالب‌ترين و پركاربردترين قابليت‌هاي اين نسخه تبديل شده است، وجود يك موتور گزارشگر قوي در سمت سرور و يك ابزار مناسب ساخت گزارش با واسط كاربر عالي، باعث شده تا برنامه‌نويسان بتوانند گزارش‌هاي موردنظر خود را با كارايي و سرعت مناسب در سمت سرور بسازند به طوري كه اين گزارش‌هاي سمت سرور توسط هر برنامه كاربردي سمت كلاينت در هر پلتفرمي با همان امكانات اتصال به SQLServer قابل مشاهده است.

بهبودهاي ايجاد شده در زبان
در 2005 SQLServer تغييرات بسيار مثبتي در زبان SQL T ايجاد شده است. اين تغييرات در زمينه‌هاي مختلف مثل مديريت خطاها، جستجوهاي بازگشتي (Recursive Query) و حتي در بدنه موتور پايگاه داده‌ها انجام شده و كارايي كلي ذخيره و يا خواندن اطلاعات را به نحو مطلوبي افزايش داده است. به عنوان مثال دردستورات
TSQL، دو اپراتور جديد ديده مي‌شود، كه PIVOT وUNPIVOT نام دارند. اين دو اپراتور كه در قسمت FROM يك پرس‌وجو مورد استفاده قرار مي‌گيرند مي‌توانند نتيجه يك جستجوي انجام شده توسط دستور SELECT را به جاي برگرداندن در قالب رديف‌ها يا ركوردهاي پشت‌سرهم، به صورت ستون‌هاي مختلف يك يا چند ركورد برگردانند. در اين روش يكي از ستون‌هاي (فيلدهاي) يك جستجو به عنوان محور معرفي شده و بقيه ستون‌ها براساس آن به صورت افقي طبقه‌بندي مي‌شوند. به يك مثال توجه كنيد:

همان‌طور كه مشاهده مي‌كنيد با استفاده از اپراتور مذكور، نتيجه پرس‌وجوي انجام شده به اين صورت كه هر رديف به يك شماره مشتري و چندين شماره سفارش مربوطه به آن مشتري در قالب ستون‌هاي مختلف است، در مي‌آيد. اين همان چيزي است كه سال‌ها درSQLServer وجود نداشت و ابزارهاي مختلف گزارش‌سازي مثل CrystalReport آن را با نام Cross Tab به كاربران خود ارايه مي‌دادند. در همين رابطه اپراتورUNPIVOT هم عمل عكس اپراتور مذكور را انجام مي‌دهد.
اپراتور ديگري كه مي‌تواند نقش مهمي را در دستورات SQL بازي كند APPLY نام دارد كه در قسمت FROM يك دستور SQL به كار مي‌رود. با استفاده از اين دستور مي‌توان خروجي يك تابع (Function) را با يك يا چند جدول ديگر تركيب (Join) كرد همان‌طور كه مي‌دانيد در 2005 SQLServer توابع مي‌توانند يك يا چند رديف يك جدول اطلاعاتي را برگردانند كه اين خروجي مي‌تواند با يك جدول ديگر با استفاده از اپراتور مذكور تركيب شود.

مديريت خطا
در نسخه‌هاي قديمي SQLServer براي كشف و مديريت خطا از سيستم Error Handling استفاده مي‌شد. اين شيوه كشف خطا كه در زباني مثل ويژوال بيسيك 6 هم مورد استفاده قرار مي‌گرفت با استفاده از دستور GOTO مي‌توانست كنترل و خط اجراي روال را از يك محل به محل ديگر و در واقع از محل بروز خطا به محل مديريت و آشكار كردن (Raise) آن ببرد و بدين‌وسيله پيغام خطايي را به كار نشان دهد. نسخه جديد SQLServer با تأثير از پلتفرم دات‌نت، از دستورات ويژه كشف و مديريت خطا با عنوان Exception Handling استفاده مي‌كند. اين روش با استفاده از دستورات جديد TRY/CATCH شيوه بهتري از مديريت خطا را به اجرا مي‌گذارد. در اين روش برخلاف روش قبل، تمام خطاهاي اتفاق‌افتادني مثل خطاهاي مربوط به تبديل داده‌ها به يكديگر (DataConversion) به خوبي مديريت شده و از بروز خطاهايي كه منجر به اتمام ناقص عمليات يك روال يا تريگر مي‌شود جلوگيري به عمل مي‌آيد.
 

جدیدترین ارسال ها

بالا