SQL Server Replication

معرفي
Replication راه حلي براي انتقال اطلاعات از يك بانك اطلاعاتي SQL sever به يك بانك اطلاعاتي ديگر از همان نوع و البته مستقر در يك محل و كامپيو تر ديگر است . اين فرآيند توسط ايجاد يك كپي از اطلاعات موجود در مبدا و انتقال به مقصد صورت مي گيرد . در اين ارتباط اطلاعاتي اصطلاحا به كامپيو تر وبانك اطلاعاتي مبدا ، ناشر (publisher) و به كامپيو تر وبانك اطلاعاتي مقصد ، مشترك يا متعهد (subscriber) مي گويند البته اين نوع رابطه ، با وجود تنها يك ناشر اما يك يا چند مشترك امكان پذير است . بدين معني كه اطلاعات يك بانك اطلاعاتي در مبدا قابل انتقال به چند مقصد مختلف است . از نسخه 7 به بعد SQL severامكان تغيير اطلاعات در مقصد و انتقال آن به مبدا نيز وجود دارد . با اين وصف ، اين رابطه داده اي بين ناشر و مشترك ممكن است گاهي اوقات بر عكس شود و جاي مبدا و مقصد در يك مقطع زماني عوض شود . بدين ترتيب يك كامپيوتر مشترك يا مقصد مي تواند گاهي اوقات نقش ناشر يا مبدا در همان رابطه بازي كند . اين قابليت جديدMulti site update مي گويند .



در SQL sever ، سه نوع انتقال اطلاعات از طريق Replication وجود دارد . هر كدام از اين سه راه ، سناريو ي خاصي براي انتقال اطلاعات از مبدا به مقصد و يا برعكس را مديريت مي كنند كه در ادامه به بررسي آن ها مي پردازيم .

انتقال اطلاعات به روش ادغام (Merge)
اينوع انتقال اطلاعات كه از قابليت Multi site هم پشتيباني مي كند ، زماني مورد استفاده قرار مي گيرد كه استقلال داخلي هر بانك اطلاعاتي طرف يك رابطه ، به رسميت شناخته مي شود . بدين معني كه در يك رابطه انتقال اطلاعات ، هر كامپيو تر ضمن حف ظ ساختار بانك اطلاعاتي خود ، هم مي تواند نقش ناشر را داشته باشد و نقش مشترك را ايفا نمايد . در اين حالت هر تغييري در جداول مشترك هر طرف ديگر اعمال مي شود . نكته مهمي كه در اينجا مطرح است اين است كه چطور طرفين اين ارتباط متقابل بايد با هم هماهنگ باشند و اولويت يكديگر را به رسميت بشناسند . به عنوان مثال فرض كنيد در يك زمان واحد ، هر دو طرف بخواهند اطلاعاتي را در مورد يك جدول بانك اطلاعاتي به يكديگر ارسال كنند . (يعني بروز حالت تداخل) اين مشكل با استفاده از روش خاصي كه هر نوع Replication مخصوص خودش دارد قابل حل است . به طور كلي در حالت ادغام ، يك پايگاه داده حايل ميان ناشر و مشترك به عنوان توزيع گر ( Distributor) ساخته مي شود . اين پايگاه داده به نام Distributor در ليست پايگاه هاي داده اي ناشر قرار مي گيرد و وظيفه ايجاد همزماني (synchronization ) بين ناشر و مشتركين را ايفا مي كند .
پايگاه داده توزيع گر هم مي تواند در سمت ناشر و هم در يك كامپيوتر مياني ديگر (غير از كامپيو تر هاي سمت مشترك) قرار داشته باشد . اين پايگاه داده ضمن ايجاد همزماني در ردو بدل اطلاعات بين ناشر و مشترك ، اين امكان را نيز فراهم مي سازد تا مدير سيستم بتواند اولويت و در واقع ارجحيت جهت انتقال اطلاعات در زمينه بروز تداخل را مشخص كند . اين اولويت priority در زمان تعريف طرف هاي ناشر و مشترك يك Replication از نوع ادغام توسط مدير سيستم تنظيم مي شود .

تصوير برداري از اطلاعات (Snapshot)
در اين روش ابتدا يك تصوير كامل از آنچه كه بايد از سمت ناشر به سمت مشترك برود تهيه مي شود . اين تصوير هم شامل خود ساختار آنچه كه منتقل مي شود (مثلا ساختار يك جدول) و هم شامل اطلاعات داخل آن است . در ابتداي كار، تصويرمذكور عينا به مشترك فرستاده مي شود . روند و توالي ارسال اين تغييرات هم همانند حالت قبل (ادغام) طي يك فاصله زماني مشخص مثلا ساعتي يك بار كه توسط مدير سيستم قابل تنظيم است ، انجام مي گيرد .
يكي از مزاياي اين روش نسبت به حالت ادغام ، اين است كه زمان كمتري از وقت مدير سيستم را جهت پيكر بندي و تنظيم عمل انتشار صرف مي كند و به دليل اينكه در ابتداي عمل انتشار، خود ساختار نيز عينا به مشترك منتقل مي شود ، از قابليت اطمينان بيشتري برخوردار است . به طور كلي كاربرد اين نوع انتقال اطلاعات ، زماني است كه مدير سيستم قصد ايجاد يك ارتباط ساده و يكطرفه ولي مطمئن دارد

انتقال بر اساس فرآيند (Transactional)
اين روش يكي از بهترين و قابل كنترل ترين روش هاي انتقال است. در اين روش هر تغييري كه در جداول ناشر صورت مي گيرد ، به صورت يك دستور SQL درآمده كه تحت يك فرآيند واحد هم در سمت كليه مشتركين اجرا مي شود . در اين صورت اگر به طور مثال يكي از مشتركين به دليلي با اشكال مواجه شده و تغيير مورد نظر در آن انجام نشود ، اين تغيير نه در خود ناشر و نه در هيچ كدام از مشتركين ديگر نيز انجام نخواهد شد ، بدين معني كه يا يك تغيير در اطلاعات براي تمام كامپيوتر ها اعم از ناشر و كليه مشتركين انجام مي شود و يا اين كه براي هيچ كدام انجام نخواهد شد در اين حالت هم يك پايگاه داده به واسطه به نام Distribution نقش دريافت وارسال فرآيند را به طرف مشترك ايفا مي كند . در واقع روش فرآيند ، در مقايسه با دو روش قبل از حالت به هنگام (online) بودن بيشتري برخورداراست . يعني اين كه هر فرآيند و هر دستور در همان لحظه كه مي خواهد در ناشر اجرا شود ، به واسط فرستاده شده و سپس در يك زمان واحد در كليه مشتركين نيز انجام مي شود و در واقع زمان تغيير اطلاعات در ناشر و در مشتركين تقريبا يكسان است . همچنين در اين روش تداخلي هم پيش نمي آيد . چون هر تغييري ابتدا بايد به واسط فرستاده شود و از آن جا به جاهاي ديگر ارسال شود و واسط هم آن ها را در يك صف اولويت (priority queue) قرار داده و به ترتيب انجام مي دهد . نتيجه اين نوع انتقال اطلاعات ، داشتن چند پايگاه داده كاملا يكسان و به هنگام در مكان هاي مختلف است كه همگي از يك ناشر ، اطلاعات مورد نظر را دريافت مي كنند .

تعريف ناشر و مشتركين
براي تعيين يك  SQL Serverوان ناشر ، كافي است يك رابطه Replication براي آن تعريف كرده و پس از انجام تنظيمات مربوطه و طي يك مراحل خاص هر يك از سه نوع انتقال اطلاعات ، آن كامپيوتر را به عنوان مبدا يا ناشر يك فرآيند انتقال معرفي كنيم . در همين حين و براي ايجاد پايگاه داده واسط يا همان توزيع گر (Distributor) هم مي توان وارد عمل شده و خود ناشر را به عنوان توزيع گر آن فرآيند انتقال معرفي كنيم . پس از اين كار نوبت به تعريف مشتركين مي رسد . براي تعريف يك مشترك از دو راه مي توان اقدام كرد ، كه هر يك كاربرد مخصوص به خودرادارند . در روش اول كه فرستادن اطلاعات به طرف يك مشترك است و در اصطلاح push ناميده مي شود . بدين معني كه مدير سيستم مي تواند بلا فاصله پس از تعريف يك ارتباط و ناشر آن از همان لحظه و در همان محل استقرارناشر ، مشتركين را يك به يك به اين نوع ارتباط دعوت و اضافه كند و اطلاعات را به سمت آنها بفرستد . اين ارتباط به دليل اين كه كامكلا از طرف ناشر، كنترل مي شود، از حالت به هنگام بيشتري (online) برخوردار است و اطلاعات بلا فاصله به سمت مشترك فرستاده مي شود . در روش دوم كه pull نام دارد ، تعريف مشترك از سمت خودش انجام مي شود و در واقع اين مشترك است كه اطلاعات را از ناشر طلب مي كند . اين حالت بيشتر در مواقعي است كه اطلاعات را از ناشر طلب مي كند . اين حالت بيشتر در مواقعي كاربرد دارد كه اولا تعداد مشتركين از قبل براي ناشر مشخص نيست و ثانيا بروز بودن اطلاعات در آن واحد از اهميت حياتي براي سيستم برخوردار نيست و انتقال اطلاعات درآن واحد از اهميت حياتي براي سيستم برخوردار نيست و انتقال اطلاعات مي تواند با تاخير و با درنگ زماني و در زمان دلخواه مشترك انجام شود

طرح يك مسئله
فرض كنيد مي خواهيم با استفاده از مكانيسم Replication ، اطلاعات موجود در بانك اطلاعاتي Northwind را از يك پايگاه داده SQL server به نام server به يك بانك اطلاعاتي به همان نام و بر روي يك پايگاه داده ديگر مستقر در يك سرور راه دور به نام Home server منتقل كنيم . براي اين كار مي توانيم از هر كدام از سه روش انتقال اطلاعات ، استفاده نماييم .

مراحل ايجاد ناشر
براي اين كار ، در پنجره Enterprise Manager بر روي گزينه Publication از آيتم Replication كليك سمت راست نموده فرمان New را انتخاب مي نماييم . با آغاز ويزارد مخصوص ، كليد Next را كليك كرده و در صفحه بعد در پاسخ به اين سوال كه آيا مي خواهيد پايگاه داده توزيع گر (Distributor) درهمين كامپيوتر ساخته شود يا خير ، گزينه اول يعني خود كامپيوتر server را انتخاب مي كنيم و به مرحله بعد مي رويم .
در پنجره بعدي از كاربر خواسته مي شود تا فولدري را جهت قرار دادن فايل هاي مربوط به عمليات انتقال مشخص كند . وجود اين فولدر براي انجام عمل Distributeضروري است و بايد طوري انتخاب شود كه در شبكه اي كه قرار است مشتركين به آن بپيوندند قابل دسترسي باشد . پس از انتخاب اين فولدر و كليك بر روي كليد Next ، در مرحله بعد نام بانك اطلاعاتي مورد نظر يعني Northwind را از داخل ليست انتخاب كرده و به مرحله اصلي يعني انتخاب نوع Replication مي رسيم كه در اين جا همان گزينه اول يعني snapshot را انتخاب مي كنيم .
سپس در مرحله بعد بايد هر موجوديتي اعم از جداول و روال هايي، را كه مي خواهيم در اين عمليات انتقال وجود داشته باشند ، معرفي كنيم براي مثال جدول مشتريان (customers) را از داخل ليست جداول علامت زده و به مرحله بعد مي رويم . در مرحله بعد يك نام براي عمليات انتقال انتخاب كرده و كليد Next را مي زنيم و در نهايت با كليك بر روي عبارت Finish عمليات را پايان مي دهيم .

