1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

با SQL Server 2005 بیشتر آشنا شوید

شروع موضوع توسط minaaa ‏26/1/11 در انجمن برنامه نویسی

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    [​IMG]
    Snapshot isolation level
    یكی از روش هایی كه به انواع متدهای قفل كردن ردیف های یك جدول بانك اطلاعاتی در نسخه جدید اضافه شده است شیوه تصویر برداری از ركورد است. در روش های قبلی،اگر یك یا چند ركورد بانك اطلاعاتی توسط دستور Begitn Trans كه شروع یك فرآیند را مشخص می كند در شرف تغییر یا حذف قرار می گرفتند،تا مادامی كه فرآیند مذكور توسط دستور Commit Trans تایید یا توسط ROLLBack منتفی نشود،از هیچ جا و برنامه ای نمی توان ركوردهای مذكور را حتی با دستور ساده SELECT خواند. اما در روش جدید قفل گذاری در صورت بروز چنین رویدادی سایر كاربران می توانند همواره آخرین ارزش ركوردهای مذكور را با این فرض كه هنوز هیچ تغییری در آن ها ایجاد نشده است بخوانند و مورد استفاده قرار دهند .

    باز هم دات نت
    با نسخه جدید SQL Server ،برنامه نویسان بانك های اطلاعاتی قادرند از امكانات و قابلیت های موجود در پلتفرم دات نت و كلیه توابع و كلاس های ساخته شده در آن بهره مند شوند. یكی از ابتدایی ترین و در عین حال اساسی ترین این قابلیت ها،امكان استفاده از دو زبان مهم و كاربر پسند دات نت یعنی ویژوال بیسیك و سی شارپ در پیاده سازی اجزای مختلف یك بانك اطلاعاتی است. این عامل نه تنها باعث می شود كه برنامه نویسان برای نوشتن ماژول هایی مثل تریگرها،روال ها (Stored procedures) در توابع به جای استفاده از زبان استاندارد و در عین حال پیچیده T-SQL ،بتوانند از زبان های محیط دات نت با تمام ساختارها،دستورات،كلاس ها،آرایه ها،و خلاصه تمام ویژگی های یك زبان شی گرا استفاده كنند،بلكه این همكاری نزدیك بین موتور برنامه نویسی دات نت یعنی CLR (مسئول تبدیل كدهای نوشته شده دات نت به زبان سیستم عامل است) و موتور بانك اطلاعاتی SQL Server باعث شده تا به غیر از تنوع زبان های برنامه نویسی قابل استفاده در SQL Server ،تغییر قابل توجهی نیز در كارآیی ماژول های مذكور پیش آید. در واقع موضوع از این قرار است كه اصولا ” كدهای نوشته شده به زبان های دات نت، ابتدا توسط كامپایلر به زبان (IL) ترجمه می شوند. سپس CLR این كد میانی را به كد قابل فهم سیستم عامل تبدیل و آماده اجرا می نماید. این كار سبب می شود تا كدهای نهایی به دلیل این بسیار به سیستم عامل نزدیك می باشد سریع تر از كدهای TSQL (كه فقط توسط موتور بانك اطلاعاتی قابل اجرا هستند) اجرا شوند و در زمان اجرا از كارایی بیشتری برخوردار باشند. البته این مساله بدین معنی نیست كه استفاده از زبان های دات نت همیشه بر زبان های SQL ارجحیت دارد،بلكه منظور آن است كه در برخی موارد ممكن است آن قدر منطق و الگوریتم یك ماژول پیچیده باشد كه برنامه نویس استفاده از زبان های دات نت را به دلیل آسان تر بودن ساختار و دستورات آن به زبان SQL ترجیح دهد. بنابراین زمانی كه بیشتر عملیات یك ماژول مربوط به خواندن و نوشتن اطلاعات باشد بهتر است از همان دستورات استاندارد SQL یعنی DELETE ، UPDATE ، SELECR و INSERT استفاده كرده و بی جهت منابع سیستم را صرف تعریف متغیرها و كلاس های دات نت ننماید. اما در ماژول هایی كه بیشتر عملیاتشان شامل پردازش اطلاعات مثل انجام عملیات های ریاضی یا مقا یسه اطلاعات با یكدیگر است بهتر است تا هم از امكانات برنامه نویسی و هم از سرعت و كارایی بالای دات نت در این زمینه بهره برد و ماژول های مذكور را با زبان های دات نت پیاده سازی كرد .

    ADO.NET وارد می شود
    طبق یك سنت نه چندان قدیمی برنامه نویسی در محیط ویندوز،برنامه نویسان SQL Server بانك اطلاعاتی مورد نظرشان را بروی سرور و برنامه كاربردی نوشته شده با زبانی مثل ویژوال بیسیك را بر روی كلاینت ها قرار می دهند . سپس از طریق این برنامه كاربردی و با استفاده ا زاشیای از جنس ADO داده های مورد نیاز خود را از سمت سرور دریافت كرده و یا به آن ارسال می كنند . اكنون این ارتباط به لطف نسخه جدید SQL Server و همچنین محیط دات نت با امكانات جدید ADO.NET بسیار كامل تر از قبل شده است. این ارتباط جدید با استفاده از مكانیسمی به نام اعلان (Notification ) به یك ارتباط دو طرفه فعال تبدیل شده به طوری كه ADD.NET قادر است پیغام هایی را از سمت پایگاه داده به سمت كلاینت ارسال كند. به عنوان مثال فرض كنید كه شما با استفاده از ADO تعدادی از ركوردهای یك جدول بانك اطلاعاتی را انتخاب كرده و مشغول كار بر روی آن ها هستید. در همین هنگام كاربر دیگری از طریق كلاینت و ADO خود،ركوردی در محدوده ركوردهای مورد انتخاب شما را تغییر می دهد یا حذف می كند. در این وقت موتور پایگاه داده با ارسال پیغامی به ADO شما،این مساله را با استفاده از فراخوانی یك رخداد (Event ) شی ADO به اطلاعاتی می رساند. علاوه بر این قابلیت جدید،فناوری جدید دیگری هم با استفاده از ADO.NET به نسخه جدید SQL.Server اضافه شده و آن امكان چند پرس و جوی همزمان توسط یك شی ADO است. در این شیوه اگر یك شی ADO با استفاده از دستور SELECT مشغول خواندن تعدادی از ركوردهای یك جدول بانك اطلاعاتی باشد،می تواند بدون این كه منتظر به پایان رسیدن این عملیات شود،تعداد دیگری از ركوردهای یك جدول دیگر بانك اطلاعاتی را بخواند. این قابلیت جدید با نام (MARS ) Multiple Active Result Set كه قبلا” در كرسرهای سمت سرور (Server side ) و آن هم نه با كارایی بالا وجود داشت اكنون در كرسرهای سمت راست كلاینت هم وجود دارد و تفاوت عمده آن با شكل قدیمی هم علاوه بر مورد مذكور امكان ایجاد چند كرسر در یك شی ADO به صورت همزمان است SQL Server . نسخه 2005 به خوبی از تمام این ویژگی ها،پشتیبانی می كند .

    تكنولوژی XML
    اكنون كه XML به یك استاندارد ارتباطی بین سكوهای مختلف تبدیل شده است،نسخه جدید SQL Server هم از توجه كافی به آن و ایجاد یك انقلاب در ساده تر استفاده كردن از آن طفره نرفته است. در نسخه 2000 كاربران قادر بودند تا با استفاده از دستور FOR XML نتیجه یك پرس و جوی SELECT از یك بانك اطلاعاتی را به درون یك فایل XML را باز كرده و شروع به خواندن دستورات آن نمایند. از آن جا كه در نسخه جدید SQL Server توجه خاصی بهاین استاندارد و زبان ارتباطی شده است.یك نوع داده جدید (Date type ) به انواع داده های قبلی و استاندارد SQL مثل Char,int و امثال آن اضافه شده است . این نوع داده جدید كه XML نام دارد و دارای خصوصیات یك نوع داده موجود در یك محیط شی گرا است،دارای متدهای پیشرفته ای چون () guery ، () exist ، () value ، ()nodes ، () modify بوده و قادر است انواع پردازش های قابل انجام بر روی اسناد XML را به راحتی انجام دهد. عملیات جستجو ،تغییر، حذف و درج مقادیر مورد نظر در داخل یك فایل XML را می توان با استفاده از متدهای مذكور و صرفا” با چند خط برنامه نویسی انجام داد. همچنین در این نسخه برخلاف نسخه 2000 ،با استفاده از دستور FOR XML می توان یك شی از جنس XML را بدون ارسال آن به كلاینت،بر روی سرور ساخته و از آن نگهداری كرد. با این كار می توان جداولی را كه مرتبا” مورد رجوع كاربران قرار می گیرند هر از گاهی در قالب XML به داخل حافظه آورد و كاربران مذكور به جای رجوع به جداول اصلی در هارد دیسك،با استفاده از دستورات ویژه جستجو در XML ،متغیر مذكور را در حافظه سرور مورد جستجو قرار دهند و بدین وسیله یك نوع عمل Cache كردن را جهت افزایش سرعت دسترسی به اطلاعات تكراری شبیه سازی كنند . در این حالت،كاربران به جای استفاده از دستور SELECT استاندارد می توانند از OPEN XML كه در نسخه 2005 قادر است متغیرهای جدید از نوع XML را بخواند استفاده كرده و به سرعت به اطلاعات مورد نیاز خود دسترسی پیدا كنند. این قابلیت جدید آن قدر در سریع تر كردن جستجو در برنامه های تحت وب مهم و موثر است كه جای هیچ مشكلی را در استفاده از آن باقی نمی گذارد .

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

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

    بهبودهای ایجاد شده در زبان
    در SQL Server 2005 تغییرات بسیار مثبتی در زبان SQL T ایجاد شده است . این تغییرات در زمینه های مختلف مثل مدیریت خطاها،جستجوهای بازگشتی (Recursive Query ) و حتی در بدنه موتور پایگاه داده ها انجام شده و كارایی كلی ذخیره و یا خواندن اطلاعات را به نحو مطلوبی افزایش داده است . به عنوان مثال در دستورات TSQL ،دو اپراتور جدید دیده می شود كه PIVOT و UNPIVOT نام دارند. این دو اپراتور كه در قسمت FROM یك پرس وجو مورد استفاده قرار می گیرند می توانند نتیجه یك جستجوی انجام شده توسط دستور SELECT را به جای برگرداندن در قالب ردیف ها یا ركوردهای پشت سر هم،به صورت ستون های مختلف یك یا چند ركورد برگردانند. در این روش یكی از ستون های فیلدهای یك جستجو به عنوان محور معرفی شده و بقیه ستون ها بر اساس آن به صورت افقی طبقه بندی می شوند. به یك مثال توجه كنید :
    SELECT CUSTOMER ID, Order NO FROM Orders PIVOT Customer ID
    Order NO Order NO Order NO Order NO Customer ID
    4400 1120 25 1
    350 2
    1780 443 3
    8989 2222 1980 555 4

    نتیجه جستجوی فوق چیزی شبیه جدول بالا خواهد بود .
    همان طور كه مشاهده می كنید با استفاده از اپراتور مذكور،نتیجه پرس و جوی انجام شده به این صورت كه هرردیف به یك شماره مشتری و جندین شماره سفارش مربوطه به آن مشتری در قالب ستون های مختلف است. در می آید. این همان چیزی است كه سالها SQLServer آن را با نام Cross Tab به كاربران خود ارایه می دادند. در همین رابطه اپراتور UNPIVOT هم عمل عكس اپراتور مذكور را انجام می دهد. اپراتور دیگری كه می تواند نقش مهمی را در دستورات SQL بازی كند APPLY نام دارد كه در قسمت FROM یك دستور SQL به كار می رود. با استفاده از این دستور می توان خروجی یك تابع را با یك یا چند جدول دیگر تركیب كرد همان طور كه می دانید در SQL Server توابع می توانند یك یا چند ردیف جدول اطلاعاتی را برگردانند كه این خروجی می توانند با یك جدول دیگر با استفاده از اپراتور مذكور تركیب شود .

    مدیریت خطا
    در نسخه های قدیمی SQL Server برای كشف و مدیریت خطا از سیستم Error Handing استفاده می شد. این شیوه كشف خطا كه در زبانی مثل ویژوال بیسیك 6 مورد هم استفاده قرار می گرفت با استفاده از دستور GOTO می توانست كنترل و خط اجرای روال را از یك محل به محل دیگر و در واقع از محل بروز خطا به محل مدیریت و آشكار كردن آن ببرد و بدین وسیله پیغام خطایی را به كار نشان دهد. نسخه جدید SQL Server با تاثیر از پلتفرم دات نت،از دستورات ویژه كشف و مدیریت خطا با عنوان Exception Handling استفاده می كند،این روش با استفاده از دستورات جدید TRYCATCH شیوه بهتری از مدیریت خطا را به اجرا می گذارد. در این روش برخلاف روش قبل،تمام خطاهای اتفاق افتادنی مثل خطاهای مربوط به تبدیل داده ها به یكدیگر Data Conversion به خوبی مدیریت شده و از بروز خطاهایی كه منجر به اتمام ناقص عملیات یك روال یا تریگر می شود جلوگیری به عمل می آید .