مراحل ايجاد مشتركين
روش Pull (از طريق مشترك)
براي ايجاد يك مشترك با روش pull ، به كامپيوتر مشترك مراجعه كرده و بر روي گزينه subscription كليك سمت راست كرده و فرمان New pull را انتخاب مي كنيم . سپس از داخل پنجره بعدي گزينه دوم يعني Look in the Active Directory را انتخاب مي نماييم . در مرحله بعد نام ناشر و سپس بانك اطلاعاتي مورد نظر ، نام عمل نشر كه در ناشر تعريف كرديم و سپس رمز عبور مربوط به يك كاربر معتبر در ناشر مثلا كاربر sa را وارد نماييم .
در قسمت بهد هم نام بانك اطلاعاتي مقصد را كه همان Northwind است انتخاب مي ناميم . پس از طي چند مرحله ديگر كه نياز به تغييري در آن ها نيست و صرفا با كليك بر روي كليد Next ، مقادير پيش فرض را تاييد مي كنيم به مرحله انتخاب توالي زماني به روز شدن مشترك مي رسيم . در اين جا هم بايد بين سه روش مختلف يعني حالت هاي بلا درنگ ، زمان دار ، بر اساس در خواست ، يكي را انتخاب كنيم كه در اين جا همان نوع اول يعني بلادرنگ را انتخاب مي نماييم .
با اين كار مراحل تعريف يك مشترك از طريق Pull پايان مي پذيرد . اما نكته مهمي كه در اين جا بايد به آن اشاره كنيم اين است كه براي فراهم ساختن امكان تعريف مشتركين از طريق Pull حتما بايد اين اجازه را قبلا و از طريق ناشر به كاربران مشترك داده باشيم . براي اين كار ، قبل از تعريف مشترك ، بايد در كامپيوترناشر ، بر روي نام عمليات انتقال ايجاد شده كليك سمت راست كرده و گزينه خصوصيات (properties)را انتخاب نماييم . سپس زبانه subscription را باز كرده و مطمئن شويم كه گزينه هاي Allow anonymous و همچنين Allow Pull در حالت تاييد شده باشند .
روش push (از طريق ناشر)
براي تعريف يك مشترك با استفاده از روش Push ، به كامپيو تر ناشر مراجعه كرده و بر روي نام عمليات نشر كه قبلا ايجاد كرده ايم كليك سمت راست مي كنيم . با شروع مراحل ويزارد ، نام كامپيوتر مشترك را از ليست انتخاب مي كنيم . در مراحل بعدي با معرفي بانك اطلاعاتي Northwind به عنوان مقصد به پنجره ويژه تعريف زمان به روز شدن مشترك مي رسيم كه از بين دو نوع بلادرنگ و زماندار قابل انتخاب است . كه باز هم نوع اول را انتخاب مي كنيم . در مرحله بعد هم مطمئن مي شويم كه گزينه start snapshot agent درحالت تاييد قراردارد و سپس با چند كليك بر روي كليد Nextعمليات را پايان مي دهيم . نكته بسيار مهمي كه براي تعريف مشترك از طريق روش push بايد در نظر داشته باشيم اين است كه براي ظاهر شدن نام هر مشترك درليست انتخاب كه در شكل 8 ملاحظه كرديد ، بايد قبلا اين مشترك با استفاده از عمليات Registration در كامپيوتر ناشر تعريف شده باشد . در غير اين صورت نام آن در داخل ليست مشتركين ظاهر نمي شود . عمل مذكور هم در يك محيط شبكه اي بسيار آسان است . كافي است بر روي SQL server Group در كامپيوتر ناشر كليك راست كرده و با انتخاب New Registration و وارد كردن نام مشترك اين كار را انجام دهيم .

برگرفته از فرین سافت

ORM چیست؟ چرا بهتر است که از آنها استفاده نماییم؟

زمان به ما ثابت کرده که پایگاه داده‌های رابطه‌ای ساختار مناسبی برای ذخیره‌سازی داده‌ای هستند، همچنین به این نتیجه رسیده‌ایم که برنامه‌نویسی شیءگرا یک رویکرد بسیار خوب و قوی برای پیاده‌سازی سیستم‌های بسیار پیچیده می‌باشد.
ORM عملا یک لایه مترجم بین زبان برنامه‌نویسی و پایگاه داده رابطه‌ای است که این دو را به هم تبدیل می‌کند و در عمل باعث می‌شود که این دو حیطه کاملا متفاوت زبان یکدیگر را به خوبی بشناسند و با هم تبادل اطلاعات داشته باشند. این مفهوم که مانند یک پل بین این دو حیطه می‌ماند قابلیت‌های زیادی را برای ما تهیه می‌نماید.
به طور اختصار می‌توان گفت که وظیفه ORM پایدار کردن خودکار آبجکت‌های موجود در یک برنامه روی جداول در پایگاه داده رابطه‌ای می‌باشد که برای این کار از متادیتاهایی برای نگاشت بین آبجکت‌ها و پایگاه داده استفاده می‌نماید.
در این زمینه به نکات زیر توجه نمایید که شاید برای روشن شدن اینکه چرا ORMها بسیار برای کار مناسب هستند، به شما کمک نمایند:

۱- تجارب نشان می‌دهند که تا حدود ۳۰ درصد از کدهایی که برای نوشتن برنامه در NET. لازم است مربوط به ثبت داده و کار با داده‌ها می‌باشد.

۲- برای نوشتن کدهای SQL در NET. باید آن‌ها را به صورت رشته متنی یا به صورت stored procedure در خود پایگاه داده می‌نوشتیم که این کار باعث بروز خطا در زمان اجرا می‌شد و ما هیچ کنترلی برای بررسی خطا در زمان کامپایل برنامه نداشتیم.

۳- یکی از پرهزینه‌ترین بخش‌های هر پروژه‌ای، مدل‌سازی آن است. مدل‌سازی در زبان شیءگرا کاملا با مدل‌سازی در پایگاه داده‌های رابطه‌ای متفاوت است. ما می‌توانیم این مدل‌سازی را که بین هر دو حیطه مشترک باشد به صورت یک به یک انجام دهیم یعنی هر جدول در پایگاه داده با یک موجودیت (entity) در کلاس‌هایمان معادل شود و هر ستون از جدول با مشخصه (property) آن کلاس و کاملا به صورت معادل پیاده‌سازی شود ولی این کار باعث می‌شود که ما قابلیت‌های زیادی را که در زبان‌های شیء‌گرا داریم مانند ارث‌بری و چندریختی را از دست بدهیم.

۴- با ORM دیگر نیاز ندارد که خودمان را درگیر بخش‌های سطح پایین و خسته‌کننده هر سیستم کنیم و این باعث تمرکز بهتر و بیشتر ما روی مشکلات کاری می‌شود، در نتیجه به بهره‌وری بالاتری دست میابیم.
۵- ساده‌سازی سیستم باعث خوانا شدن آن و جلوگیری از اتلاف زمان می‌شود. ما به جای آنکه کدهای زیادی را برای کارهای کوچک بنویسیم، با مقدار کم کد می‌توانیم همان کار را انجام دهیم. از همه مهمتر اینکه سیستمی با مقدار کد کمتر، بهتر بازسازی می‌شود.

۶- خیلی‌ها از ORM استفاده نمی‌کنند به دلیل اینکه فکر می‌کنند باعث افت کارایی (performance) می‌شوند. این گفته تا حدودی صحیح است ولی این یک گفته کامل نیست. اولا ما باید ببینیم که ارجحیت ما چیست. باید بیان کرد که ORM ها اگر درست استفاده شوند تاثیر منفی بسیار کمی روی کارایی خواهند داشت، در عوض در کنار آن‌ها ما چیزهایی بدست می‌آوریم که بسیار ارزشمندتر است. لازم به ذکر است که ORMهای قوی مانند NHibernate حتی می‌توانند از ADO .NET کلاسیک هم کارایی بهتری داشته باشند. اگر از cache و عملیات دسته‌ای (batching) استفاده نماییم، می‌توانیم به کارایی حتی بالاتر از ADO .NET کلاسیک دست یابیم.

۷- یک ORM قوی مانند NHibernate ، برنامه شما را از نوع پایگاه داده و SQL Dialect استفاده شده، جدا می‌کند. این کار باعث می‌شود که استقلال شما نسبت به نوع پایگاه داده حفظ شود.

ادامه نوشته

مجموعه مقالات تخصصی نرم افزار9

مجموعه مقالات تخصصی نرم افزار8

مجموعه مقالات تخصصی نرم افزار7

مجموعه مقالات تخصصی نرم افزار7

مجموعه مقالات تخصصی نرم افزار6

مجموعه مقالات تخصصی نرم افزار - 1000 مقاله


اس کیو ال سرور 2008 sql server







اگر در یک نگاه بخواهیم پرمخاطب ترین نرم افزار مدیریت بانک های اطلاعاتی رابطه ای را مورد بررسی قرار دهیم بی شک همه نگاه ها به سمت Microsoft SQL Server خواهد بود.
سادگی استفاده از این نرم افزار و همچنین هماهنگی کامل با NET Platform. ماکروسافت باعث شده تا بیش از 50% از برنامه نویسان و توسعه دهندگان به این پایگاه داده گرایش پیدا کنند.
و هم اکنون جدیدترین نسخه از این نرم افزار قدرتمند منتشر شده است که قابلیت های جدید اضافه شده به این نرم افزار قدرتمند باعث شده است که Microsoft SQL Server 2008 حال بتواند رقیب بسیار خطرناکی برای رقیب دیرینه خود یعنی Oracle شود.






این نرم افزار مجهز به ابزارهای جدیدی برای نظارت و مدیریت بوده و همچنین مناسب استفاده برای بانک های اطلاعاتی بسیار بزرگ می باشد و علاوه بر آن در نسخه جدید سرعت کار و سهولت استفاده افزایش چشم گیری یافته است.


2008 Microsoft SQL Server دارای نسخه های مختلفی می باشد که هرکدام کارایی ، مخاطبین و قیمت های متفاوتی دارد :
SQL Server 2008 Enterprise -

این نسخه در حقیقت پیشرفته ترین ، کاملترین ، و گران ترین نسخه از این نرم افزار است .
توانایی کار با بانک های اطلاعاتی بسیار بزرگ ، توانایی انجام پردازش های بسیار زیاد و انجام تحلیل های پیچیده اطلاعات باعث شده تا شرکت های نرم افزاری برای بانک های اطلاعاتی که با حجم داده بسیار زیاد سرو کار دارند از این نسخه استفاده کنند .


SQL Server 2008 Standard -

شرکت های متوسط بیشتر از این نسخه استفاده می کنند یکی به این دلیل که بانک های اطلاعاتی برزگ را پشتیبانی می کند و دیگری قیمت پایین تر نسبت به نسخه Enterprise است .
عدم توانایی این نسخه در تحلیل های پیچیده دلیل قیمت پایین تر این نسخه نسبت به نسخه Enterprise است .

SQL Server 2008 Workgroup -

یکی از ارزان ترین نسخه ها می باشد و بیشتر برای شرکت های کوچک و سرویس دهنده های وب مورد استفاده قرار می گیرد .
این نسخه هم به راحتی می تواند به نسخه های Standard و Enterprise ارتقا پیدا کند .

SQL Server 2008 Web -

این نسخه برای اولین باری است که عرضه می شود و مخاطبین اصلی این نسخه را شرکت های خدمات میزبانی وب تشکیل می دهند . این نسخه مجهز به ابزارهای بسیار کاربردی برای پشتیبانی از برنامه های کاربردی گران قیمت و بسیار پیچیده تحت وب است که در سرویس های میزبانی وب به کار می روند .
SQL Server 2008 Developer -

از نام این نسخه می توان دریافت که این نسخه مخصوص برنامه نویسان و توسعه دهندگان می باشد و به همین دلیل دارای قیمت پایینی است . این نسخه هیچ تفاوتی با نسخه Enterprise ندارد و تمامی امکانات آن را دارا می باشد.
قیمت پایین این نسخه باعث شده تا بیشتر شرکت های نرم افزاری که با بانک های اطلاعاتی سرو کار دارند از این نسخه استفاده کنند .
با این کار دیگر لازم نیست که شرکت ها برای انجام عملیات تست و یا پیش نمایش ملزم به خرید نسخه Enterprise باشد.
در صورتی هم که شرکت تصمیم به عرضه تجاری محصول خود کرد به راحتی می تواند این نسخه را به نسخه Enterprise ارتقا دهد .

SQL Server 2008 Express -

این نسخه به صورت رایگان عرضه می شود.
و به اصطلاح یک نسخه کوچک شده از این نرم افزار می باشد و بطبع این نسخه دارای امکانات بسیار کمتری نسبت به نسخه های دیگر می باشد .
از این نسخه بیشتر برای آموزش و ساخت برنامه های کوچک تحت دسکتاپ و سرور مورد استفاده قرار می گیرد که این امر به برنامه نویسان این اجازه رو می دهد که اگر مشغول نوشتن یک پروژه با یک بانک اطلاعاتی کوچک هستند بتوانند از این نسخه استفاده کنند .
در ضمن این نسخه به صورت پیش فرض روی نسخه های Visual Studio 2005 , 2008 قرار داده شده است و برنامه نویسان این Platform می توانند به راحتی از این نسخه استفاده کنند.

قابلیت های جدید اضافه شده در Microsoft SQL Server 2008 عبارتند از :

- اضافه شدن Persian Collection ( خبری خوش برای جامعه پارسی )

- اضافه شدن نوع داده datetime2 و همچنین بهبود و افزایش دقت برای نگهداری نوع داده DateTime

- اضافه شدن نوع های داده geography و geometry برای شرکت های نرم افزاری که با نقشه های زمینی و هوایی سرو کار دارند

- بهبود کارایی و افزایش سرعت بازیابی اطلاعات نسبت به نسخه های قبل

- قابلیت Auto Complete کردن خودکار

- قابلیت Syntax Checking یا غلط یابی خودکار

- مقدار دهی متغیر های به صورت خطی

- ارتقا و بهبود چشم گیر Transact-SQL

- فابلیت trace کردن پرسش ها

- قابلیت ایجاد User Defined Types و Defined Aggregates User با ظرفیتی بالاتر از 8
KB

-- قابلیت ارسال داده های بزرگ به توابع و پروسجر ها به وسیله قابلیت جدید Table-Value Parameters

- توانایی انجام چندین پردازش توسط دستوری جدید به نام MERGE

- Model hierarchical data برای ایجاد نمودارهای درختی و چارت ها توسط یکی از نوع های داده جدید به نام HierarchyID

- سیستم یکپارچه و ارتقا یافته Full-Text Indexes که با سرعتی بالا متن ها را مورد جست و جو قرار می دهد

- اضافه شدن Linq برای توسعه دهندگانی که با Linq آشنایی دارند

- مدیریت بر روی فایل ها توسط قابلیت FILESTREAM Data Type

- و ...

Stored Procedure Generator

این هم یک برنامه جالب برای تولید پراسیجرها در اس کیو ال سرور 2005 از جناب آقای delphiassistant

در SQL Server Enterprise Manager 2000 ابزاری وجود داشت که به کمک آن می شد به سختی Stored Procedure ها را بطور نیمه خودکار ایجاد کرد و از نوشتن آنها بصورت دستی خلاص شد. اون ابزار خیلی خوب نبود، اما بقول قدیمی ها کوزه شکسته ای بود که گاهی وقتا ازش آب می خوردیم.

فقدان اون ابزار در SQL Server Management Studio 2005 باعث شد دنبال یک ابزار آماده بگردم، و راه دست ترین چیزی که یافتم این بود: EZStoredProc

ابزار فوق هم تمام کارهایی که من میخواستم رو انجام نمی داد، و از نسخه آزمایشی اش استفاده میکردم، اونقدرها هم برام نمی ارزید که قیمت 45 دلاری اش رو پرداخت کنم و بخرمش.

این روزها کمی وقت آزاد بیشتری دارم و میتونم بیشتر برای بازی با کد وقت بگذارم، بنابراین تصمیم گرفتم خودم یکی مثل اون، البته با قابلیت های مد نظرم رو بنویسم. نتیجه اش هم چیزی شده که تصویرش رو در زیر می بینید:



اگر شما هم دوست دارید از یک ابزار آماده برای تولید Stored Procedure هاتون استفاده کنید می تونید از این برنامه استفاده کنید. چیز ساده ای است، اگر پیشنهادی برای بهتر شدنش دارید در خدمت هستم.

کار کردن با این ابزار خیلی ساده است، اسم سرور رو وارد میکنید، دکمه Connect رو کلیک می کنید، دیتابیس، و سپس جدول مورد نظر رو انتخاب میکنید و کلید Generate ... رو کلیک میکنید.
برای ایجاد Stored Procedure ها کافیه اسکریپت SQL ایجاد شده رو در SQL Management Studio در یک Query جدید Copy/Paste کنید و اجرایش کنید.

بعدا که این برنامه کاملتر بشه سورس اش رو هم جهت مقاصد آموزشی ارائه خواهم داد.

تولید کننده خودکار Stored Procedure برای SQL Server:
لینک پروژه در CodePlex.com | صفحه مربوط به توضیحات

ویرایش نهایی SQL Server 2008 ماه آگوست عرضه خواهد شد.

بعد از شنیده شدن خبرهایی مبنی بر تاخیر سه ماهه دیگر در انتشار SQL Server 2008، مایکروسافت اعلام کرده است که نسل جدید پایگاه داده ها طبق وعده داده شده در سه ماهه سوم سال جاری میلادی منتشر خواهد شد.
مایکروسافت در کنفرانس Worldwide Partner هفته که در هیوستن برگزار شد اشاراتی بر قرار گرفتن SQL Server 2008 در لیست فروش در ماه آگوست خبر داد.
Fausto Ibarra مدیر جدید محصول SQL Server 2008 در مصاحبه خود اعلام کرد که SQL Server 2008 در انتهای سه ماهه سوم سال (پایان سپتامبر) به صورت نسخه RTM منتشر خواهد شد. او گفت:"ما در مراحل نهایی تست هستیم. کاندیدای انتشار نهایی توسط دهها هزار نفر دانلود شد و ما برای دیدن محصول نهایی در بازار بسیار هیجان زده هستیم."
مایکروسافت قصد دارد که انتشار SQL Server 2008 را با انتشار سرویس پک 1 ویژوال استودیو 2008 و دات نت فریم ورک 3.5 که هم اینک در سطح بتا قرار دارند، هم زمان کند. در این میان Entity Framework برای مایکروسافت از اهمیت زیادی برخوردار است.
قیمت SQL Server 2008 بر اساس اظهار مایکروسافت تغییر نخواهد کرد.

10 ویژگی اس کیو ال سرور 2008

10 ویژگی و امکانات جدید sql server 2008

the top 10 new developer features in Microsoft’s new SQL Server 2008 release.

1. Language Integrated Query (LINQ)—From a database developer’s perspective, undoubtedly
the most signifi cant new feature in SQL Server 2008 is support for LINQ. LINQ is an evolutionary step
forward for database developers. LINQ simplifi es the database development process by enabling
developers to write queries directly in either native VB or C#. This speeds up application development
by providing the developer with immediate feedback through IntelliSense as well as compile time error
checking that wasn’t possible using the older ADO.NET and T-SQL development paradigm.
2. IntelliSense in SQL Server Management Studio (SSMS)—Another very welcome
enhancement is the addition of IntelliSense to SSMS. The new IntelliSense support in SSMS provides
T-SQL statement completion. It can also automatically display the names of database objects and
provide parameter prompting for stored procedures and functions.
3. New FILESTREAM Data Type—Designed to solve the problem of unstructured large object
(LOB) storage, the new FILESTREAM combines the performance of the native NTFS fi le system with
the transactional integrity of the relational database. The FILESTRAM data type enables unstructured
data to be stored in the NTFS fi le system. The SQL Server relational engine manages the link between
the columns defi ned using the FILESTREAM type and the fi les in the fi le system. SQL Server is
responsible for all transactional integrity including backing up and restoring fi le system data.

44. New Date/Time Data Types—Although the old DATETIME data type offered basic date and
time data storage formatting the data was always a problem; plus, it introduced diffi culties in converting
data from other database systems that used discreet date and time column values. The new DATE
data type is a native SQL Server data type that’s ANSI compliant. It uses the format YYYY-MM-DD
and can contain values from 0001-01-01 to 9999-12 The TIME data type, complements the DATE data
type. TIME uses the format hh:mm:ss[.nnnnnnn] and can contain values from 00:00:00.0000000 to
23:59.59.9999999.
5. New DataTime2 and DateTimeOffset Data Types—DATETIME2 and DATETIMEOFFSET
are designed to address the need for more precise date/time storage and time-zone-aware date
values. DATETIME2 uses the format YYYY-MM-DD hh:mm:ss[.nnnnnnn]. It can store values ranging
from 0001-01-01 00:00:00.0000000 through 9999-12-31 23:59.59.9999999. DATETIMEOFFSET
enables the same date/time storage as DATETIME2 but it’s also time-zone aware.
6. New Spatial Data Types—The new GEOGRAPHY and GEOMETRY spatial data types
facilitate the development of mapping applications. GEOGRAPHY uses a geodetic (round earth)
model. It stores points, lines, polygons, and collections of latitude and longitude coordinates.
GEOMETRY uses a planar (fl at earth) model, unlike GEOGRAPHY, which is primarily designed for
navigation and mapping. GEOMETRY complies with Open Geospatial Consortium standards for the
representation of geographic features.
7. T-SQL Merge—The MERGE statement also allows you to merge the rows from multiple tables.
You can choose to update matched rows, insert unmatched rows, or delete unmatched rows from the
primary table. When the MERGE statement runs it can check whether a row exists and then execute
the required INSERT, UPDATE, or DELETE statement. The schema of the merged tables does not
have to be identical and the MERGE statement can specify columns to match and update.
8. Table-valued Parameters—Another cool new developer feature in SQL Server 2008 is support
for passing tables as parameters to stored procedures. Table variables have been supported since
SQL Server 2000. However, you were never able to use them as parameters. Using table variables
as parameters can help simplify your code and eliminate the system overhead otherwise required to
create and manage temporary tables.
9. Support for Sync Services—SQL Server 2008’s support for Sync Services in the .NET
Framework 3.5 enables mobile applications to provide mobile users with the same application
experience whether they are connected or disconnected. Mobile applications use SQL Server Compact
edition as a local data store. Sync Services then periodically connects the mobile application to SQL
Server 2008, providing bi-directional updates with from the mobile application. Sync Services handles
the connection and synchronization between SQL Server and the mobile data store.
10. PowerShell Integration—PowerShell is Microsoft’s newest object oriented scripting language.
SQL Server 2008 provides a new SQL Server Relational Engine provider that enables PowerShell
scripts to access SQL Server database objects. In addition, a new SQL Server Policy Management
provider enables you to use PowerShell to manipulate SQL Server’s new policy-based
management framework.

مقايسه فني مهم‌ترين بانك‌هاي اطلاعاتي جهان؛ Oracle و SQL Server


شركت مايكروسافت مدعي است كه ابزارهاي جديدي براي مديران بانك‌هاي اطلاعاتي يا همان DBAها در نسخه جديد SQL Server 2005 قرار داده است كه بسيار خوب توانسته است مشكلات نسخه قبلي آن را مرتفع نمايد، اما جالب اينجا است كه همه امكاناتي كه SQL Server 2005 به تازگي براي DBAها فراهم كرده است، از نسخه Oracle 8i در نرم‌افزار اوراكل موجود بوده است.
درباره نصب اين دو نرم‌افزار بايد گفت كه نصب اوراكل از SQL Server هنوز بسيار مشكل‌تر است و كار كردن با آن سخت‌تر؛ و شايد اين دلايل باعث مي‌گردد برخي از برنامه‌نويسان به سمت SQL Server بروند. DBA شدن در بانك‌اطلاعاتي SQL Server كار سختي نيست. كافي است مدتي با آن نرم‌افزار كار كرده باشيد، و چند ماهي تجربه داشته باشيد. ولي DBA شدن حرفه‌اي در اوراكل كار بسيار دشواري است.

با نگاهي به اين دو بانك اطلاعاتي مي‌توان به اين نكته رسيد كه درست است كه SQL Server 2005 بسيار كارآمد است و پيشرفت‌هاي زيادي نسبت به نسخه قبلي خود داشته است، اما در برنامه‌هاي پيچيده يا سيستم‌هاي ناهمگون، و اگر از پلتفرم‌هاي متفاوت استفاده شود،‌ نمي‌تواند جوابگوي نيازها باشد و در نتيجه اوراكل گزينه مناسب‌تري خواهد بود، ولي در صورتي كه با برنامه‌هاي كوچك و متوسط سروكار داريد، SQL Server مي‌تواند راه‌حل خوبي باشد.

از لحاظ قيمت (البته نه در ايران كه اكثراً قانون كپي‌رايت را رعايت نمي‌كنند) قيمت SQL Server كمتر از اوراكل است و سرويس‌هاي ارائه شده توسط SQL Server را مي‌توان در صورت لزوم خريداري نمود، ولي اوراكل تقريباً شما را از تمام چيزهايي كه در بانك‌هاي اطلاعاتي مي‌خواهيد، بي‌نيازمي‌نمايد؛ البته بهاي آن گران است.


مقدمه

بدون‌شك مي‌توان گفت كه بانك‌هاي اطلاعاتي اوراكل و SQL Server، از مهم‌ترين بانك‌هاي اطلاعاتي امروز به شمار ميآيند. اين سؤال كه كدام يك از اين دو از ديگري بهتر است، ممكن است فكر بسياري از برنامه‌نويسان و شركت‌هاي توليد كننده نرم‌افزار را مشغول كرده باشد.

از طرفي مايكروسافت، به عنوان غول نرم‌افزاري ادعا مي‌كند كه SQL Server از اوراكل‌ ساده‌تر و بهتر است. اوراكل هم از سوي ديگر مي‌گويد محصول او از خيلي جهات بر SQL Server برتري دارد.

اين مقاله سعي دارد به سؤالات شما در مورد تفاوت‌هاي فني اين دو بانك اطلاعاتي تا حدي جواب دهد. در ابتداي اين مقاله معماري اين دو بانك اطلاعاتي با هم مقايسه مي‌گردد، سپس كامپوننت‌هاي شبكه هر دو بانك اطلاعاتي با يكديگر مقايسه مي‌شوند.

در اين مقاله امكانات مرتبط با كارايي پايگاه‌هاي اطلاعاتي‌ (Performance)، ابزار (Utility) و Replication در بانك‌هاي اطلاعاتي بسيار بزرگ يا همان VLDB يا Very Large Data Bases و OLTP يا Online Transaction Processing مورد بررسي قرار خواهند گرفت و ابزارهاي جديد SQL Server 2005 كه در حقيقت سعي دارد با اوراكل رقابت كند، مورد بررسي قرار خواهند گرفت‌.‌

معماري بانك اطلاعاتي

در اوراكل هر ديتابيس شامل تمامي امكانات پايگاه رابطه Relational Database ،Instance (پروسه‌هاي پايگاه داده‌هاي اوراكل و بافرها، فايل‌هاي تنظيمي مانند config.ora و init.ora، لوگ‌هاي بازگشت به حالت قبلي يا Redo Logs؛ SYSTEM Teblespace و ديگر انتخاب‌هاي دلخواه است.

در نسخه جديد SQLServer، ديتابيس در واقع به گروهي از اسكيما (Schema)هاي پايگاه داده گفته مي‌شود كه به صورت فيزيكي در فايل‌ها ذخيره مي‌شوند. ديتابيس‌ها به دو صورت تعريف شده از طرف كاربر (user defined) و تعريف شده از طرف سيستم (system defined) تقسيم مي‌شوند.

در SQL Server يك نمونه يا Instance مي‌تواند چندين ديتابيس را پشتيباني نمايد و در هر كامپيوتر چندين Instance مي‌تواند با هم كار كند.

وقتي SQL Server را راه‌اندازي مي‌كنيد، ديتابيس‌هايي همچون MD يا Msdb database، Model Database (براي پشتيباني كردن Agentها) و Tempdb Database (پايگاه اطلاعات موقت مانند پايگاه موقت اوراكل OracleTemp Tablespace؛ البته با اين تفاوت كه در SQL Server خود كاربران مي‌توانند اين پايگاه‌ها را درست كنند، ولي در اوراكل اين امكان وجود ندارد)، به صورت پيش‌فرض ساخته مي‌شوند.

در SQL Server براي اين‌كه بتوانيم اطلاعات خود را به صورت فيزيكي غيرمتمركز (Distribute) نگه‌داريم، هر ديتابيس مي‌تواند از چندين Filegroup پشتيباني نمايد. با اين كار مي‌توان به راحتي از اطلاعات كپي پشتيبان گرفت. همان‌طور كه در شكل 1 مشاهده مي‌كنيد، در SQL Server، ديتابيس‌ها در واقع همان كار tabalespaceها در اوراكل را دارند.

 
شکل 1
اگر به شكل 1 نگاه كنيد، مي‌بينيد كه در هر دو بانك‌ اطلاعاتي، كاتالوگ سيستم وجود دارد. هر پايگاه اطلاعاتي يا ديتابيس در اوراكل يك سيستم كاتالوگ مركزي يا ديكشنري داده ‌‌(Data Dictionary) را در قسمت SYSTEM Tablespace اجرا مي‌كند، ولي در SQL Server 2005 هر ديتابيس سيستم كاتالوگ خود را درست مي‌كند.

اين سيستم كاتالوگ اطلاعاتي همچون اشياي پايگاه داده (مانندTable ،View و Procedure)، اطلاعات كاربران و دسترسي‌هاي آن‌ها، Constraintsها، User-Defined data type و Snapshot definition را شامل مي‌شود.

البته اطلاعاتي همچون اسامي ديتابيس‌ها، اطلاعات سرور، مديريت پيغام‌ها و Stored Proceduresهاي سيستم درMaster Database وجود دارند.

نكته اينجاست كه SQL Server 2005 ،objectهاي سيستم در اين Master Database قرار نمي‌گيرند. اين آبجكت‌ها در ديتابيس‌هاي مخفي سيستم به نام resource database يا پايگاه اطلاعات منابع سيستم ذخيره مي‌گردند.

در واقع‌ سيستم كاتالوگ‌ها در SQL Server 2005 منابعي هستند براي استخراج اطلاعات ديتابيس‌ها و اين كاتالوگ‌ها را كاربران نيز مي‌توانند مشاهده كنند.

براي حصول اطمينان از كارايي و سلامت سرور در DMV، SQL Server 2005 يا Dynamic Management Views استفاده مي‌شوند؛ درست شبيه اوراكل كه از viewهاي $ V براي كنترل كارايي استفاده مي كند.

اجزاي تنظيم كننده شبكه

 
شکل 2
شكل 2 ساختار اجزاي تنظيم كننده شبكه در اين بانك‌هاي اطلاعاتي را نشان مي‌دهد. در اوراكل كامپوننتي به نام Oracle Net Service وجود دارد كه عامل ارتباطي سرور اوراكل با كلاينت‌هاي آن است.

اوراكل اين كار را با استفاده از پروتوكل TNS يا Transparent Network Substare انجام مي‌دهد، اما در SQL Server اين كار توسط پروتكل‌هاي شبكه موجود در كلاينت و سرور انجام مي‌گيرد.

البته در SQL Server 2005 فناوري جديدي به نام SNAC يا SQL Server Native Client، معرفي گرديده كه در واقع تركيبي است از ODBC و OLEDB در يك تابع كتابخانه‌اي. SNAC توانايي پشتيباني TDS يا Tabular Data Stream و Net Lib را براي پروتكل‌هاي گوناگون در SQL Server دارد.

ساختار فيزيكي و منظقي ذخيره اطلاعات

شكل 3 نگاهي مقايسه‌اي دارد به دو بانك اطلاعاتي اوراكل و SQL Server از لحاظ ساختار اطلاعاتي. همان طور كه در اين شكل مي‌بينيد، در SQL Server اندازه صفحات (8kb، (page size است كه واحد پايه ورودي/ خروجي به شمار مي‌رود.

هر صفحه فقط متعلق به يك آبجكت، مانند data ،index ،GAM و.. است. SQL Server براي افزايش كارايي اين صفحات آن‌ها را در دسته‌هاي هشت‌تايي قرار مي‌دهد كه به آن Extent مي‌گوييم. اين Extentها مي‌توانند به چند آبجكت متفاوت تعلق داشته باشند.

 
شکل 3
هر Extent كه تمام صفحاتش آبجكت‌هاي مانند هم داشته باشد Uniform ناميده مي‌شود و به Extentهايي كه آبجكت‌هاي يكساني ندارند، Mixed مي‌گويند.

SQL Server در ديتابيس‌هاي خود از Filegroupها استفاده مي‌كند تا كنترل فضاهاي فيزيكي جداول و ايندكس‌ها را در اختيار كامل داشته باشد. اين Filegroupها از يك يا چند فايل تشكيل شده‌اند و اطلاعات موجود در آن مي‌تواند در تمام فايل‌هاي آن Filegroup ذخيره شود.

با استفاده از Filegroup مي‌توان جداول بزرگ را در چند فايل ذخيره نمود و از اين طريق كارايي ورودي/ خروجي را بالا برد، مي‌توان عمليات كپي پشتيبان و بازآوري جداول را انجام داد و داده‌هايي مانند تصويرو فايل‌هاي متني بزرگ را در فايل‌هاي جدا ذخيره نمود.

برخلاف SQL Server، بانك اطلاعات اوراكل از Tablespaceهايي تشكيل شده است كه خود از Data File تشكيل شده‌اند. اين Data Fileها در واحدهايي به نام Block طبقه‌بندي مي‌شوند كه مدير بانك اطلاعاتي (DBA) مي‌تواند اندازه آن را وقتي كه در حال ساخت ديتابيس است تعيين كند. برخلاف SQL Server، در اوراكل وقتي يك شيء در Tablespace توليد مي‌شود، كاربر مي‌تواند فضاي آن را مشخص كند.

مقايسه SQL Server 2005 و Oracle 10g

اگر چه SQL Server 2000 يكي از قوي‌ترين بانك‌هاي اطلاعاتي است و خيلي از شركت‌ها و سازمان‌هاي بزرگ امروزه از آن به عنوان پايگاه داده‌هاي خود استفاده مي‌كنند، چند محدوديت هم دارد. يكي از محدوديت‌هاي SQL Server 2000 در طريقه قفل كردن يا Locking Strategy است.

در MS SQL 2000 مانند اوراكل مي‌توان دسترسي همزمان به پايگاه را محدود كرد و آن را به اصطلاح قفل نمود. ولي در MS SQL 2000 امكان Deadlock خيلي زياد است؛ مخصوصاً در CTF يا Correct Transactional Flows.

از طرف ديگر، اعمال تغيير در بانك‌هاي اطلاعاتي به صورت آنلاين يكي ديگر از محدوديت‌هاي آن است. البته با استفاده از DBCC INDEXDEFRAG در SQL Server 2000 مي‌توان قسمتي از ايندكس‌ها را به صورت آنلاين تغيير داد، ولي نه به صورت كامل.

(البته اين مشكل در SQL Server 2005 تا حدي حل شده است). در اوراكل از نسخه 1/8 تا به حال، امكان تغيير و جابه‌جايي جداول و ايندكس‌ها وجود دارد؛ بدون اين‌كه به exclusive lock نياز داشته باشيم. البته ناگفته نماند كه نسخه‌هاي 2/9 اوراكل در اين قسمت داراي اشكالات و باگ‌هايي نيز بوده‌اند، ولي اين اشكالات در نسخه آخر اواركل برطرف شده است.

در ادامه، ساختار و امكانات هر دو بانك‌اطلاعاتي Oracle 10g و SQL Server 2005 با يكديگر مقايسه مي‌گردند.

مديريت بانك اطلاعاتي

SQL Server 2005 مانند ديگر محصولات مايكروسافت قسمت مديريت ساده و شكيلي دارد كه مي‌توان با آن به راحتي كار كرد و با استفاده از خط دستور در SQLCMD، ابزار مديريتي DAC يا‌ Dedicated Administrator Connection را اجرا نمود. همچنين مي‌توان از قابليت Policyها براي كاربران و صاحبان بانك‌هاي اطلاعاتي استفاده نمود.

گذشته از پيچيدگي‌هاي موجود در اوراكل، قابليت‌هاي مديريتي آن بسيار بيشتر از MS SQL است. اوراكل سيستم رمزدهي بسيار قدرتمندي دارد كه از نسخه 7 به بعد همراه آن بوده است. در اوراكل مي‌توان امكان ارتباط با User و سپس با Schema خاص را به راحتي امكانپذير نمود.

مثلاً فرض كنيد كه با كاربر Sys2 به اوراكل متصل هستيد و مي‌خواهيد روي DB2 Schema كار كنيد. كافي است دستور زير را وارد كنيد:
;ALTER SESSION SET CURRENT_SCHEMA=DB2

سيستم LOCKING

يكي از قابليت‌هايي كه در نسخه جديد SQL Server به آن اضافه شده است، قابليت SI يا Snapshot Isolation است كه در حقيقت قابليت نسخه‌برداري از رديف (row)هاي جداول است. با اين كار در موقع بروزآوري جداول، امكان انتخاب همزمان اطلاعات آن جدول نيز وجود دارد.

در اوراكل چيزي شبيه اين مكانيزم وجود دارد كه به آن Oracle Flashback Query مي‌گويند. البته بين اين دو مكانيزم تفاوت‌هايي نيز وجود دارد: اوراكل از Undo Segment براي برگشت به ركورد قبلي استفاده مي‌كند. در صورتي كه SQL Server 2005 از TempDB استفاده مي‌كند.

MetaData در اوراكل مانند جداول مديريت مي‌گردد. در نتيجه در زمان اجراي درخواست‌ها چند DDL يا Data Definition language مي‌توانند به صورت همزمان به فعاليت مشغول باشند، ولي در SQL Server 2005، فعاليت DLLها مستقيماً روي جداول انجام مي‌پذيرد.

در اوراكل عمليات Locking در DB Block انجام مي‌پذيرد، ولي در SQL Server اين كار در هر رديف جدول انجام مي‌شود. البته مايكروسافت ادعا مي‌كند كه اين كار باعث افزايش سرعت و كارايي جداول مي‌گردد، ولي وقتي سرعت و كارايي آن را با اواركل مقايسه مي‌كنيم، مي‌بينيم كه هر دو از كارايي يكساني برخوردارند.

تغيير ساختاري آنلاين

همان‌طور كه قبلاً بحث شد، قبل از نسخه جديد SQL Server 2005 تنها از طريق DBCC Indexdefrag مي‌توانستيم مثلاً ايندكس را عوض كنيم (البته بايد ازExclusive lock استفاده مي‌كرديم)، ولي اكنون اين مشكل حل شده است و مي‌توان همزمان با بازسازي چند ‌DDL را نيز اجرا نمود.

در اوراكل مي‌توان حتي تمام ساختار جداول و ايندكس‌ها را بدون Exclusive lock تغييرداد. البته براي اتمام عمليات بايد از Momentary lock استفاده شود.

Partitioning و Clustering

نسخه جديد SQL Server به تازگي قابليت جداسازي فيزيكي جداول و ايندكس‌ها را پيدا كرده است. در اوراكل قابليت Partitioning به چند صورت امكانپذير است و DBA مي‌تواند بر اساس range ،list و hash اين كار را انجام دهد.

حتي مي‌توان اين كار را در دو رده انجام داد. مثلاً مي‌توانيم جدولي را به دو قسمت براساس list جداسازي كنيم و هر كدام از قسمت‌ها را بر اساس hash دوباره جداسازي نماييم. اين قابليت اوراكل را مي‌توان در جداولي كه ركوردهاي زيادي دارند، به كار برد. البته اين قابليت در SQL Server 2005 وجود ندارد، ولي مي‌توان آن را شبيه‌سازي نمود.

SQL Server 2005 در Partitioning از قابليتي مانند اوراكل برخوردار نيست. با اين حال راه‌حل ساده‌تري را ارائه مي‌كند. در SQL Server 2005 مي‌توان با استفاده از UDF يا User Defined function اين كار را انجام داد.

در مورد Clustering ،SQL Server 2005 پشتيباني خوبي دارد، ولي طراحي و مديريت اين كار سخت است و كارايي زيادي نيز ندارد. از طرف ديگر اواركل RAC/GRID را در نسخه 10g ارائه كرده است كه مي‌توان از آن به عنوان امتيازي مسلم در مقابل SQL Server 2005 نام برد. اوراكل همچنين از سيستمي جديد به نام ASM يا Automatic Storage Management استفاده مي‌كند كه در Clustering مورد استفاده قرار مي‌گيرد.

ايندكس و Tuning

ساختار مرتب‌سازي و ايندكس در SQL Server 2005 هنوز بر اساس BTree است و در مقابل indexing قدرتمند در اوراكل ساختاري نسبتاً دارد. اوراكل هم از BTree استفاده مي‌كند، ولي از سيستم indexing به نام Bitmap نيز هم استفاده مي‌كند كه در جست‌وجوي ستون‌هايي با انتخاب كم بسيار خوب عمل مي‌كند.

اضافه بر اين اوراكل از Oracle key based cluster نيز در ايندكس استفاده مي‌كند كه كارايي بانك‌اطلاعاتي در انتخاب ركوردهايي انتخابي از چند جدول مرتبط با هم با ستون‌هاي مشابه را بالا مي‌برد.

در اواكل و SQL Server هر دو مي‌توان براي Functionهايي كه روي ستون‌هاي جدول است، ايندكس درست كرد و در هر دوي آن‌ها مي‌توان MV يا Materialized view تهيه نمود. MVها در حقيقت viewهاي آماده هستند كه مي‌توان از آن به جاي متصل كردن چند جدول استفاده كرد.

SQL Server 2005 در مقايسه با اوراكل 10g، در aggregation و functionها محدوديت‌هايي دارد. مثلاً در index view نمي‌توانيم از Distinct ،NOT و ... استفاده كنيم و امكان مثلاً Sum كردن نيست.

كپي پشتيبان و بازيابي اطلاعات

همان‌طور كه قبلاً نيز اشاره شد در نسخه‌هاي قبلي SQL Server نمي‌توانستيم به صورت آنلا‌ين از اطلاعاتمان كپي بگيريم، ولي در نسخه جديد SQL Server 2005 مديران بانك‌هاي اطلاعاتي مي‌توانند به راحتي عمليات كپي و بازيابي اطلاعات را به صورت آنلاين انجام دهند.

در حالي كه سرور در حال كار كردن است. اوراكل نيز ساختاري شبيه اين را با استفاده از Tablespaceها انجام مي‌دهد. البته در Tablespaceهاي اوراكل نمي‌توان اطلاعات قبلي را در Tablespace بازيابي نمود و از آن‌جايي كه در هر Tablespace يك Metadata وجود دارد، اين Tablespaceها نمي‌توانند كامل باشند.

البته اوراكل داراي ابزار بازيابي اطلاعات كاملي است و مي‌تواند با كمك گرفتن از Redo logها اين كار را آسان كند.
اوراكل با استفاده از logical dump‌هايي كه مي‌سازد، مي‌تواند مشكلي كه باعث نياز به بازيابي مي‌شود را شناسايي كند. البته SQL Server هم ابزارهايي مانند DBCC PAGE و DBCC LOG دارد كه مانند ابزارهاي اوراكل عمل مي‌كند.

انتقال و‌ ورود اطلاعات (Export and Import)

يكي از امكانات جديد Oracle 10 g براي انتقال يا صادر كردن اطلاعات به data pump معروف است. data pump ساختاري binary دارد. اوراكل اين كار را توسط دو گزينه كه براي صادر و دو گزينه براي وارد كردن اطلاعات دارد، انجام مي دهد. اين دو گزينه exp/data و imp/data هستند.

اضافه بر اين، در اوراكل ابزار sqlldr نيز وجود دارد كه اختصاصاً براي import كردن اطلاعات متني به كار مي‌رود. از طرف ديگر SQL Server2005 داراي دو گزينه براي export و import است؛ به نام‌هاي bcp و Bcp .DTS مي‌تواند اطلاعات را (به صورت متني) import يا export كند و حتي مي‌تواند اطلاعات را به فرمتي ذخيره كند كه بانك‌هاي اطلاعاتي ديگر نيز بتوانند از آن استفاده كنند.

DTS نيز يكي از پر سرعت‌ترين ابزارهاي انتقال اطلاعات در SQL Server است كه در مقايسه با اوراكل بسيار سريع‌تر و كار با آن آسان‌تر مي‌باشد. اوراكل نيز در نسخه جديد خود از ابزار ‌WisdomForce FastReader استفاده مي‌كند كه مي‌تواند با سرعت زياد كار export و import را انجام دهد و اطلاعات را با فرمت متني آماده سازد. از اين ابزار مي‌توان براي انتقال اطلاعات بين اوراكل و بانك‌هاي اطلاعاتي ديگر مانند MS SQL ،2DB ،Sybase استفاده نمود.

امكانات موجود براي برنامه‌نويس‌ها
يكي از امكاناتي كه اوراكل در اختيار برنامه‌نويسان قرار مي‌دهد، امكان استفاده از Exception Handling است كه توسط PL/SQL قابل دسترسي است. در SQL Server 2005 نيز اين امكان توسط Transcat-SQL مهيا شده است.

در مبحث Queuing ،SQL Server 2005 ابزاري به نام Server Broker دارد كه مي‌تواند امكان استفاده از Queing را براي برنامه‌نويسان فراهم سازد، اما در اوراكل ابزاري قوي به نام Oracle Advanced Queuing وجود دارد كه كار Queing را به صورت كامل انجام مي‌دهد.

SQL Server 2005 مي‌تواند كمك بيشتري به برنامه‌نويسان بكند؛ زيرا از NET. استفاده مي‌كند، ولي بر خلاف آن، هسته اوراكل از جاوا درست شده است و مستقيماً فقط مي‌تواند توسط PL/SQL اجرا شود. در نتيجه در SQL Server 2005 مي‌توانيم به صورت مستقل از دستورات NET. استفاده كنيم.

از طرف ديگر از آنجا كه جاوا هسته اوراكل را تشكيل مي‌دهد، نگهداري آبجكت‌هاي جاواي درون اوراكل درست مانند نگهداري يك سرور جاوا مي‌باشد، ولي SQL Server 2005 تنها در برخي قسمت‌ها مانند اشكال‌يابي از NET trigger. استفاده مي‌كند و حجم سنگيني ندارد.

امكانات ويژه SQL Server 2005

- ‌SQL Server 2005 :Replication ابزار Replication بسيار قدرتمندي دارد كه مي‌تواند از اوراكل به SQL Server يا بلعكس Replication انجام دهد.

- Notification: در SQL Server 2005 سرويس Notification يكي از سرويس‌هايي است كه مي‌توان با آن در ‌Alertهايي مانند Stock Market استفاده نمود.

- Reporting Services: يكي از امتيازات SQL Server 2005 در مقايسه با اوراكل، داشتن سرويس گزارش‌هاي داخلي است كه با استفاده از آن مي‌توان انواع گزارش‌ها را استخراج نمود. البته اوراكل هم داراي Oracle IAS است كه كار گزارش‌گيري را حتي قوي‌تر از SQL Server انجام مي‌دهد، ولي مانند SQL Server 2005 در داخل بانك اطلاعاتي نيست و به صورت خارجي عمل مي‌كند. همچنين خريد آن نيز هزينه زيادي خواهد داشت.

- Identity: در اوراكل نمي‌توان به صورت خودكار كليد اصلي يا Primary key را تعريف كرد. در صورتي در SQL Server2005 اين امكان وجود دارد. البته اوراكل داراي Sequence است، ولي نگهداري اين Sequenceها توسط مدير سيستم كار آساني نيست.

امكانات ويژه ‌Oracle 10g

- Auditing: در اوراكل اين كار با استفاده از پارامتر جديد audit_trail=db_extended, init.ora انجام مي‌پذيرد كه مي‌توان از تمامي جست‌وجوها به همراه مقادير ورودي هر يك از آن‌ها اطلاعات ذخيره كرد. اين كار در SQL Server2005 تنها با استفاده از Trace امكانپذير است. آن هم نمي‌تواند مقادير Bind شده اطلاعات را نشان دهد و استفاده از آن نيز مي‌تواند كارايي سرور را تا حد زيادي پايين بياورد.

- Logminer: در‌ اوراكل ابزاري به نام Logminer وجود دارد كه مي‌تواند تاريخچه تمامي DML يا DDLهاي كل پايگاه اطلاعاتي را به ما بدهد. SQL Server2005 اين ابزار را ندارد، ولي مي‌توان از Lumigent Log Explorer براي مشاهده برخي از اين تاريخچه استفاده كرد.

- Flashback Query: اين امكان در نسخه جديد Oracle 10g عرضه گرديد و با كمك آن مي‌توان اطلاعات از دست رفته را بازيابي كرد.

- Rollback Statistics: در اوراكل اگر عملياتي سنگين در وسط كار انجام نپذيرد، مي‌توان آن را Rollback كرد. Rollback statistics مي تواند به شما بگويد چه زماني طول خواهد كشيد كه Rollback انجام شود و عمليات پايان پذيرد. كافي است جست‌وجوي زير را به كار ببريد:
V$FAST_START_TRANSACTIONS
اين قابليت در SQL Server2005 وجود ندارد.

- AWR يا Automatic Workload Repository تصور كنيد كه بانك اطلاعاتي شما بسيار حجيم است، ترافيك زيادي دارد و جوابگويي آن به كلا‌ينت‌ها كُند شده است. با استفاده از AWR در Oracle 10g مي‌توانيم مشكل را بررسي كنيم و تشخيص دهيم چه مشكلي در سيستم وجود دارد. اوراكل اين كار را با استفاده از درست كردن Viewهاي زير انجام مي‌دهد.
v$sysmetric_history for v$sysmetric
v$active_session_history for v$active_session
v$waitclassmetric_history for v$waitclassmetric
v$session_wait_history for v$session_wait
v$servicemetric_history for v$servicemetric

- پشتيباني از OO يا Oracle :Object Oriented قابليت‌هاي شيءگرا (object oriented) دارد. براي همين، اين بانك اطلاعاتي را مي‌توان بانك اطلاعاتي رابطه‌اي شيءگرا نيز ناميد. با استفاده از اين قابليت، برنامه‌نويسان مي‌توانند Class و Objectهاي برنامه شيء‌‌گراي خود را مستقيماً به جداول بانك اطلاعاتي Map كنند.

روشهاي بالا بردن Performance در Query ها

1-تا جائيكه امكان دارد سعي كنيد از عبارتWHERE در دستورات SELECT خود استفاده كنيد.

2- از Inner Join استفاده نكنيد.

3-تا حد امكان از بکارگيري Cursor اجتناب كنيد.

4-در مورد اينكه آيا SELECT شما واقعا به DISTINCT نياز دارد يا نه توجه كنيد . در جايي كه نياز نيست از آن به هيچ عنوان استفاده نكنيد.

5-در عبارت SELECT خود ، فقط اسامي فيلدهايي را ذكر كنيد كه استفاده مي كنيد. لذا از عبارت SELECT * تا حد امكان خودداري كنيد.

6-دستور SET ROWCOUNT همان كاري را انجام مي دهد كه گزينه TOP در دستور SELECT .اما گزينه TOP به مراتب كاراتر است.

7-تا حد امكان از EXISTS و IN به جاي EXISTS NOT و NOT IN استفاده كنيد زيرا Performance سيستم را افزايش مي دهند.

8-از Constraint ها استفاده كنيد.مانند گزينه هاي Constraint و يا Default ها.

9-از چند Constraint براي انجام يك كنترل استفاده نكنيد. مثلا اگر از محدوديتهاي Primary Key و Foreign Key براي كنترل جامعيت ارجاعيRefrentional Integrity)) استفاده مي كنيد، كنترل اين مطلب در Trigger نيز تنها يك بار اضافي به سيستم تحميل مي كند.

10-زماني كه براي انجام يك درخواست هم مي توان از Join استفاده كرد هم از SubQuery ، استفاده از Join توصيه مي شود چون سريعتر است.

11-اگر در عبارت خود هم مي توانيد از IN استفاده كنيد هم از EXISTS ، ترجيحا از EXISTS استفاده كنيد ؤ چون كارا تر و سريتر عمل مي كند.

12-وقتي هم امكان اينرا داريد كه از IN استفاده كنيد ، هم از BETWEEN ، از BETWEEN استفاده كنيد.

13-تا جائيكه امكان دارد ، سعي كنيد از SUBSTRING( ) در عبارت WHERE خود استفاده نكنيد.زيرا باعث مي شود كه جدول Scan شود به جاي اينكه از Index استفاده كند.

14-تا جائيكه امكان دارد از توابع تبديلي در شرط WHERE استفاده نكنيد.

15-با اينكه استفاده از View ها آسان است ، اما كارايي سيستم را كم مي كنند.به جاي استفاده از View از Stored Procedureها استفاده كنيد.

16-از View هاي تودر تو استفاده نكنيد.(در صورتيكه به توصيه 16 عمل نمي كنيد !!! )

17-تا زماني كه واقعا نيازي نداريد از DISTINCT يا ORDER BY استفاده نكنيد.

18-اگر در برنامه تان از جستجوي متني wildCardي روي CHAR يا VarCHARزياد استفاده مي شود (Like % ) ، از امكانات Full Text Search استفاده كنيد.

19-شما مي توانيد از GROUP BY با / بدون توابع Aggregation استفاده كنيد.اما اگر مي خواهيد بالاترين كارايي را داشته باشيد ، از GROUP BY بدون توابع Aggregation استفاده نكنيد.

20- تا آنجا كه امكان دارد از Derived Table ها به جاي Temporary Table ها استفاده كنيد.

21-اگر در شرط WHERE از توابعي روي فيلد ها ، استفاده شود كه Non-Sargable باشند ،باعث پايين آمدن كارايي مي شود.اگر بتوانيد به شكلي شرط WHERE را طوري بازنگري كنيد كه فيلد و تابع جدا گانه باشند،در اين صورت Query مي تواند از Index موجود استفاده كرده و كارايي را افزايش دهيد.

I)


کد:
SELECT ID,First_name,LastNameFrom MembersWHERE DATEDIFF(yy,DateOfBirth,GetDate())>21


II)



کد:
SELECT ID,First_Name,Last-NameFrom MembersWHERE DateofBirth


22-ايندكس بايد روي تمام فيلدهايي كه مرتب در WHERE ، ORDER BY ، GROUP BY ، TOP و DISTINCT استفاده مي شوند ، زده شود.

23-طبق قانون Thumb ،تمام جداول حداقل يك Clustered Index داشته باشند.عموما ، نه هميشه ، Clustered Index بايد روي فيلدهايي زده شوند كه مقاديرش به صورت يكنواخت افزايش پيدا مي كنند ، مانند فيلدهاي Identity و يا فيلدهايي كه مقاديرشان افزايش مي يابند و Unique هستند.در بسياري از شرايط Primary Key بهترين انتخاب براي Clustered Index است.

24-روي جداول OLTP ، ايندكس نزنيد.چون هر ايندكس زمان اجراي دستورات DML را افزايش مي دهد.

25-دقت كنيد كه به طور تصادفي ، ايندكس مشابه روي جداول نزنيد . اين اتفاق ممكن است به سادگي اتفاق بيافتد.براي مثال ، شما يك Unique يا Primary Key روي يك فيلد تعريف مي كنيد، در اينصورت اتوماتيك ايندكس هايي روي اين فيلد زده مي شود .اما اگر شما به اين مسئله توجه نكنيد و جداگانه روي اين فيلد اينكدس بزنيد، دچار مشكل ايندكس هاي تكراري مي شويد.

26-عموما در موارد زير ايندكس زده نمي شود:
• اگر Query Optimizer از ايندكس استفاده نكند.مثلا اگر جدول كوچك باشد، اكثرا از ايندكس استفاده نمي شود.
• فيلد يا فيلدهايي كه قرار است در ايندكس باشند ،عريض باشند.
• اگر فيلدها از نوع Text يا Ntext يا Image باشند.
• اگر از جدول به ندرت استفاده شود.

27-گاهي اوقات ايده خوبي است كه يك ايندكس مركب را به چندين ايندكس تك فيلدي تجزيه كنيد.چون عملا فيلد اول توسط Query Optimizer استفاده مي شود.البته اين بدين معنا نيست كه هميشه Single Index از Composite Index ها بهتر عمل مي كنند.فقط با تست كردن مي توانيد بفهميد كه كداميك براي جدول شما كارايي بيشتري دارد.

28-اگر دو يا چند جدول داريد كه مرتبا آنها را به يكديگر Join مي كنيد ، بهتر است روي فيلدهايي كه در Join شركت دارند ايندكس بزنيد.

29-تا جائيكه امكان دارد ايندكس Unique ايجاد كنيد. زيرا SQL Server روي ايندكسهاي Unique سريعتر از ايندسهاي غير Unique مي تواند جستجو كند.

30-از فيلدهاي Float و Real براي Primary Key استفاده نكنيد.زيرا يك OverHead غير ضروري به سيستم تحميل مي كند كه كارايي سيستم را مي كاهد.

31-هيچگاه روي فيلدهايي كه روي آنها Non-Clustered Index زده شده است ، Clustered Index نزنيد.

32-از Clustered Index زدن روي فيلدهايي كه مرتب Update مي شود خودداري كنيد.زيرا هروقت فيلدي كه در يك Clustered Index استفاده شده تغيير مي كند، تمام Non-Clustered Index ها هم بايد Update شوند.

33- فيلد يا فيلدهايي را براي Clustered Index انتخاب مي كنيد كه شامل اطلاعاتي هست كه در Query ها بيشتر Search مي شوند.

Primary Key -34 ي كه شما روي جداولتان استفاده مي كنيد ، حتما نبايد هميشه Clustered Index باشند. زماني Primary Key را Clustered Index كنيد كه مرتبا ٌ Range Query روي Primary Key انجام مي دهيد يا مي خواهيد خروجيتان بر اساس Primary Key مرتب شود.

35-تا جاييكه امكان دارد از ايندكس زدن روي فيلد GUID خودداري كنيد.

36-دراول تمام Stored Procedure هاي خود از دستور SET NOCOUNT ON استفاده كنيد.

37-اگر Stored Procedure شما به صورت ديناميك باشد و يا شرايط WHERE آن در هر بار اجرا تغيير مي كند، از With Recompile در Stored Procedure خود استفاده كنيد.

38-اگر مي خواهيد اطلاعات را به صورت رشته اي در جدول ذخيره كنيد ، و طول آن كمتر از 8000 است ، از نوع Char يا VarChar به جاي Text استفاده كنيد.

39-اگر در برنامه تان از Temporary Table زياد استفاده مي كنيد، به جاي آن سعي كنيد از متغيرهايي از جنس Table استفاده كنيد.

DateTime -40 را هيچگاه به عنوان Primary Key در نظر نگيريد.

41-اگر اين انتخاب را داريد كه براي ملزم كردن Rules و Default ها از Trigger يا CHECK Constarin استفاده كنيد.ترجيحا از CHECK Constarin استفاده كنيد.

42- براي كاهش Overhead ، كمترين كد ممكن را در Trigger بنويسيد.

43- تا جاييكه ممكن است از Roll Back كردن تا حد امكان در Trigger خودداري كنيد.سعي كنيد قبل از اينكه ‏Trigger اجرا شود ، مشكل را برطرف كنيد.

44- براي ايجـاد جـداول موقت ( در صورتيكه چاره اي جز استفـاده از آنها نداريد ) ، از SELECT INTO استفاده نكنيد.

انتقال اطلاعات با Replication در SQL Server

عرفي Replication راه حلي براي انتقال اطلاعات از يك بانك اطلاعاتي SQL sever به يك بانك اطلاعاتي ديگر از همان نوع و البته مستقر در يك محل و كامپيو تر ديگر است . اين فرآيند توسط ايجاد يك كپي از اطلاعات موجود در مبدا و انتقال به مقصد صورت مي گيرد . در اين ارتباط اطلاعاتي اصطلاحا به كامپيو تر وبانك اطلاعاتي مبدا ، ناشر (publisher) و به كامپيو تر وبانك اطلاعاتي مقصد ، مشترك يا متعهد (subscriber) مي گويند البته اين نوع رابطه ، با وجود تنها يك ناشر اما يك يا چند مشترك امكان پذير است . بدين معني كه اطلاعات يك بانك اطلاعاتي در مبدا قابل انتقال به چند مقصد مختلف است . از نسخه 7 به بعد SQL severامكان تغيير اطلاعات در مقصد و انتقال آن به مبدا نيز وجود دارد . با اين وصف ، اين رابطه داده اي بين ناشر و مشترك ممكن است گاهي اوقات بر عكس شود و جاي مبدا و مقصد در يك مقطع زماني عوض شود . بدين ترتيب يك كامپيوتر مشترك يا مقصد مي تواند گاهي اوقات نقش ناشر يا مبدا در همان رابطه بازي كند . اين قابليت جديدMulti site update مي گويند . در SQL sever، سه نوع انتقال اطلاعات از طريق Replication وجود دارد. هر كدام از اين سه راه ، سناريو ي خاصي براي انتقال اطلاعات از مبدا به مقصد و يا برعكس را مديريت مي كنند كه در ادامه به بررسي آن ها مي پردازيم . 1- انتقال اطلاعات به روش ادغام (Merge) اينوع انتقال اطلاعات كه از قابليت Multi site هم پشتيباني مي كند ، زماني مورد استفاده قرار مي گيرد كه استقلال داخلي هر بانك اطلاعاتي طرف يك رابطه ، به رسميت شناخته مي شود . بدين معني كه در يك رابطه انتقال اطلاعات ، هر كامپيو تر ضمن حف ظ ساختار بانك اطلاعاتي خود ، هم مي تواند نقش ناشر را داشته باشد و نقش مشترك را ايفا نمايد . در اين حالت هر تغييري در جداول مشترك هر طرف ديگر اعمال مي شود . نكته مهمي كه در اينجا مطرح است اين است كه چطور طرفين اين ارتباط متقابل بايد با هم هماهنگ باشند و اولويت يكديگر را به رسميت بشناسند . به عنوان مثال فرض كنيد در يك زمان واحد ، هر دو طرف بخواهند اطلاعاتي را در مورد يك جدول بانك اطلاعاتي به يكديگر ارسال كنند . (يعني بروز حالت تداخل ) اين مشكل با استفاده از روش خاصي كه هر نوع Replication مخصوص خودش دارد قابل حل است . به طور كلي در حالت ادغام ، يك پايگاه داده حايل ميان ناشر و مشترك به عنوان توزيع گر ( Distributor) ساخته مي شود . اين پايگاه داده به نام Distributor در ليست پايگاه هاي داده اي ناشر قرار مي گيرد و وظيفه ايجاد همزماني (synchronization ) بين ناشر و مشتركين را ايفا مي كند . پايگاه داده توزيع گر هم مي تواند در سمت ناشر و هم در يك كامپيوتر مياني ديگر (غير از كامپيو تر هاي سمت مشترك ) قرار داشته باشد . اين پايگاه داده ضمن ايجاد همزماني در ردو بدل اطلاعات بين ناشر و مشترك ، اين امكان را نيز فراهم مي سازد تا مدير سيستم بتواند اولويت و در واقع ارجحيت جهت انتقال اطلاعات در زمينه بروز تداخل را مشخص كند . اين اولويت priority در زمان تعريف طرف هاي ناشر و مشترك يك Replication از نوع ادغام توسط مدير سيستم تنظيم مي شود . 2- تصوير برداري از اطلاعات (Snapshot) در اين روش ابتدا يك تصوير كامل از آنچه كه بايد از سمت ناشر به سمت مشترك برود تهيه مي شود . اين تصوير هم شامل خود ساختار آنچه كه منتقل مي شود ( مثلا ساختار يك جدول ) و هم شامل اطلاعات داخل آن است . در ابتداي كار، تصويرمذكور عينا به مشترك فرستاده مي شود . روند و توالي ارسال اين تغييرات هم همانند حالت قبل (ادغام ) طي يك فاصله زماني مشخص مثلا ساعتي يك بار كه توسط مدير سيستم قابل تنظيم است ، انجام مي گيرد . يكي از مزاياي اين روش نسبت به حالت ادغام ، اين است كه زمان كمتري از وقت مدير سيستم را جهت پيكر بندي و تنظيم عمل انتشار صرف مي كند و به دليل اينكه در ابتداي عمل انتشار، خود ساختار نيز عينا به مشترك منتقل مي شود ، از قابليت اطمينان بيشتري برخوردار است . به طور كلي كاربرد اين نوع انتقال اطلاعات ، زماني است كه مدير سيستم قصد ايجاد يك ارتباط ساده و يكطرفه ولي مطمئن دارد 3- انتقال بر اساس فرآيند (Transactional) اين روش يكي از بهترين و قابل كنترل ترين روش هاي انتقال است. در اين روش هر تغييري كه در جداول ناشر صورت مي گيرد ، به صورت يك دستور SQL درآمده كه تحت يك فرآيند واحد هم در سمت كليه مشتركين اجرا مي شود . در اين صورت اگر به طور مثال يكي از مشتركين به دليلي با اشكال مواجه شده و تغيير مورد نظر در آن انجام نشود ، اين تغيير نه در خود ناشر و نه در هيچ كدام از مشتركين ديگر نيز انجام نخواهد شد ، بدين معني كه يا يك تغيير در اطلاعات براي تمام كامپيوتر ها اعم از ناشر و كليه مشتركين انجام مي شود و يا اين كه براي هيچ كدام انجام نخواهد شد در اين حالت هم يك پايگاه داده به واسطه به نام Distribution نقش دريافت وارسال فرآيند را به طرف مشترك ايفا مي كند . در واقع روش فرآيند ، در مقايسه با دو روش قبل از حالت به هنگام (online) بودن بيشتري برخورداراست . يعني اين كه هر فرآيند و هر دستور در همان لحظه كه مي خواهد در ناشر اجرا شود ، به واسط فرستاده شده و سپس در يك زمان واحد در كليه مشتركين نيز انجام مي شود و در واقع زمان تغيير اطلاعات در ناشر و در مشتركين تقريبا يكسان است . همچنين در اين روش تداخلي هم پيش نمي آيد . چون هر تغييري ابتدا بايد به واسط فرستاده شود و از آن جا به جاهاي ديگر ارسال شود و واسط هم آن ها را در يك صف اولويت (priority queue ) قرار داده و به ترتيب انجام مي دهد . نتيجه اين نوع انتقال اطلاعات ، داشتن چند پايگاه داده كاملا يكسان و به هنگام در مكان هاي مختلف است كه همگي از يك ناشر ، اطلاعات مورد نظر را دريافت مي كنند . تعريف ناشر و مشتركين براي تعيين يك SQLserverوان ناشر ، كافي است يك رابطه Replication براي آن تعريف كرده و پس از انجام تنظيمات مربوطه و طي يك مراحل خاص هر يك از سه نوع انتقال اطلاعات ، آن كامپيوتر را به عنوان مبدا يا ناشر يك فرآيند انتقال معرفي كنيم . در همين حين و براي ايجاد پايگاه داده واسط يا همان توزيع گر (Distributor) هم مي توان وارد عمل شده و خود ناشر را به عنوان توزيع گر آن فرآيند انتقال معرفي كنيم . پس از اين كار نوبت به تعريف مشتركين مي رسد . براي تعريف يك مشترك از دو راه مي توان اقدام كرد ، كه هر يك كاربرد مخصوص به خودرادارند . در روش اول كه فرستادن اطلاعات به طرف يك مشترك است و در اصطلاح push ناميده مي شود . بدين معني كه مدير سيستم مي تواند بلا فاصله پس از تعريف يك ارتباط و ناشر آن از همان لحظه و در همان محل استقرارناشر ، مشتركين را يك به يك به اين نوع ارتباط دعوت و اضافه كند و اطلاعات را به سمت آنها بفرستد . اين ارتباط به دليل اين كه كامكلا از طرف ناشر، كنترل مي شود، از حالت به هنگام بيشتري (online) برخوردار است و اطلاعات بلا فاصله به سمت مشترك فرستاده مي شود . در روش دوم كه pull نام دارد ، تعريف مشترك از سمت خودش انجام مي شود و در واقع اين مشترك است كه اطلاعات را از ناشر طلب مي كند . اين حالت بيشتر در مواقعي است كه اطلاعات را از ناشر طلب مي كند . اين حالت بيشتر در مواقعي كاربرد دارد كه اولا تعداد مشتركين از قبل براي ناشر مشخص نيست و ثانيا بروز بودن اطلاعات در آن واحد از اهميت حياتي براي سيستم برخوردار نيست و انتقال اطلاعات درآن واحد از اهميت حياتي براي سيستم برخوردار نيست و انتقال اطلاعات مي تواند با تاخير و با درنگ زماني و در زمان دلخواه مشترك انجام شود . طرح يك مسئله فرض كنيد مي خواهيم با استفاده از مكانيسم Replication ، اطلاعات موجود در بانك اطلاعاتي Northwind را از يك پايگاه داده SQL server به نام server به يك بانك اطلاعاتي به همان نام و بر روي يك پايگاه داده ديگر مستقر در يك سرور راه دور به نام Home server منتقل كنيم . براي اين كار مي توانيم از هر كدام از سه روش انتقال اطلاعات ، استفاده نماييم . مراحل ايجاد ناشر براي اين كار ، در پنجره Enterprise Manager بر روي گزينه Publication از آيتم Replication كليك سمت راست نموده فرمان New را انتخاب مي نماييم . با آغاز ويزارد مخصوص ، كليد Next را كليك كرده و در صفحه بعد در پاسخ به اين سوال كه آيا مي خواهيد پايگاه داده توزيع گر (Distriburtor) درهمين كامپيوتر ساخته شود يا خير ، گزينه اول يعني خود كامپيوتر server را انتخاب مي كنيم و به مرحله بعد مي رويم . در پنجره بعدي از كاربر خواسته مي شود تا فولدري را جهت قرار دادن فايل هاي مربوط به عمليات انتقال مشخص كند . وجود اين فولدر براي انجام عمل Distriboutضروري است و بايد طوري انتخاب شود كه در شبكه اي كه قرار است مشتركين به آن بپيوندند قابل دسترسي باشد . پس از انتخاب اين فولدر و كليك بر روي كليد Next، در مرحله بعد نام بانك اطلاعاتي مورد نظر يعني Northwind را از داخل ليست انتخاب كرده و به مرحله اصلي يعني انتخاب نوع Replication مي رسيم كه در اين جا همان گزينه اول يعني snapshot را انتخاب مي كنيم . سپس در مرحله بعد بايد هر موجوديتي اعم از جداول و روال هايي، را كه مي خواهيم در اين عمليات انتقال وجود داشته باشند ، معرفي كنيم براي مثال جدول مشتريان (customers) را از داخل ليست جداول علامت زده و به مرحله بعد مي رويم . در مرحله بعد يك نام براي عمليات انتقال انتخاب كرده و كليد Next را مي زنيم و در نهايت با كليك بر روي عبارت Finish عمليات را پايان مي دهيم . مراحل ايجاد مشتركين 1- روش Pull ( از طريق مشترك ) براي ايجاد يك مشترك با روش pull ، به كامپيوتر مشترك مراجعه كرده و بر روي گزينه subscription كليك سمت راست كرده و فرمان New pull را انتخاب مي كنيم . سپس از داخل پنجره بعدي گزينه دوم يعني Look in the Active Directory را انتخاب مي نماييم . در مرحله بعد نام ناشر و سپس بانك اطلاعاتي مورد نظر ، نام عمل نشر كه در ناشر تعريف كرديم و سپس رمز عبور مربوط به يك كاربر معتبر در ناشر مثلا كاربر sa را وارد نماييم . در قسمت بهد هم نام بانك اطلاعاتي مقصد را كه همان Northwind است انتخاب مي ناميم . پس از طي چند مرحله ديگر كه نياز به تغييري در آن ها نيست و صرفا با كليك بر روي كليد Next ، مقادير پيش فرض را تاييد مي كنيم به مرحله انتخاب توالي زماني به روز شدن مشترك مي رسيم . در اين جا هم بايد بين سه روش مختلف يعني حالت هاي بلا درنگ ، زمان دار ، بر اساس در خواست ، يكي را انتخاب كنيم كه در اين جا همان نوع اول يعني بلادرنگ را انتخاب مي نماييم . با اين كار مراحل تعريف يك مشترك از طريق Pull پايان مي پذيرد . اما نكته مهمي كه در اين جا بايد به آن اشاره كنيم اين است كه براي فراهم ساختن امكان تعريف مشتركين از طريق Pull حتما بايد اين اجازه را قبلا و از طريق ناشر به كاربران مشترك داده باشيم . براي اين كار ، قبل از تعريف مشترك ، بايد در كامپيوترناشر ، بر روي نام عمليات انتقال ايجاد شده كليك سمت راست كرده و گزينه خصوصيات (properties)را انتخاب نماييم . سپس زبانه subscription را باز كرده و مطمئن شويم كه گزينه هاي Allow anonymous و همچنين Allow Pull در حالت تاييد شده باشند . 2- روش push (از طريق ناشر ) براي تعريف يك مشترك با استفاده از روش Push ، به كامپيو تر ناشر مراجعه كرده و بر روي نام عمليات نشر كه قبلا ايجاد كرده ايم كليك سمت راست مي كنيم . با شروع مراحل ويزارد ، نام كامپيوتر مشترك را از ليست انتخاب مي كنيم . در مراحل بعدي با معرفي بانك اطلاعاتي Northwind به عنوان مقصد به پنجره ويژه تعريف زمان به روز شدن مشترك مي رسيم كه از بين دو نوع بلادرنگ و زماندار قابل انتخاب است . كه باز هم نوع اول را انتخاب مي كنيم . در مرحله بعد هم مطمئن مي شويم كه گزينه start snapshot agent درحالت تاييد قراردارد و سپس با چند كليك بر روي كليد Nextعمليات را پايان مي دهيم . نكته بسيار مهمي كه براي تعريف مشترك از طريق روش push بايد در نظر داشته باشيم اين است كه براي ظاهر شدن نام هر مشترك درليست انتخاب كه در شكل 8 ملاحظه كرديد ، بايد قبلا اين مشترك با استفاده از عمليات Registration در كامپيوتر ناشر تعريف شده باشد . در غير اين صورت نام آن در داخل ليست مشتركين ظاهر نمي شود . عمل مذكور هم در يك محيط شبكه اي بسيار آسان است . كافي است بر روي SQL server Group در كامپيوتر ناشر كليك راست كرده و با انتخاب New Registration و وارد كردن نام مشترك اين كار را انجام دهيم .

مجموعه ای بی نظیر از آموزشهای تصویری اس کیو ال 2005 - sql server 2005

مجموعه ای از آموزشهای sql server 2005 همراه با لینک دانلود حتما در ادامه مطلب ببینید.
ادامه نوشته

آموزش sql server 2005

برای دوستانی که مایل به یادگیری مجموعه آموزشهای اس کیو ال 2005 بصورت فارسی هستند مجموعه زیر را پیشنهاد می کنم :

سرفصل مطالب را در ادامه بخوانید :



ادامه نوشته

فایلها و گروههای فایل filegroups

فايلهاي ايجاد شده براي بانك اطلاعاتي (Datafile و Logfile)

هر بانك اطلاعاتي در SQL Server 2005  حداقل از دو فايل ايجاد شده است : فايل داده (Data) و فايل log. فايل داده شامل داده ها و اشيايي مانند جداول ، stored procedures,Indexes و views ها است. Log شامل اطلاعاتي است كه براي بازيابي تمام عمليات صورت گرفته روي بانك مورد نياز است . فايل داده را مي توان براي اهداف مديريتي و تعيين فضاي ذخيره اطلاعات در چند filegroup گروه بندي كرد.

 

 

Database Files

بانك هاي اطلاعاتي SQL Server 2005  داراي سه نوع فايل است كه در جدول زير آمده است :

فايل

شرح

Primary

اين فايل شامل اطلاعات Startup بانك اطلاعاتي و بقيه فايلهاي بانك اطلاعاتي مي باشد.  اطلاعات اصلي و اشياء بانك اطلاعاتي مي تواند در اين فايل و فايل Secondary ذخيره گردد.هر بانك اطلاعاتي يك فايل Primary دارد. پسوند پيش فرض نام فايل براي اين فايلها mdf است

Secondary

اين فايلهاي داده اختياري هستند.با قرار دادن اين فايلها روي درايوهاي مختلف مي توان فايلهاي يك بانك را روي چندين ديسك پخش كرد. در ضمن اگر حجم بانك اطلاعاتي ما از ماكزيمم حجمي كه يك فايل در ويندوز مي تواند داشته باشد بزرگتر شود مي توان از اين فايلها استفاده كرد. پسوند پيش فرض نام فايل براي اين فايلها ndf است .

Transaction Log

اين فايلها شامل اطلاعات Log است كه براي بازيابي بانك اطلاعاتي مورد استفاده قرار مي گيرد.هر بانك اطلاعاتي حداقل يك فايل Log دارد. پسوند پيش فرض نام فايل براي اين فايلها ldf است .

 

براي مثال يك بانك ساده با نام Sales مي توانيم ايجاد كنيم كه شامل يك فايل Primary باشد كه همه اشياء و اطلاعات بانك اطلاعاتي در آن ذخيره شوند.و داراي يك فايل Log باشد كه شامل عمليات انجام شده روي بانك اطلاعاتي باشد.

به همين ترتيب يك بانك اطلاعاتي با نام Orders مي توانيم داشته باشيم كه شامل يك فايل Primary و پنج فايل Secondary باشد. و داراي چهار فايل Log باشد. در اين حالت داده ها و اشياء بانك اطلاعاتي بين شش فايل پخش مي گردد و تمام عمليات انجام شده در بانك در چهار فايل Log ذخيره مي شود.

به طور پيش فرض فايلهاي داده و Log در يك درايو و يك مسير قرار داده مي شوند. دليل اين كار اين است كه SQL Server را بتوان روي سيستمهاي با يك درايو اجرا كرد. اگر چه اين كار بهينه نيست . ما (مايكروسافت) توصيه مي كنيم كه فايلهاي داده و Log را روي ديسك هاي جداگانه قرار دهيد.

 

Filegroup ها

هر بانك اطلاعاتي داراي يك filegroup اوليه مي باشد.اين filegroup شامل فايل داده primary و هر فايل secondary ي مي باشد كه در filegroup  ديگري قرار نگرفته باشد. Filegroup هاي ديگري را مي توانيم ايجاد كنيم تا توسط آنها فايلها را دسته بندي كنيم. اين دسته بندي اعمال مديريت فايلها را آسانتر مي كند.

براي مثال سه فايل Data1.ndf, Data2.ndf و Data3.ndf را مي توانيم روي سه درايو مختلف ايجاد كنيم و آنها را در يك filegroup به نام fgroup1 قرار دهيم. آنگاه يك جدول خاص را مي توانيم در fgroup1 ايجاد كنيم. خواندن و نوشتن اطلاعات در اين جدول روي سه درايو پخش مي شود كه اين كار سرعت را افزايش مي دهد. همين افزايش سرعت را مي توانيم با استفاده از يك فايل و تكنولوژي RAID بدست آوريم. اگر چه فايلها و filegroup ها به شما اجازه مي دهند كه فايلهاي جديد را به راحتي به ديسك جديد اضافه كنيد.

تمام فايلهاي بانك اطلاعاتي در filegroup هاي جدول زير ذخيره مي شوند.

Filegroup

توضيحات

Primary

اين filegroup شامل فايل داده Primary مي باشد. تمام جداول سيستمي در اين filegroup قرار مي گيرند.

User-Defined

هر filegroup ي كه توسط كاربر ايجاد مي گردد. چه در هنگام ايجاد بانك اطلاعاتي و چه بعدا هنگام ويرايش بانك اطلاعاتي.

 

Filegroup پيش فرض

تمام اشيائي كه در بانك اطلاعاتي مي سازم اگر به طور خاص filegroup آنها را مشخص نكنيم آنها در filegroup پيش فرض ايجاد مي شوند. در هر لحظه فقط يك filegroup را مي توانيم به عنوان filegroup

پيش فرض معرفي كنيم . فايلهاي درون filegroup پيش فرض بايد به اندازه كافي بزرگ باشند تا تمام اشياء جديدي كه ايجاد مي شوند را در خود جاي دهند. نام filegroup  پيش فرض PRIMARY filegroup است.

Filegroup پيش فرض مي تواند توسط دستور ALTER DATABASE اصلاح گردد. اشياء و جداول سيستمي بر روي PRIMARY filegroup باقي خواهند ماند حتي اگر شما filegroup ديگري را به عنوان filegroup پيش فرض معرفي كنيد.

SQL Server 2005 سرویسهای

 SQL Server 2005سرویسهای

 

Database Engine

Database Engine سرويس اصلي براي ذخيره سازي ، پردازش و امنيت اطلاعات مي باشد. این سرویس كنترل و اجراي اكثردستورات و تقاضاهاي شما را بر عهده دارد. اين سرويس همچنين وظيفه high availability را بر عهده دارد.

(high availability به معني اين است كه سرور شما هميشه در دسترس خواهد بود.)

Analysis Services

 

اين سرويس وظيفه پردازش تحليلي اطلاعات (OLAP) و استخراج اطلاعات (data mining) را از داده هاي موجود دارد. اين سرويس به شما اجازه مي دهد كه ساختارهاي چند بعدي شامل داده هاي جمع آوري شده از بقيه اطلاعات موجود را طراحي ، ايجاد و مديريت كنيد. Analysis Services برنامه هاي data mining را قادر مي سازد كه مدلهاي استخراج اطلاعات بصري را طراحي و ايجاد نمايند. اين مدلهاي استخراج اطلاعات مي تواند توسط گروه وسيعي از الگوريتمهاي استخراج اطلاعات مورد استفاده قرار بگيرند.

يك مثال ساده از كاربرد data mining :

فرض كنيم كه پليس 110 يك نرم افزار در اختيار دارد كه توسط آن آمار جرائم را نگهداري مي كند. در اين آمار، پليس اطلاعات مربوط به مكان و زمان وقوع جرم و نوع جرم مثلا دزدي را نگهداري مي كند. پس از مدتي پليس مي تواند اطلاعات مربوط به دزدي در يك مكان خاص را بررسي كند. مثلا پليس در بررسي و تحليل اطلاعات خود پي مي برد كه در فلان محله خاص بين ساعت 8 الي 10 صبح هيچ مورد دزدي گزارش نشده است بنابراين مي تواند نيروهاي خود را در آن زمان خاص در آن محله خاص كاهش داده و در جاي ديگري كه امكان وقوع دزدي بيشتر است استفاده كند.

 

Integration Services

اين سرويسها يك پلت فرم (مجموعه تكنولوژي) است كه راه حل هايي براي ايجاد يكپارچگي اطلاعات با سرعت بالا ارائه مي كند و شامل بسته هاي نرم افزاري پردازش extract, transform, and load (ETL) براي data warehousing است.

 

Replication

Replication مجموعه تكنولوژيهايي براي كپي اطلاعات و پخش اطلاعات و اشياء بانك اطلاعاتي از يك بانك اطلاعاتي به ديگري و سپس اعمال تغييرات همزمان بين دو بانك مي باشد. با استفاده از replication مي توانيد اطلاعات خود را بين مكانهاي مختلف و كاربران مختلف در هر جايي توسط شبكه هاي WAN و ارتباطات dial-up  و شبكه هاي بيسيم و اينترنت پخش كنيد.

 

Reporting Services

اين سرويس امكاناتي را براي ايجاد گزارش از بانك هاي اطلاعاتي مختلف در اختيارتان قرار مي دهد. گزارشهاي ايجاد شده توسط اين سرويس Web-enabled هستند و قابليت پخش روي انواع دستگاهها را دارند . شما مي توانيد اين گزارشات را با فرمتهاي مختلف (Excel و Word و PDF و Html و ...) ايجاد كنيد .

Notification Services

اين سرويس محيطي براي ايجاد برنامه هايي است كه پيامهايي را ايجاد و ارسال مي كنند. از اين سرويس مي توانيد براي ايجاد و ارسال پيامهاي شخصي و زمانبندي شده به هزاران يا ميليونها شخص يا دستگاههاي گوناگون استفاده نماييد.

Service Broker

اين سرويس به برنامه سازان كمك مي كند تا بتوانند برنامه هايي با مقياسهاي گوناگون و امنيت بالا توليد كنند. اين تكنولوژي جديد موتور بانكهاي اطلاعاتي ، يك پلت فرم ارتباطي بر اساس فرستادن پيام (message-based communication platform) را ارائه مي كند كه امكان اجراي كارها را به صورت كاملا مستقل از كامپوننت هاي برنامه ها فراهم مي سازد. اين سرويس شامل زيربنايي (ساختاري) براي نوشتن برنامه هاي غير همزمان (asynchronous ) روي يك بانك اطلاعاتي ، يك instance و همچنين برنامه هاي پخش شده (distributed) مي باشد.

 

Full-Text Search


 هنگامی که بخواهید یک کلمه یا متنی را در یک فیلد متنی جستجو کنید . و در query خود از like  استفاده کرده باشید این سرویس به شما کمک می کند تا query  شما سریع تر اجرا شود.

نسخه هاي SQL Server 2005

نسخه هاي SQL Server 2005

 

1 - SQL Server 2005 Enterprise Edition (32-bit and 64-bit)

اين نسخه براي نيازهاي زير طراحي شده است :

1 – سيستم هاي OLTP خيلي بزرگ (منظور سيستمهايي كه همزمان حدودا 100000 كاربربه آن وصل هستند)

(OLTP = Online Transaction Processing)

2 – سيستم هايي كه بايد داده هاي خيلي پيچيده را آناليز و پرداژش كنند.

3 – سيستم هاي Data Warehouse

4 – سيستم هاي وب (Web Sites)

 

2 - SQL Server 2005 Standard Edition (32-bit and 64-bit)

اين نسخه براي سازمانهاي كوچك و متوسط طراحي شده است. داراي امكانات پايه براي تجارت الكترونيك و Data Warehouse نيز هست .

3 - SQL Server 2005 Workgroup Edition (32-bit only)

اين نسخه براي سازمانهايي است كه يك نسخه SQL Server  مي خواهند كه محدوديتي در تعداد كاربر و بانك اطلاعاتي نداشته باشد .

 

4 - SQL Server 2005 Developer Edition (32-bit and 64-bit)

اين نسخه داراي تمام امكانات نسخه Enterprise Edition مي باشد ولي فقط براي شركتهاي برنامه نويسي مورد استفاده قرار مي گيرد كه بتوانند سيستم هاي نوشته شده خود را تحت SQL Server تست كنند.

 

5 - SQL Server 2005 Express Edition (32-bit only)

اين نسخه مجاني است و با Visual Studio 2005 به صورت مجاني ارائه مي شود.