Professional Documents
Culture Documents
Ebook10142 (WWW Takbook Com)
Ebook10142 (WWW Takbook Com)
com
www.takbook.com
کتاب آموزشی
SQL Server 2019
تقدیم هب
5 فهرست
فهرست
مقدمه 11 ................................................................................................................................
7 فهرست
3-1-8-3ايجاد فرم در Visual Studioو ثبت اطالعات در جدول 133 ................................... SQL
9 فهرست
پشتیبانگیري و بازيابی263......................................................................................................................................................
در 448 ........................................................... SSIS Integrity, Shrink, Backup, Email 9-5-4کار با
مقدمه
که بهعنوان کاملترين کتاب در اين SQL Server 2019 با تشکر از انتخاب اين کتاب بهعنوان مرجع کامل آموزش
زمینه ارائه شده است ،در اين کتاب سعی کرديم همهي جنبههاي SQL Serverرا بررسی و آموزش دهیم و امیدواريم
با موفقیت همراه بوده باشد ،البته براي اين که کتاب به صورت کامل ارائه شود از منابع مختلف در کتاب استفاده شده
است که لیست آن در آخر کتاب ذکر شده است.
مباحث کلی که در اين کتاب بررسی شده است شامل:
فصل اول
مباحث بنیادی پایگاهداده
تقريباً بیشتر برنامههاي کاربردي ،امروزه به روش پايگاهداده طراحی میشوند .پايگاهداده امکان ذخیرهسازي متمرکز
داده با حداقل افزونگی و استفادهي اشتراکی توسط کاربران مختلف را میدهد.
1-1بررسی اولیه
1-1-1داده چیست
شکل 1-1
داده ( )dataداراي تعاريف مختلفی است ،به طور کلی دادهها کلمات و ارزشهاي واقعی هستند که از طريق مشاهده
و تحقیق بدست میآيند ،به عبارت ديگر داده نمودي از وقايع ،معلومات ،رخدادها ،پديدهها و مفاهیم هستند.
در محاسبات ،داده به اطالعاتی گفته میشود که به شکلی مناسب براي انتقال و پردازش ترجمه شود .در کامپیوتر و
رسانههاي ارتباطاتی امروزي داده به شکل باينري تبديل میشود .بنابراين داده يک نمايش باينري از يک موجوديت
منطقی ذخیره شده در حافظه کامپیوتر است.
ريشه کلمهي داده از عبارت التین datumگرفته شده که به معنی اطالع است و dataفرم جمع آن است .اما datumبه
ندرت استفاده میشود و اکثراً ترجیح میدهند dataرا بهصورت يک کلمه مفرد استفاده کنند.
www.takbook.com
1-1-2اطالعات چیست
شکل 1-2
اطالعات ( )informationمفهومی است که براي گیرنده آن قابلدرک بوده و با دانستن آن میتواند براي حل يک مسئله
تصمیمگیري يا ارزيابی کند.
وقتی اطالعات وارد کامپیوتر شود ،ذخیره میشود و به داده تبديل میشود .بعد از پردازش ،داده خروجی مجدداً
بهعنوان اطالعات دريافت میشود.
هنگامیکه اطالعات در يک بسته خاص قرار میگیرند و براي درک موضوعی يا انجام کاري استفاده میشود به دانش
( )knowledgeتبديل میشود.
1-1-3موجوديت چیست
شکل 1-3
موجوديت ( )entityمفهوم کلی پديده ،شیء يا فردي است که در مورد آن میخواهیم اطالع داشته باشیم و در کامپیوتر
ذخیره کنیم.
هر نوع موجوديت داراي مجموعهاي از صفات خاصه ( )attributeاست که ويژگی جداکننده يک نوع موجوديت از
نوع ديگر محسوب میشود.
اگر در نظر داريم يک سیستم پايگاهداده براي يک دبیرستان پیادهسازي کنیم مواردي چون دانشجويان ،استادان ،دروس،
کالسها و غیره جزء موجوديتهاي سیستم به شمار میروند.
www.takbook.com
موجوديت دانشجو در سیستم دانشگاه میتواند داراي صفات خاصه :نام ،نام خانوادگی ،سن ،سال تولد ،رشته تحصیلی،
سال ورود و ...باشد و يا موجوديت درس صفات خاصه :کد درس ،نام درس و تعداد واحد باشد.
1-1-4پايگاهداده چیست
شکل 1-4
يک بانک اطالعاتی يا پايگاهداده ( )databaseمجموعهاي سازمانيافته و بدون افزونگی از دادههاي مرتبط به هم است
که میتواند توسط سیستمهاي کاربردي مختلف به اشتراک گذاشته شود و بهراحتی دسترسی ،مديريت و بهنگام شود.
وقتی داده بهصورت پايگاهداده سازماندهی میشود ،کاربر و برنامهنويس نیازي به دانستن جزئیات ذخیرهسازي داده
ندارند .عالوه بر اين داده میتواند بدون تأثیر روي اجزاي ديگر سیستم تغییر کند .براي مثال از اعداد حقیقی به صحیح،
از يک ساختار فايل به ديگري يا از دستگاه ذخیرهسازي نوري به مغناطیسی تغییر کند.
.2ماندگاري ()Persistence
وقتی داده در پايگاهداده ذخیره شد پايدار است و از بین نمیرود ،مگر آنکه توسط سیستم پايگاهداده تغییر کند.
.3امنیت ()Security
داده در پايگاهداده از فاش شدن ،تغییر و تخريب بدون مجوز محافظت میشود .مدير سیستم توسط سطوح دسترسی
و قیدهاي امنیتی نحوه دستیابی به داده را مشخص میکند و اطمینان میدهد که دستیابی از طريق مناسب انجام میشود.
.4اعتبار ()Validity
www.takbook.com
يا جامعیت ( )Integrityو يا صحت ( )Correctnessبهدرستی داده در پايگاهداده نسبت به موجوديت دنیاي واقعی
معتبر اشاره دارد .مثالً موجودي بانک نبايد منفی باشد.
.5سازگاري ()Consistency
داده در پايگاهداده با مقدار واقعی داده در دنیاي خارج سازگار است .وقتی يک فقره اطالع در بیش از يک نقطه
ذخیره شود و الزم باشد بههنگام شود ،اگر بههنگامسازي در همه نقاط انجام نشود ناسازگاري ايجاد میشود.
.7استقالل ()independence
تغییر در نمايش فیزيکی ،تکنیکهاي دستیابی و سازماندهی داده تأثیري روي برنامههاي کاربردي ندارد.
.1افزونگی و ناسازگاري داده به دلیل چندين فرمت فايل و تکرار اطالعات در فايلهاي مختلف.
کار. .2مشکل در دستیابی داده و نیاز به نوشتن برنامه جديدي براي انجام هر
.3قیدهاي جامعیت بهجاي اينکه صريحاً بیان شوند در کد برنامه از نظر پنهان میشوند .اضافهکردن قیدهاي جديد
يا تغییر قیدهاي موجود بهسختی صورت میگیرد.
.4ايجاد ناسازگاري به دلیل وجود چندين کپی از فقرههاي داده.
.5مشکالت امنیتی به دلیل دسترسی همروند و بدون کنترل توسط چند کاربر
www.takbook.com
شکل 1-5
سیستم مديريت پايگاهداده يا به طور خالصه (DataBase Management System) DBMSمهمترين نرمافزاري در سیستم
پايگاهداده است که بهعنوان رابط بین پايگاهداده و کاربر و برنامههاي کاربردي عمل مینمايد.
امکانپذير DBMS کلیه فايلهاي پايگاهداده فقط در اختیار اين نرمافزار قرار گرفته و دستیابی به آنها تنها از طريق
است.
DBMSسرويسهايی جهت دسترسی داده در پايگاهداده فراهم میکند بهنحويکه از کلیه خواص داده محافظت شود.
1-1-5-2تراکنش
شکل 1-6
تراکنش ( )transactionيک برنامه فعال است که دنبالهاي از دستورات را شامل میشود و به طور خاص بعضی عملیات
آن روي پايگاهداده است.
سه عمل تراکنشی خاص وجود دارد:
Startکه نشان میدهد يک تراکنش در حال شروع شدن است.
Commitکه داللت بر اتمام عادي تراکنش دارد.
Abortکه بیانکننده پايان يافتن تراکنش به دلیل لغو آن است و کلیه اثرات تراکنش لغو شده بايد rollbackيا بیاثر
شود .وقتی تراکنش commitمیشود تأثیرش روي پايگاهداده بايد دائمی شود.
ACID هر تراکنش بايد پايگاهداده را از يک حالت سازگار به حالت سازگار بعدي ببرد .تراکنش بايد داراي خواص
باشد تا پايگاهداده را در حالت سازگار باقی نگهدارند .خواص ACIDحروف اول چهار خاصیت زير است:
.1اتمی بودن ()Atomicity
تراکنشها اتمیک هستند يا اصالً شروع نمیشوند يا وقتی آغاز شدند حتماً به پايان میرسند .يا تمام عملیات انجام
میشود يا هیچکدام.
نگهداشتن خاصیت اتمیک به عهدهي کنترل همروندي و ترمیم است.
.2سازگاري ()Consistency
يک تراکنش يا پايگاهداده را به حالت سازگار جديدي میبرد يا اگر شکستی رخ داد کلیه دادهها به حالت قبل از شروع
تراکنش برمیگردند.
.4ماندگاري ()Durability
www.takbook.com
از وقتی تراکنشی commitشد تأثیرش دائمی است؛ حتی اگر سیستم خراب شود ،داده در حالت درست خود باقی
میماند.
ترمیم ()Recovery
ترمیم تضمین میکند که اگر اجراي تراکنش با عدم موفقیت يا لغو روبرو شد ،تأثیر نامطلوبی بر روي پايگاهداده يا
تراکنشهاي ديگر نگذارد و حالت پايگاهداده را همیشه سازگار نگه دارد.
امنیت ()Security
امنیت به محافظت داده در مقابل افشا شدن ،تغییر و خرابی اشاره دارد .هر کاربر و برنامه کاربردي امتیاز ويژهاي براي
دسترسی به داده دارند .کاربران ممکن است ديدگاههاي مختلفی نسبت به دادههاي پايگاهداده با توجه امتیازات ويژه
خود داشته باشند .سیستم امنیتی همچنین ،توسط رويههاي شناسايی و مجوز ،دسترسی به پايگاهداده را محدود میکند.
سیستمهاي توزيع شده ( )Distributed DataBase Management Systemبر توزيع داده و همچنین همبستگی فعالیتها
و کنترل روي اجزاي توزيع شده سیستم داللت دارند .اکثر سیستمهاي توزيع شده براي تقسیم کردن بار کاري يا براي
انتقال عملکردهاي پردازش داده به نزديکی محل انجام اين وظايف است .در هر دو حالت هدف نامحسوس بودن
توزيعشدگی از ديد کاربر است.
سیستمهاي بالدرنگ ( )Real-Time DataBase Management Systemسیستمهاي سريع با سرعت پاسخگويی باال هستند
که زمان انجام کلیه عملیات نقش مهمی در آنها دارد .سیستم بالدرنگ در تعامل با دنیاي واقعی پاسخ قابل پیشبینی
را در قاب زمان میدهد .ورودي ،پردازش و پاسخها همگی از قبل تعريف شده هستند و حد زمانی مشخصی دارند
و به نحوي بهینه میشوند که هر حالت ورودي يک حالت خروجی قابلپیشبینی دارد که همیشه در يکزمان و به
يک روش اتفاق میافتد.
سیستم تحملپذير خطا ( )Fault Tolerance DataBase Management Systemسرويسهايی را دارد که با ناتوانیهاي
اجزاي سختافزاري و نرمافزاري برخورد میکند .براي رسیدن به اين منظور بايد کلیه نقاطی که احتمال نقصی در
آنها وجود دارد از قبل بررسی شده ،ابزارهايی براي تشخیص ،اصالح و يا ترمیم آنها به نحوي طراحی شود که کمترين
تأثیر را روي برنامههاي کاربردي بگذارند .مکانیسمهاي Shadow Memory ،RAIDو کپی از جمله روشهايی هستند
که استفاده میشوند.
جمعآوريشده از سنسورها را مستقیماً ذخیره کنند .اين سیستمها از پايگاههاي دانش نیز حمايت میکنند.
1-1-7کاربران پايگاهداده
کاربران يک سیستم پايگاهداده توسط روشهايی که با سیستم تعامل میکنند از هم تفکیک میشوند.
1-1-7-2طراحان پايگاهداده
طراحان پايگاهداده ( )database designersساختار مناسبی را براي نمايش اطالعات مشخص شده توسط تحلیلگر
DDL سیستم به طريق نرمالسازي شده بهمنظور تضمین جامعیت و سازگاري داده انتخاب میکنند و با استفاده از
دادههاي پايگاهداده را تعريف میکنند.
www.takbook.com
1-1-7-4مدير پايگاهداده
مدير پايگاهداده ( )database administratorيا به طور خالصه DBAفردي است که مسئول کنترل عملیات کل سیستم
کلیه فعالیتهاي سیستم پايگاهداده را هماهنگ میکنند .اين فرد بايد درک خوبی از منابع و DBA پايگاهداده است.
نیازهاي اطالعاتی کل سازمان داشته باشد و براي حصول اطمینان از اينکه داده موردنیاز قابلدسترس کاربران قرار
میگیرد با آنها در ارتباط باشد.
1-1-7-5کاربران نهائی
1-1-8ديکشنري داده
قرار میگیرد. DBA ديکشنري دادهها ( )Data Catalogيکی از امکاناتی است که در سیستم پايگاهداده در اختیار
ديکشنري دادهها که به آن راهنماي سیستم نیز میگويند يک متا داده است يعنی اطالعاتی درباره خود پايگاهداده و
دادههاي ذخیره شده در آن را نگهداري میکند.
ديکشنري داده تعیین میکند چه دادهاي موجود است و چه معنی دارد ،داده چگونه ذخیره میشود و در کجا قرار
دارد ،مالک آن چه کسی است و چه کسانی اجازه دسترسی به داده را دارند ،تاريخچه و آمار استفاده از داده را در
بردارد.
1-1-9پايگاهدادهXML
شود . يک پايگاهداده XMLسیستم نرمافزاري است که اجازه میدهد داده در فرمت XMLوارد ،پردازش و ارسال
-پايگاه دادهاي که مستند XMLرا بهعنوان ورودي گرفته به يک پايگاهداده ديگر نظیر رابطهاي تبديل XML-enabled
مدل داخلی چنین پايگاهداده اي بر پايه XMLاست و مستندات XMLرا بهعنوان منبع )- Native XML (NXD
دلیل استفاده XMLدر پايگاهداده شفافیت داده است .داده از پايگاهداده استخراج میشود و در مستندات XMLقرار
میشود . میگیرد و برعکس .به اين صورت هزينه ذخیره داده در فرمت XMLهم کمتر
www.takbook.com
فصل دوم
SQL Server 2019 پیادهسازي
2-1نیازمنديهاي SQL Server 2019
براي اينکه سرور SQLخود را راهاندازي کنیم ،نیاز داريم بدانیم که اين سرور چقدر از منابع سختافزاري ما را قرار
است مصرف کند ،براي همین به جدول 2-1توجه کنید.
جدول 2-1نیازمندی سختافزاری
نیازمندی سختافزار
نرمافزار SQLبراي نصب اولیه نیازمند 6گیگابايت فضا در هارد ديسک است ،اما براي يک
محیط عملیاتی بايد مشخص شود آن سازمان نیازمند چقدر از فضاي هارد ديسک است؛ مثالً
براي محیطی که داراي 100کارمند است بايد حداقل 200گیگ فضا براي آن در نظر گرفت ،البته
هارد دیسک
همهي اينها مربوط به کاري است که انجام میدهید ،توجه داشته باشید حتماً از RAIDبندي در
سرور خود براي هارد ديسک استفاده کنید تا در صورت خرابی هاردها اطالعات شما از دست
نرود.
سرور SQLبراي اجرا نیازمند رزولیشن ) Super-VGA (800x600است. مانیتور
براي آپديت نرمافزار SQLو استفاده از بخشهاي ديگر نیازمند اينترنت هستیم. اینترنت
حداقل نیازمندي يک گیگبايت است ،براي عملکرد بهتر بايد حداقل 4گیگبايت رم براي اين
سرور در نظر بگیريد ،البته در محیط عملیاتی واقعی امروزه ،حداقل 10گیگابايت يک انتخاب رم
ايدهال است.
است ،اما براي عملکرد بهتر بايد از پردازنده 2 1.4 GHz حداقل پردازنده X64با سرعت
سرعت پردازنده
گیگاهرتز به باال استفاده شود.
پردازندههاي امروزي از نوع Intelو AMDبه خوبی پاسخگوي نیاز اين نرمافزار هستند. نوع پردازنده
نکته:
پشتیبانی x86 پشتیبانی میشود و در پردازندههاي x64 فقط در پردازندههاي SQL Server نصب
نمیشود که بايد به اين نکته توجه کنید.
است: جدول 2-2نشان میدهد که کدام نسخه هاي SQL Server 2019با کدام نسخههاي Windowsسازگار
www.takbook.com
پشتیبانی سیستمعامل
Express Web Standard Developer Enterprise SQL نسخههاي مختلف
Yes Yes Yes Yes Yes Windows Server 2019 Datacenter
Yes Yes Yes Yes Yes Windows Server 2019 Standard
Yes Yes Yes Yes Yes Windows Server 2019 Essentials
Yes Yes Yes Yes Yes Windows Server 2016 Datacenter
Yes Yes Yes Yes Yes Windows Server 2016 Standard
Yes Yes Yes Yes Yes Windows Server 2016 Essentials
Yes No Yes Yes No Windows 10 IoT Enterprise
Yes No Yes Yes No Windows 10 Enterprise
Yes No Yes Yes No Windows 10 Professional
Windows 10 Home
اشاره کرد که بايد نسخهي مورد نظر آن را که در خود ويندوز ارائه میشود. NET Framework میتوان بهSQL Server از نیازمنديهاي ديگر
. البته اين نرمافزار بهصورت پیشفرض بر روي سرور نصب خواهد شد،نصب کنید
: اجزاي زير بر روي سرور نصب خواهد شدSQL Server توجه داشته باشید در هنگام نصب
• SQL Server Native Client
• SQL Server Setup support files
نیازمند2-3 هرکدام از اجزا طبق جدول، را به همراه اجزاي کامل آن بر روي سرور نصب کنیدSQL اگر بخواهید
.فضاي موردنیاز هستند
. انتخاب خواهیم کردSQL توجه داشته باشید که اين مورد را در موقع نصب
SQL اجزای2-3 جدول
نکته:
از ديسک با سکتورهاي 512بايت تا 4کیلوبايت پشتیبانی میکند و اگر بخواهید از سکتورهاي SQL Server
باالي 4کیلوبايت استفاده کنید ،مطمئناً با خطا روبرو خواهید شد ،براي دريافت اطالعات بیشتر میتوانید از
لینک زير استفاده کنید.
https://support.microsoft.com/en-us/topic/hard-disk-drive-sector-size-support-boundaries-in-sql-server-
4d5b73fa-7dc4-1d8a-2735-556e6b60d046
SQL Serverبراي ذخیرهي اطالعات از منابع ذخیرهسازي زير میتواند استفاده کند:
-1حافظه داخلی سرور يا همان هاردديسک محلی.
-2محل ذخیرهسازي به اشتراک گذاشته شده در شبکه.
.SQL Server failover cluster -3
)( Storage Spaces Direct (S2Dتکنولوژي شبیه به RAIDکه اطالعات ديتابیس در چند سرور قابلدسترس است ،اين ويژگی -4
همان Fault Toleranceاست).
ذخیرهسازي ( SMBمیتوانید از يک Windows Serverبهعنوان FileServerبراي انکار استفاده کنید). -5فضاي
به داليل امنیتی که مايکروسافت اعالم کرده ،بهتر است که SQL Serverرا بر روي Domain Controllerنصب نکنید،
چون موارد زير را در پی خواهد داشت:
-1نمیتوانید سرويسهاي SQL Serverرا در يک Domain Controllerتحت اکانت local serviceاجرا کنید که
بسیار اذيتکننده خواهد بود.
-2پس از نصب SQL Serverبر روي سیستم مورد نظر ،نمیتوانید سیستم مورد نظر را از يک عضو دامنه به يک
کنترلکنندهي دامنه تغییر دهید؛ قبل از تغییر سیستم میزبان به يک کنترلکنندهي دامنه ،بايد SQL Serverرا حذف نصب
کنید.
-3پس از نصب SQL Serverبر روي رايانه ،نمیتوانید رايانه را از يک کنترلکنندهي دامنه به يک عضو دامنه
تغییر دهید .قبل از تغییر رايانه میزبان به عضو دامنه ،بايد SQL Serverرا حذف و بعد نصب کنید.
SQL Server failover cluster -4در يک دومین کنترل خواندنی پشتیبانیی نمیشوند.
SQL Server -5در يک کنترلکنندهي دامنه فقط خواندنی پشتیبانی نمیشود SQL Server Setup .نمیتواند گروههاي
امنیتی يا حسابهاي ارائهدهندهي خدمات SQL Serverرا در يک کنترلکنندهي دامنهي فقط خواندنی ايجاد کند .در
اين سناريو ،نصب ناموفق است.
-6يک نمونه خوشهي شکستخورندهي SQL Serverدر محیطی که فقط يک کنترلکنندهي دامنهي فقط خواندنی
قابلدسترسی است پشتیبانی نمیشود.
www.takbook.com
هرچند میتوانید با روشهايی مانند Raidبندي و روشهاي ديگر جلوي ازبینرفتن اطالعات را بگیريد ،اما بهترين
کار اين است که از مجازيسازي استفاده کنیم و ازروي ماشینی که ايجاد میکنیم ،پشتیبان تهیه کنیم تا در موقع
يک SQL ازدسترفتن سرور در سريعترين زمان ممکن بتوانیم آن را برگردانیم ،البته روشهاي پشتیبانگیري در
موضوع مفصل خواهد بود که در فصل مربوط به پشتیبانگیري بهصورت کامل به آن خواهیم پرداخت.
ما براي اين کتاب سرور مجازي را انتخاب میکنیم ،بهترين عملکرد در مجازيسازي را شرکت VMwareارائه میدهد
و شما میتوانید ماشین مورد نظر خود را توسط نرمافزار VMware Workstationو يا با سیستمعامل ESXiايجاد کنید
که کار با اين نرمافزارها را در کتاب VMware Systemsبه طور کامل توضیح داديم و میتوانید نسخهي الکترونیکی را
از سايت بنده دريافت کنید.
براي اين کتاب ما از يک سرور ESXiاستفاده کرديم که روي آن يک ماشین مجازي ايجاد کرديم و سختافزار مناسب
را براي آن در نظر گرفتیم ،بعد از اين کار بر روي آن ويندوز سرور 2019نصب کرديم تا همه چیز براي نصب
نرمافزار SQLآماده باشد.
براي اينکه نرمافزار SQL Server 2019را دانلود کنید میتوانید بهصورت مستقیم از سايت مايکروسافت دانلود کنید و
يا اينکه آن را از سايتهاي ايرانی دانلود کنید که آدرس آن هم در زير قرار دارد:
https://soft98.ir/software/programming/3594-microsoft-sql-server-all-2017-full-1.html
بعد از دانلود فايل مورد نظر ،بهمانند شکل 2-1بر روي فايل Setup.exeدو بار کلیک کنید.
www.takbook.com
اولین صفحهاي که به شما نمايش داده میشود ،شکل 2-2است که گزينههاي مختلفی را به شما ارائه میدهد ،مثالً
توضیح میدهد و SQL Server در گزينهي اول اطالعاتی را در مورد سختافزار و نرمافزار موردنیاز براي نصب
همچنین در گزينههاي ديگر میتوانید موارد ديگر را هم بررسی کنید.
بر روي آن هستیم آيا مناسب است يا نه بايد در شکل SQL براي اينکه متوجه شويم که سیستمی که در حال نصب
2-2بر روي لینک System Configuration Checkerکلیک کنید ،تا بهمانند شکل 2-3همهي گزينهها اوکی باشد.
I در شکل 2-6بايد توافقنامهي استفاده از اين نرمافزار را مطالعه و درصورتیکه آن را قبول داريد ،تیک گزينهي
accept the license termsرا انتخاب و بر روي Nextکلیک کنید.
www.takbook.com
SQL بهمانند شکل 2-7میتوانید با انتخاب تیک گزينهي … Use Microsoft Updates Toآخرين آپديتهاي نرمافزار
را از سايت مايکروسافت دريافت کنید.
در شکل 2-8بررسی اولیه انجام میشود و در اين قسمت همه چیز بايد Passedباشد ،اگر به شکل 2-8توجه کنید،
متوجه خواهید شد که قسمت Firewallبا يک اخطار روبرو شده است و به اين موضوع اشاره دارد که براي استفاده
از SQLدر شبکه بايد پورتهاي مورد نظر آن در فايروال باز باشد که با ياري خدا در ادامه اين کار را انجام خواهیم
داد.
www.takbook.com
در شکل 2-9بايد تیک گزينهي Database Engineرا انتخاب کنید و همچنین میتوانید مسیر نصب را تغییر دهید.
در شکل 2-10بايد Instanceرا مشخص کنید Instance ،را بهعنوان يک ظرف در نظر بگیريد که داخل آن میتوانید
ديتابیس خود را قرار دهید و نرمافزارهاي خاص خود را داشته باشید ،مثالً اطالعاتی که در Instanceبا نام DB1قرار
را بهعنوان يک مزرعهي جدا Instance قرار دارد متفاوت است ،اصو ًال DB2 با نام Instance دارد با اطالعاتی که در
میشناسند که داخل آن میتوانید ديتابیسها و سرويسهای خود را داشته باشید ،در شکل Instance 2-10با نام
پیشفرض MSSQLSERVERقرار دارد که سرویس را بر روی آن فعال یمکنیم.
www.takbook.com
در نظر بگیريد ،توجه داشته باشید که آن کاربر SQL در شکل 2-11بايد يک کاربر را براي اجراي سرويسهاي
دسترسی الزم در شبکه را داشته باشد ،براي همین منظور کاربر babajaniکه يک کاربر تحت دومین است با دسترسی
کامل به شبکه وارد شده است و با همین کاربر هم بايد در ادامه وارد SQLشويم.
Add داشته باشند که با کلیک بر روي Database در شکل 2-12بايد مشخص کنید که چه کاربرانی دسترسی به
هستید ،آن را به لیست اضافه کنید و يا اينکه هر کاربر SQL میتوانید با کاربري که در حال نصب Current User
آن را به لیست اضافه کنید ،توجه داشته باشید دو حالت احراز Add ديگري که مورد نظر شماست با کلیک بر روي
هويت وجود دارد که بهصورت پیشفرض Windows aythentication modeانتخاب شده است و اگر بخواهید کاربر
saکه کاربر پیشفرض در SQLاست بايد در اين قسمت گزينه Mixed Modeرا انتخاب و يک رمز عبور براي آن در
نظر بگیريد.
www.takbook.com
در شکل 2-13بر روي Installکلیک کنید تا کار نصب آغاز شود.
همانطور که در شکل 2-14مشاهده میکنید نرمافزار SQL Serverبهدرستی بر روي سرور نصب شده است.
را مديريت کنیم ،يعنی کاربر جديد SQL نیاز به يک نرمافزاري داريم تا بتوانیم SQL Server بعد از نصب نرمافزار
SQL تعريف کنیم ،دسترسی آن را مشخص کنیم ،ديتابیس جديد و موارد ديگر؛ همهي اين کارها توسط نرمافزار
انجام خواهد گرفت ،در نسخههاي جديد اين نرمافزار بهصورت SSMS يا بهاختصار Server Management Tools
بعد از نصب و از طريق منوي Startنرمافزار SSMSرا اجرا کنید که بهمانند شکل 2-17صفحه مورد نظر براي شما
ظاهر خواهد شد .در اين صفحه شما بايد در قسمت ،Server Typeگزينهي Database Engineرا انتخاب کنید که شامل
www.takbook.com
در شکل 2-18يک نماي کلی از نرمافزار SSMSرا که به Database Engineمتصل شده است را مشاهده میکنید ،در
قسمت Databasesمیتوانید ديتابیسهاي خود و ديتابیسهايی که توسط نرمافزارهاي ديگر بهصورت اتوماتیک ايجاد
میشود را مشاهده کنید .در قسمت Securityبايد کاربران خود را معرفی و دسترسیهاي الزم براي آنها را مشخص
وجود دارد که براي مانیتور کردن عملکرد سرور Object يک سري اشیا يا همان Server Objects کنید؛ در قسمت
خواهد بود .در قسمت Replicationنیز يک سري ابزار وجود دارد تا بتوانید ديتابیسها را از يک پايگاهداده به يک
نیز يک ابزار براي انتقال اطالعات از يک پايگاهداده متفاوت، پايگاهداده بهصورت درست و امن انتقال دهیدPolyBase ،
براي ايجاد يک گروه از سرورها براي پايدار Always On High Availability است؛ گزينهي SQL به Oracle مانند
نگهداشتن ديتابیسها و سرورها است که يک روش جديد در میان روشهاي ديگر است .در قسمت Managemntيک
بسیار SQL گیري و موارد ديگر که در مديريت LOG سري ابزار وجود دارد ،مانند پشتیبانگیري از ديتابیسها،
نیز براي يکپارچهسازي دادهها در سازمان شما است Inetgaration Service Catalog کمککننده خواهد بود؛ قسمت
براي انجام SQL Agent که با ياري خدا همهي اين گزينهها را در ادامه توضیح خواهیم داد و در آخر نیز سرويس
پشتیبانگیري و کارهايی ديگر موردنیاز است.
www.takbook.com
اولین قسمتی که بررسی میکنیم Databasesاست ،بهمانند شکل ،2-19بعد از بازکردن قسمت ،Databasesدو گزينه
را مشاهده میکنید ،يکی Systemsو ديگري Database Snapshotsاست؛ در قسمت ،Systemsچهار ديتابیس را مشاهده
میکنید که بهصورت پیشفرض ايجاد میشوند.
همانطور که از اسم آن مشخص است ،يک پايگاهداده موقت است ،زمانی که شما tempdb
را اجرا میکنید ،اطالعات موقت در اين پايگاهداده قرار Server SQL 2019
میگیرد ،مثالی که در اين رابطه میتوان زد ،مانند RAMسیستم
شما که زمانی نرمافزاري را اجرا میکنید ،اطالعات بهصورت موقت در اين حافظه
قرار میگیرد و بعد از بستن نرمافزار ،اطالعات نیز از حافظه پاک میشوند.
اجرا میکنید ،اطالعات اين دستور بهصورت SQL زمانی که يک دستور را در
موقت در اين پايگاهداده قرار میگیرد و پردازش میشود و طول عمر آن به کار
کاربر مورد نظر برمیگردد.
اين پايگاهداده بهعنوان يک الگو در نظر گرفته میشود ،يعنی اينکه يک سري model
در باالي نرمافزار چندين منو قرار دارد که با هم آنها را بررسی میکنیم:
در منوي فايل میتوانید با کلیک بر روي Connect Object Explorerبه ديتابیس جديد خود متصل شويد و يا با انتخاب
گزينهي ،Disconnectارتباط را قطع کنید؛ گزينههاي ديگر براي ايجاد پروژهي جديد و يا بازکردن پروژههاي قبلی
است؛ در قسمت Recent Projects and Solutuinمیتوانید آخرين پروژههايی را که باز کرديد را مشاهده کنید.
در منوي Editمیتوانید اطالعات را جستجو ،کپی ،حذف و ...کنید.
در منوي ،Viewگزينهي Explorer Objectابزاري براي نمايش کلی ديتابیسها ،سرويسها و ...است که اگر به نرمافزار
توجه کنید در سمت چپ ،اين ابزار را میتوانید ببینید؛ گزينهي Details Explorer Objectابزاري است زيرمجموعهي
که اطالعات داخلی آن را نمايش میدهد. Explorer Object ابزار
www.takbook.com
در شکل ،2-21از سمت چپ وارد SQL Server network Configurationشويد و بر روي گزينهي مورد نظر کلیک
کنید تا لیست آن باز شود.
در لیست مورد نظر بر روي TCP/IPدو بار کلیک کنید.
www.takbook.com
در شکل 2-22و در تب ،Protocolگزينهي Enabledرا در حالت Yesقرار دهید و وارد تب IP Addressesشويد.
بهمانند شکل ،2-23در تب IP addressesو در قسمتی که IPسرور شما مشخص شده است بايد دو گزينهي اول را
قرار دهید و در قسمت ،TCP Portشمارهي پورت 1433را وارد کنید ،زمانیکه اين پورت را وارد Yes در حالت
میکنید بايد آن را در Firewallسیستم خود باز کنید تا کاربران بتوانند از طريق شبکه به SQLدسترسی داشته باشند.
(در صورت خاموش بودن Firewallنیاز به اين کار نیست).
براي اينکه تنظیمات پورت بر روي همهي گزينهها انجام شود ،بهتر است در پايین شکل 2-23گزينهي TCP Portرا
بهمانند شکل 2-24بر روي 1433قرار دهید.
www.takbook.com
شکل 2-24
براي تست عملکرد ارتباطی با SQLاز طريق شبکه ،در يکی از کالينتهايی که عضو شبکه است نرمافزار SSMSرا
نصب و اجرا میکنیم.
همانطور که در شکل 2-25مشاهده میکنید در قسمت ،Server Nameنام سرور SQLخود را وارد کرديم و بعد از
کلیک بر روي Connectبا خطاي مورد نظر روبرو شديم؛ اين خطا چند دلیل میتواند داشته باشد:
-1شبکه در دسترس نباشد.
Firewall -2مربوط به سرور SQLروشن باشد و جلوي ورود را بگیرد.
-3تنظیمات سرور SQLمشکلی داشته باشد.
در گزينهي اول که بايد براي تست يکی از سرورهاي ديگر در شبکه را تست بگیريد ،توجه کنید که آن را میبینید يا
نه ،اگر اوکی بود که هیچ ،اگر نه که بايد شبکه را بهصورت فیزيکی بررسی کنید ،شايد کابل يا کارت شبکه ايراد دارد
و يا مشکل نرمافزاري است.
در گزينهي دوم بايد وارد سرور SQLشويد و سرويس Firewallرا اجرا کنید ،براي اين کار بايد بهمانند شکل 2-26
بر روي Advanced settingsکلیک کنید.
www.takbook.com
در شکل 2-27براي اينکه به ترافیک ورودي به سرور SQLدسترسی الزم دهید بايد بر روي Inbound Rulesکلیک
کنید و در صفحهي باز شده بر روي New Ruleکلیک کنید.
در شکل 2-29بايد گزينهي TCPرا انتخاب کنید و در قسمت ،Spicific Local portsپورت 1433مربوط به SQLرا
وارد کنید تا درخواستهايی که از بیرون به داخل سرور با اين پورت وارد میشود ،مجوز دسترسی داشته باشد.
www.takbook.com
در شکل 2-31بايد مشخص کنید که اين دسترسی در چه قسمتی اعمال شود ،اگر چنانچه کالينت شما در منطقهي
دومین قرار دارد بايد فقط گزينهي دومین را انتخاب کنید ،اما اگر کالينت در منطقهي ديگر ،مثالً در Workgroupقرار
داشته باشد ،نمیتواند به SQLمتصل شود.
از SQL بايد از طريق کالينت تست بگیريم تا ببینیم میتوانیم به سرور SQL در فايروال سرور Rule بعد از ايجاد
طريق شبکه متصل بشويم يا نه؛ براي اين کار SQL Server Management Studioرا طبق شکل 2-33اجرا
کنید و در قسمت Server Nameبايد نام سرور SQLخود را وارد و بر روي Connectکلیک کنید.
اگر مشکلی در ارتباط شبکه و دومین شما وجود نداشته باشد بهراحتی به سرور SQLمتصل خواهید شد ،اما اگر طبق
شکل 2-34با خطا روبرو شديد ،بايد دوباره وارد فايروال سرور SQLشويد و منطقهي کاري را تغییر بدهید.
را Properties مورد نظر خود کلیک راست و گزينهي Rule شويد و بر روي SQL طبق شکل 2-35وارد فايروال
انتخاب کنید.
www.takbook.com
در شکل 2-36وارد تب Advancedشويد و تیک گزينهي Privateرا انتخاب و بر روي OKکلیک کنید.
همانطور که در شکل 2-37مشاهده میکنید بهدرستی توانستیم به سرور SQLاز طريق شبکه متصل شويم.
شايد در سازمان خود چندين سرور SQLداشته باشید و به همهي آنها از طريق شبکه متصل میشويد ،براي راحتی
کار خود بهتر است يک گروه ايجاد کنید و همهي آنها را در گروه مورد نظر خود قرار دهید.
براي اين کار در نرمافزار SQL Management Studioبهمانند شکل 2-38وارد منوي Viewشويد و بر روي گزينهي
Registered Serversکلیک کنید.
www.takbook.com
در شکل 2-39بر روي Local Server Groupsکلیک راست کنید و گزينهي New Server Groupرا انتخاب کنید.
در شکل 2-40بايد يک اسم براي گروه خود وارد کنید و بر روي OKکلیک کنید.
را New Server Registration بر روي نام گروهی که ايجاد کرديد ،طبق شکل 2-41کلیک راست کنید و گزينهي
انتخاب کنید.
www.takbook.com
در شکل 2-42بايد نام سرور را در قسمت Server nameوارد کنید و بر روي Saveکلیک کنید.
همانطور که در شکل 2-43مشاهده میکنید ،سرور به لیست اضافه شده است و با کلیک بر روي آن بهراحتی به
سرور SQLمتصل خواهید شد.
بعد از دانلود لینوکس Ubuntuبايد آن را پیادهسازي کنید ،بهترين کار اين است که از يک نرمافزار مجازيسازي ،مانند
VMware Workstationو يا برنامهي ديگر براي اين کار استفاده کنید تا سهولت دسترسی و عملکرد بهتري را شاهد
باشید ،اگر برنامه VMware Workstationرا در دسترس نداريد میتوانید از لینک زير آن را دانلود کنید:
https://soft98.ir/os/virtual-machine/1232-vmware-workstation.html
New شويد و گزينهي File بعد از دانلود ،آن را نصب کنید و براي آغاز کار بايد بهمانند شکل 2-44وارد منوي
Virtual Machineرا انتخاب کنید.
در شکل 2-46بايد فايل ISOمربوط به لینوکس Ubuntuرا که لینک آن را در قسمت پیش قرار داديم معرفی کنید،
بعد از معرفی بهصورت اتوماتیک نوع سیستمعامل در زير آن مشخص خواهد شد.
در شکل 2-47بايد اطالعات تکمیلی را وارد کنید ،مانند نام کاربري و رمز عبور براي لینوکس .Ubuntu
www.takbook.com
در شکل 2-48بايد نام ماشین مجازي خود به همراه آدرس ذخیرهسازي آن در هاردديسک را مشخص کنید.
در شکل 2-49بايد مقدار فضاي هاردديسک را مشخص کنید که براي اين سیستمعامل 20 ،گیگابايت کفايت میکند
و براي اينکه هاردديسک مجازي فقط يک فايل تکی باشد بايد گزينهي Store Virtual disk as single Filesرا انتخاب
کنید.
www.takbook.com
در شکل 2-50اطالعات کلی را مشاهده میکنید که اگر نیاز باشد تغییراتی در سختافزار اعمال کنید و يا اينکه
کلیک کنید ،در پايان براي Customize Hradware بخواهید سختافزار جديد به اين ماشین اضافه کنید بايد بر روي
اينکه ماشین بعد از ايجاد شدن ،روشن شود تیک گزينهي Power on.را انتخاب کنید.
بعد از اجراي ماشین مورد نظر مراحل نصب بهصورت اتوماتیک انجام خواهد شد ،اما بهمانند شکل 2-51چون نام
کاربري adminيک نام رزرو شده است بايد يک نام جديد ،وارد و رمز آن را مشخص کنید و بر روي Continueکلیک
کنید تا کار نصب به پايان برسد.
www.takbook.com
در ادامهي کار و بعد از نصب کامل لینوکس Ubuntuبايد بهمانند شکل 2-52بر روي Show Applicationsکلیک کنید
و در کادر جستجو Terminal ،را اجرا کنید.
بعد از اجرا شدن سرويس بايد بهمانند شکل 2-53کاربر Rootرا فعال کنید ،براي اين کار از دو دستور زير استفاده
کنید:
sudo passwd root
sudo passwd -u root
وارد کنید تا بتوانید از آن Root توجه داشته باشید بعد از اجراي دستور اول بايد يک رمز عبور جديد براي کاربر
استفاده کنید.
www.takbook.com
در ادامهي کار با دستور ،sudo –iکاربر را به rootتغییر دهید تا بتوانید دستورات مورد نظر خود را با باالترين دسترسی
اجرا کنید.
براي فعالسازي SQL Serverبر روي لینوکس Ubuntuبايد دستورات زير را وارد کنید.
دو دستور زير آخرين آپديتها را بر روي لینوکس Ubuntuنصب میکند تا در ادامه بتوانید ،دستورات را بهراحتی
اجرا کنید که نتیجهي آن را در شکل 2-55مشاهده میکنید.
sudo apt-get update
sudo apt-get -y upgrade
با دستور زير ،بعد از اينکه آپديتها فعال شدند لینوکس را يکبار Restartکنید.
sudo reboot
بعد از اجرا شدن سرور مجازي لینوکس ،وارد ترمینال شويد و دستور زير را براي فعالسازي repositoryاجرا کنید.
www.takbook.com
در ادامهی کار با دستور زير Repository ،يا همان مخزن مربوط به SQL Serverرا دانلود و فعال میکنیم ،اگر به شکل
57-2دقت کنید اين دستور بهدرستی اجرا شده است.
در ادامهي کار با دستور زير MSSQL Server ،را بر روي لینوکس Ubuntuنصب کنید:
sudo apt update
sudo apt install mssql-server
همانطور که در شکل 2-58مشاهده میکنید ،دستورات باال اجرا و MSSQLنصب شده است که در ادامه بايد آن را
تنظیم کنید.
www.takbook.com
بعد از وارد کردن عدد يک بايد کلمهي Yesرا بهمانند شکل 2-60براي تأيید اليسنس برنامه وارد کنید تا کار ادامه
پیدا کند.
www.takbook.com
در ادامه بهمانند شکل 2-61بايد يک رمز عبور براي مديريت SQLوارد کنید ،بعد از آن سرويس SQLاجرا خواهد
شد.
براي اينکه متوجه شويم ،سرويس فعال شده است يا نه بايد دستور زير را وارد کنید ،تا شکل 2-62ظاهر شود.
systemctl status mssql-server.service
www.takbook.com
در ادامهي کار بايد ابزار مورد نیاز را بر روي سرور لینوکس براي کار با SQLنصب کنید؛ براي اين کار دستورات زير
را به صورت متوالی اجرا کنید:
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
با اجراي دستورات باال بهمانند شکل 2-63ابزار مربوط به SQLبر روي لینوکس نصب میشود.
را وارد کنید تا ابزار MSSQLکه Yes در ادامهي دستورات در قسمتی که در شکل 2-64مشخص شده است بايد
حجمی حدود 102مگابايت دارد بر روي سرور لینوکس نصب شود.
www.takbook.com
در ادامهي کار ،دو دستور زير را وارد کنید تا کار نصب و تنظیم SQLبه پايان برسد:
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
فصل سوم
آشنايی با پايگاهداده
3-1ايجاد پايگاهداده و کار با آن
3-1-1ايجاد پايگاهداده
در ادامهي کار میخواهیم براي شروع ،يک ديتابیس ايجاد و بر روي آن کارهاي مختلفی را انجام میدهیم ،ايجاد
ديتابیس را میتوانیم به دو صورت انجام دهیم ،يکی بهصورت گرافیکی و از طريق نرمافزار SSMSو يکی از طريق
کد T-SQLکه در ادامه هر دو روش را بررسی خواهیم کرد.
New کلیک راست کنید و بر روي Databases شويد و بر روي SSMS براي شروع بهمانند شکل 3-1وارد
Databaseکلیک کنید.
در شکل 3-2بايد نام ديتابیس مورد نظر خود را در قسمت Database Nameوارد کنید و در قسمت Ownerبايد يک
کاربر را بهعنوان صاحب اين ديتابیس انتخاب کنید که اگر انتخاب نکنید ،همین کاربري که با آن در حال ايجاد ديتابیس
هستید بهعنوان صاحب آن در نظر گرفته خواهد شد؛ بعد از واردکردن نام در قسمت ،Database nameدو گزينه با نام
ديتابیس شما ايجاد میشود که اولی ( )DB1نام ديتابیس و دومی ( )DB1_Logديتابیسی براي ثبت Logاست ،اين دو
مکمل هم هستند و حتماً براي اجرا به همديگر نیاز دارند.
www.takbook.com
در قسمت Optionکه در شکل 3-3مشخص شده است ،گزينههايی وجود دارد ،گزينهي Collationبه روشی براي
مقايسهي اطالعات با هم اشاره دارد؛ قسمت Recovery modelکه مربوط به عملیات پشتیبانگیري و بازيابی اطالعات
هم میتوانید مشخص کنید که اين Compatibility level است که در موقع مناسب توضیح خواهیم داد .در قسمت
ديتابیس با کدام نسخه از SQLسازگاري داشته باشد.
بعد از ايجاد ديتابیس میتوانید بهمانند شکل 3-4در قسمت ،Databasesاين ديتابیس جديد را مشاهده کنید.
شکل 3-4
www.takbook.com
نکته:
سعی کنید در اول کار زمانیکه میخواهید ديتابیس خود را ايجاد کنید ،آدرس آن را در يک مکان مطمئن و با
حجم باال قرار دهید تا در آينده با اضافه شدن داده ،حجم و اطالعات شما حفظ شود.
بعد از ايجاد جدول بايد جدول مورد نظر در قسمت Tableنمايش داده شود ،اگر اينچنین نشد بايد بهمانند شکل -8
3بر روي Tablesکلیک راست کنید و گزينهي Refreshرا انتخاب کنید تا جدول مورد نظر مشخص شود.
بعد از ايجاد جدول میخواهیم اطالعاتی در آن وارد کنیم؛ براي اين کار در شکل 3-9بر روي dbo.Table_1کلیک
راست کنید و گزينهي Edit Top 200 Rowsرا انتخاب کنید.
www.takbook.com
براي اينکه اطالعات موجود در جدول را مشاهده کنید ،میتوانید بهمانند شکل 3-11بر روي جدول مورد نظر کلیک
راست کنید و گزينهي Select Top 1000 Rowsرا انتخاب کنید.
همانطور که در شکل 3-12مشاهده میکنید ،اطالعات جدول توسط يک اسکريپت در خروجی به نمايش گذاشته
شده است که در ادامه ،در مورد کد مورد نظر توضیحاتی خواهیم داد.
طول داده متغیر است و توانايی افزايش حداکثر اندازه 8000کاراکتر با
VARCHAR(size) or
حجم تا 2گیگابايت را داراست. افزايش حجم. )VARCHAR(max
طول داده متغیر است و توانايی افزايش حداکثر اندازه 4000کاراکتر با
NVARCHAR(size) or
حجم تا 2گیگابايت را داراست. افزايش حجم. )NVARCHAR(max
طول داده متغیر است و توانايی افزايش حداکثر اندازه 8000کاراکتر با
VARBINARY(size) or
حجم تا 2گیگابايت را داراست. افزايش حجم. )VARBINARY(max
www.takbook.com
از 9,223,372,036,854,775,808-تا
BIGINT
9,223,372,036,854,775,807
اعداد شناور
که در آن nتعداد تعداد بیت
براي ذخیره بهصورت نماد )FLOAT(n
از 922,337,203,685,477.5808-تا
MONEY
922,337,203,685,477.5807
در جدولهايی که بررسی کرديم ،تمام دادههاي رشتهاي ،عددي ،زمان و تاريخ تعريف شده است و توضیحات مربوط
به آن داده شده است.
Data Typeهاي ديگري نیز وجود دارد که در نسخههاي جديد SQLمیتوانید از آنها استفاده کنید:
www.takbook.com
به store proceduere اين نوع داده براي ذخیرهي متغیرها و يا پارامترهاي OUTPUTمربوط
cursor
کاربرد دارد.
مجموعهاي از نتايج را براي پردازش بعدي ذخیره میکند. table
در لیست مشخص شده است و اگر بر روي Deleteکلیک کنید ،ديتابیس حذف DB1 در شکل 3-14نام ديتابیس
خواهد شد ،اما دو گزينه در زير اين صفحه وجود دارد.
www.takbook.com
گزينهي :Delete backup and restore history information for databasesاين گزينه بهصورت پیشفرض فعال است
و تاريخ و اطالعات اين ديتابیس را از ديتابیس MSDBحذف میکند.
گزينهي ،Close existing connectionsبهصورت پیشفرض فعال نیست و اگر آن را فعال کنید ،قبل از حذف
ديتابیس ،اول بررسی میکند که اين ديتابیس در جايی ديگر باز شده و يا در حال استفاده است ،ابتدا آن ارتباط را
میبندد و بعد اقدام به حذف میکند ،سعی کنید اين گزينه را فعال نکنید تا حداقل در زمان حذف مشخص شود که
در جايی ديگر در حال استفاده است.
براي شروع کار به جدول 3-5توجه کنید ،میخواهیم با استفاده از اين جدول عملیات مختلف خود را انجام دهیم و
دادهها را فراخوانی کنیم.
Customer
CustomerID ContactName Address City PostalCode Country
Name
Maria Obere Str.
1 Maria Berlin 12209 Germany
Anders 57
Avda. de la
2 Ana Ana Trujillo Constitució México 05021 Mexico
n 2222
Antonio Mataderos
3 Antonio México 05023 Mexico
Moreno 2312
120
Thomas WA1
4 Thomas Hanover London UK
Hardy 1DP
Sq.
Berguvsväg
5 Christina Christina Luleå S-958 22 Sweden
en 8
براي ايجاد اين جدول از طريق SSMSيک جدول ايجاد کنید و آن را با اسم Customersذخیره کنید و بعد از ايجاد،
اطالعات جدول 3-5را درون آن وارد کنید تا در ادامه بتوانید از آنها استفاده کنید ،اين موضوع را در شکل 3-16
مشاهده میکنید.
www.takbook.com
][ در دستور باال ،ستون Customer Nameو Cityاز جدول Customersانتخاب شده است ،توجه داشته باشید عالمت
را بهتر است زمانی قرار دهید که يک جملهي دو حرفی يا بیشتر داريد ،مثالً در مثال باال اگر cityبود ،نیاز به عالمت
][ نبود ،اما چون Customer Nameاز دو قسمت با فاصله تعريف شده است بايد حتماً عالمت ][ را قرار دهید.
بهمانند شکل 3-18دستور مورد نظر را بنويسید و براي دريافت خروجی بايد کلید F5را فشار دهید ،اين دستور دو
ستون Customer Nameو Cityرا در خروجی نمايش میدهد.
اگر بخواهیم در يک جدول ،تنها اطالعات متمايز شده و نه تکراري را نمايش دهیم بايد از دستور زير استفاده کنیم:
SELECT DISTINCT column1, column2, ...
;FROM table_name
در دستور باال بهمانند قبل بايد نام ستونها را جلوي دستور SELECTبنويسید ،اما تنها بايد بعد از دستور SELECTاز
DISTINCTاستفاده کنید تا اطالعات شبیه به هم را تنها يکبار در خروجی نمايش دهد.
مثال سوم – نمايش اطالعات شهرهاي مشابه
دستورات زير را اجرا کنید:
;SELECT Country FROM Customers
;SELECT DISTINCT Country FROM Customers
خروجی دستورات باال را در شکل 3-20مشاهده میکنید ،دستور اول تمام شهرها را به شما نمايش داده است ،اما در
را نمايش داده است و اين مورد میتواند در نمايش بهتر اطالعات کمک Mexico دستور دوم تنها يکی از شهرهاي
کند.
را بنويسیم و بعد از آن ،نام جدول را بهجاي table_nameبنويسیم ،سپس INSERT INTO در دستور باال ،ابتدا بايد
بايد در پرانتز مورد نظر نام ستونهايی که قرار است اطالعات در آن وارد بشود را بنويسیم.
روش ديگري هم براي ورود اطالعات بهصورت زير وجود دارد:
INSERT INTO table_name
; )VALUES (value1, value2, value3, ...
در دستور باال ،ورود اطالعات به ترتیب ستونهاي موجود انجام میشود.
مثال اول – ورود اطالعات با استفاده از نام ستون
در دستور باال ،ابتدا نام ستونها ذکر شده است و بعد از آن ،اطالعاتی که قرار است وارد جدول شود را در قسمت
VALUESوارد میکنیم.
به اين نکته توجه کنید که ستونهايی که دوقسمتی هستند ،حتماً بايد بین دو تا عالمت " " قرار بگیرند تا در خروجی
با خطا مواجه نشويد.
را براي نمايش اطالعات جدول وارد کرديم که در شکل 21-3 ;SELECT * FROM Customers در آخر ،دستور
خروجی نهايی را مشاهده میکنید که يک سطر جديد به جدول اضافه شده است.
اگر دو خط آخر دستور باال را وارد نکنید ،خروجی مانند شکل 3-24خواهد شد.
کارهاي زيادي میتوان با دستور UPDATEانجام داد ،مثالً میتوانید با دستور زير نام ContactNameمربوط به
شهرهاي Mexicoرا با استفاده از شرط تغییر دهید:
UPDATE Customers
'SET "Contact Name"='Juan
;'WHERE Country='Mexico
نکتهي مهم :اگر چنانچه شرط WHEREرا در دستور UPDATEقرار ندهید ،تمام ستونهاي انتخابشده آپديت خواهد
شد؛ در دستور زير تمام ContactNameها به Juanتغییر خواهند کرد.
UPDATE Customers
;'SET ContactName='Juan
DELETE 4-5-1-3بررسی دستور
اين دستور همانطور که از نامش پیداست ،براي حذف اطالعات جدولها کاربرد دارد که شکل کلی آن بهصورت زير
است:
;DELETE FROM table_name WHERE condition
در دستور باال بهجاي table_nameبايد نام جدول و بهجاي ،conditionشرط مورد نظر خود را وارد کنید.
مثال اول – حذف اطالعات جدول
;'DELETE FROM Customers WHERE "Customer Name"='Farshid
SELECT * FROM Customers
www.takbook.com
براي حذف اطالعات کامل جدول بايد از دستور زير استفاده کنید:
;DELETE FROM table_name
در دستور باال بايد بهجاي ،table_nameنام جدول خود را وارد کنید.
نکته:
در دستور ' ،WHERE Country='Mexicoکلمهي Mexicoبین نقل قول قرار گرفته است ،اما اگر
به جاي ،Mexicoاز عدد استفاده میکرديد ،ديگر نیاز به نقل قول نبود ،پس به اين نکته توجه
کنید.
توضیحات عملگر
مساوی =
=! نابرابر ،توجه داشته باشید در بعضی از نسخههای SQLاین عالمت شاید بهصورت ><
باشد.
بین یک محدودهی مشخص BETWEEN
در دستور باال با استفاده از ،SELECTنام ستونها را انتخاب میکنیم و در قسمت WHEREبايد شرط خود را با
استفاده از ANDوارد کنید ،منظور از ANDاين است که يک شرط حتماً بايد اين چند مورد که با ANDتعريف
میشود را داشته باشد.
AND مثال اول –
SELECT * FROM Customers
;'WHERE Country='Iran' AND City='Tehran
در دستور باال ،خروجی اطالعات جدول Customersدر خط اول نمايش داده خواهد شد ،اما در خط دوم شرطی
قرار داده که حتماً بايد نام Countryو Cityبه ترتیب برابر Farshidو Tehranباشد ،اگر به شکل 29-3توجه کنید
خروجی بهدرستی نمايشداده شده است.
www.takbook.com
توجه داشته باشید که تمام مثالهاي اين فصل از جدول 3-1برداشته شده است و دقیقاً طبق همان جدول عمل کنید.
در دستور باال ،کشور مورد نظر Germanyدر نظر گرفته شده است ،اما در شرطی که در داخل پرانتز قرار داده شده،
گفته که يکی از شهرها میتواند Berlinو يا Frankfurtباشد که چون شهر Frunkfurtدر جدول وجود داشت به اين
دلیل شرط ،درست و بهمانند شکل 3-32در خروجی نمايش داده شده است.
اين دستور مقاديري را پیدا میکند که به حرف " "aختم میشوند. 'LIKE '%a
اين دستور به مقاديري اشاره دارد که حرف دوم آنها rباشد. 'LIKE '_r%
به مقاديري اشاره دارد که با حرف aشروع شده و داراي حداقل دو حرف است. 'LIKE 'a_%
به مقاديري اشاره دارد که با حرف aشروع شده و حداقل داراي سه کاراکتر هستند. 'LIKE 'a__%
مقاديري را پیدا میکنند که با حرف aشروع شده و با حرف oپايان میيابد. 'LIKE 'a%o
مقاديري را که مقدار دوم آنها 2 ،و مقدار آخر 3 ،باشد. 'LIKE '_2%3
براي اينکه دستور BETWEENرا اجرا کنیم بايد يک ستون جديد به جدول اصلی خود اضافه کنیم؛ براي اين کار طبق
شکل 3-35بر روي جدول مورد نظر خود کلیک راست کنید و قسمت Designرا انتخاب کنید و يک ستون با عنوان
Priceو از نوع intوارد کنید.
INSERT در ادامه بايد بهمانند شکل 3-36اطالعات ستون Priceرا وارد کنید؛ براي تمرين میتوانید از طريق دستور
اين کار را انجام دهید.
www.takbook.com
در دستور باال ،قیمت بین 10تا 20در خروجی نمايش داده خواهد شد که اين موضوع را در شکل 3-37مشاهده
میکنید:
مثال دوم
SELECT * FROM Customers
;'WHERE "Contact Name" BETWEEN 'A' and 'Z
در دستور باال و در ستون ،Contact Nameاسامی که با حروف Aتا Zشروع شوند در خروجی چاپ خواهد شد.
مثال سوم – منظم کردن خروجی
SELECT * FROM Customers
'WHERE "Contact Name" BETWEEN 'Alfred' and 'Juan
;"ORDER BY "Contact Name
در دستور باال ،يک دستور جديد اضافه شده است با نام ORDER BYکه اين دستور براي منظم کردن ستون خروجی
است که اين موضوع را در شکل 3-38مشاهده میکنید.
www.takbook.com
)SELECT column_name(s
FROM table_name
;)WHERE column_name IN (SELECT STATEMENT
نباشند ،چون پیش از Tehran و London در مثال باال ،ستونهايی در خروجی چاپ خواهد شد که داراي شهرهاي
دستور ،INدستور NOTبه کار برده شده است و به اين دلیل شرط منفی خواهد شد.
در دستور باال با استفاده از TOPتعداد خروجی کار مشخص شده است ،يعنی اگر سطر مورد نظر کشورش
Germanyباشد در خروجی چاپ خواهد شد ،اما تنها 3سطر آن چاپ خواهد شد و اگر بیشتر باشد ،چاپ نخواهد
شد که در شکل 3-43اين موضوع را مشاهده میکنید.
اين دستور کمترين و بیشترين مقدار در يک ستون را برمیگرداند که در زير شکل کلی آن را مشاهده میکنید:
MIN
)SELECT MIN(column_name
FROM table_name
;WHERE condition
MAX
)SELECT MAX(column_name
FROM table_name
;WHERE condition
MIN & MAX مثال يک – دستور
www.takbook.com
در دستور باال ،دو عدد MINو MAXاز ستون Priceدر خروجی چاپ خواهد شد که اين موضوع را در شکل -44
3مشاهده میکنید.
نکتهي مهم:
توجه کنید که ايجاد Queryبايد در مسیر درست انجام شود ،اگر بهمانند شکل 3-45بر روي SQLSERVERکلیک
را انتخاب کنید و بعد دستورات باال را در آن اجرا کنید با خطاي شکل 3-64 New Query راست کنید و گزينهي
مواجه خواهید شد که دلیل آن نیز اين است که جدول Customersدر زيرمجموعهي ديگري قرار دارد و حتماً بايد بر
روي ديتابیس مورد نظر اين دستور را اجرا کنید.
)SELECT AVG(column_name
FROM table_name
;WHERE condition
)SELECT SUM(column_name
FROM table_name
;WHERE condition
)SELECT COUNT(PRICE
;FROM Customers
در خط اول ،کل جدول Customersدر خروجی چاپ خواهد شد و در خط بعدي با دستور ،COUNTتعداد موجودي
در ستون Priceمشخص خواهد شد که در شکل 3-47اين موضوع را مشاهده میکنید؛ در قسمت دوم عدد 8نوشته
شده است که تعداد موجودي در ستون Priceاست.
www.takbook.com
Wildcards 3-1-5-13بررسی
استفاده میشود و براي جستجو و جايگزينی در يک رسته کاربرد دارند ،در زير LIKE اين دستور در کنار دستور
کاراکترهايی که میتوان بهعنوان Wildcardدر دستورات استفاده کرد.
را نشان میدهد ،اما کلمهي هر کاراکتر را در داخل براکت نشان hotوhat کلمات h[oa]t دستور
][
میدهد. hitرا نمايش نمیدهد.
هر کاراکتري که در پرانتز نیست را
هر کلمهاي که در کروشه نباشد را نشان h[^oa]t دستور
^ نشان میدهد.
میدهد ،مانند . hit
مثال اول
SELECT * FROM Customers
;'WHERE City LIKE 'fr%
در دستور باال ،شهرهايی که با نام frشروع میشوند در خروجی چاپ خواهند شد که در شکل 3-50مشاهده میکنید.
www.takbook.com
مثال دوم
SELECT * FROM Customers
;'WHERE City LIKE '%hr%
دارند در خروجی چاپ خواهد شد که در شکل 3-51اين موضوع را hr دستور باال ،شهرهايی که بین کلماتشان
مشاهده میکنید:
مثال سوم
SELECT * FROM Customers
;'WHERE City LIKE '[bspt]%
در دستور باال ،شهرهايی که با يکی از حروف bsptشروع شوند در خروجی چاپ خواهد شد که شکل 3-52نمايانگر
اين موضوع است.
مثال چهارم
SELECT * FROM Customers
;'WHERE City LIKE '[a-f]%
www.takbook.com
مثال اول
SELECT CustomerID AS ID, "Customer Name" AS Customer
;FROM Customers
در دستور باال ،دو ستون CustomerIDو Customer Nameبا دو نام جديد در خروجی چاپ خواهند شد که در شکل
54-3اين موضوع را مشاهده میکنید.
مثال دوم
"SELECT "Customer Name" AS Customer, "Contact Name" AS "Contact Person
;FROM Customers
www.takbook.com
مثال سوم
SELECT "Customer Name", Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS
Address
;FROM Customers
در دستور باال ،دو ستون در خروجی چاپ خواهد شد که در ستون ،Addressچند گزينه چاپ خواهد شد که شامل
Address, PostalCode, Cityو کشور خواهد بود که در شکل 3-56اين موضوع را مشاهده میکنید.
در دستور باال ،در خط اول يک خروجی کلی از اطالعات جدول Customersرا خواهیم داشت و در ادامه با استفاده
از دستور ،COUNTتعداد مشتريان هر کشور شمارش میشود و در آخر با دستور ،GROUP BYتعداد مشتريان به
همراه کشورهاي آنها چاپ شده است؛ در شکل 3-57اين موضوع را مشاهده میکنید.
مثال دوم
SELECT * FROM Customers
قرار داده شده به اين معنی است که تعداد مشتريان هر کشور HAVING در مثال باال ،عدد صفري که مقابل دستور
اگر بیشتر از صفر بود ،در خروجی چاپ کند .شما می توانید اين عدد را تغییر دهید و يا اينکه عملگر آن را عوض
کنید ،در شکل 3-59اين مثال را مشاهده میکنید.
شکل 3-60طراحی
بهمانند شکل 3-61بر روي ستونی که میخواهید بهعنوان Primary Keyانتخاب شود ،کلیک راست کنید و گزينهي
Set Primary Keyرا انتخاب کنید.
در بعد از انتخاب Primary Keyدر شکل 3-62يک کلید در کنار ستون مورد نظر قرار خواهد گرفت و در قسمت
،Allow Nullsتیک آن برداشته خواهد شد؛ به دلیل اينکه اين ستون اصالً نبايد خالی باشد ،مانند شمارهي دانشجويی
در دانشگاهها.
اگر بخواهیم دستور باال را تغییر دهیم ،میتوانیم از دستور زير استفاده کنیم:
( CREATE TABLE Persons
ID int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
; )
در دستور باال Primary Key ،در کنار IDقرار گرفته شده است.
SQL 3-1-5-18بررسی JOINدر
يکی از مهمترين دستوراتی که در SQLمیتوان نام برد ،دستور JOINاست که اين دستور اساساً براي ترکیب و بازيابی
دادهها از دو يا چند جدول مورد استفاده قرار میگیرد .در يک پايگاهداده ،رابطهاي در دنیاي واقعی ،دادهها در تعداد
SQL زيادي جداول ساختار میيابند و به اين دلیل ،دائماً بايد به اين جداول متصل شد .چهار نوع اساسی عضويت در
Serverوجود دارد Self ،Outer ،Inner :و .Cross joinبراي اينکه يک مرور سريع در مورد همهي اين پیوستنها داشته
باشید در زير آنها را بررسی میکنیم:
در شکل 3-64يک شماي کلی از نحوهي ارتباط دستورات JOINرا مشاهده میکنید که هر کدام توضیح مخصوص
به خود را دارند.
www.takbook.com
توانايی ترکیب نتايجِ حاصل از سطرهاي مرتبط از چندين جدول ،قسمت مهمی در طراحی سیستم پايگاه دادهاي
انجام میشود .اين ماهیت سیستمهاي پايگاهدادهاي رابطهاي join اين امر با دستور SQL Server رابطهاي است .در
سنتی است که برخی از جدولها حاوي اطالعات مربوط به جداول ديگر با مقدار کلیدي مشترک هستند .با استفاده
از پیوستن ،SQLمیتوانید بهراحتی از طريق چندين جدول با اين کلیدهاي مشترک ،پرسوجوهايی را در مجموعه
دادههاي مرتبط انجام دهید.
در ادامه نوعهاي مختلف SQL JOINرا که در شکل 3-43مشخص شده است را با هم بررسی میکنیم:
SQL inner join -1
اين دستور يکی از سادهترين دستورات JOINاست که نتیجهي خروجی آن ،سطري از هر دو جدول است
که در آن شرايط پیوستگی يکی باشد؛ در شکل 3-65شماي کلی اين دستور را مشاهده میکنید.
)SELECT column_name(s
FROM table1
LEFT JOIN table2
;ON table1.column_name = table2.column_name
اين دستور ،تمام اطالعات را از جدول سمت چپ ،يعنی جدول اول و اطالعات منطبق را از جدول دوم در
خروجی چاپ میکند و اگر هم عدم تطابق ايجاد شود ،نتیجهي صفر را از جدول سمت راست برمیگرداند؛
در شکل 3-68اين موضوع مشخص شده است.
www.takbook.com
با استفاده از دستور زير میتوانیم بین دو جدول ارتباط داخلی برقرار کنیم:
در خط اول با دستور ،SELECTستونهاي خروجی را که قرار است چاپ شوند را مشخص میکنیم که ستون
Customer Nameاز جدول Customersو ستون OrderIDاز جدول Ordersچاپ خواهد شد.
ارتباط Orders انتخاب میشود و در خط سوم مشخص میکنیم که بايد با جدول Customers در خط دوم جدول
اين کار را ON برقرار کند؛ در خط چهارم بايد شرط برقراري ارتباط را مشخص کنیم که با دستور INNER JOIN
انجام میدهیم و بعد از آن CustomerID ،از جدول Customersرا با ستون CustomerIDاز جدول Ordersرا مساوي
قرار میدهیم؛ اين بدان معنا است که اگر در اين دو ستون ،عبارت مساوي هم قرار داشته باشد ،آن سطر در خروجی
چاپ خواهد شد؛ در خط آخر نیز با دستور ،ORDER BYستون Customer Nameرا منظم میکنیم تا در خروج ،نماي
بهتري داشته باشد.
اگر به شکل 3-70توجه کنید ،مشاهده خواهید کرد سه سطر در خروجی اپ شده است و آن هم به دلیل برابر بودن
اعداد در ستونهاي Customer IDدر هر دو جدول است.
در دستور باال و در خط اول ،سه ستون در خروجی چاپ خواهد شد که دستور ،ASيک ستون جديد در خروجی
و ديگري Customers A نمايش میدهد؛ در قسمت ،FROMيک جدول به دو قسمت تبديل شده است که يکی
Customers Bاست؛ در قسمت WHEREشرطی قرار داديم و گفتیم که در صورتی که A.CustomerIDبرابر نباشد با
يکی باشد شرط درست است و بايد در خروجی چاپ B و همچنین شهر جدول Aبا شهر جدول B.CustomerID
در دستور باال ،در خط اول دستور SELECTستون Customer Nameرا از جدول Customersو ستون OrderIDرا از
انتخاب و در خط سوم با استفاده از Customers در خروجی چاپ خواهد کرد؛ در خط دوم جدول Orders جدول
دستور LEFT JOINمیگويیم که ستون Customers.CustomerIDبرابر با Orders.CustomerIDباشد؛ اين دستور تمام
Orders را در صورت تطبیق در خروجی چاپ خواهد کرد و اگر در جدول دوم ،يعنی Customers اطالعات جدول
مقداري وجود نداشته باشد ،کلمهي nullرا برمیگرداند.
همان طور که در شکل 3-74مشاهده میکنید ،خروجی به درستی نمايش داده شده است.
www.takbook.com
براي اينکه از اين جدول خروجی تهیه کنید ،میتوانید بهمانند شکل 3-78عمل کنید؛ همان طور که مشاهده میکنید
با وارد کردن نام OR1در جلوي دستور ،FROMلیست جدول ORDERSدر خروجی چاپ شده است؛ يکی از مزاياي
استفاده از دستور ،SYNONYMخالصه کردن و مشخص کردن اسم مشخص براي جداول و کوتاه کردن دستورات
است.
خوب اگر بخواهید از طريق ،GUIيک SYNONYMايجاد کنید بايد بهصورت شکل 3-79بر روي Synonymsکلیک
راست کنید و گزينهي New Synonymsرا انتخاب کنید.
Product همان طور که در شکل 3-81مشاهده میکنید Synonyms ،مورد نظر ايجاد شده و خروجی آن نیز جدول
است.
اگر بخواهید بعد از ايجاد synonymsکد آن را به دست آوريد ،میتوانید بهمانند شکل 3-82بر روي synonymsمورد
نظر کلیک راست کنید و از قسمت Scriptو بعد Create to ،گزينهي New Query Editorرا انتخاب کنید تا کد مورد
synonyms نظر نمايش داده شود که البته بعد از اجرا به شما خطا خواهد داد که
از قبل وجود دارد.
www.takbook.com
را در خروجی SELECT ها يک سري از جداول هستند که میتوانند بهصورت دقیقتر و بهتر نتیجهي دستورView
شامل جداول مجازي هستند و ربطی به جدول اصلی در VIEW البته به اين موضوع توجه کنید که،نمايش دهند
يعنی تنها براي نمايش خروجی دستور،ديتابیس ندارند و به اين دلیل هیچ چیزي را در خودشان ذخیره نمیکنند
. تأثیري روي جداول اصلی ندارند، است و اگر هم حذف شوندSELECT
را بر روي آنها پیادهسازي کنیم؛ براي اين کار دستور زير را اجراView براي شروع کار نیاز به جداولی داريم تا بتوانیم
:کنید
ايجاد میشود که در شکل 3-83اين Employees, Products, Sales با اجراي دستورات باال ،سه جدول با نامهاي
موضوع را مشاهده میکنید.
استفاده کنیم ،يا اينکه از T-SQL از دو روش میتوانیم استفاده کنیم؛ میتوانیم از دستورات View براي ايجاد
Managemennt Studioاستفاده کنیم.
براي ايجاد نماي جديد میتوانیم از دستورات T-SQLزير استفاده کنیم:
;USE B22
GO
CREATE VIEW ViewEmployeesWithSales
AS
SELECT DISTINCT
*Employees.
FROM Employees
;JOIN Sales ON Employees.EmployeeID = Sales.EmployeeID
GO
جدول Employess اين يک نماي ( )viewساده با يک عبارت ساده SELECTاست که لیستی از کارمندان فروش را در
برمیگرداند؛ در حقیقت ،شما همیشه میتوانید قبل از ايجاد نمايش ،تنها با اجراي قسمت ،SELECT Sales و
عبارت ،CREATE VIEW SQLعبارت جستجو را آزمايش کنید و بهتر است ببینید آيا پرسشی چیزي را برمیگرداند؛
براي اينکه يک قسمت از دستور در خروجی اجرا کنید بايد بهمانند شکل 3-84دستور مورد نظر را انتخاب کنید و
بعد ،کلیک راست و گزينهي Executeرا انتخاب کنید که نتیجهي آن مشخص خواهد شد؛ از آنجايی که جداول مقدار
ندارند ،يک جدول خالی را در شکل 3-84مشاهده میکنید.
www.takbook.com
: میتوانیم از دستورات زير استفاده کنیم،براي اينکه مقداري را در جداول وارد کنیم
USE B22;
GO
INSERT INTO Employees VALUES (1,'Ken', NULL, 'Farshid', 'IT Manager', '1/1/2016',
2080, 45000);
INSERT INTO Employees VALUES (2,'Janice', NULL, 'AZADEH', 'Sales Representative',
'12/11/2016', 2080, 45000);
نام ديتابیس خود،B22 يعنی بهجاي،در خط اول دستور بايد نام ديتابیسی که جداول در آن قرار دارند را وارد کنید
.را بنويسید
راExecute انتخاب کنید و دستور3-85 را بهمانند شکلSELECT در ادامه براي تست موضوع بايد دوباره قسمت
براي جلوگیري از نمايش سوابق تکراري در خروجی DISTINCT اجرا کنید؛ توجه داشته باشید در دستورات از
.استفاده کرديم
www.takbook.com
بعد از اينکه Viewرا ايجاد کرديد ،میتوانید بهمانند شکل 3-104از سمت چپ وارد قسمت Viewsشويد و نماي
مورد نظر که ايجاد کرديد را مشاهده کنید؛ با دستور زير میتوانید خروجی اين Viewرا مشاهده کنید:
;]SELECT * FROM [dbo].[ViewEmployeesWithSales
توجه داشته باشید به جاي اينکه در دستور باال ،نام Viewرا بنويسید ،میتوانید Viewمورد نظر را بکشید و در دستور
رها کنید تا خودش نوشته شود.
در ادامه براي اينکه ارتباط بین جداول را در Viewمورد نظر بهصورت گرافیکی مشاهده کنید بايد بهمانند شکل -105
3بر روي Viewمورد نظر کلیک راست کنید و گزينهي Designرا انتخاب کنید؛ توجه داشته باشید که شما میتوانستید
بهجاي وارد کردن دستورات از همین قسمت با انتخاب ،New Viewنماي مورد نظر خود را انتخاب کنید.
www.takbook.com
همان طور که در شکل 3-106مشاهده میکنید ،اين صفحه از چهار قسمت تشکیل شده است؛ در قسمت شمارهي
نماي کلی ،دو جدول را مشاهده میکنید؛ در قسمت شمارهي دو طبق ستونهايی که در دستور قبلی وارد کرديم،
ستونهاي مورد نظر تیک خورده شدند؛ در قسمت سوم دستور خروجی SELECTرا که قبالً وارد کرديم را مشاهده
میکنید؛ کالً در قسمت شمارهي يک ،اگر هر يک از ستونها را انتخاب کنید در قسمت شمارهي سه دستوارت تغییر
خواهد کرد؛ در قسمت شمارهي چهار نیز خروجی دستور شمارهي سوم را مشاهده میکنید ،البته بايد دستور شمارهي
سوم را انتخاب و کلیک راست کنید و گزينهي Executeرا انتخاب کنید؛ توجه داشته باشید در قسمت شمارهي يک،
= dbo.Employees.EmployeeID پیوند بین جدول اول و دوم ايجاد شده است که آن نیز به دلیل دستور
قرار دهید شکل آن در >< که در قسمت شمارهي سوم وارد کرديد ،است؛ به جاي = اگر dbo.Sales.EmployeeID
بعد از ورود ،شکل 3 -108ظاهر خواهد شد که بايد انتخاب کنید که از چه جداولی میخواهید خروجی بگیريد؛ در
اين قسمت ،هر سه جدول را انتخاب میکنیم ،البته میتوانیم از تب Viewنیز استفاده کنیم.
در شکل 3 - 109و در قسمت اول میتوانید ستونهايی که قرار است در خروجی چاپ شود را انتخاب کنید؛ به اين
نکته توجه کنید که انتخاب بايد به ترتیب باشد ،چون هر انتخابی که در جداول انجام میدهید ،در قسمت دوم رديف
آن مشخص میشود و در قسمت سوم نیز دستورات آن بهصورت اتوماتیک نوشته خواهد شد؛ کالً Viewهمان دستور
SELECTاست که قبالً با هم روي آن کار کرديم.
www.takbook.com
براي اينکه بتوانیم شرط در اين دستورات قرار دهیم ،میتوانیم بهمانند شکل 3 – 110در قسمت دوم و در ستون
EmployeeID فیلتر ،شرط خود را وارد کنیم که در اينجا >2وارد شده است ،يعنی اينکه در خروجی کار سطرهايی که
آنها بزرگتر از 2باشد در خروجی چاپ خواهد شد؛ توجه کنید زمانی که در قسمت فیلتر ،شرط مورد نظر خود را
وارد میکنید ،بعد از خروج از آن ،قسمت دستور آن در قسمت شمارهي سوم نوشته میشود که در شکل 3- 110
مشخص شده است.
براي اينکه دستوري که ايجاد شده را اجرا کنیم بايد آن را اجرا کنیم و کلیک راست کنیم و گزينهي Execute SQLرا
انتخاب کنیم تا در قسمت چهارم ،خروجی مشخص شود که همان طور که گفتیم خروجی براي EmployeeIDهايی
که بزرگتر از دو باشد ،مشخص شده است.
در ستونهاي Sortنیز میتوانید مشخص کنید که خروجی به چه صورت تنظیم شود.
سرويس SQL Server 2019 Configuration بايد بهمانند شکل 3 - 113 FILESTREAM براي فعالسازي قابلیت
Managerرا اجرا کنید.
www.takbook.com
SQL Server در شکل 3-114از سمت چپ بر روي SQL Server Servicesکلیک کنید و در صفحهي بازشده بر روي
کلیک راست کنید و گزينهي Propertiesرا انتخاب کنید.
در شکل 3-115وارد تب FILESTREAMشويد و تیک هر سه گزينه را انتخاب کنید؛ گزينهي اول براي دسترسی از
طريق دستورات T-SQLاست؛ گزينهي دوم براي خواندن و نوشتن از ورودي و خروجی پروندهها است و براي اين
FILESTREAM کار بايد يک نام براي به اشتراکگذاري آن وارد کنید و گزينهي آخر ،اجازهي دسترسی از راه دور به
را میدهد.
براي اينکه FileStreamرا در SQLفعال کنیم بايد تغییري در تنظیمات آن انجام دهیم؛ براي اين کار وارد منوي فايل
بهمانند شکل 3-116شويد و از قسمت Newبر روي Queryکلیک کنید.
www.takbook.com
براي اينکه متوجه شويم که کار به درستی انجام شده است يا نه بايد بهمانند شکل 3-119بر روي سرور SQLکلیک
راست کنید و وارد قسمت Propertiesشويد.
را مشاهده FILESTREAM Access Level در شکل 3-120از سمت چپ وارد قسمت Advancedشويد و قسمت
کنید که بر روي FULL access enabledقرار گرفته است ،البته شما میتوانستید دستورات قبلی را وارد نکنید و مستقیم
در اين قسمت ،اين گزينه را انتخاب کنید.
بهمانند شکل ،3-123يک نام براي ديتابیس خود وارد کنید که در اينجا FILESTREAM-DB ،وارد شده است ،بعد
از اين کار بر روي ADDکیک کنید تا ديتابیس مورد نظر ايجاد شود.
بعد از ايجاد ديتابیس ،بهمانند شکل 3-124بر روي آن کلیک راست کنید و گزينهي Propertiesرا انتخاب کنید.
www.takbook.com
در شکل 3-125بايد وارد FileGroupشويد و در قسمت FILESTREAMبر روي Addکلیک کنید و نام گروه مورد
نظر خود را براي تخصیص به FILESTREAMوارد کنید.
در ادامهي کار بهمانند شکل 3-127وارد قسمت Filesشويد و بر روي Addکلیک کنید؛ در ستون Logical Nameيک
نام بهدلخواه وارد کنید؛ در ستون File Typeنوع فايل را FILESTREM Dataدر نظر بگیريد و Filegroupرا نیز انتخاب
نیز بايد مسیري را انتخاب کنید که از Path کنید ،البته بهصورت اتوماتیک خودش انتخاب خواهد شد؛ در قسمت
ظرفیت خوبی برخوردار باشد؛ در آخر بر روي OKکلیک کنید تا تنظیمات ذخیره شود.
www.takbook.com
بعد از انجام تنظیمات ،اگر بهمانند شکل 3-128وارد آدرسی مربوط به Streamشويد ،مشاهده خواهید کرد که فايل
STREMدر اين مسیر ايجاد شده است.
]Use [FILESTREAM-DB
Go
( ]CREATE TABLE [FileStreamTable_1
[FileId] UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE,
[FileName] VARCHAR (25),
;)[File] VARBINARY (MAX) FILESTREAM
GO
بعد از اجراي دستور در مسیر مشخصشده که در شکل 3-129مشخص شده است ،يک پوشه با مقدار GUIDايجاد
شده است.
www.takbook.com
جديد مشاهده میکنید که مربوط به ستون GUID اگر وارد اين پوشه در شکل 3-130شويد ،يک پوشهي ديگر با
FILESTREAMدر جدول جديد است؛ اين موضوع را در شکل 62مشاهده میکنید.
براي اينکه بیشتر با FILESTREAMکار کنیم ،میخواهیم يک فايل موسیقی را درون ديتابیس مورد نظر ذخیره کنیم؛
اولین کاري که بايد انجام دهید اين است که فايل موسیقی را در مسیر C:\Musicذخیره کنیم،
بعد از آن بايد از دستور زير استفاده کنید؛ ،در اين دستور ،يک جدول جديد با نام FileStreamTable_2ايجاد میشود
و در ادامه با دستور ،DECLAREمتغیر FILEبا نوع varbinaryصدا زنده میشود ،فايل MP3در آن قرار میگیرد.
]Use [FILESTREAM-DB
Go
( ]CREATE TABLE [FileStreamTable_2
[FileId] UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE,
[FileName] VARCHAR (25),
;)[File] VARBINARY (MAX) FILESTREAM
GO
;)DECLARE @File varbinary(MAX
SELECT
(@File = CAST
)bulkcolumn as varbinary(max
)
FROM
;OPENROWSET(BULK 'c:\music\a.mp3', SINGLE_BLOB) as MyData
توجه داشته باشید ،اگر فايل موسیقی در شکل 3-131را در نرمافزار مورد نظر قرار دهید به راحتی اجرا خواهد شد؛
اين موضوع را در شکل 3-132مشاهده میکنید.
اگر وارد SQLشويد و بر روي جدول مورد نظر کلیک راست کنید و گزينهي Select Top 1000 Rowsرا انتخاب کنید،
خروجی جدول مورد نظر را نشان میدهد که در شکل 3-133مشخص شده است.
بعد از دانلود ،آن را بر روي سیستم خود نصب کنید؛ توجه داشته باشید براي نصب کامل اين نرمافزار حداقل نیاز به
50گیگابیت فضاي هارد داريد که واقعاً فضاي زيادي را اشغال میکند.
متصل SQL Server به Visual Studio بعد از اجراي نرمافزار ،اولین کاري که انجام میدهیم اين است که از طريق
SQL شويد و از قسمت Tools خود را اجرا کنیم؛ براي اين کار بهمانند شکل 3-134وارد منوي Query شويم و
،Serverگزينهي New Queryرا انتخاب کنید.
در شکل 3-135بايد در قسمت Server nameنام سرور SQLرا وارد کنید و بعد از آن ،مشخص کنید که نوع احراز
هويت به چه صورت باشد ،اگر با همان کاربري که در حال کار با visual studioهستید ،میخواهید با SQLارتباط
برقرار کنید ،میتوانید Windows Authenticationرا انتخاب کنید و يا اگر میخواهید با کاربران موجود در SQLوارد
آن شويد بايد SQL Authenticationرا انتخاب کنید؛ در قسمت آخر نیز بايد نام ديتابیس خود را انتخاب کنید و بر
روي Connectکلیک کنید.
در دستورات باال ،در خط اول با دستور ،CREATE DATABASEيک ديتابیس يا نام B22ايجاد کرديم و در ادامه،
حتماً دستور GOرا قرار دهید تا بعد از ايجاد ديتابیس ،B22يک refreshصورت بگیرد؛ در ادامه و در خط سوم بايد
مشخص کنیم که از چه ديتابیسی می خواهیم استفاده کنیم تا جدول را داخل آن ايجاد کنیم که اين کار را با دستور
USE B22انجام میدهیم.
ايجاد میکنیم و B22 در ديتابیس B22T در خط چهارم با استفاده از دستور ،CREATE TABLEيک جدول با نام
است و نبايد نوعPrimery Key از IDNumber اطالعات آن را نیز در ادامه مشخص میکنیم؛ توجه داشته باشید که
خالی باشد.
www.takbook.com
در کد باال و در خط پنجم ،دستور identityحذف شده است و حتماً بايد در ورودي به IDNumberيک مقدار بدهید
تا با خطا مواجه نشويد،؛دلیل آن نیز اين است که اين گزينه از نوع Primary Keyاست و نبايد خالی باشد؛ به اين دلیل
در خط دوازده و در داخل پرانتز IDNumber ،تعريف و مقدار آن نیز داده شده است.
را چاپ B22T همان طور که در شکل 3-138مشاهده میکنید ،دستورات به درستی اجرا شده و خروجی جدول،
استفاده شده IDNumber کرده است؛ توجه داشته باشید که اين خروجی مربوط به کد دومی است که داخل آن از
است.
بعد از باز شدن پنجره در شکل ،3-140نام سرور SQLرا وارد و بر روي Connectکلیک کنید.
همان طور که در شکل 3-141مشاهده میکنید به SQLمورد نظر متصل شديم و براي اينکه بتوانیم جدول مورد نظر
خود را ايجاد کنیم ،میتوانیم بر روي Tablesکلیک راست کنیم و گزينهي Add New Tableرا انتخاب کنیم.
www.takbook.com
همان طور که در شکل 3-142مشاهده میکنید به راحتی میتوانید اطالعات مورد نظر جدول خود را وارد کنید و
همزمان که اين کار را انجام میدهید در زير شکل Query ،3-142آن نیز نوشته میشود؛ براي تايید اطالعات بايد بر
روي Updateکلیک کنید.
بعد از کلیک بر روي ،Updateشکل 3-143ظاهر میشود که بايد بر روي Update Databaseکلیک کنید تا اطالعات
به سرور SQLارسال شود و در آخر پیغام تأيید را براي شما ارسال میکند.
www.takbook.com
همان طور که در شکل 3-144مشاهده میکنید ،جدول مورد نظر ايجاد شده است و براي اينکه اطالعات خود را
وارد کنید بايد بر روي جدول کلیک راست کنید و گزينهي Show Table Dataرا انتخاب کنید.
همانطور که در شکل 3-145مشاهده میکنید ،اطالعات را میتوانید وارد ستونهاي جدول کنید.
در شکل 3-147وارد Data Sourcesشويد و بر روي آيکون مورد نظر کلیک کنید.
در شکل 3-151بايد نام سرور را وارد و ديتابیس مورد نظر را انتخاب کنید.
در شکل 3-153همهي ستونهاي جدول مورد نظر را بکشید و در فرم رها کنید.
کلیک و اطالعات را وارد و در آخر بر + در شکل 3-154براي وارد کردن اطالعات در جدول مورد نظر بر روي
روي آيکون Saveکلیک کنید.
شما حتماً با فايلهاي اکسل کار کرديد و کارهاي روزمرهي خود را در آن انجام میدهید ،مانند :اطالعات حسابداري،
ورود و خروج به شرکت و ...که اين نرمافزار را میتوان يکی از نرمافزارهاي پرکاربرد در سطح جهان دانست.
اگر شما يک فايل اکسلی داشته باشید و بخواهید آن را وارد جداول SQLکنید ،بايد چه کاري انجام دهید؛ آيا اين کار
شدنی است؟
بله ،اين کار توسط SQLشدنی است و به راحتی میتوانید فايلهاي اکسل را وارد جداول و ديتابیس SQLکنید؛ براي
اين کار يک فايل اکسل را در شکل 3-155مشاهده میکنید که داراي 8ستون و چندين سطر است که میخواهیم آن
را وارد SQL Serverکنیم.
در ادامهي کار بهمانند شکل 3-156وارد SQL Serverشويد و بر روي ديتابیس مورد نظر خود که قرار است فايل
اکسل را وارد آن کنید ،کلیک راست کنید و از قسمت ،Tasksگزينهي Import Dataرا انتخاب کنید.
در شکل 3-157با خطاي شکل 3-159روبرو میشويد که براي حل آن بايد از لینک Next بعد از کلیک بر روي
را دانلود و نصب کنید تا اين خطا برطرف Microsoft Access Database Engine 2010 Redistributable زير ،نرمافزار
شود.
https://www.microsoft.com/en-us/download/details.aspx?id=13255
Destinationگزينهي SQL Server بعد از نصب ،دوباره مراحل باال را اجرا کنید و بهمانند شکل 3-160در قسمت
Native Client 11.0را انتخاب کنید؛ در قسمت ،Server nameنام سرور SQLخود را وارد و در قسمت Databaseبايد
ديتابیسی که قرار است اطالعات اکسل در آن وارد شود را انتخاب و بر روي Nextکلیک کنید.
www.takbook.com
همان طور که در شکل 3-162مشاهده میکنید Sheet ،مورد نظر در اکسل پیدا شده است و شما میتوانید با کلیک
بر روي دکمهي ،Edit Mappingsستونهاي آن را ويرايش کنید و همچنین براي نمايش اطالعات بر روي دکمهي
Previewکلیک کنید.
www.takbook.com
در شکل 3-163گزينهي اول را انتخاب کنید و اگر میخواهید بر روي اطالعات ،رمز عبور قرار دهید بايد گزينهي
دوم را انتخاب کنید و در صفحهي آخر بر روي Finishکلیک کنید تا کار انتقال انجام شود.
همان طور که در شکل 3-164مشاهده میکنید ،عملیات انتقال با موفقیت انجام شده است.
www.takbook.com
ايجاد شده است و اگر از آن DB1 همان طور که در شکل 3-165مشاهده میکنید ،جدول مورد نظر در ديتابیس
خروجی بگیريد ،تمام اطالعات آن را مشاهده خواهید کرد.
: يک مثال را با هم بررسی میکنیم؛ براي شروع دستورات زير را اجرا کنید،براي اينکه اين دستور را تست بگیريم
CREATE TABLE Product
(ProductID INT, ProductName VARCHAR(100) )
GO
ايجاد کنیم و اطالعات را در آن قرار دهیم؛ براي اين موضوع ازProcedure حال میخواهیم يک،بعد از ايجاد جدول
:دستور زير استفاده کنید
CREATE PROCEDURE GetProductDesc
AS
BEGIN
SET NOCOUNT ON
END
در دستور باال ،يک Procedureبا نام GetProductDescايجاد میکنیم و در ادامهي دستورات با استفاده از INNER
،JOINدو جدول را به هم متصل میکنیم که اطالعات خروجی در Procedureمورد نظر ذخیره میشود.
بعد از ايجاد Procedureبايد آن را با دستور زير فراخوانی کنیم:
EXEC GetProductDesc
نکته:
به اين نکته بايد توجه کنید که حتی با بستن پنجره Queryو بستن SQL Management Studioباز
هم Procedureمورد نظر قابل استفاده است.
SELECT
product_name,
list_price
FROM
production.products
ORDER BY
;list_price
میتوانید يک stored procedureايجاد کنید که با استفاده از دستور CREATE PROCEDUREاين queryرا احاطه کند:
CREATE PROCEDURE uspFindProducts
AS
BEGIN
SELECT
product_name,
list_price
FROM
production.products
ORDER BY
;list_price
;END
در هر صورت ،اين دفعه میتوانیم يک پارامتر به stored procedureاضافه کنیم تا محصوالتی که لیست قیمتهاي آنها
بیشتر از يک قیمت ورودي هستند را بیابد:
ابتدا ،يک پارامتر به نام @min_list_priceبه stored procedureبه نام uspFindProductsاضافه کرديم؛ هر پارامتر بايد
با عالمت @ آغاز شود .کلیدواژههاي ،AS DECIMALنوع دادهي پارامتر @min_list_priceرا مشخص میکنند؛
پارامترها بايد با آکوالدهاي باز و بسته احاطه شوند.
براي فیلتر محصوالتی که لیست SELECT سپس از پارامتر @min_list_priceدر دستور ،WHEREدرون دستور
قیمتهاي آنها بیشتر يا برابر با @min_list_priceهستند ،استفاده کرديم.
اجرای یک stored procedureبا یک پارامتر
براي اجراي stored procedureبايد بهمانند شکل زير يک آرگومان به uspFindProductsارسال کنید:
،stored procedureتمام محصوالتی که لیست قیمتهاي آنها بیشتر يا برابر با 100هستند را بازمیگرداند.
اگر آرگومان را به 200تغییر دهید ،مجموعهنتايج متفاوتی دريافت خواهید کرد:
www.takbook.com
@ وmin_list_price میتوانید آن را با ارسال دو آرگومان (يکی براي، با موفقیت تغییر کردstored procedure وقتی
:@) اجرا کنیدmax_list_price ديگري براي
EXECUTE uspFindProducts 900, 1000;
:تصوير زير خروجی را نشان میدهد
www.takbook.com
را با استفاده از پارامترهاي داراي نام (يعنی uspFindProducts به نام stored procedure کد زير،براي مثال
:@) اجرا میکندmax_list_price @ وmin_list_price
EXECUTE uspFindProducts
@min_list_price = 900,
@max_list_price = 1000;
. با اين تفاوت که حاال کد ما خیلی واضحتر و مرتبتر است، همان نتیجهي قبلی است،stored procedure نتیجهي
ایجاد پارامترهای متنی
. اضافه میکندstored procedure @ را بهعنوان يک پارامتر رشتهحروف بهname کد زير پارامتر
با اين کار stored procedure ،محصوالتی که لیست قیمتهاي آنها در بازهي حداقل و حداکثر لیست قیمتها هستند
را بازمیگرداند و نام محصوالت نیز شامل يک قطعهمتن هستند که ارسال میکنید.
وقتی stored procedureبا موفقیت تغییر کرد ،میتوانید آن را بهمانند شکل زير اجرا کنید:
EXECUTE uspFindProducts
@min_list_price = 900,
@max_list_price = 1000,
;'@name = 'Trek
در اين کد از stored procedureبه نام uspFindProductsبراي يافتن محصوالتی که لیست قیمت آنها در بازهي 900و
1000و نام آنها شامل واژه Trekباشد استفاده کرديم.
وقتی uspFinProductsرا اجرا میکنید ،بايد تمام سه آرگومان متناظر با سه پارامتر آن را نیز ارسال کنید.
به شما اجازه میدهد مقادير پیشفرض براي پارامترها مشخص کنید تا وقتی stored procedureها را SQL Server
در اين ،stored procedureما 0را بهعنوان مقدار پیشفرض براي پارامتر @min_list_priceو 999.999را بهعنوان
مقدار پیشفرض براي پارامتر @max_list_priceقرار دادهايم.
کامپايل میشود ،میتوانید آن را بدون ارسال آرگومان به پارامترهاي @min_list_priceو stored procedure وقتی
@max_list_priceاجرا کنید:
EXECUTE uspFindProducts
;'@name = 'Trek
از 0براي پارامتر @min_list_priceو از 999.999براي query در زمان اجراي stored procedure در اين صورت،
پارامتر @max_list_priceاستفاده میکند.
مسلماً ،همچنین میتوانید آرگومانها را به پارامترهاي اختیاري نیز ارسال کنیم .براي مثال ،کد زير تمام محصوالتی که
لیست قیمتهاي آنها بیشتر يا برابر با 6000و نام آنها شامل واژه Trekاست را بازمیگرداند:
EXECUTE uspFindProducts
@min_list_price = 6000,
;'@name = 'Trek
www.takbook.com
چون، اين کار جالبی نیست. بهعنوان قیمت حداکثر پیشفرض استفاده کرديم999.999 ما از،uspFindProducts در
.در آينده ممکن است محصوالت با قیمتهاي بیشتر از اين مقدار داشته باشید
: بهعنوان مقدار پیشفرض براي پارامترها استNULL استفاده از،يک تکنیک مرسم براي پرهیز از اين امر
:@ استفاده کنیمmax_list_price براي پارامترNULL ما شرط را تغییر داديم تا بتوانیم از مقدار،WHERE در دستور
Haro و نام آنها شامل واژه500 با را براي يافتن محصوالتی که قیمت آنها بزرگتر يا برابرuspFindProducts کد زير
. اجرا میکند،هستند
EXECUTE uspFindProducts
@min_list_price = 500,
@name = 'Haro';
www.takbook.com
در اين بخش ،چگونگی ايجاد و اجراي stored procedureها با يک يا چند پارامتر را آموختید .همچنین چگونگی ايجاد
آموختید. پارامترهاي اختیاري و استفاده از NULLبهعنوان مقادير پیشفرض براي پارامترها را نیز
3-1-11بررسی Triggerدر SQL Server
همان طور که میدانید SQLمعدن Logاست و هر کاري که در ديتابیس و ديگر جاهاي SQLانجام دهید ،يک Log
از آن تولید میشود که شما میتوانید با قابلیت Triggerاين Logها را بهتر مديريت کنید و آن چیزي را که بخواهید
در خروجی نمايش دهید.
در کل Triggerشامل سه نوع مختلف است:
DML -1
که اين نوع Tiggerزمانی اجرا میشود که يکی از سه عملیات ( )Insert, delete, Updateدر جدول مورد
نظر شما انجام شود.
DDL -2
در اين نوع Triggerزمانی اجرا میشود که سه عملیات ( )Create, alter, dropاجرا شود.
Logon -3
اين نوع Triggerزمانی فعال خواهد شد که کاربر وارد SQLو خارج شود.
براي اينکه بهتر با موضوع آشنا شويم يک مثال را با هم بررسی میکنیم و نحوه کارکرد Triggerرا بررسی میکنیم.
شکل کلی دستور DML Triggersبهصورت زير میباشد:
CREATE TRIGGER [schema_name.]trigger_name
ON table_name
}]{FOR | AFTER | INSTEAD OF} {[INSERT] [,] [UPDATE] [,] [DELETE
AS
}{sql_statements
Showroom براي اينکه دستور باال را بررسی کنیم يک مثال را با هم انجام میدهیم ،در دستور زير يک ديتابیس با نام
ایجاد میکنیم که این دیتابیس دارای دو جدول CARو CARLOGاست و اطالعات داخل آنها هم مشخص شده است.
CREATE DATABASE Showroom
GO
Use Showroom
CREATE TABLE Car
(
CarId int identity(1,1) primary key,
Name varchar(100),
Make varchar(100),
Model int ,
Price int ,
)Type varchar(20
)
www.takbook.com
در جدول اصلی يعنیInsert, Update, Delete استفاده کنید تا رويدادهايی مانندDML Trigger در ادامه میخواهیم از
براي اين کار از دستورات زير استفاده، هم ثبت شودCarlog صورت میگیرد بهصورت اتوماتیک در جدولCAR در
.کنید
CREATE TRIGGER [dbo].[CarLOG_INSERT] ON [dbo].[CarLog]
INSTEAD OF INSERT
AS
BEGIN
DECLARE @car_id INT, @car_name VARCHAR(50)
SELECT @car_id = INSERTED.CarId, @car_name = INSERTED.CarName
FROM INSERTED
INSERT INTO CarLog
VALUES(@car_id, @car_name)
END
در، استCarlog ايجاد میشود که زيرمجموعه جدولCarLOG_INSERT جديد با نامTrigger در دستورات باال يک
مشخص میکنیم که فقط دادههايی که وارد جدولINSTEAD OF INSERT قسمت بعدي با استفاده از دستور
www.takbook.com
شکل 3-171
براي اينکه کارايی را مشاهده کنیم بايد با دستور زير اطالعاتی را در جدول Carکه جدول اصلی است وارد کنیم و
بعد از آن بهصورت اتوماتیک اطالعات در جدول Carlogثبت خواهد شد.
Car بعد از واردکردن دستورات باال اطالعات جديد در جدول Carثبت خواهد شد و بعد از آن بهصورت اتوماتیک
IDو Car Nameدر جدول Carlogثبت خواهند شد.
3-1-12توابع در SQL Server 2019
زمانی که يک پروژه سنگین را به اتمام میرسانید و اين پروژه داراي هزار خط کد است که اگر چنانچه با مشکل
روبرو شود پیداکردن خطا در آن بسیار پیچیده خواهد شد ،با استفاده از توابع در SQLشما میتوانید يک برنامه را
بهبود ببخشید و برنامه را بهتر کنترل کنید ،اگر بخواهیم بهصورت کلی بگويیم با استفاده از توابع ،برنامه ما به قطعههاي
منطقی جداگانه تبديل میشود و يک تابع به اين صورت عمل میکند که يک سري پارامتر را از ورودي میگیرد و
عملیاتی را بر روي آن انجام میدهد و در خروجی نمايش میدهد ،تابع را میتوان يک شی در نظر گرفت که بعد از
ايجاد در SQLذخیره شده و هر زمان بخواهید میتوانید آن را صدا بزنید.
براي اينکه توابع را بررسی کنیم يک ديتابیس به همراه جداول و مقادير آن را در SQLايجاد و در ادامه توابع را بر
روي آنها اجرا خواهیم کرد:
ايجاد کنید ،توجه کنید که دقیقاً اين اسم را وارد کنید تا در ادامه BikeStores بهمانند شکل زير يک Databaseبا نام
تمرينات با مشکل روبرو نشويم.
www.takbook.com
-- create tables
CREATE TABLE production.categories (
category_id INT IDENTITY (1, 1) PRIMARY KEY,
category_name VARCHAR (255) NOT NULL
);
در ادامه کار بايد اطالعات اين جداول را پر کنیم ،براي اين کار بايد از دستورت زير استفاده کنیم:
بهخاطر اينکه تعداد دستورات زياد است بهتر است از لینک زير آن را دانلود و در SQLاجرا کنید:
http://3isco.ir/Books/Load-data.sql
توابع ايجاد شده توسط کاربر در SQL Serverبه شما کمک میکنند تا با کپسولهسازي منطقهاي کسبوکار پیچیده و
ايجاد قابلیت استفاده مجدد از آنها در هر ،queryفرايند توسعه نرمافزار خود را تسهیل کنید.
در اين بخش مباحث زير مورد بررسی قرار میگیرند:
www.takbook.com
توابع به شما امکان میدهند تتا فرمولها يا منطقهاي کسبوکار پیچیده را کپسولهسازي کنید و در همه
queryها مجدداً از آنها استفاده کنید.
متغیرهاي جدول :چگونگی استفاده از متغیرهاي جدول بهعنوان يک مقدار بازگشتی از توابع تعريف شده •
کدي آشنا میکند تا بتوانید توابع تعريف شده توسط کاربر ايجاد کنید که دادههاي نوعهاي جدول را
بازگردانند.
حذف توابع تعريف شده توسط کاربر :چگونگی حذف يک يا چند تابع تعريف شده توسط کاربر موجود •
براي ايجاد يک تابع اسکالر ،میتوانید از کد CREATE FUNCTIONبه شکل زير استفاده کنید:
مشخص شده است .نام شما اختیاري است. CREATE FUNCTION اول ،نام تابع بعد از کلیدواژههاي •
اگر صريحاً نام شما را مشخص نکنید SQL Server ،بهصورت پیشفرض از dboاستفاده میکند.
دوم ،لیستی از پارامترها در بین پرانتزها بعد از نام تابع مشخص شدهاند. •
مثال زير يک تابع ايجاد میکند که فروش خالص را بر اساس کمیت ،قیمت و تخفیف محاسبه میکند:
از پايگاهداده order_items سپس ،میتوانید از اين کد براي محاسبه فروش خالص هر سفارش فروش در جدول
Bikestoresاستفاده کنید.
بعد از ايجاد تابع اسکالر ،میتوانید آن را در آدرس programmability > Functions > Scalar-valued Functionsکه در
تصوير زير مشاهده میکنید بیابید:
فراخوانی تابع اسکالر دقیقاً همانند فراخوانی يک تابع معمولی است .براي مثال ،کد زير چگونگی فراخوانی تابع
udfNetSaleرا نشان میدهد:
SELECT
sales.udfNetSale(10,100,0.1) net_sale
خروجی به اين شکل است:
www.takbook.com
مثال زير ،چگونگی استفاده از تابع Sales.udfNetSaleبراي بهدستآوردن فروش خالص سفارشهاي فروش در جدول
order_itemsرا نشان میدهد:
SELECT
order_id,
SUM(sales.udfNetSale(quantity, list_price, discount)) net_amount
FROM
sales.order_items
GROUP BY
order_id
ORDER BY
;net_amount DESC
تصوير زير بخشی از خروجی را نمايش میدهد:
توجه کنید که اگر تابع تعريف شده توسط کاربر وجود ندارد ،میتوانید از دستور CREATE OR ALTERبراي ايجاد
يک تابع تعريف شده توسط کاربر يا براي تغییر دادن يک تابع اسکالر از پیش موجود استفاده کنید:
www.takbook.com
براي حذف يک تابع اسکالر از پیش موجود ،میتوانید از دستور DROP FUNCTIONاستفاده کنید:
توابع اسکالر يک يا چند پارامتر میپذيرند ،اما فقط يک مقدار بازمیگردانند ،در نتیجه بايد شامل يک دستور •
RETURNباشند.
توابع اسکالر میتوانند از منطقهايی مانند قطعات کد IFيا حلقههاي WHILEاستفاده کنند. •
توابع اسکالر نمیتوانند دادهها را updateکنند .میتوانند به دادهها دسترسی داشته باشند ،اما اين کار اصالً •
توصیه نمیشود.
توابع اسکالر میتوانند توابع ديگر را فراخوانی کنند. •
به اين صورت ،چگونگی استفاده از توابع اسکالر براي کپسولهسازي فرمولها يا منطقهاي کسبوکار پیچیده و استفاده
مجدد از آنها در Queryها را آموختید.
تاريخ و زمان فعلی سیستم عاملی که SQL Serverدر حال اجرا شدن روي آن
GETDATE
بازمیگرداند. است را
تاريخ و زمان فعلی سیستم را همراه با دقت ثانیههاي اعشار بیشتر نسبت به تابع
SYSDATETIME
()GETDATEبازمیگرداند.
بازمیگرداند. تاريخ و زمان سیستم فعلی همراه با محدوده زمانی را SYSDATETIMEOFFSET
توضیح تابع
يک مقدار به بخش تاريخ اضافه میکند و مقدار تاريخ جديد را
DATEADD
بازمیگرداند.
يک offset آخرين روز ماه موجود در تاريخ مشخص شده را همراه با
EOMONTH
بازمیگرداند. اختیاري
Offsetمنطقه زمانی يک مقدار DATETIMEOFFSETرا تغییر میدهد
SWITCHOFFSET
میکند. و مقدار UTCرا حفظ
يک مقدار DATETIME2را به يک مقدار DATETIMEOFFSETتبديل
TODATETIMEOFFSET
میکند.
بازمیگرداند. يک مقدار TIMEاز بخشهاي زمان همراه با دقت بیشتر TIMEFROMPARTS
SELECT
;CURRENT_TIMESTAMP AS current_date_time
در آن يک مقدار created_at ايجاد میکنیم که ستون current_timestamp_demos يک جدول جديد به نام،ابتدا
:پیشفرض را بهعنوان برچسب زمان میپذيرد که در آن يک تابع اضافه شده است
SELECT
id,
msg,
created_at
FROM
current_timestamp_demos;
مقدار برچسب زمان بازگشتیcreated_at مقادير موجود در ستون،همانطور که بهوضوح در خروجی مشاهده میکنید
. را میگیرندCURRENT_TIMESTAMP توسط تابع
www.takbook.com
و UTC زمان،براي بازگرداندن زمان محلی DATEDIFF)( و GETUTCDATE() ،GETDATE)( اين مثال از توابع
:محدوده زمانی سرور استفاده میکند
DECLARE
@local_time DATETIME,
@utc_time DATETIME;
SELECT
CONVERT(VARCHAR(40), @local_time)
AS 'Server local time';
SELECT
CONVERT(VARCHAR(40), @utc_time)
AS 'Server UTC time'
SELECT
CONVERT(VARCHAR(40), DATEDIFF(hour, @utc_time, @local_time))
AS 'Server time zone';
GO
GETUTCDATE)( چگونگی استفاده از تابع، در اين مثال،خروجی دستورات باال را در شکل زير مشاهده میکنید
. فعلی را آموختیدUTC براي بهدستآوردن زمان
www.takbook.com
تابع () GETDATEبرچسب زمان فعلی سیستم را بهعنوان يک مقدار DATETIMEبدون offsetمنطقه زمانی پايگاهداده
بازمیگرداند .مقدار DATETIMEاز سیستمعامل سرور به دست میآيد که نمونه SQL Serverدر آن اجرا میشود.
کد زير syntaxتابع () GETDATEرا نشان میدهد:
)(GETDATE
توجه کنید که تابع () GETDATEيک تابع غیرمتمرکز است ،ازاينرو ،نمیتوانید براي ستونهايی که اين تابع را رفرنس
کردهاند يک indexدر viewها ايجاد کنید.
اجازه دهید چند مثال براي استفاده از تابع () GETDATEحل کنیم.
الف) مثال استفاده از تابع () GETDATEبراي بهدستآوردن تاريخ و زمان فعلی
روي آن اجرا SQL Server براي بازگرداندن تاريخ و زمان فعلی سیستم عاملی که ()GETDATE اين مثال از تابع
میشود ،استفاده میکند:
SELECT
;GETDATE() current_date_time
SELECT
;]CONVERT(DATE, GETDATE()) [Current Date
به طور مشابه ،میتوانید از توابع () TRY_CONVERTو () CASTبراي تبديل نتیجه تابع () GETDATEبه يک تاريخ
استفاده کنید:
SELECT
TRY_CONVERT(DATE, GETDATE()),
;)CAST(GETDATE() AS DATE
پ) مثال استفاده از تابع () GETDATEبراي بهدستآوردن زمان فعلی سیستم
براي بهدستآوردن زمان فعلی ،میتوانید از تابع ())( TRY_CONVERT ،CONVERTيا () CASTبراي تبديل نتیجه
تابع () GETDATEبه يکزمان استفاده کنید:
SELECT
CONVERT(TIME,GETDATE()),
TRY_CONVERT(TIME, GETDATE()),
;)CAST(GETDATE() AS TIME
www.takbook.com
به اين شکل ،چگونگی استفاده از تابع () GETDATEبراي بازگرداندن تاريخ و زمان فعلی سیستم را نیز آموختید.
()SYSDATETIME
توجه کنید که تابع () SYSDATETIMEداراي دقت ثانیههاي اعشاري بیشتري نسبت به تابع () GETDATEاست.
() SYSDATETIMEيک تابع غیرمتمرکز است ،ازاينروview ،ها و ستونهايی که داراي عبارات رفرنسی به سمت اين
تابع هستند را نمیتوان indexگذاري کرد.
اين مثال از تابع () CONVERTبراي تبديل نتیجه تابع () SYSDATETIMEبه تاريخ فعلی استفاده میکند:
SELECT
www.takbook.com
مثال زير نتیجه تابع () SYSDATETIMEرا به زمان فعلی تبديل میکند:
SELECT
;CONVERT(TIME, SYSDATETIME()) Result
خروجی به اين شکل است:
به اين شکل ،چگونگی استفاده از تابع () SYSDATETIMEبراي بهدستآوردن تاريخ و زمان فعلی را نیز آموختید.
براي مثال ،براي بهدستآوردن تاريخ و زمان فعلی در ،UTCمیتوانید از کد زير استفاده کنید:
SELECT
;SYSUTCDATETIME() utc_time
()GETUTCDATE توجه کنید که تابع () SYSTCDATETIMEداراي دقت ثانیههاي اعشاري بیشتري نسبت به تابع
است.
SQL Server مثالهاي تابع () SYSTCDATETIMEدر
مثال زير از تابع () CONVERTبراي تبديل نتیجه تابع () SYSTCDATETIMEبه تاريخ فعلی به فرم زمان UTCاستفاده
میکند:
SELECT
;CONVERT(DATE, SYSUTCDATETIME()) utc_date
اين مثال نتیجه تابع () SYSTCDATETIMEرا به تاريخ فعلی به فرم زمان UTCتبديل میکند:
SELECT
;CONVERT(DATE, SYSUTCDATETIME()) utc_time
براي مثال ،براي بهدستآوردن تاريخ و زمان فعلی همراه با منطقه زمانی سروري که به آن متصل هستید ،میتوانید از
کد زير استفاده کنید:
SELECT
;]SYSDATETIMEOFFSET() [datetimeoffset with timezone
خروجی به اين شکل است:
به شکل رشته zzz و zz و آرگومانهاي ()FORMAT منطقه زمانی بازگشتی را با استفاده از تابع offset اين مثال
بازمیگرداند:
SELECT
SYSDATETIMEOFFSET() AS 'System Date Time Offset',
FORMAT(SYSDATETIMEOFFSET(), 'zz') AS 'zz',
;'FORMAT(SYSDATETIMEOFFSET(), 'zzz') AS 'zzz
به اين شکل ،چگونگی استفاده از تابع () SYSDATETIMEOFFSETبراي بهدستآوردن تاريخ و زمان فعلی ،همراه با
منطقه زمانی را آموختید.
)DATENAME(date_part,input_date
تابع () DATENAMEدو آرگومان میپذيرد:
Date_partبخشی از تاريخ است که میخواهید بازگشت داده شود .جدول زير تمام مقادير بخش تاريخ معتبر o
اختصارات Date_Part
از لحاظ نوع بازگشتی ،شبیه به () DATEPARTاست .تابع () DATENAMEبخش ()DATENAME توجه کنید که
integer بخش تاريخ را بهعنوان يک ()DATEPART تاريخ را بهعنوان يک کاراکتر رشته بازمیگرداند ،درحالیکه
بازمیگرداند.
مثال زير را ببینید:
SELECT
DATEPART(year, '2018-05-10') [datepart],
;]DATENAME(year, '2018-05-10') [datename
بههرحال ،نوعهاي دادهاي آنها همانطور که در مثال زير مشاهده میکنید ،متفاوت هستند:
SELECT
DATEPART(year, '2018-05-10') + '1' [datepart],
; ]DATENAME(year, '2018-05-10') + '1' [datename
، بههرحال.) میشود2018 + 1( 2019 پس مقدار عبارت برابر با، بازمیگرداندinteger يکDATEPART)( چون تابع
بهعنوان يک عملگر تلفیقی عمل میکند و+ عالمت، ازاينرو، يکرشته کاراکتر بازمیگرداندDATENAME)( تابع
.) است2018 + 1 ’ (يعنی20181‘ نتیجه آن
در نتیجه ،چگونگی استفاده از تابع () DATENAMEبراي استخراج يک بخش تاريخ بهعنوان يکرشته کاراکتر از يک
تاريخ را آموختید.
بخشی از يک تاريخ است که بايد استخراج شود( .بخشهاي معتبر تاريخ را در جدول زير Date_part o
مشاهده میکنید).
www.takbook.com
اختصارات Date_part
yy, yyyy سال
qq, q ربع سال
mm, m ماه
dy, y روز از سال
dd, d روز
wk, ww هفته
dw روز از هفته
hh ساعت
mi, n دقیقه
ss, s ثانیه
ms میلیثانیه
mcs میکروثانیه
ns نانوثانیه
tz Tzoffset
isowk, isoww ISO_WEEK
اين مثال از تابع () DATEPARTبراي استخراج بخشهاي مختلف يک مقدار تاريخ ذخیره شده در يک متغیر استفاده
میکند:
براي استخراج سال ،ربع سال ،ماه و روز از مقادير موجود در ستون ()DATEPART در اين مثال ،ما از تابع
shipped_dateاستفاده کرديم .در دستور ،GROUP BYما نرخهاي رشد فروش ( )quuantity * list_priceرا با استفاده
از اين بخشهاي تاريخ جمعآوري کرديم.
و SELECT ،WHERE ،HAVING ،GROUP BY در دستورهاي ()DATEPART توجه کنید که میتوانید از تابع
ORDER BYاستفاده کنید.
SQL Server تابع DAYدر
تابع () DAYيک مقدار integerبازمیگرداند که روز يک ماه (از 1تا )31از يک تاريخ مشخص شده را نشان میدهد.
)DAY(input_date
يک آرگومان میگیرد که اين آرگومان میتواند يک تاريخ يا يک عبارت باشد که بهصورت مقدار ()DAY تابع
TIME ،DATE ،SMALLDATETIME ،DATETIME ،DATETIME2يا DATETIMEOFFSETاستفاده شود.
تابع () DAYمقدار مشابه با تابع () DATEPARTکه در زير مشاهده میکنید بازمیگرداند:
)DATEPART(day,input_date
www.takbook.com
اين مثال از تابع () DAYبراي استخراج روز از تاريخ ‘ ’01-12-2030استفاده میکند:
SELECT
;]DAY('2030-12-01') [DAY
خروجی به اين شکل است:
ب) مثال استفاده از تابع () DAYبا يک مقدار تاريخ که فقط داراي بخش زمان است
تابع () DAYدر صورتی که تاريخ ورودي شامل فقط بخش زمان باشد ،مقدار 1را بازمیگرداند:
SELECT
;]DAY('10:20:30') [DAY
SELECT
DAY(shipped_date) [day],
SUM(list_price * quantity) gross_sales
www.takbook.com
MONTH(input_date)
،DATETIME2 يک آرگومان میگیرد که میتواند يک مقدار تاريخ يا يک عبارت باشد که داراي مقدارMONTH)( تابع
. استDATETIMEOFFSET ياTIME ،DATE ،SMALLDATETIME ،DATETIME
DATEPART(month,input_date)
SELECT
;]MONTH('2020-12-01') [month
خروجی به اين شکل است:
ب) استفاده از تابع () MONTHبا يک مقدار تاريخ که فقط داراي داده زمان است
تابع () MONTHدر صورتی که مقدار تاريخ شامل فقط بخش زمان باشد ،مقدار 1را بازمیگرداند:
SELECT
;]MONTH('15:30:20') [month
خروجی بهاينترتیب است:
)YEAR(input_date
تابع () YEARيک آرگومان میگیرد که میتواند يک مقدار تاريخ يا يک عبارت باشد که داراي مقدار ،DATETIME2
TIME ،DATE ،SMALLDATETIME ،DATETIMEيا DATETIMEOFFSETاست.
اين مثال از تابع () YEARبراي استخراج سال از تاريخ ‘ ’01-02-2019استفاده میکند:
SELECT
;]YEAR('2019-02-01') [year
ب) استفاده از تابع () YEARبا يک مقدار تاريخ که فقط داراي بخش زمان است
اگر مقدار داده ورودي فقط داراي داده زمان باشد ،تاب () YEARمقدار 1900را بازمیگرداند:
SELECT
;]YEAR('11:05:01') [year
خروجی بهاينترتیب است:
اين مثال از تابع () YEARبراي استخراج داده سال از مقادير موجود در ستون shipped_dateاستفاده میکند .نتیجه
اين مثال ،نرخ رشد فروش بر اساس سال است که با استفاده از تابع () SUMو دستور GROUP BYبه دست میآيند:
براي محاسبه تفاوت بین دو تاريخ از لحاظ سال ،ماه ،هفته و غیره از تابع () DATEDIFFاستفاده میکنیم:
Date_partبخشی از تاريخ (مثالً يک سال ،يک ربع سال ،يک ماه ،يک هفته و غیره) است که میخواهید اختالف o
بر اساس آن بین start_dateو end_dateمحاسبه شود .میتوانید بخشهاي تاريخ معتبر و قابلقبول را در جدول
زير مشاهده کنید.
تاريخهايی هستند که بايد با هم مقايسه شوند .آنها بايد داراي مقاديري از نوع end_date و Start_date o
میدهد: جدول زير لیستی از مقادير معتبر و قابلقبول براي date_partرا نشان
اختصارات Date_part
،)+2,147,483,647 الی-2,147,483,648 باشد (يعنی خارج از بازهinteger اگر نتیجه بهدستآمده خارج از بازه اعداد
. استفاده کنیدDATEDIFF_BIG)( بايد در عوض از تابع، در چنین وضعیتی. ارور میدهدDATEDIFF)( آنگاه تابع
SQL Server درDATEDIFF)( مثالهاي تابع
استفاده، براي مقايسه تفاوت بین دو تاريخ که داراي بخشهاي مختلفی از تاريخ هستندDATEDIFF)( اين مثال از تابع
:میکند
DECLARE
@start_dt DATETIME2= '2019-12-31 23:59:59.9999999',
@end_dt DATETIME2= '2020-01-01 00:00:00.0000000';
SELECT
DATEDIFF(year, @start_dt, @end_dt) diff_in_year,
DATEDIFF(quarter, @start_dt, @end_dt) diff_in_quarter,
DATEDIFF(month, @start_dt, @end_dt) diff_in_month,
DATEDIFF(dayofyear, @start_dt, @end_dt) diff_in_dayofyear,
DATEDIFF(day, @start_dt, @end_dt) diff_in_day,
DATEDIFF(week, @start_dt, @end_dt) diff_in_week,
DATEDIFF(hour, @start_dt, @end_dt) diff_in_hour,
DATEDIFF(minute, @start_dt, @end_dt) diff_in_minute,
DATEDIFF(second, @start_dt, @end_dt) diff_in_second,
DATEDIFF(millisecond, @start_dt, @end_dt) diff_in_millisecond;
مثال زير از تابع () DATEDIFFبراي مقايسه تاريخ دريافت درخواستی با تاريخ ارسال (بهروز) استفاده کرده و نتیجهاي
که بازمیگرداند بیان میکند که آيا سفارش بهموقع تحويل داده شده يا خیر.
SELECT
order_id,
required_date,
shipped_date,
CASE
WHEN DATEDIFF(day, required_date, shipped_date) < 0
'THEN 'Late
'ELSE 'OnTime
END shipment
FROM
sales.orders
WHERE
shipped_date IS NOT NULL
ORDER BY
;required_date
خروجی بهاينترتیب است:
Date_partبخشی از تاريخ است که تابع () DATEADDبه آن valueاضافه میکند .اگر valueيک مقدار اعشاري o
يا floatباشد ،آنگاه تابع () DATEADDبخش اعشاري را ناديده میگیرد .در چنین وضعیتی ،تابع عدد را گرد
نمیکند.
يک تاريخ ورودي يا يک عبارت است که میتواند يک مقدار با نوع ،SMALLATETIME Input_date o
SELECT
www.takbook.com
:خروجی
: استفاده میکند، براي محاسبه تاريخ ارسال تخمینی بر اساس تاريخ سفارشDATEADD)( اين مثال از تابع
SELECT
order_id,
customer_id,
order_date,
DATEADD(day, 2, order_date) estimated_shipped_date
FROM
sales.orders
WHERE
shipped_date IS NULL
ORDER BY
estimated_shipped_date DESC;
SELECT
;DATEADD(month, 4, '2019-05-31') AS result
در اين مثال ،مقدار ماه از تاريخ بازگشتی ،ماه سپتامبر است .بههرحال ،روز 31در ماه سپتامبر وجود ندارد ،ازاينرو،
تابع () DATEADDآخرين روز ماه سپتامبر (يعنی )30را بهعنوان مقدار روز براي تاريخ بازگشتی نمايش میدهد:
SELECT
;DATEADD(month,4,'2019-05-30') AS result
خروجی:
www.takbook.com
تابع () EOMONTHآخرين روز ماه يک تاريخ خاص را همراه با يک offsetاختیاري ،بازمیگرداند.
;)]EOMONTH(start_date [, offset
Start_dateيک عبارت تاريخ است که مقدار داخل آن نیز يک تاريخ است .تابع () EOMONTHآخرين روز o
به start_dateيک مقدار غیرمعتبر يا غیرقابلقبول باشد ،آنگاه تابع () EOMONTHارور offset اگر نتیجه اضافهشدن
میدهد.
SQL Server مثالهاي () EOMONTHدر
اين مثال از تابع () EOMONTHبراي بازگرداندن آخرين روز ماه براي تاريخ 2019-02-15استفاده میکند:
SELECT
;DATEADD(month,4,'2019-05-30') AS result
اگر تاريخ يک سال کبیسه را به تابع () EOMONTHبدهید ،بازهم مقدار صحیح را بازمیگرداند:
SELECT
;EOMONTH('2020-02-09') end_of_month_feb2020
خروجی به اين صورت است:
همانطور که بهوضوح در خروجی مشاهده میکنید ،آخرين روز ماه فوريه 2019روز 29ام است ،نه 28ام.
ب) استفاده از تابع () EOMONTHبراي بهدستآوردن تعداد روزها در يک ماه خاص
براي بهدستآوردن تعداد روزهاي يک ماه خاص ،مراحل زير را انجام دهید:
ابتدا ،از تابع () EOMONTHبراي بهدستآوردن آخرين روز ماه استفاده کنید.
سپس ،آخرين روز ماه را به تابع () DAYبفرستید.
براي بهدستآوردن تعداد روزها در ماه جاري ،میتوانید از کد زير استفاده کنید:
SELECT
www.takbook.com
SELECT
;EOMONTH('2019-02-15', 2) eomonth_next_2_months
) SWITCHOFFSET(expression, time_zone
.است
SQL Server درSWITCHOFFSET)( مثال تابع
: باشدDATETIMEOFFSET يک جدول جديد ايجاد میکنیم که داراي ستون،ابتدا
SELECT
SWITCHOFFSET(dtz, '-08:00') result
FROM
dbo.switchoffset_demo;
)TODATETIMEOFFSET(expression,time_zone
time_zoneيک offset Time_zoneمیتوانید يک integerيا stringباشد .اگر از يک integerاستفاده کنید ،آنگاه o
منطقه زمانی به دقیقه میباشد .در غیر اين صورت ،يک ساعت يا دقیقه به فرم ‘ ’+TZH:THMيا ‘-TZH:THM
’ است که در آن TZHساعت و THMدقیقه است .بازه ساعت از -14تا +14است.
SELECT
( TODATETIMEOFFSET
'2019-03-06 07:43:58',
''-08:00
;) result
خروجی بهاينترتیب است:
ب) مثال استفاده از تابع () TODATETIMEOFFSETبراي تغییر offsetمحدوده زمانی به دقیقه
اين مثال ،محدوده زمانی فعلی را به -180دقیقه تغییر میدهد:
SELECT
;TODATETIMEOFFSET (GETDATE(), -180) result
خروجی به اين شکل است:
www.takbook.com
پ) مثال استفاده از تابع () TODATETIMEOFFSETبراي اضافهکردن يک offsetمنطقه زمانی ساعت به تاريخ و زمان
فعلی
مثال زير يک offsetمنطقه زمانی 12ساعته را به تاريخ و زمان ’ ’2019-03-06 09:55:00اضافه میکند:
SELECT
( TODATETIMEOFFSET
'2019-03-06 09:55:00',
)''+13:00
;result
خروجی بهاينترتیب است:
اين مثال از تابع () DATEFROMPARTSبراي ساخت يک تاريخ متشکل از مقادير سال ،ماه و روز استفاده میکند:
SELECT
;DATEFROMPARTS(2020,12,31) a_date
SELECT
;DATEFROMPARTS(2020,null,31) a_date
خروجی به اين صورت است:
اين مثال آرگومانهاي غیرمعتبر و غیرقابلقبول را به تابع () DATEFROMPARTSارسال میکند که در نتیجه سیستم
ارور میدهد:
SELECT
;DATEFROMPARTS(2020,20,-1) a_date
www.takbook.com
از بخشهاي سال ،ماه و روز با استفاده از تابع DATE به اين شکل ،چگونگی ساخت يک مقدار
() DATEFROMPARTSرا آموختید.
SQL Server تابع DATETIME2FROMPARTSدر
تابع () DATETIME2FROMPARTSيک مقدار تاريخ بازمیگرداند که از مقادير سال ،ماه ،روز ،ساعت ،دقیقه ،ثانیه،
اعشار و دقت است .در واقع اين تابع يک مقدار DATETIME2ايجاد میکند.
کد زير syntax ،تابع () DATETIME2FROMPARTSرا نشان میدهد:
Dayيک عبارت integerاست که يک روز از بازه 1تا 31را مشخص میکند. •
تابع () DATETIME2FROMPARTSيک مقدار از نوع DATETIME2بازمیگرداند .اگر هرکدام از آرگومانهاي باال
NULLباشند ،تابع مقدار NULLرا بازمیگرداند.
اگر يک آرگومان داراي يک مقدار غیرمعتبر باشد ،تابع () DATETIME2FROMPARTSخطا میدهد.
SQL Server مثالهاي تابع () DATETIME2FROMPARTSدر
SELECT
;DATETIME2FROMPARTS ( 2020, 12, 31, 11, 59, 59, 0, 0 ) result
SELECT
;DATETIME2FROMPARTS(2020, NULL, 31, 11, 59, 59, 0, 0) result
پ) مثال استفاده از تابع () DATETIME2FROMPARTSبا مقادير غیر معتبر در آرگومانها
مثال زير آرگومانهاي غیر معتبر را به تابع () DATETIME2FROMPARTSارسال میکند که در نتیجه سیستم ارور
میدهد:
SELECT
;DATETIME2FROMPARTS(2020, 13, 31, 11, 59, 59, 0, 0) result
از DATETIME2 براي ساخت يک مقدار ()DATETIME2FROMPARTS بهاينترتیب ،چگونگی استفاده از تابع
اجزاي تشکیلدهنده آن يعنی سال ،ماه ،روز ،ساعت ،دقیقه ،ثانیه ،اعشار و دقت را آموختید.
3-1-12-3توابع رشتهاي
در جدول زير توابع رشتهاي در SQL Serverرا مشاهده میکنید که روي يکرشته ورودي عمل میکنند و يک مقدار
رشته يا عددي بازمیگردانند:
توضیح تابع
بازمیگرداند. مقدار کد ASCIIيک کاراکتر را ASCII
چندين رشته را با يک عالمت مجزا کننده ،به يکرشته واحد تبديل CONCAT_WS
میکند.
يک مقدار فرمت شده با يک فرمت خاص و رفتار (اختیاري) را FORMAT
بازمیگرداند.
بازمیگرداند.
میکند. جايگزين
بازمیگرداند. يکرشته که به تعداد دفعات خاصی تکرار شده است را REPLICATE
بازمیگرداند. خالی،
يک کد( يا ) SOUNDEXچهار کاراکتري از يکرشته را بر اساس اينکه SOUNDEX
رديفهاي رشته هاي داراي يک مجزا کننده خاص را به يکرشته جديد STRING_AGG
میکند. متصل
کاراکترهاي خاصی از يکرشته را رها میکند و يکرشته جديد از STRING_ESCAPE
میکند.
تابع () ASCIIيک عبارت کاراکتر میپذيرد و مقدار کد ASCIIاز اولین کاراکتر سمت چپ در يک عبارت کاراکتري
را بازمیگرداند.
) ASCII ( input_string
Input_stringمیتواند يک کاراکتر حقیقی ،يک عبارت رشتهاي کاراکتري يا يک ستون باشد .اگر input_stringداراي
بیش از يک کاراکتر باشد ،آنگاه تابع مقدار کد ASCIIاز اولین کاراکتر سمت چپ آن را بازمیگرداند.
تبادل اطالعات ( American Standard Code همانطور که احتما ًال میدانید ASCII ،مخفف کد استاندارد آمريکايی براي
)for Information Interchangeاست ASCII .بهعنوان يک استاندارد رمزگذاري کاراکتر براي رايانههاي مدرن به کار
میرود.
SQL Server مثالهاي تابع () ASCIIدر
SELECT
ASCII('AB') A,
;ASCII('Z') Z
) CHAR ( int_exp
در اين ،syntaxکد inte_exprيک عبارت integerاست که مقدار آن يک integerاست که بازه آن بین 0تا 255است.
اگر عبارت integerداراي مقداري باشد که خارج از اين بازه است ،آنگاه تابع () CHARمقدار NULLرا بازمیگرداند.
توجه کنید که براي تبديل يک کاراکتر به يک مقدار ،ASCIIاز تابع () ASCIIاستفاده میکنیم.
www.takbook.com
SELECT
CHAR(65) char_65,
;CHAR(90) char_90
خروجی به اين شکل است:
کد زير مقدار NULLرا بازمیگرداند ،چون مقدار آرگومان خارج از بازه 0تا 255است.
SELECT
;CHAR(1000) out_of_range
کد باال ،خروجی زير را نشان میدهد:
Stringمیتواند يکرشته ،عبارت يا ستون باشد .اين رشتهاي است که جستجو میشود. •
big Start_locationموقعیتی است که جستجو از آنجا آغاز میشود Start_location .میتواند يک ،integerيک ▪
integerيا يک عبارت باشد که مقدار آن ممکن است هر نوع دادهاي ديگري باشد.
پارامتر start_locationاختیاري است .اگر آن را مشخص نکنید يا مقدار آن صفر يا يک مقدار منفی باشد ،آنگاه •
توجه کنید که تابع () CAHRINDEXبر اساس نوع قیاس ،میتواند هم بهصورت حساس به بزرگی يا کوچکی حروف
و هم غیرحساس به اين موضوع عمل کند.
SQL Server مثالهاي تابع () CAHRINDEXدر
الف) استفاده از تابع () CAHRINDEXبراي انجام يک جستجو
‘ SQL Server مثال زير از تابع () CAHRINDEXبراي انجام يک جستجوي ساده براي يافتن رشته ‘ ’SQLدرون رشته
’CHARINDEXاستفاده میکند.
SELECT
;CHARINDEX('SQL', 'SQL Server CHARINDEX') position
ب) استفاده از تابع () CAHRINDEXبراي انجام يک جستجوي غیرحساس به بزرگی و کوچکی حروف
‘ SQL کد زير يک جستجوي غیرحساس به بزرگی و کوچکی حروف براي يافتن رشته ‘ ’SERVERدرون رشته
’Server CHARINDEXرا نشان میدهد:
SELECT
(CHARINDEX
'SERVER',
''SQL Server CHARINDEX
;) position
خروجی بهاينترتیب است:
www.takbook.com
پ) استفاده از تابع () CAHRINDEXبراي انجام يک جستجوي حساس به بزرگی و کوچکی حروف
‘ SQL Server مثال زير ،يک جستجوي حساس به بزرگی و کوچکی حروف براي يافتن رشته ‘ ’SERVERدر رشته
’CHARINDEXرا نشان میدهد.
SELECT
(CHARINDEX
'SERVER',
''SQL Server CHARINDEX
COLLATE Latin1_General_CS_AS
;) position
خروجی به اين شکل است:
‘ This is a my اين مثال از پارامتر start_locationبراي آغاز جستجوي رشته ‘ ’isاز پنجمین و دهمین کاراکتر از رشته
’sisterاستفاده میکند:
SELECT
CHARINDEX('is','This is a my sister',5) start_at_fifth,
;CHARINDEX('is','This is a my sister',10) start_at_tenth
تابع () CONCATدو رشته ورودي با حداکثر 255کاراکتر را میگیرد و آنها را به يکرشته تبديل میکند .اين تابع
حداقل به دو رشته ورودي نیاز دارد .اگر يکی از رشتههاي ورودي را وارد نکنید ،تابع () CONCATارور میدهد.
قبل از اينکه آن دو مقدار را با هم ادغام کند، ()CONCAT اگر مقادير رشتهاي غیر کاراکتري وارد کنید ،آنگاه تابع
بهصورت ضمنی آنها را به رشته تبديل میکند.
تابع () CONCATهمچنین مقدار NULLرا به يکرشته خالی با نوع ( VARCHAR(1تبديل میکند.
توجه کنید که براي اضافهکردن يک مجزا کننده در طول فرايند ادغام ،بايد از تابع () CONCAT_WSاستفاده کنید (که
در قسمت بعدي همین جلسه آن را توضیح خواهیم داد).
SQL Server مثالهاي تابع () CONCATدر
SELECT
'John' + ' ' + 'Doe' AS full_name;
:خروجی به اين شکل است
sales.customers جدول
Sales.customers از جدول last_name و first_name براي ادغام مقادير در ستونهاي CONCAT)( کد زير از تابع
:استفاده میکند
SELECT
customer_id,
first_name,
last_name,
CONCAT(first_name, ' ', last_name) full_name
FROM
sales.customers
ORDER BY
full_name;
SELECT
(CONCAT
CHAR(13),
CONCAT(first_name,' ',last_name),
CHAR(13),
phone,
CHAR(13),
CONCAT(city,' ',state),
CHAR(13),
zip_code
) customer_address
FROM
sales.customers
ORDER BY
first_name,
;last_name
بخشی از خروجی در فرمت متن به اين شکل است:
براي اينکه دقیقتر اين دستور را درک کنید بهمانند شکل زير بر روي صفحه کد کلیک راست کنید و از قسمت
Test خروجی را بهصورت F5 را انتخاب کنید و بعد از آن با کلیک بر روي Results to Test گزينهي Results To
مشاهده خواهید کرد ،البته میتوانستید از کلیدهاي ترکیبی Ctrl + Tو Ctrl+Dاستفاده کنید.
www.takbook.com
()CONCAT همانطور که بهوضوح در خروجی نشانداده شده است ،اگر مشتري شمارهتلفن نداشته باشد ،آنگاه تابع
از يک فضاي خالی براي ادغام استفاده میکند.
توجه کنید که از تابع () CHARبراي بهدستآوردن کاراکتر خط جديد در اين مثال استفاده کرديم.
; )]CONCAT_WS(separator,input_string1,input_string2,[...input_stringN
CHARيا NVARCHARباشد.
Input_string1تا input_stringNعباراتی با هر نوع معتبر هستند .تابع () CONCAT_WSقبل از انجام عمل •
ادغام ،بهصورت ضمنی مقاديري که داراي نوع غیر کاراکتري هستند را به نوع کاراکتري تبديل میکند.
تابع () CONCAT_WSرشتههاي ورودي را به يکرشته تبديل میکند .اين تابع ،رشتههاي در حال ادغام را با separator
SELECT
CONCAT_WS(' ', 'John', 'Doe') full_name
خروجی به اين شکل است:
sales.customers کد زير از تابع () CONCAT_WSبراي اتصال مقادير ستونهاي last_nameو first_nameاز جدول
استفاده میکند .نام خانوادگی و نام با استفاده از ويرگول و Spaceاز هم جدا شدهاند:
SELECT
first_name,
last_name,
CONCAT_WS(', ', last_name, first_name) full_name
FROM
sales.customers
ORDER BY
first_name,
;last_name
تصوير زير ،بخشی از خروجی را نشان میدهد:
www.takbook.com
را ناديده میگیرد و هیچ NULL مقدار ()CONCAT_WS همانطور که بهوضوح در خروجی مشاهده میکنید ،تابع
مجزا کنندهاي بین مقادير NULLاضافه نمیکند.
مثال زير دادههاي مشتري را ادغام میکند تا آدرسهاي مشتريان را فرمت کند .اگر يک مشتري داراي شمارهتلفن
نباشد ،تابع آن را ناديده میگیرد:
SELECT
CONCAT_WS
(
CHAR(13),
CONCAT(first_name, ' ', last_name),
phone,
CONCAT(city, ' ', state),
zip_code,
''---
) customer_address
FROM
www.takbook.com
SELECT
)CONCAT_WS(',', first_name, last_name, email
FROM
sales.customers
ORDER BY
first_name,
;last_name
بخشی از خروجی به اين شکل است:
SELECT
SOUNDEX('Too') Too,
;SOUNDEX('Two') Two
خروجی بهاينترتیب است:
تابع () DEFFERENCEيک مقدار integerبازمیگرداند که تفاوت بین مقادير () SOUNDEXدو رشته را میسنجد.
کد زير syntax ،تابع () DEFFERENCEرا نشان میدهد:
)DIFFERENCE(input_string1, input_string2
نتیجه () ،DEFFERENCEتفاوت بین دو مقدار () SOUNDEXرا در مقیاس 0تا 4نشان میدهد .مقدار 0يعنی ضعیف
يا بدون وجود تشابه بین مقادير () SOUNDEXو مقدار 4يعنی مقادير () SOUNDEXبسیار مشابه يا همسان.
SQL Server مثالهاي تابع () DEFFERENCEدر
الف) استفاده از تابع () DEFFERENCEبا مقادير () SOUNDEXمشابه
اين مثال از تابع () DEFFERENCEبراي مقايسه مقادير () SOUNDEXاز دو رشته Twoو Tooاستفاده میکند:
SELECT
SOUNDEX('Two') soundex_two,
SOUNDEX('Too') soundex_too,
;DIFFERENCE('Two', 'Too') similarity
خروجی به اين شکل است:
کد زير يک مقال ديگر است که تفاوت موجود در مقادير () SOUNDEXاز رشتههاي Johnو Johnyرا مقايسه میکند:
SELECT
SOUNDEX('Johny') soundex_johny,
SOUNDEX('John') soundex_john,
;DIFFERENCE('Johny', 'John') similarity
www.takbook.com
SELECT
SOUNDEX('Coffee') soundex_coffee,
SOUNDEX('Laptop') soundex_laptop,
;DIFFERENCE('Coffee', 'Laptop') similarity
خروجی به اين شکل است:
تعداد مشخصی کاراکتر را از سمت چپ يکرشته ارائه شده استخراج میکند .براي مثال ،کد ()LEFT تابع
) LEFT(‘SQL Server’, 3خروجی SQLرا نمايش میدهد.
جز نوعهاي TEXTيا NTEXTباشد ،اين دو نوع بهصورت ضمنی به VARCHARو NVARCHARتبديل
میشوند.
Number_of_charactersيک integerمثبت است که تعداد کاراکترهاي input_stringکه بازگشت داده میشوند •
و اگر VARCHAR يک مقدار ()LEFT باشد ،آنگاه تابع Unicode يک نوع دادهاي کاراکتر غیر input_string وقتی
input_stringيک نوع داده کاراکتر Unicodeباشد ،يک مقدار NVARCHARبازمیگرداند.
www.takbook.com
کد زير از تابع () LEFTبراي بازگرداندن سه کاراکتر اول از سمت چپ رشته کاراکتر SQL Serverرا نشان میدهد:
مثال زير 7کاراکتر اول سمت چپ هر نام محصول در جدول production.productsرا بازمیگرداند:
SELECT
product_name,
LEFT(product_name, 7) first_7_characters
FROM
production.products
ORDER BY
;product_name
تصوير زير بخشی از خروجی را نشان میدهد:
SELECT
LEFT(product_name, 1) initial,
COUNT(product_name) product_count
FROM
production.products
GROUP BY
)left(product_name, 1
ORDER BY
;initial
خروجی به اين شکل است:
در اين ،syntaxکد input_stringمیتواند يکرشته کاراکتر ،عبارت رشتهاي يا يک ستون از دادههاي رشتهاي يا دودويی
باشد.
يا ()VARCHAR(max ،NVARCHART(max از نوع داده input_string مقداري را بازمیگرداند که اگر ()LEN تابع
( VARBINARY(maxباشد ،نوع داده آن BIGINTاست و در غیر اين صورت ،نوع آن INTاست.
SQL Server مثالهاي تابع () LENدر
الف) استفاده از تابع () LENبراي يکرشته
مثال زير از تابع () LENبراي بازگرداندن تعداد کاراکترهاي رشته SQL Server LENو همین رشته با فضاهاي خالی
بین حروف استفاده میکند.
SELECT
LEN('SQL Server LEN') length,
LEN('SQL Server LEN ;') length_with_trailing_blanks
خروجی به اين شکل است:
www.takbook.com
همانطور که مشاهده میکنید ،تابع () LENاز فضاهاي خالی بین حروف صرفنظر میکند.
ب) استفاده از تابع () LENبراي يک ستون
تابع () LOWERيکرشته را به حروف کوچک تبديل میکند .کد زير syntax ،تابع () LOWERرا نشان میدهد:
)LOWER(input_string
در اين ،syntaxکد input_stringمیتواند يکرشته کاراکتر ،متغیر ،عبارت رشته کاراکتر يا ستون جدول باشد.
www.takbook.com
SELECT
first_name,
last_name,
(CONCAT_WS
' ',
LOWER(first_name),
)LOWER(last_name
) full_name_lowercase
FROM
sales.customers
ORDER BY
first_name,
;last_name
تصوير زير بخشی از خروجی را نشان میدهد:
www.takbook.com
به اين صورت ،چگونگی استفاده از تابع () LOWERبراي تبديل يکرشته به حروف کوچک را نیز آموختید.
SELECT
'(LTRIM ;SQL Server LTRIM Function') result
مثال زير پس از تبديل رشتههاي به چند زيررشته ،از تابع () LTRIMبراي حذف فضاهاي خالی ابتدا و انتهاي رشته
استفاده میکند:
SELECT
LTRIM(value) part
FROM
;)'STRING_SPLIT('Doe, John', ',
خروجی به اين شکل است:
توجه کنید که اگر از تابع () LTRIMاستفاده نکنید ،دومین رديف يک فضاي خالی ابتدا يا انتهاي رشته خواهد داشت.
3-1-12-4توابع سیستمی
توابع سیستمی عبارتاند از:
– CONVERTيک مقدار با يک نوع را به يک نوع ديگر ( convertيعنی تبديل ضمنی) میکند. •
– ISNUMERICبررسی میکند که آيا يک عبارت از نوع عددي معتبر هست يا نه. •
– TRY-CASTيک مقدار با يک نوع را به يک نوع ديگر castمیکند و اگر castموفقیتآمیز نبود ،مقدار •
NULLبازمیگرداند.
– TRY-CONVERTيک مقدار با يک نوع را به يک نوع ديگر convertمیکند و مقداري را بازمیگرداند که •
به يک نوع خاص ترجمه شده است .اگر castيا تبديل موفقیتآمیز نباشد ،مقدار NULLرا بازمیگرداند.
– TRY-PARSEيکرشته را به يک date/timeيا يک عدد تبديل میکند و اگر تبديل موفقیتآمیز نباشد، •
مقدار NULLبازمیگرداند.
تبديل Datetimeبه – stringچگونگی تبديل يک مقدار datetimeبه يکرشته با يک فرمت خاص را نشان •
میدهد.
تبديل رشته به – datetimeچگونگی تبديل يکرشته به يک مقدار datetimeرا نشان میدهد. •
در اين کد SQL Server ،بهصورت ضمنی کاراکتر رشته ‘ ’1را به عدد 1تبديل میکند.
وقتی از دو مقدار با نوعهاي دادهاي مختلف استفاده میکنیم SQL Server ،سعی میکند قبل از اينکه محاسبه را پردازش
کند ،نوع دادهاي کمتر را به نوع دادهاي بیشتر و باالتر تبديل کند .به اين نوع تبديل در ،SQL Serverتبديل ضمنی
گفته میشود.
در مقابل تبديلهاي ضمنی ،تبديلهاي صريح يا غیر ضمنی را داريم که در آنها تابع () CASTرا فراخوانی میکنیم تا
بهصورت صريح يک مقدار با يک نوع را به يک نوع ديگر تبديل کند:
;SELECT 1 + CAST(1 AS INT) result
SQL- نوع داده مورد نظر است که میخواهید عبارت به آن تبديل شود .اين نوع میتواند Target_type •
INT ،BIT ،VARIANTو غیره باشد .توجه کنید که اين کد نمیتواند يک نوع دادهاي aliasباشد.
Lengthيک integerاختیاري است که طول نوع دادهاي مورد نظر را مشخص میکند .مقدار پیشفرض length •
برابر با 30است.
تابع () CASTعبارت تبديل شده به نوع دادهاي مورد نظر را بازمیگرداند.
SQL Server مثالهاي تابع () CASTدر
www.takbook.com
الف) استفاده از تابع () CASTبراي تبديل يک عدد اعشاري به يک عدد صحیح
اين مثال از تابع () CASTبراي تبديل عدد اعشاري 5.95به يک عدد صحیح استفاده میکند:
;SELECT CAST(5.95 AS INT) result
خروجی بهاينترتیب است:
ب) استفاده از تابع () CASTبراي تبديل يک عدد اعشاري به يک عدد اعشاري ديگر با طول متفاوت
مثال زير از تابع () CASTبراي تبديل عدد اعشاري 5.95به يک عدد اعشاري ديگر با صفر عدد اعشار تبديل میکند:
بر اساس قوانین زير ،يک SQL Server وقتی يک مقدار با نوعهاي دادهاي را به حالتهاي مختلف تبديل میکنید،
نتیجه کوتاه شده يا يک مقدار گرد شده بازمیگرداند:
رفتار به نوع داده از نوع داده
گرد کردن numeric numeric
اين مثال از تابع () CASTبراي تبديل رشته ‘ ’14-03-2019به datetimeاستفاده میکند:
SELECT
;CAST('2019-03-14' AS DATETIME) result
خروجی بهاينترتیب است:
SELECT
MONTH(order_date) month,
CAST(SUM(quantity * list_price * (1 - discount)) AS INT) amount
FROM sales.orders o
INNER JOIN sales.order_items i ON o.order_id = i.order_id
WHERE
YEAR(order_date) = 2017
GROUP BY
)MONTH(order_date
ORDER BY
;month
تصوير زير ،خروجی را نشان میدهد:
به اين صورت چگونگی استفاده از تابع () CASTبراي تبديل يک مقدار با يک نوع به يک نوع ديگر را آموختید.
SQL Server تابع CONVERTدر
www.takbook.com
نوع دادهاي مورد نظر است که میخواهید عبارت به آن تبديل شود .اين نوع میتواند Target_type •
INT ،BIT ،SQL_VARIANTو غیره باشد .توجه کنید که اين کد نمیتواند يک نوع دادهاي Aliasباشد.
اختیاري است و مقدار length است که طول نوع دادهاي مورد نظر را مشخص میکند. integer يک Length •
پیشفرض آن 30است.
Expressionيک عبارت معتبر با هر نوع دادهاي قابل تبديلشدن است. •
Styleيک integerاختیاري است که مشخص میکند تابع () CONVERTچگونه عبارت را ترجمه میکند .اگر •
تابع () CONVERTمقدار ترجمه شده expressionبه target_typeرا با يک styleمشخص شده بازمیگرداند.
خاص و متفاوت است .برخالف تابع SQL Server است .بههرحال ،براي ()CAST مشابه تابع ()CONVERT تابع
است که به طور وسیع در بسیاري از محصوالت پايگاه ANSI-SQL بخشی از توابع ()CAST () ،CONVERTتابع
دادهاي ديگر در دسترس است.
SQL Server مثالهاي تابع () CONVERTدر
integer الف) استفاده از تابع () CONVERTبراي تبديل يک عدد اعشاري به يک
اين مثال از تابع () CONVERTبراي تبديل عدد اعشاري 9.95به يک integerاستفاده میکند:
ب) استفاده از تابع () CONVERTبراي تبديل يک عدد اعشاري به يک عدد اعشاري ديگر با طول متفاوت
www.takbook.com
اين مثال از تابع () CONVERTبراي تبديل عدد اعشاري 9.95به يک عدد اعشاري ديگر با صفر عدد اعشار استفاده
میکند:
;SELECT CAST(9.95 AS DEC(2,0)) result
خروجی به اين صورت است:
توجه کنید که رفتارهاي گرد کردن و کوتاه کردن تابع () CONVERTدقیقاً مشابه رفتارهاي تابع () CASTاست.
datetime پ) استفاده از تابع () CONVERTبراي تبديل يکرشته به يک مقدار
اين مثال از تابع () CONVERTبراي تبديل رشته ‘ ’2019-03-14به يک مقدار Datetimeاستفاده میکند:
SELECT
;CONVERT(DATETIME, '2019-03-14') result
خروجی به اين صورت است:
اين مثال از تابع () CONVERTبراي تبديل تاريخ و زمان فعلی به يکرشته با styleمشخص استفاده میکند:
SELECT
;CONVERT(VARCHAR, GETDATE(),13) result
اگر indexبرابر با 1باشد ،تابع () CHOOSEمقدار elem_1را بازمیگرداند .اگر indexبرابر با 2باشد ،تابع ()CHOOSE
خارج از بازه لیست index تبديل يا castمیشود .درصورتیکه integer اگر indexيک مقدار integerنباشد ،به يک
باشد ،تابع () CHOOSEمقدار NULLرا بازمیگرداند.
SQL Server مثالهاي تابع () CHOOSEدر
الف) استفاده از تابع () CHOOSEبراي مقادير رشته
اين مثال ،دومین آيتم از لیست مقادير را بازمیگرداند:
SELECT
;CHOOSE(2, 'First', 'Second', 'Third') Result
خروجی به اين شکل است:
از order_status براي بازگرداندن وضعیت سفارش بر اساس مقدار موجود در ستون ()CHOOSE مثال زير از تابع
جدول sales.ordersاستفاده میکند:
SELECT
order_id,
www.takbook.com
استفاده،براي بازگرداندن فصلهايی که در آنها مشتريان محصول خريداري کردهاند MONTH)( مثال زير از تابع
: استفاده میشود تا فصل متناظر بازگردانده شودCHOOSE)( در تابعMONTH)( نتیجه تابع.میکند
SELECT
order_id,
order_date,
customer_id,
CHOOSE(
MONTH(order_date),
'Winter',
'Winter',
'Spring',
'Spring',
'Spring',
'Summer',
'Summer',
'Summer',
'Autumn',
'Autumn',
'Autumn',
'Winter') month
FROM
sales.orders
ORDER BY
customer_id;
www.takbook.com
تابع () ،ISNULLمقدار NULLرا با يک مقدار مشخص شده جايگزين میکند .کد زير Syntax ،تابع () ISNULLرا
نشان میدهد:
)ISNULL(expression, replacement
Replacementمقداري است که اگر عبارت NULLباشد بازگردانده میشود Replacement .بايد قابل تبديلشدن ▪
تابع () ISNULLدرصورتیکه مقدار expressionبرابر با NULLباشد ،مقدار replacementرا بازمیگرداند .اگر نوعهاي
را به نوع replacement دو آرگومان متفاوت باشند ،اين تابع قبل از بازگرداندن يک مقدار ،بهصورت ضمنی نوع
expressionتبديل میکند.
SELECT
;ISNULL(NULL,20) result
خروجی به اين شکل است:
مثال زير از تابع () ISNULLبراي بازگرداندن رشته ‘ ’Helloاستفاده میکند ،چون اولین آرگومان است و NULLنیست:
SELECT
;ISNULL('Hello', 'Hi') Result
پ) استفاده از تابع () ISNULLبراي جايگزينی مقادير NULLبا مقادير معنادار
ابتدا ،يک جدول جديد به نام divisionsايجاد میکنیم که دستهبنديهاي ورزشکار را بر اساس سن ذخیره میکند:
اگر يک دستهبندي داراي محدوديت حداقل سن نباشد ،پس ستون min_ageداراي NULLخواهد بود .به طور مشابه،
اگر يک دستهبندي نیز به حداکثر سن نداشته باشد ،ستون max_ageنیز داراي NULLخواهد بود.
در آخر ،از تابع () ISNULLبراي تبديل NULLدر ستون min_ageبه 0و تبديل NULLدر ستون max_ageبه 99
استفاده میکنیم:
SELECT
id,
ISNULL(min_age,0) min_age,
ISNULL(max_age,99) max_age
FROM
;divisions
تصوير زير ،خروجی را نشان میدهد:
تابع () ISNUMERICيک عبارت میپذيرد و اگر عبارت از نوع عددي معتبري باشد ،مقدار 1را بازمیگرداند ،در غیر
اين صورت ،مقدار 0را بازمیگرداند.
) ISNUMERIC ( expression
www.takbook.com
تابع () ISNUMERICدر واقع بررسی میکند که آيا يک مقدار میتواند به يک نوع دادهاي عددي تبديل شود يا خیر،
و سپس پاسخ صحیح را بازمیگرداند .بههرحال ،اين تابع به شما نمیگويد که کدام نوع دادهاي ،بهخوبی میتواند
جريان يا overflowرا کنترل کند.
به همین دلیل از زمان انتشار SQL Server 2012توابع () ()TRY_CAST ،TRY_PARSEو () TRY_CONVERTمعرفی
شدند.
SQL Server مثالهاي تابع () ISNUMERICدر
اين مثال ،از تابع () ISNUMERICاستفاده میکند تا بررسی کند که آيا رشته ‘ ’$10میتواند به يک عدد تبديل شود يا
خیر:
SELECT
;ISNUMERIC('$10') result
خروجی به اين صورت است:
مثال زير بررسی میکند که آيا رشته ‘ ’-E-3082.23يک عدد هست يا خیر:
SELECT
;ISNUMERIC('-2.23E-308') result
مثال زير مقدار 0را بازمیگرداند که نشاندهنده اين است که رشته ‘ ’+ABCيک عدد نیست:
SELECT
;ISNUMERIC('+ABC') result
Boolean_expressionيک عبارت است که بايد ارزيابی شود .اين عبارت بايد يک عبارت booleanمعتبر باشد، ▪
در واقع ،تابع () IIFخالصه شده يا short handيک عبارت CASEاست:
CASE
WHEN boolean_expression
THEN true_value
ELSE
false_value
END
www.takbook.com
اين مثال از تابع () IIFاستفاده میکند تا بررسی کند که آيا 10 > 20هست يا نه و رشته Trueرا بازمیگرداند:
SELECT
; IIF(10 < 20, 'True', 'False') Result
خروجی به اين شکل است:
مثال زير تابع () IIFرا بهصورت تودرتو درون توابع () IIFبه کار میبرد و وضعیت سفارش متناظر را بر اساس تعداد
سفارش بازمیگرداند:
SELECT
IIF(order_status = 1,'Pending',
IIF(order_status=2, 'Processing',
IIF(order_status=3, 'Rejected',
)'IIF(order_status=4,'Completed','N/A
)
)
) order_status,
COUNT(order_id) order_count
FROM
sales.orders
WHERE
YEAR(order_date) = 2018
GROUP BY
;order_status
تصوير زير ،خروجی را نشان میدهد:
SELECT
SUM(IIF(order_status = 1, 1, ))0 AS 'Pending',
SUM(IIF(order_status = 2, 1, ))0 AS 'Processing',
SUM(IIF(order_status = 3, 1, ))0 AS 'Rejected',
SUM(IIF(order_status = 4, 1, ))0 AS 'Completed',
COUNT(*) AS Total
FROM
sales.orders
WHERE
;YEAR(order_date) = 2017
در اين مثال ،اگر وضعیت متناظري پیدا شد ،تابع () IIFمقدار 1يا 0را بازمیگرداند .تابع () SUMتعداد سفارشها را
براي هر وضعیت بازمیگرداند.
خروجی به اين شکل است:
www.takbook.com
www.takbook.com
فصل چهارم
SQL Server امنیت در
يکی از مهمترين بخشهايی که بايد به آن توجه کرد امنیت در SQLاست که اگر درست به آن توجه نکنیم میتواند
باعث ايجاد مشکالت امنیتی و درز اطالعات مهم سازمان شود..
زمانی که يک ديتابیس را ايجاد می کنید ،امنیت زيادي نخواهد داشت و اگر روش ايجاد امنیت بر روي ديتابیس را
ندانید ،شايد تمام اطالعت خود را از دست بدهید.
4-1روشهاي احراز هويت
براي اينکه روشهاي احراز هويت در SQL Server 2019را بررسی کنیم بهتر است صفحهي اول نرمافزار SSMSرا
مشاهده کنید که در شکل 4-1مشخص شده است.
همانطور که در شکل 4-1مشاهده میکنید احراز هويت SQLاز چند قسمت تشکیل شده است که در زير همهي
آنها را بررسی خواهیم کرد:
Windows Authentication
يک روش احراز هويت است که در سرويسگیرندههاي ويندوزي تعبیه شده است ،اين يک روش پیشفرض است
اين روش بهصورت پیشفرض اجرا خواهد شد و SQL که خود ويندوز بر روي آن تأکید میکند ،در زمان نصب
کاربر موردنظر براي ورود به SQLتأيید خواهد شد.
www.takbook.com
Active همانطور که در اوايل کتاب گفتیم ،زمانی که سرور SQLرا عضو شبکه دامین میکنید ،میتوانید از کاربران
براي دسترسی به SQLاستفاده کنید و مجوز هاي الزم را براي آن در نظر بگیريد ،اما اگر بخواهید کاربر Directory
محلی در SQLايجاد کنید بايد بهمانند شکل 4-2اين کار را انجام دهید:
بايد نام کاربر خود را وارد کنید و در زير آن Login Name در شکل 4-3بايد کاربر خود را ايجاد کنید ،در قسمت
SQL Server Authenticationرا انتخاب کنید ،با انتخاب اين گزينه شما يک کاربر در داخل SQL Serverايجاد میکنید.
www.takbook.com
يک رمز عبور پیچیده وارد کنید مانند ،Test@12345اگر میخواهید رمز عبور شما با خط مش سازمان شما يکی باشد
را انتخاب کنید ،خط مش سازمان براي رمز عبور میتواند موارد زير Enforce password policy بايد تیک گزينهي
باشد:
زمانی که اين گزينه را انتخاب میکنید بايد موارد زير رعايت شود:
-1رمز عبور نبايد شامل نام کاربري باشد.
-2رمز عبور حداقل هشت کاراکتر باشد.
-3رمز عبور بايد شامل حروف ( )A-Z( ،)a-zو اعداد ( )0-9باشد.
-4رمزهاي غیرالفبايی مانند :تعجب (!) ،عالمت دالر ( ، )$عالمت عدد ( )#يا درصد (.)٪
را انتخاب کنید به اين معنا است که يک تاريخ براي Enforce Password Expiration در ادامه کار اگر تیک گزينهي
انقضاء رمز عبور کاربران در نظر گرفته خواهد شد و قبل از اينکه تاريخ انقضاء برسد به کاربران هشدارهاي الزم داده
خواهد شد تا رمز عبور خود را تغییر دهند.
را انتخاب کنید کاربر بعد از ورود بايد رمز عبور را خودش User Must Change Passeowrd at next Login گزينهي
تغییر دهد.
www.takbook.com
براي اينکه به کاربر aliدسترسی کامل دهیم تیک گزينهي securityadminرا بهمانند شکل 4-5انتخاب میکنیم.
شويد در اين صفحه که در شکل 4-6مشخص شده است ،شما میتوانید User Mapping در ادامه کار وارد تب
مشخص کنید که کاربر موردنظر بر روي کدام ديتابیس دسترسی الزم را داشته باشد.
www.takbook.com
وجود دارد که میتوانید براي دسترسی به Role در پايین شکل 4-6که در شکل 4-7مشخص شده است چندين
ديتابیس توسط کاربر موردنظر مشخص کنید ،براي اينکه بیشتر با گزينههاي موردنظر آشنا شويم به جدول 4-2توجه
کنید.
حذف کنند، sql پايگاهداده موردنظر را انجام دهند و همچنین میتوانند پايگاهداده را در
www.takbook.com
دارند. اعضاي اين گروه توانايی اجراي دستورات از نوع DDLرا db_ddladmin
اعضاي اين گروه توانايی تغییر ،حذف ،و اضافهکردن هیچ اطالعاتی را در جدولهاي db_datawriter
دارد.
اعضاي اين نقش نمیتوانند دادههاي موجود در جداول کاربران موجود در يک پايگاهداده db_denydatawriter
بخوانند. کاربر
را انتخاب کنید تا کاربر مورد نظر دسترسی کامل به ديتابیس داشته db_securityadmin در شکل 4-8تیک گزينهي
باشد
بعد از انجام کار میتوانید بر روي OKکلیک کنید تا کاربر مورد نظر ايجاد شود ،بعد از ايجاد کاربر بهمانند شکل -9
4بر روي کاربرمورد نظر کلیک راست کنید و گزينهي Propertiesرا انتخاب کنید.
www.takbook.com
در شکل 4-10جزئیات مربوط به کاربر aliرا مشاهده میکنید ،در تب Securablesيک سري دسترسیهاي پیشرفته
وجود دارد که میتوانید از طريق مدير SQLبه کاربران و ديتابیس مورد نظر اعطا کنید.
در تب Statusکه در شکل 4-11مشخص شده است میتوانید مشخص کنید که کاربر مورد نظر توانايی متصل شدن
به Database Engineرا داشته باشد يا نه و يا اينکه کاربر مورد نظر را فعال و يا غیرفعال کنید.
www.takbook.com
اگر بخواهیم يک کاربر از طريق Active Directoryرا به لیست Loginsاضافه کنیم بايد بهمانند شکل 4-12بر روي
Loginsکلیک راست کنید و گزينهي New Loginرا انتخاب کنید.
در شکل 4-13بايد گزينهي Windows authenticationرا انتخاب کنید و بر روي Searchکلیک کنید.
در شکل 4-14بايد از قسمت Locationدومین خود را انتخاب کنید و کاربر مورد نظر خود را در کادر مشخص شده
وارد کنید تا با کلیک بر روي Check Namesآن را پیدا کنید.
www.takbook.com
اگر به شکل 4-15توجه کنید بعد از انتخاب کاربر از نوع دومین ديگر نمیتوانید رمز عبور و ديگر گزينهها را خودتان
وارد و انتخاب کنید بلکه اين اطالعات از طريق سرويس Active Directoryانجام میگیرد.
SQL همانطور که در شکل 4-16مشاهده میکنید هم کاربر aliو هم کاربر spsqlکه از نوع دومین بوده به لیست
اضافه شده است ،براي اينکه با اين کاربران وارد SQLشويم بايد بر روي آيکون مورد نظر کلیک کنید.
را Properties براي حل خطاي شکل 4-17بايد بهمانند شکل 4-18بر روي سرور کلیک راست کنید و گزينهي
انتخاب کنید.
در شکل 4-19وارد تب Securityشويد و گزينهي SQL Server and Windows Authentication modeرا انتخاب کنید،
با اين کار هم با احراز هويت SQLو هم Windowsمیتوانیم وارد سرور SQLشويم.
www.takbook.com
در شکل 4-20مشخص شده است که کاربر aliکه از نوع SQL Authenticationاست توانسته وارد سرور SQLشود.
در صفحه بازشدهي شکل 22-4دستورات زير را وارد کنید و بعد از آن کلید F5را فشار دهید:
]USE [DB1
CREATE LOGIN [reza] WITH PASSWORD='1', DEFAULT_DATABASE=[DB1], CHECK_EXPIRATION=ON,
CHECK_POLICY=ON
در دستور باال و در خط اول بايد مشخص کنیم که بر روي چه ديتابیسی قرار است کار کنیم که در اينجا ديتابیس
DB1انتخاب شده است ،در خط بعد بايد دستورات اصلی را وارد کنیم ،با دستور CREATE LOGINمشخص میکنیم
است وارد میکنیم و با reza نام کاربر را که ][ جديد ايجاد کنیم که بعد از آن هم در LOGIN که میخواهیم يک
دستور WITH PASSWORDرمز عبور آن را که حتماً هم بايد در ’‘ باشد را مشخص میکنیم ،در ادامه بايد ويژگیهاي
اين کاربر را مشخص کنیم ،مثالً براي اينکه مشخص کنیم که ديتابیس پیشفرضی که کاربر بر روي آن کار میکند را
مشخص کنیم و بعد از آن میتوانیم ويژگیهاي ديگر آن مانند ]DEFAULT_DATABASE=[DB1 بايد با دستور
Enforce Password Policyو Enforce Password Expirationرا فعال کنید.
بعد از درست واردکردن دستور مورد نظر بر روي کلید F5فشار دهید تا بهمانند شکل 4-22کاربر مورد نظر ايجاد
شود.
اگر به شکل 4-23توجه کنید ،کاربر مورد نظر در لیست Loginsقرار گرفته است و براي اينکه بررسی بیشتري داشته
باشیم بر روي آن کلیک راست کنید و گزينهي Propertiesرا انتخاب کنید.
www.takbook.com
دقیقاً همان چیزي است که در دستورات وارد reza همانطور که در شکل 4-24مشاهده میکنید اطالعات کاربر
کرديم.
شکل 4-25رمزنگاری
شکل 4-26رمزنگاری
شکل 4-27هشینگ
براي اينکه اطالعات جدول را تکمیل کنیم میتوانید از دستورات زير استفاده کنید:
با دستور باال اطالعات جدول CustomerInfoکامل خواهد شد که در شکل 2-29اين موضوع را مشاهده میکنید.
میکنیم : از مراحل زير براي رمزگذاري سطح ستون استفاده
يک کلید اصلی يا همان master keyبراي پايگاهداده ايجاد کنید. •
www.takbook.com
براي انجام اين مراحل دقیقاً طبق دستورات زير پیش برويد تا مشکلی در کار پیش نیايد.
اگر به شکل 4-36توجه کنید ،يک نماي کلی از ايجاد رمزگذاري در SQL Serverرا مشاهده میکنید.
;USE CustomerData
GO
;'CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Test@12345
براي اينکه متوجه شويم دستور باال بهدرستی اجرا شده است بايد از دستور زير استفاده کنیم:
www.takbook.com
شکل 4-37
در دستور باال اول به ديتابیس CustomerDataمتصل شديم و بعد يک گواهینامهي جديد با نام Certificate_testايجاد
کرديم که موضوع آن Protect my dataاست و اگر به شکل 4-38توجه کنید اين موضوع را مشاهده خواهید کرد.
www.takbook.com
براي اينکه مطمئن شويم کار بهدرستی انجامگرفته میتوانیم از دستورات زير استفاده کنیم:
SELECT name CertName,
certificate_id CertID,
pvt_key_encryption_type_desc EncryptType,
issuer_name Issuer
;FROM sys.certificates
اگر به شکل 4-39توجه کنید متوجه خواهید شد که Certificateمورد نظر بهدرستی ايجاد شده است.
ENCRYPTED_BY_MASTER_KEY پس اگر به ستونهاي شکل 4-39توجه کنید در قسمت Encrypt Typeمقدار
از کلیدي که ايجاد کرديم در حال استفاده است ،در ستون Certnameهم که SQL قرار گرفته است که نشان میدهد
نام Certificateقرار میگیرد ،و در ستون Issuerبايد نام سازمان صادرکننده گواهینامه نوشته شود که در اينجا چون
خود SQLصادرکننده آن است يک نوشته خودمان قرار داديم.
4-4-3-3ايجاد کلید متقارن
در مرحله بعد کار بايد يک کلید متقارن ايجاد کنیم ،در مورد کلید متقارن در قسمتهاي قبل توضیح داديم ،در کل
کلید متقارن براي رمزگذاري و رمزگشايی استفاده میکند.
براي شروع بايد از دستور زير استفاده کنید:
www.takbook.com
خوب تا به اينجاي کار توانستیم کلیدهاي رمزگذاري مورد نظر را براي اين نسخه از ديتابیس ايجاد کنیم و روش
ايجاد آن بهمانند شکل 4-36است يعنی اينکه SQL Serverيک ) Service Master Key (SMKايجاد میکند و بعد از
آن سیستمعامل ) Windows Data Protection API (DPAPIاز کلید ) Service Master Key (SMKمحافظت میکند ،توجه
محافظت میکند کلید اصلی پايگاهداده پايگاهداده)(DMK داشته باشیم که کلید اصلی سرويس ) (SMKاز کلید اصلی
Certificate )(DMKاز گواهی خود امضا شده که همان Certificateباشد محافظت میکند و اين گواهینامه يا همان
از کلید Symmetricمحافظت میکند .اين شد مراحل کار تا به اينجا.
4-4-3-4رمزگذاري داده
براي اينکه يک ستون در SQLرمزگذاري شود بايد نوع داده را ) VARBINARY(maxدر نظر بگیريم ،براي اين کار و
)varbinary(MAX در ديتابیس CustomerDataيک ستون جديد با نام BankACCNumber_encryptايجاد و نوع آن را
در نظر میگیريم.
ALTER TABLE CustomerData.dbo.CustomerInfo
)ADD BankACCNumber_encrypt varbinary(MAX
همانطور که در شکل 4-41مشاهده میکنید ستون مورد نظر با موفقیت ايجاد شده است.
www.takbook.com
در ادامه میخواهیم کار اصلی را انجام دهیم ،يعنی اينکه دادههايی که در ستون BankACCNumber_encryptکه در
باال ايجاد کرديم قرار میگیرند را رمزنگاري کنیم.
پس براي اين کار بايد از همان کلید متقارن و گواهینامه قبلی که ايجاد کرديم استفاده کنیم ،با دستور زير کلید و
گواهینامه را فعال میکنیم که در شکل 4-42اين موضوع مشخص شده است.
OPEN SYMMETRIC KEY SymKey_test
;DECRYPTION BY CERTIFICATE Certificate_test
را درون ستون جديدي که با نام BankACCNumber در ادامه کار اطالعات موجود در ستون
BankACCNumber_encryptاست قرار میدهیم البته با استفاده از کلید متقارن که ايجاد کرديم اين کار را انجام میدهیم.
UPDATE CustomerData.dbo.CustomerInfo
SET BankACCNumber_encrypt = EncryptByKey (Key_GUID('SymKey_test'),
)BankACCNumber
;FROM CustomerData.dbo.CustomerInfo
GO
www.takbook.com
در ادامه بايد کلید متقارن که باز کرديد را ببنديد که بايد از اين دستور استفاده کنید:
;CLOSE SYMMETRIC KEY SymKey_test
GO
حاال میتوانیم با استفاده از دستور زير خروجی کار را مشاهده کنیم:
* SELECT
;FROM CustomerInfo
همانطور که در شکل 4-43مشاهده میکنید ستون جديد ايجاد شده و اطالعاتی که داخل آن قرار گرفتهاند رمزنگاري
شده و کسی نمیتواند از اطالعات را مشاهده کند.
تا اينجا توانستیم يک ستون از جدول را رمزگذاري کنیم تا کسی نتواند اطالعات آن را مشاهده کند ،اما اگر بخواهیم
اين اطالعات را مشاهده کنیم يعنی رمزگشايی يا همان Decryptکنیم چه کاري بايد انجام دهیم؟
براي اين کار بايد از دستور DecryptByKeyاستفاده کنیم ،براي تست اين موضوع به دستورات زير دقت کنید:
اولین کاري که انجام میدهیم کلید متقارن و گواهینامه مورد نظر را صدا میزنیم:
بعد از بازکردن موارد مورد نظر بايد از دستورات زير استفاده کنید:
در دستورات باال ستونهاي جدول مورد نظر انتخاب شدهاند ولی در ستون BankACCNumber_encryptبا استفاده از
DecryptByKeyاطالعات آن دستور ASبه ستون Encrypted dataتغییر نام پیدا کرد و همین ستون با استفاده از دستور
به ستون جديد با نام Decrypted Bank account numberرمزگشايی شد که اين موضوع را در شکل 4-44مشاهده میکنید:
www.takbook.com
حاال میخواهیم تست بگیريم که هر کاربري با هر دسترسی میتواند اين عملیات را،بعد از رمزگذاري و رمزگشايی
ايجاد میکنیمDEC-USER براي تست اين موضوع با استفاده از دستورات زير يک کاربر جديد با نام،انجام دهد يا نه
. دارد يعنی فقط میتواند اطالعات را بخواندdb_datareader دسترسیCustomerData که به ديتابیس
USE [master]
GO
CREATE LOGIN [DEC-USER] WITH PASSWORD=N'Test@12345', DEFAULT_DATABASE=[CustomerData],
CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [CustomerData]
GO
CREATE USER [DEC-USER] FOR LOGIN [DEC-USER]
GO
USE [CustomerData]
GO
ALTER ROLE [db_datareader] ADD MEMBER [DEC-USER]
GO
. شويدSQL با کاربر جديد وارد45-4 بايد با اين کاربر بهمانند شکلDEC-USER بعد از ايجاد کاربر
براي حل اين مشکل بايد به کاربر مورد نظر دسترسی الزم را بدهیم تا بتواند هم به کلید متقارن و هم به گواهینامه
مورد نظر دسترسی داشته باشد.
بعد از دادن دسترسیهاي الزم دوباره دستورات باال را در اين قسمت وارد و اجرا میکنیم:
OPEN SYMMETRIC KEY SymKey_test
;DECRYPTION BY CERTIFICATE Certificate_test
www.takbook.com
فصل پنجم
پشتیبانگیري و بازيابی
میتوان يکی از مهمترين بخشهاي يک سیستم نرمافزاري را بخش پشتیبانی و بازيابی آن بیان کرد .در سازمانهاي
بزرگ مانند بانکها در يک ثانیه چندين هزار رکورد در ديتابیس و جداول ثبت میشود و اگر چنانچه از ديتابیس مورد
نظر پشتیبان نداشته باشید با ازدسترفتن اطالعات اصلی ديگر نمیتوانید به آن اطالعات دسترسی داشته باشید پس
بايد مسیر را دقیقاً مشخص کرد تا بتوانیم در سريعترين زمان ممکن اطالعات را برگردانیم.
استفاده کنید و يا اينکه از SQL روشهاي پشتیبانگیري از ديتابیس بسیار زياد است که میتوانید از خود نرمافزار
نرمافزارهاي جانبی استفاده کنید که در اينجا همهي آنها را بررسی میکنیم.
شکل 5-1
را با هم بررسی کنیم ،براي اينکه سرويس Backupرا فعال کنیم بايد Database Maintenance در ادامه میخواهیم ابزارهاي
کلیک راست کنید و گزينهي Maintenace Plans شويد و بر روي Management بهمانند شکل 5-2وارد قسمت
Maintenace Plan Wizardرا انتخاب کنید.
www.takbook.com
شکل 5-2
در شکل 5-3بايد يک نام بهدلخواه وارد کنید و در قسمت زيري آن براي زمانبندي فعالً گزينهي Separateرا انتخاب
کنید.
شکل 5-3
در شکل 5-4گزينههاي مختلفی را مشاهده میکنید که هرکدام براي يک کار طراحی شدهاند که در زير آنها را بررسی
میکنیم.
www.takbook.com
265
فصل / 5پشتیبانگیري و بازيابی
شکل 5-4
بعد از بررسی گزينههاي مورد نظر براي تست کار بهمانند شکل 5-5سه گزينهي مورد نظر را انتخاب کنید و بر روي
Nextکلیک کنید.
شکل 5-5
www.takbook.com
267
فصل / 5پشتیبانگیري و بازيابی
همانطور که در شکل 5-6مشاهده میکنید سه گزينهي مورد نظر انتخاب شده است و براي ادامه بر روي Nextکلیک
کنید.
شکل 5-6
بهمانند شکل 5-7بايد مشخص کنید که چه ديتابیسی بايد انتخاب شود تا عملیات Check Integrityبر روي آن اعمال
و يا خودتان System Database شود که میتوانید با انتخاب گزينهي All databasesهمهي آنها را انتخاب کنید و يا
انتخاب کنید که بهتر است گزينهي All databasesرا انتخاب کنید.
شکل 5-7
بعد از انتخاب All databaseچند گزينه را در شکل 5-8مشاهده میکنید که در ادامه آنها را معرفی میکنیم.
www.takbook.com
شکل 5-8
Include Indexes
اين گزينه براي بررسی درستی و يکپارچگی ايندکسهاي جداول در ديتابیس است که انجام میشود.
Physical Only
اين گزينه بعد از اجرا فقط ساختار Pageها و سرصفحههاي رکوردهاي موجود را بررسی میکند.
Tablock
با فعالکردن اين گزينه ديتابیس مورد نظر براي مدتزمان کوتاهی قفل شده و دستور بررسی سالمت ديتابیس يعنی
DBCC CHECKDBفعال میشود و بعد از اجرا دستور ديتابیس مورد نظر از قفل باز میشود ،بکی از ويژگیهاي اين
روش بعد از اجرا باعث افزايش سرعت بررسی ديتابیس خواهد شد.
269
فصل / 5پشتیبانگیري و بازيابی
شکل 5-9
در شکل 5-9بايد يک نام براي زمانبندي خود وارد کنید و بعد بايد مشخص کنید که اين وظیفه در چه زمانهايی
اجرا شود مثالً میتوانید هفتگی انتخاب کنید يا بهصورت روزانه که در اينجا روزانه را انتخاب میکنیم ،در قسمت
سوم می توانیم ساعت اجرا اين وظیفه را مشخص کنیم که ساعت 12بامداد انتخاب شده است و در قسمت آخر
میتوانید مشخص کنید که اين زمانبندي از چه تاريخی اجرا شود که بهصورت پیشفرض تاريخ امروز انتخاب خواهد
شد ،بر روي OKکلیک کنید.
در شکل 5-10بايد مشخص کنید که چه ديتابیسهايی را میخواهید بر روي آن عملیات shrinkانجام دهید که دو
ديتابیس که با هم ايجاد کرديم را انتخاب میکنیم ،اگر در پايین صفحه تک گزينهي ignore..را انتخاب کنید در زمان
Shrinkاز ديتابیسهايی که آفالين هستند صرفنظر خواهد شد.
شکل 5-10
www.takbook.com
شکل 5-11
را بايد مشخص کنید ،براي اين کار بايد ديتابیس مورد نظر خود را انتخاب Full backups در شکل زير نحوه انجام
استفاده کنید تا همهي ديتابیسها اعم از سیستمی و All Databases کنید که بهترين حالت اين است که از گزينهي
کاربر را تخصیص دهد .در پايین شکل 5-12نوع ذخیرهسازي فايل را بايد مشخص کنید که داراي سه حالت است
که در زير بررسی میکنیم.
شکل 5-12
www.takbook.com
271
فصل / 5پشتیبانگیري و بازيابی
براي ذخیره کردن فايلهاي پشتیبان در هاردديسک سیستم خود و يا در يک آدرس شبکه است که در Disk گزينهي
ادامه بررسی میکنیم.
براي ذخیره اطالعات بر روي نوار مغناطیسی میشد که يک روش بسیار مقرونبهصرفه است ،هرچند tape گزينهي
که بسیار قديمی شده ولی به علت ظرفیت باالي آن و قیمت پايین آن حتی در شرکتهاي بزرگ هم در حال استفاده
است.
گزينهي URLبراي ذخیره کردن اطالعات در يک آدرس تحت وب طراحی شده است مانند آدرس زير:
'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2
'_0.bak
در پايین صفحه میتوانید زمانبندي مورد نظر خود را مشخص کنید ،در Disk در ادامه کار بعد از انتخاب گزينهي
شکل 5-13بايد زمانبندي انجام Full Backupرا مشخص کنید ،براي انجام Full Backupبهتر است گزينهي هفتگی
را انتخاب کنید دلیل آ ن هم اين است که اگر تعداد زيادي ديتابیس با حجم باال داشته باشید انجام Full Backupمیتواند
حجم زيادي را از حافظهي شما پر کند و بهترين کار اين است که بهصورت هفتگی اين کار را انجام دهید و به
Differential Backupرا بهصورت روزانه انجام دهید.
شکل 5-13
Backup در ادامه کار بهمانند شکل 5-14وارد تب Destinationشويد و در اين تب بايد مشخص کنید که فايلهاي
انتخاب شده است توجه داشته باشید براي اينکه نرمافزار C:\Backups در کدام مسیر ذخیره شود که در اينجا مسیر
دسترسی ايجاد SubFolderرا داشته باشید بهتر است تیک گزينهي Create a sub-directoryرا انتخاب کنید ،در پايین
صفحه میتوانید پسوند فايل Backupخود را بهدلخواه وارد کنید که بهصورت پیشفرض پسوند bakوارد شده است.
www.takbook.com
شکل 5-14
در ادامه بهمانند شکل 5-15وارد تب Optionsشويد ،در اين تب میتوانید با انتخاب گزينهي Backup set will Expore
مشخص کنید که فايلهاي Backupبعد از مدت مشخصشدهي 14روز ازروي هارد پاک شوند و فايل Backupجديد
جايگزين آن شود.
يکی از مهمترين قسمتهايی که بايد مراقب آن باشد اين است که تیک گزينهي Verify Backup Integirityرا انتخاب
کنید ،اين گزينه بعد از انجام Backupفايل Backupرا تست میکند تا سالم باشد و بعد از آن پردازش به پايان میرسد،
قابل بازگردانی نبودن و مدير شبکه با مشکل بزرگی روبرو شده است، Backup در جاهايی ديده شده که فايلهاي
پس حتماً تیک اين گزينه را بزنید ،البته اگر حجم Backupزياد باشد مقدار زمان انجام عملیات بیشتر خواهد شد.
گزينهي Backup Encryptionرا اگر انتخاب کنید بر روي فايلهاي Backupيک رمز عبور به همراه هشینگ قدرتمند
قرار میدهد تاکسی نتواند اطالعات را به سرقت ببرد.
www.takbook.com
273
فصل / 5پشتیبانگیري و بازيابی
شکل 5-15
در ادامه بر روي Nextکلیک کنید ،در شکل 5-16می توانید مشخص کنید که گزارشگیري از اطالعات اين کار در
چه مسیري ذخیره شود ،البته اين فايل بهصورت TXTاست و اگر هم بخواهید به يک آدرس خاص ايمیل شود بايد
تیک گزينهي E-mail reportرا انتخاب کنید.
شکل 5-16
www.takbook.com
شکل 5-17
همانطور که در شکل 5-18مشاهده میکنید اطالعات بهدرستی تأيید و ايجاد شده است.
شکل 5-18
در شکل Plan 5-19مورد نظر ايجاد شده است و براي اينکه بررسی کاملتري داشته باشیم بر روي آن کلیک راست
کنید و گزينهي Modifyرا انتخاب کنید.
www.takbook.com
275
فصل / 5پشتیبانگیري و بازيابی
شکل 5-19
در شکل 5-20هر سه قسمتی که در قسمتهاي قبل ايجاد کرديم را مشاهده میکنید اگر بر روي آنها کلیک کنید
عملکرد آنها را مشاهده خواهید کرد ،در جلوي آنها زمانبندي را میتوانید تغییر يا حذف کنید و حتی میتوانید نام
هر يک از Ruleها را تغییر دهید.
شکل 5-20
بعد از ايجاد Planبايد آن را اجرا کنیم ،براي اجرا بهمانند شکل 5-21بر روي Planمورد نظر کلیک راست کنید و
گزينهي Executeرا انتخاب کنید.
www.takbook.com
شکل 5-21
بعد از اجرا بهاحتمال زياد با خطاي شکل 5-22مواجه خواهید شد که آن هم به اين خاطر است که ما براي هر يک
از قسمتها يک زمانبندي تعريف کرديم و بهخاطر همین اين سه قسمت از هم جداشدن ،براي حل اين مشکل بايد
آنها را در يک قسمت قرار دهیم.
شکل 5-22
براي حل مشکل بهمانند شکل 5-23وارد Modifyشويد و Subplan_2و Subplan_3را از لیست حذف کنید.
www.takbook.com
277
فصل / 5پشتیبانگیري و بازيابی
شکل 5-23
در ادامه بهمانند شکل 5-24وارد منوي Viewشويد و بر روي Toolboxکلیک کنید ،البته از سمت چپ هم میتوانستید
ToolBoxرا اجرا کنید.
شکل 5-24
بهمانند شکل 5-25در subplan_1بايد گزينهي Shrinkرا کشیده و در محل مورد نظر رها کنید.
www.takbook.com
شکل 5-25
بايد فلش بااليی را به آن متصل کنید و بعد براي تنظیم آن دو بار برروي Dhrinkکلیک Shrink بعد از اضافهکردن
کنید.
شکل 5-26
در شکل 5-27بايد All databasesرا انتخاب کنید و بر روي OKکلیک کنید.
www.takbook.com
279
فصل / 5پشتیبانگیري و بازيابی
شکل 5-27
را هم به لیست اضافه کنیم که اين کار را بايد بهمانند شکل 5-28 Back UP Database Task در ادامه بايد گزينهي
انجام دهید.
شکل 5-28
بهمانند شکل 5-29گزينهي آخر را هم متصل کنید و با دو بار کلیک بر روي آن تنظیمات آن را هم به نسبت قبل
انجام دهید و اطالعات را ذخیره کنید.
www.takbook.com
شکل 5-29
بعد از اجراي مراحل باال اگر بهمانند شکل 5-30بر روي Executeکلیک کنید عملیات بهمانند شکل 5-31با موفقیت
انجام شود.
شکل 5-30
www.takbook.com
281
فصل / 5پشتیبانگیري و بازيابی
شکل 5-31
بهمانند شکل 5 -32وارد آدرس ذخیرهسازي Backupشويد و مشاهده خواهید کرد فايلهاي Backupبهدرستی ايجاد
شدهاند.
شکل 5-32
براي اينکه متوجه شويد Maintenance Plansچند بار اجرا شده و درست کار کرده يا نه بايد بهمانند شکل 5-33بايد
بر روي Planمورد نظر کلیک راست و گزينهي View Historyرا انتخاب کنید.
شکل 5-33
www.takbook.com
شکل 5-34
همانطور که گفتیم عملیات Maintenance Plansتوسط سرويس Agentانجام میشود اگر بهمانند شکل 5 -35وارد
قسمت SQL Server agentشويد میتوانید Planمورد نظر را مشاهده و آن را اجرا و تنظیمات آن را تغییر دهید.
شکل 5-35
به لیست Back UP Database استفاده کنیم بايد بهمانند شکل 5-36يک Differential Backup براي اينکه بتوانیم از
اضافه کنید و بر روي آن کلیک راست کنید و گزينهي Editرا انتخاب کنید ،يا اينکه دوبار کلیک کنید.
www.takbook.com
283
فصل / 5پشتیبانگیري و بازيابی
شکل 5-36
در شکل 5-37بايد در قسمت Backups Typeگزينهي Differentialرا انتخاب کنید و All Databaseرا هم انتخاب
کنید.
شکل 5-37
بهمانند شکل 5-38در تب Destinationهم همان آدرس قبلی را انتخاب و تیک گزينهي مورد نظر را انتخاب کنید،
در تب Optionsهم همان گزينههاي قبلی را انتخاب و بر روي OKکلیک کنید.
www.takbook.com
شکل 5-38
بعد از انجام مراحل باال میتوانید بهمانند شکل Plan 5-39مورد نظر خود را اجرا کنید.
شکل 5-39
بعد از اجرا اين سرويس بهمانند شکل 5-40در هر اجرا دو فايل پشتیبان ايجاد میکند که يکی Fullاست و ديگري
Differenctailکه حجم آنها مشخصکننده فايل مورد نظر است.
آيا به نظر شما اين روش پشتیبانگیري درست است؟
نه اين روش کامالً اشتباه است ،بهخاطر اينکه اين Planکه ايجاد کرديم هر دو فايل را در هر بار اجرا تولید میکند و
اين کار بسیار بر حجم فضاي ذخیرهسازي تاثیر گذار خواهد بود ،براي حل اين مشکل بهتر است هر کدام را جداگانه
در يک Planمختلف با زمانبندي مختلف قرار دهیم.
www.takbook.com
285
فصل / 5پشتیبانگیري و بازيابی
شکل 5-40
در شکل 5-41دو Planمتفاوت ايجاد کرديم و در زمانبندي آنها براي Full Backupهفگی را مشخص کرديم و براي
Differenctialروزانه را مشخص کرديم ،با اين کار هر هفته يک Fullو هر روز يک Differenctialگرفته خواهد شد.
شکل 5-41
شکل 5-42
را انتخاب میکنیم و در پايین صفحه بايد مسیر Full را انتخاب کنید که گزينهي Backup در شکل 5-43بايد نوع
قرار خواهد گرفت ،ولی SQL را مشخص کنید که بهصورت پیشفرض در مسیر نصب Backup ذخیره شدن فايل
چون در قسمت قبلی از Planاستفاده کرديم مسیر را تغییر داده است ،در تبهای دیگر هم یمتوانید مشخص کنید
که بعد از تهیه پشتیبان فایلها تست شوند تا مشکیل نداشته باشند.
شکل 5-43
بعد از کلیک بر روي OKدر شکل 5-43عملیات شروع شده و تايید آن در شکل 5-44مشخص میشود.
www.takbook.com
287
فصل / 5پشتیبانگیري و بازيابی
شکل 5-44
شکل 5-45
در شکل 5-46بايد نام ديتابیس به همراه پشتیبانی که از قبل تهیه کرديد را انتخاب کنید.
www.takbook.com
شکل 5-46
توجه داشته باشید که براي اينکه فايل پشتیبان براي تاريخ خاصی را انتخاب کنید بايد در شکل 5-46بر روي Timeline
کلیک کنید.
در شکل 5-47میتوانید با انتخاب گزينهي Last Backup takenاز آخرين Backupگرفته شده استفاده کنید و يا اينکه
اگر تاريخ خاصی مد نظر شما هست بايد گزينهي Specific date and timeرا انتخاب کنید و بعد تاريخ مورد نظر خود
را مشخص کنید ،البته در قسمت Timelineمیتوانید بهصورت گرافیکی بر روي آيکونهاي مورد نظر کلیک کنید که
آيکون سبز پر رنگ نشاندهندهي Full Backupاست.
شکل 5-47
بعد از اينکه بر روي OKکلیک کرديد بايد عملیات Restoreانجام شود که در شکل 5-48اين موضوع را مشاهده
میکنید.
www.takbook.com
289
فصل / 5پشتیبانگیري و بازيابی
شکل 5-48
شکل 5-49
در شکل 5-50شما بايد ديتابیسی که قرار است برگردانید را از لیست انتخاب کنید که اين کار به علت حذف ان
ديتابیس امکان پذير نیست بهخاطر همین موضوع بايد در قسمت Databaseنام ديتابیس خود را وارد کنید و در ادامه
بايد گزينهي Deviceکلیک کنید و بعد بر روي Browseکلیک کنید.
www.takbook.com
شکل 5-50
در شکل 5-51بايد بر روي Addکلیک کنید و فايل پشتیبان Fullرا به لیست اضافه و بر روي OKکلیک کنید.
شکل 5-51
بهمانند شکل 5-52بعد از کلیک بر روي OKبهدرستی ديتابیس مورد نظر به لیست اضافه خواهد شد.
www.takbook.com
291
فصل / 5پشتیبانگیري و بازيابی
شکل 5-52
شکل 5-53
www.takbook.com
شکل 5-54
همانطور که در شکل 2-55مشاهده میکنید ديتابیس DB1از لیست حذف شده است اين بدان معنا نیست که ديتابیس
از هارد حذف شده باشد بلکه فقط از لیست حذف شده است که اين موضوع را در شکل 5-56مشاهده میکنید
شکل 5-55
اگر بهمانند شکل 5-56وارد آدرس مورد نظر شويد ديتابیس DB1را مشاهده خواهید کرد.
شکل 5-56
اضافه کنیم بهمانند شکل 5-57بر روي پوشهي Databasesکلیک راست کنید SQL براي اينکه دوباره ديتابیس را به
و گزينهي Attachرا انتخاب کنید.
www.takbook.com
293
فصل / 5پشتیبانگیري و بازيابی
شکل 5-57
در شکل 5-58بر روي Addکلیک کنید و ديتابیس DB1را از آدرس مورد نظر که در شکل 5-56مشخص کرديم
انتخاب کنید و بر روي OKکلیک کنید.
شکل 5-58
استفادههاي ديگر اين ابزار زمانی است بخواهید سرور SQLخود را تغییر دهید و ديتابیسها را از يک سرور به سرور
ديگر انتقال دهید ،البته راههاي بهتر و متنوعتري هم براي اين کار وجود دارد.
پردازنده بهتر است ،حداقل دو هستهاي و 2گیگاهرتز سرعت داشته باشد. پردازنده
حداقل رم بايد 4گیگابايت باشد تا عملکرد متوسّط از سرور را داشته باشیم. رم
بهترين حالت استفاده از کارت شبکه ،گیگابايت است تا حداکثر سرعت را در کارت
انتقال فايل داشته باشیم. شبکه
هارددیسک براي نصب و راهاندازي ،حداقل بايد 6گیگابايت محلّ ذخیرهسازي داشته باشیم،
و ذخیره اين فايلها بايد هاردهايی با ظرفیّت باال به Backup البتّه براي اجراي
نسبت شبکه داشته باشیم تا کلّ اطّالعات شبکة ما را پشتیبانی کند.
سیستمعامل از سیستمعامل ويندوز که لیست آن در زير آمده است ،میتوان استفاده کرد:
Microsoft Windows Server 2019
Microsoft Windows Server 2016
Microsoft Windows Server 2012 R2
Microsoft Windows Server 2012
Microsoft Windows Server 2008 R2 SP1
Microsoft Windows Server 2008 SP2
Microsoft Windows 10
Microsoft Windows 8.x
Microsoft Windows 7 SP1
295
فصل / 5پشتیبانگیري و بازيابی
در شکل ،5-60قرار دادنامه را بررسی و تأيید کنید و بر روي Nextکلیک کنید.
در شکل ،5-61اگر اليسنس نرمافزار را خريداري کرديد ،بر روي Browseکلیک کنید و فايل اليسنس را معرّفی کنید
کلیک کنید که البته يک اليسنس Next و اگر اليسنسی در اختیار نداريد ،میتوانید از آن صرفنظر کنید و بر روي
Trialرا براي شما در نظر میگیرد و بعد از چند روز غیرفعال خواهد شد.
در شکل ،5-63اگر پیشنیازهاي نرمافزار بر روي سیستم شما نصب باشد ،خطايی نمیدهد ،امّا اگر با خطا مواجه
شديد میتوانید بر روي Installکلیک کنید تا کار نصب انجام شود.
همانطور که در شکل 5-64مشاهده میکنید ،پیشنیازهاي نرمافزار بهدرستی نصب شده است ،بر روي Nextکلیک
کنید.
297
فصل / 5پشتیبانگیري و بازيابی
در شکل 5-65بر روي Installکلیک کنید تا کار نصب آغاز شود.
بعد از نصب ،نرمافزار Veeam backup & Replication Consoleرا اجرا کنید ،بهمانند شکل 5-66در قسمت اوّل ،کلمة
نوشته شده است که اشاره میکند به سیستمی که در حال کار با آن هستید و نرمافزار بر روي آن نصب Localhost
شده است ،اگر نرمافزار بر روي سرور ديگري نصب شده باشد بايد بهجاي ،Localhostنام سرور مورد نظر را وارد
کنید ،براي ورود از همان کاربري استفاده میکند که با آن وارد سیستم شدهايد؛ بر روي Connectکلیک کنید تا نرمافزار
اجرا شود.
همانطور که در شکل 5-67مشاهده میکنید ،نرمافزار اجرا شده و آماده کار است ،البته اليسنس آن بايد فعال شود
تا چند روز ديگر انقضا نشود ،اين نرمافزار داراي ابزارهاي مختلفی است که میتواند عملکرد مشخصی را ارائه دهد،
در ادامه نحوهي پشتیبانگیري از ماشین مجازي و فايلهاي آنها مخصوصاً ديتابیس SQLرا بررسی خواهیم کرد.
www.takbook.com
شکل 5-68
بايد مشخص کنید که سیستم مجازيسازي شما مربوط به کدام شرکت است اگر از VMware vSphere در شکل 5-69
استفاده میکنید گزينهي اول را انتخاب کنید و يا اگر از Hyper-vشرکت مايکروسافت استفاده میکنید گزينهي دوم
را انتخاب کنید ،در مورد هر دو نرمافزار در کتابهاي مدير شبکه و Vmware Systemsآموزش کافی داده شده و براي
دريافت می توانید به سايت بنده مراجعه کنید ،براي ادامه کار بر روي گزينهي اول کلیک کنید.
www.takbook.com
299
فصل / 5پشتیبانگیري و بازيابی
در صفحهي شکل 5-70بر روي vSphereکلیک کنید تا سرور vCenterيا ESXiخود را معرفی کنیم.
در شکل 5-71بايد آدرس سرور ESXiيا vCenterخود را وارد کنید ،توجّه داشته باشید ،البته شايد براي راهاندازي
يا يک سرور فیزيکی استفاده کرده باشید که در ادامه کتاب نحوه VMware Workstation از نرمافزار SQL سرور
پشتیبانگیري از آنها هم آموزشداده شده است.
در شکل 5-72بايد نام کاربري که براي ورود به سرور استفاده میکنید را وارد کنید ،براي اين کار بر روي Addکلیک
کنید و در قسمت شمارة دو ،نام کاربر را وارد و بر روي OKکلیک کنید ،پورت پیشفرض براي ارتباط با سرور443 ،
است که در صورت تغییر آن بايد شمارة پورت خود را وارد کنید.
www.takbook.com
بعد از اينکه بر روي Applyکلیک کنید شکل 5-73ظاهر خواهد شد که بايد گواهینامهي سرور را مورد تأيید قرار
دهید.
همانطور که در شکل 5-74مشاهده میکنید سرور مورد نظر به لیست اضافه شده است و با کلیک بر روي آن همهي
ماشینهاي مجازي مورد نظر را مشاهده خواهید کرد.
بهمانند شکل ،5-75براي اينکه تستی از نرمافزار داشته باشیم ،میتوانیم بر روي ماشین مجازي خود در سرور
Vmwareکلیک راست کنیم و از آن پشتیبان تهیّه کنیم ،قسمت شمارة 1و ،2ابزارهايی براي اين کار وجود دارد؛ براي
شروع بر روي VeeamZipکلیک کنید.
www.takbook.com
301
فصل / 5پشتیبانگیري و بازيابی
در شکل 5-76بايد آدرس ذخیره شدن آن را بر روي سیستم خود مشخّص و بر روي okکلیک کنید ،توجه داشته
باشید که براي ذخیره اطالعات و فايلهاي پشتیبان بايد در قسمت Repositoryيک مسیر ذخیرهسازي مشخص کنیم
نصب شده است انتخاب شد ولی در ادامه و در Veeam که در اينجا بهصورت پیشفرض يک مسیر در سروري که
قسمت Repositoryحتماً مراحل را بهصورت کامل بررسی خ.اهیم کرد.
براي اينکه متوجّه شويم کاري که انجام داديم بهدرستی عمل کرد يا نه بايد از سمت چپ بر روي Homeکلیک کنید
و در قسمت Last 24 Houresمیتوانیم آخرين تغییرات را مشاهده کنیم ،در شکل 5-77مشخص شده است که عملیات
پشتیبانگیري از سرور SQLبا موفقیت انجام شده است.
www.takbook.com
اگر بر روي هرکدام از Logهاي مورد نظر در شکل 5-77کلیک کنید ،صفحهاي بهمانند شکل 5-78ظاهر میشود،
در اين قسمت ،اطّالعات مربوط به فايلی که از آن پشتیبان تهیّه کرديد را مشاهده خواهید کرد ،در اين قسمت میتوانید
اندازة بک آپ را در قسمت Transferمشاهده کنید که برابر با 23.8گیگابايت است.
اگر بخواهیم فايل پشتیبان را مشاهده کنید يا نه وارد مسیر ذخیرهسازي مورد نظر شويد که بهمانند شکل 5-79
بهصورت يک فايل تکّی در قسمت مشخّصشده ذخیره شده است و حجم آن نیز 23.8گیگابايت است ،براي اينکه
از اين پشتیبان استفاده کنید بايد بر روي آن دو بار کلیک کنید.
www.takbook.com
303
فصل / 5پشتیبانگیري و بازيابی
باتوجهبه شکل ، 5-80اندازة فايل پشتیبان و تاريخ پشتیبانی آن مشخّص شده است که براي برگشت به آن روز بايد
فايل مورد نظر را از لیست ،انتخاب و بر روي Restoreکلیک کنید ،با اين کار بسته بهسرعت شبکه و يا هاردديسک
سرور ماشین مورد نظر شما برگشت داده خواهد شد
منوي شکل 5-81ظاهر خواهد شد که براي اينک ماشین مورد نظر را در همان مسیر Restore بعد از کلیک بر روي
Restoreکنیم بايد گزينهي Entire VMرا انتخاب کنید.
در شکل ،5-82آخرين بک آپ مربوط به ماشین مورد نظر را مشاهده میکنید که میتوانید تاريخ مورد نظر خود را
انتخاب کنید و بر روي Nextکلیک کنید.
www.takbook.com
در شکل 5-83اگر گزينه ي اول را انتخاب کنید فايل پشتیبان دقیقاً جاي همان ماشین مورد نظر را خواهد گرفت و
اگر بخواهید مسیر آن را عوض کنید بايد گزينهي دوم را انتخاب کنید.
& Backup روش ديگر براي استفاده از فايل بک آپ ،اين است که بهمانند شکل 5-84از قسمت شمارة يک وارد
را انتخاب کنید؛ با انتخاب اين گزينه ،صفحة مربوط به فايلهاي Disk شويد و از قسمت شمارة دو، Replication
پشتیبانگیري شده را مشاهده خواهید کرد ،بر روي فايل مورد نظر کلیک راست کنید؛ در اين منو گزينههاي مختلف
وجود دارد ،با انتخاب گزينة اوّل میتوانید خیلی سريع بک آپ مورد نظر را برگردانید.
اگر بخواهید اطالعات ماشین مجازي را مشاهده کنید ،مثالً می خواهید يک فايل خاصی را از درون ماشین مجازي و
Microsoft از يکی از درايوهايش برداريد ،براي اين کار بايد بهمانند شکل 5-85از قسمت Restore guest filesگزينهي
Windowsرا انتخاب کنید.
www.takbook.com
305
فصل / 5پشتیبانگیري و بازيابی
همانطور که در شکل 5-86مشاهده میکنید ،فايلهاي مربوط به ماشین مجازي را مشاهده میکنید و اگر بخواهید
فايل خاصی را برگردانید بايد فايل مورد نظر را انتخاب کنید و در تب بااليی بر روي Restoreکلیک کنید.
اين روشهايی که با هم بررسی کرديم ،کار سادهاي است که اين نرمافزار میتواند بهخوبی انجام دهد ،در ادامه بیشتر
با ويژگیهاي قدرتمند آن آشنا خواهیم شد.
در شکل 5-88بايد در قسمت مورد نظر ،نام يا آدرس IPسرور خود که قرار است نقش پشتیبان را بازي کند را وارد
کنید و بر روي Nextکلیک کنید.
در شکل 5-89با کلیک بر روي Addبايد نام کاربري را وارد کنید که دسترسی کامل به شبکه داشته باشد ،اگر از قبل
وارد کرديد ،می توانید آن را از لیست انتخاب کنید؛ در قسمت پايین صفحه ،گزينة Portوجود دارد که پورتهايی را
که نرمافزار نیاز دارد تا با اين سرور در ارتباط باشد را مشخّص میکند که البتّه قابل تغییر است.
www.takbook.com
307
فصل / 5پشتیبانگیري و بازيابی
همانطور که در شکل 5-90مشاهده میکنید ،اطّالعات در سرور FSدر حال نصب است ،اگر به شکل 5-90دقّت
انتقال داده شد و در حال نصب است که اين پکیج ،شامل FS به سیستم Transport Veeam کنید ،يک پکیج با نام
سرويسهاي مربوط به نرمافزار Veeamاست ،بعد از پايان کار بر روي Finishکلیک کنید.
در مرحلة بعد بايد سیستمی را که بهعنوان پشتیبان اضافه کرديد را در لیست Repositoriesيا همان ،مخزن اضافه کنید
شويد و در Backup Repositories تا بتوانید اطّالعات را به آن انتقال دهید ،براي اين کار بهمانند شکل 5-91وارد
صفحه باز شده کلیک راست و گزينهي Add backup repositoryرا انتخاب کنید.
www.takbook.com
در شکل 5-92چند نوع مختلف Repositoryوجود دارد که براي اين قسمت بايد گزينهي اول را انتخاب کنید.
309
فصل / 5پشتیبانگیري و بازيابی
در شکل 5-93بايد از قسمت ،Repository Serverنام سرور خود را انتخاب کنید ،اگر بر روي Populateکلیک کنید،
کلّ درايوهاي سیستم مورد نظر را براي شما مشخّص میکند ،بعدازاين کار بر روي Nextکلیک کنید.
در شکل 5-94بايد درايو مورد نظر را در سرور انتخاب کنید ،اگر بر روي Populateکلیک کنید ،فضاي خالی آن را
مشاهده خواهید کرد ،در قسمت شمارة يک میتوانید تعداد وظايف همزمان را مشخّص کنید ،مثالً در اين شکل ،عدد
چهار در نظر گرفته شده است که همزمان ،چهار وظیفه میتواند بر روي اين سیستم ( )FSاجرا کرد.
شکل 5-95مربوط به Restoreشدن اطّالعات و نمايش آن است که بايد Mount Serverرا مشخّص کنید که همان،
بر روي سیستم شما NFS با همان را انتخاب میکنیم ،تیک گزينة مورد نظر را انتخاب کنید تا سرويس FS سیستم
فعّال شود ،توجّه داشته باشید ،اگر از قبل بر روي سیستم شما اين سرويس نصب شده باشد در اين قسمت اين
نیز میتوانید آدرسی براي ذخیره شدن Folder سرويس نصب نخواهد شد و با مشکل روبرو میشويد ،در قسمت
اطّالعات مشخّص کنید و بعدازاين کار بر روي Nextکلیک کنید.
در اين صفحه ،اطّالعات کلّی را مشاهده میکنید ،اگر تیک گزينة آخر ،يعنی … Import Exرا انتخاب کنید ،نرمافزار
بهصورت اتوماتیک از بکآپهاي قبلی نیز استفاده خواهد کرد و اگر تیک بعدي انتخاب شود ،فايلهاي Indexرا نیز
به بک آپ اضافه میکند.
311
فصل / 5پشتیبانگیري و بازيابی
همانطور که در شکل 5-97مشاهده میکنید ،نرمافزارهاي مورد نظر در سرور نصب شده است.
در شکل ،5-98سؤال میکند که آيا مايل هستید Repositoryپیشفرض را تغییر دهید يا نه که بايد بر روي Yesکلیک
کنید.
بعد از انجام مراحل باال براي تست بهمانند شکل 5-99وارد قسمت Filsشويد ،در اين قسمت میتوانید سرورها و
سیستم هاي کالينتی خود را به لیست اضافه کنید و از آنها پشتیبان تهیّه کنید ،براي تعريف سرور جديد و اضافهکردن
آن به لیست بايد بر روي Add Serverکلیک کنید.
شکل 5-100
در شکل ،5-101نام مورد نظر خود را وارد و بر روي nextکلیک کنید.
در شکل 5-102بايد فايلهاي منبع خود را انتخاب کنید تا يک پشتیبان از آن تهیّه کنید ،براي اضافهکردن فايل جديد
میتوانید بر روي Addکلیک کنید.
Path در شکل 5-103بايد سرور مقصد که در قسمت قبل به لیست اضافه کرديم را انتخاب کنید ،سپس در قسمت
،to folderهاردديسک داخل سرور را انتخاب و بر روي Nextکلیک کنید.
www.takbook.com
313
فصل / 5پشتیبانگیري و بازيابی
در شکل 5-104بايد زمان انجام اين کار را مشخّص کنید تا بهصورت اتوماتیک در زمان مشخّصشده ،کار پشتیبان-
گ یري انجام شود ،سعی کنید زمان آن را در ساعات بیکاري سرور در نظر بگیريد تا مشکلی در شبکه پیش نیايد؛ بر
روي Saveکلیک کنید.
اگر میخواهید بعد از بستن اين پنجره ،کار پشتیبانگیري آغاز شود بايد تیک گزينة… Run the job whenرا بهمانند
شکل 5-105انتخاب و بر روي Finishکلیک کنید.
315
فصل / 5پشتیبانگیري و بازيابی
در شکل 5-109میتوانید تمام ماشین هاي مجازي يا تنها ،يکی را به لیست اضافه کنید ،براي اين کار بايد بر روي
Addکلیک کنید.
در شکل 5-110در قسمت Repository Backupبايد سرور مورد نظر خود را انتخاب کنید که بعد از انتخاب ،مقدار
را انتخاب کنید، …Configure secondary فضاي خالی از کلّ هارد را در زير آن نمايش میدهد ،اگر تیک گزينة
میتوانید در ادامه يک سرور Repositoryديگري براي گرفتن پشتیبان دوّم انتخاب کنید.
www.takbook.com
کلیک کنید تا اين گزينه را نیز بررسی کنیم ،بهمانند شکل 5-111در Advanced بعد از انجام مراحل باال بر روي
قسمت Advancedو در تب ،Backupگزينة Incrementalرا براي انجام پشتیبانگیري از تغییرات انتخاب کنید و بعد،
گزينة backups Create active fullرا انتخاب کنید تا يک هفته ،يکبار ،يا چند بار از ماشین مورد نظر پشتیبان کامل
تهیّه کند.
بهمانند شکل 5-112در قسمت ،Maintenanceشمارة يک ،براي اينکه از وضعیّت سالم بودن فايلهاي پشتیبان خود
مطّلع شويم ،اين گزينه را فعّال میکنیم ،در قسمت شمارة دو میتوانید بر اساس روزهايی که نیاز به فايل پشتیبان
داريد ،يک عدد بهجاي عدد 14وارد کنید که تعداد روز نگهداري از فايل پشتیبان را به شما اعالم میکند ،در قسمت
شمارة سه ،اگر اين گزينه را فعّال کنید ،فايلهاي پشتیبان Defragment ،خواهند شد تا فضاي اضافی بین آنها کم شود.
www.takbook.com
317
فصل / 5پشتیبانگیري و بازيابی
بهمانند شکل 5-113در تب Storageو در قسمت اوّل میتوانید تیک هر سه گزينه را که يکسري دستورالعمل براي
کاهش حجم فايل پشتیبان است را انتخاب کنید ،در قسمت شمارة دو میتوانید طبق سرعت پردازندة خودتان ،مقدار
فشردهسازي فايلهاي پشتیبان را انتخاب کنید و در گزينة پايین آن میتوانید به نسبت سرعت شبکه ،يکی از گزينهها
را انتخاب کنید ،مثالً اگر از شبکة داخلی استفاده میکنید ،میتوانید گزينة LANرا انتخاب کنید ،در قسمت شمارة سه
میتوانید رمز عبور بر روي فايلهاي پشتیبان خود قرار دهید.
بهمانند شکل 5-114در تب Notificationمیتوانید يک آدرس ايمیل وارد کنید تا تمام رويدادهايی که در اين پشتیبانی
انجام میشود ،براي شما ايمیل شود .بقیّة تبها را در صورت نیاز بررسی خواهیم کرد.
www.takbook.com
در شکل 5-115با فعالکردن اين دو گزينه میتوانید به نرمافزار اين امکان را دهید تا بر روي سرويسها ،مانند:
Active Directoryيا بر روي جدولهاي SQLتغییرات ايجاد کند که در ادامه اين کار را انجام خواهیم داد.
شکل 5-116در اين قسمت بايد زمان انجام کار را مشخّص کنید ،بهتر است زمان مورد نظر در ساعات بیکاري شبکه
باشد؛ بر روي Saveکلیک کنید.
www.takbook.com
319
فصل / 5پشتیبانگیري و بازيابی
در شکل ،5-117تیک گزينة مورد نظر را انتخاب کنید تا بعد از بسته شدن صفحه ،کار پشتیبانگیري آغاز شود.
بعد از انجام شدن پشتیبان ،بهمانند شکل 5-119در قسمت ،Successمیتوانید موفّق بودن کار را مشاهده کنید.
321
فصل / 5پشتیبانگیري و بازيابی
بهمانند شکل 5-120بايد بر روي لینک دانلود نسخهي ويندوزي آن کلیک و آن را دانلود کنید البته براي دانلود نیاز
به ثبتنام و ورود داريد که البته میتوانید از سايتهاي ايرانی اين نسخه را دانلود کنید.
در شکل ،5-122تیک گزينة مورد نظر را برداريد و بر روي Finishکلیک کنید.
در شکل ،5-124سه گزينه را مشاهده میکنید که اگر گزينة اوّل انتخاب شود ،از کلّ اطّالعات سیستم ،پشتیبان تهیّه
خواهد کرد ،يعنی از همة پارتیشنهاي موجود؛ در گزينة دوّم میتوانید پارتیشن مورد نظر خود را بهصورت دستی
انتخاب کنید و در قسمت آخر نیز میتوانید فايلهاي مشخّص خود را در پارتیشن انتخاب کنید؛ در حال حاضر ،گزينة
اوّل را انتخاب و بر روي Nextکلیک کنید.
در شکل 5-125بايد مسیر ذخیرهسازي را انتخاب کنید که اين محل میتواند بر روي هاردديسک خود سیستم باشد،
backup Veeam يا بر روي شبکه يا بر روي مايکروسافت ondriveکه البتّه در اينجا میخواهیم از گزينة سوّم ،يعنی
Repositoryکه قبالً با هم ايجاد کرديم ،استفاده کنیم.
www.takbook.com
323
فصل / 5پشتیبانگیري و بازيابی
در شکل ،5-126بايد آدرس سروري که بر روي آن ،نرمافزار Backup & Repositoryرا نصب کرديد را وارد کنید و
يک نام کاربري با دسترسی کامل را وارد کنید ،اگر در موقع نصب نرمافزار ،پورت آن را تغییر داديد ،بايد در اين
قسمت نیز تغییر دهید و بر روي Nextکلیک کنید.
در شکل 5-127بايد Repositoryمورد نظر خود را انتخاب کنید ،در قسمت پايین ،مدّتزمان نگهداري از فايل پشتیبان
را که بهصورت پیشفرض 14 ،روز است را تغییر دهید ،بر روي Advcancedکلیک کنید.
www.takbook.com
را در طول ماه يا در طول هفته Backup Full میتوانید تعداد دفعات گرفتن Backup بهمانند شکل ،5-128در تب
مشخّص کنید که در اين قسمت بايد تیک گزينهي مورد نظر را فعّال کنید.
در تب Storageمیتوانید حالت فشردهسازي و سرعت ذخیرهسازي آن را مشخّص کنید و بر روي آن ،رمز عبور قرار
دهید که البتّه قبالً اين مورد را انجام داديم.
www.takbook.com
325
فصل / 5پشتیبانگیري و بازيابی
يک نکتهي مهم قبل از ادامهي اين قسمت ،اين است که زمانی که به Repositoryمتّصل میشويد بايد يک دسترسی
به آن منبع را براي اين کاربر يا کاربرانی که در حال متّصلشدن به آن هستند ،مشخص کنید؛ براي اين کار دوباره وارد
سرور Veeamشويد.
در شکل ،5-130از سمت چپ بر روي Infrastructure Backupکلیک کنید و در قسمت ،Repository Backupگزينهي
Permissions Access مورد نظر خود را که از قبل ايجاد کرديد را انتخاب کنید و بر روي آن کلیک راست و گزينهي
را انتخاب کنید.
در شکل 5-132در قسمت شمارهي يک میتوانید زمان پشتیبانگیري را مشخّص کنید ،در قسمت شمارهي دو اگر
گزينهي اوّل را انتخاب کنید ،در هنگام شروع پشتیبانگیري اگر سیستم خاموش باشد ،بعد از روشن شدن آن ،پشتیبان-
گیري آغاز خواهد شد و اگر گزينهي دوّم را انتخاب کنید ،اين کار انجام نخواهد شد ،در قسمت شمارهي سه نیز
میتوانید نوع ازدسترفتن سیستم را انتخاب کنید که بهترين گزينه ،همان Keep Runningاست ،در قسمت شمارهي
Log چهار می توانید نوع واکنش سیستم را در هنگام شروع به کار پشتیبانگیري مشخّص کنید که سیستم را Lockيا
offکنید و در قسمت شمارهي پنج ،اگر اين گزينه را فعّال کنید میتوانید مقدار زمان انجام پشتیبانگیري را مشخّص
Yes و بعد بر روي Apply کنید تا زمان زيادي را درگیر کار پشتیبانگیري نباشد و سیستم را خسته نکند ،بر روي
کلیک کنید.
www.takbook.com
327
فصل / 5پشتیبانگیري و بازيابی
کلیک کنید ،البتّه اگر بخواهید بعد از بستن اين Finish در شکل ،5-133اطّالعات نهايی را مشاهده کنید و بر روي
پنجره ،کار پشتیبانگیري آغاز شود ،تیک مورد نظر را انتخاب و بر روي Finishکلیک کنید.
همانطور که در شکل 5-134مشاهده میکنید ،عملیّات پشتیبانگیري از ويندوز مورد نظر و ارسال آن به سیستم
Veeamبا موفّقیّت انجام شد ،اگر بر روي هر يک از ستونهاي مورد نظر کلیک کنید میتوانید اطّالعات کاملتري از
پشتیبانگیري انجامشده به دست آوريد.
www.takbook.com
همانطور که در شکل 5-135مشاهده میکنید ،مراحل ساخت و ايجاد فايل پشتیبان نمايشداده شده است ،اگر
کلیک کنید و يا اگر Files Restore بخواهید فقط ،فايل خاصّی را دوباره به موقعیّت خود برگردانید بايد بر روي
بخواهید کلّ پارتیشن را برگردانید بايد بر روي Restore Volumesکلیک کنید.
بازگرديد ،دو گزينهي ديگر وجود دارد که براي انجام Configure backup باتوجهبه شکل ،5-136اگر دوباره به
،storageيک محلّ ذخیرهسازي را بر روي همان سیستم Local پشتیبانگیري مورداستفاده قرار میگیرد ،گزينهي
مشخّص میکند که کار جالبی نخواهد بود و گزينهي Shared folderبراي ذخیره در يکپوشهي اشتراکگذاري شده
مورداستفاده قرار میگیرد.
www.takbook.com
329
فصل / 5پشتیبانگیري و بازيابی
در شکل 5-137بايد آدرس فولدر به اشتراکگذاري شده را وارد کنید ،مطمئن باشید که محلّ مورد نظر داراي فضاي
مناسب براي اين کار است ،در قسمت پايین میتوانید نام کاربري را که به آن دسترسی دارد را وارد کنید.
براي بهدستآوردن بهترين عملکرد در شبکه بهتر است از هاردهاي SSDو شبکه با سرعت گیگابايت استفاده کنید.
بهمانند شکل ،5-138اگر وارد نرمافزار شويد از سمت چپ و از قسمت ،Homeقسمت Backupsرا باز کنید و بر
پشتیبان گرفته شده است را به ما نمايش میدهد و Agent کلیک کنید ،با اين کار سروري که از طريق Disk روي
میتوانید آن را دوباره برگردانید و يا اطالعات آن را مشاهده کنید.
www.takbook.com
فصل ششم
SQL Replication
همانطور که میدانیم افراد بسیاري وجود دارند که مشترک مجالت الکترونیکی بوده و يا اخبار روز جهان را از طريق
ايمیل خود دريافت میکنند؛ بنابراين با عضويت و مشترک شدن در اين مجالت و mailerها بهسادگی قادر به دريافت
نیز همین نقش را ايفا کرده و MS SQL در Replication اخبار روز و مورد نظر خود هستند .به طور مشابه قابلیت
دادهها را بهعنوانمثال از يک سرور ريموت به Boxهاي سرورهاي لوکال از طريق مکانیزم نشر و اشتراکگذاري
( )publications and subscriptionsانتقال میدهد.
Replicationدر واقع به مجموعهاي از توپولوژيها براي کپی و توزيع دادهها و اشیاء و يا Objectهاي پايگاهداده ،از
يک پايگاهداده به ديگري و نیز به هماهنگسازي بین پايگاههاي داده براي حفظ انسجام اطالق میشود .با استفاده از
Replicationمیتوانیم دادهها را به مکانهاي مختلف و میان کاربران از راه دور يا ريموت در سراسر شبکههاي محلی
و نیز گسترده و ارتباطات dial-upو wirelessو همچنین در اينترنت ،توزيع کنیم .داليل و سناريوهاي مختلفی موجود
است که موجب میشود که Replicationبهعنوان ابزاري قدرتمند براي پخش کردن و انتشار دادهها در نظر گرفته شود.
در اينجا به داليلی براي عمل Replicationاشاره خواهیم کرد:
درنظرگرفتن replicationبراي ازبینبردن اثرات عملیات متمرکز و فشردهي Readمثل تولید گزارش و . ...در واقع
source replicationگزينهي مناسبی است براي زمانی که اطالعات مورد نظر read onlyبوده و نیازي به آپديت کردن
نداريم.
در تهران است و ازآنجايیکه سازماندهی بخش A1 در دسترس قراردادن دادهها براي کاربر ،بهعنوانمثال سرور
توزيع ويدئوهاي آموزشی آن در شهر اهواز صورت میگیرد ،براي چنین سازماندهی ،نیازمند اطالعات کامالً مرتب
هستیم .حال هر بار که ما نیاز به استفاده از دادههاي مربوط به محصوالت و يا جداول فروش داشته باشیم از يک
Linked Serverبراي برقراري ارتباط با سرور تهران و دريافت دادههاي مورد نظر استفاده خواهیم کرد .چنین شرايطی
اثراتی را نیز به دنبال دارد:
www.takbook.com
قطعاً براي دريافت دادهها در هر زمان شديداً به ارتباطات شبکهاي متکی خواهیم بود.
سرور منبع يا همان Source Serverنیز Loadکاري بااليی را براي خواندن دادهها متحمل خواهد شد.
و جزئیات مربوط به نصب آن ابتدا بايد با مفهوم چند واژه آشنا شويم .عمل replication پیش از پرداختن به انواع
replicationبه طور سنتی از ساختار publisher//subscriberتبعیت میکند .همانند رابطهي مشترکین و ناشران مجالت.
براي هر مجله يک ناشر ( )publisherوجود دارد که اطالعات را در قالب مقاالت ( )articlesمنتشر میکند.
حال اين مجلهاي که دربردارندهي مجموعهاي از مقاالت است براي انتشار و در اختیار عموم و نیز مشترکان قرارگرفتن
نیاز به يک توزيعکننده ( )distributerدارد و اين يک ساختار استاندارد براي چرخهي publisher // subscriberمحسوب
میشود .اما گاهاً با تغییراتی در اين روند نیز مواجه میشويم بهعنوانمثال ممکن است که يک publisherبهعنوان يک
نیز subscriber يا توزيعکننده ايفاگر نقش يک distributer يا توزيعکننده ايفاي نقش کند و يا اينکه يک distributer
Articleيا مقاله :به اطالعاتی اطالق میشود که قصد replicateآنها را داريم .اين اطالعات میتواند يک جدول يا
يک روال يا procedureيا يک جدول فیلتر شده و ...را در برگیرد.
Publicationيا نشريه :به گروهی از articleها اطالق میشود .يک articleبهتنهايی قادر به انتشار نیست ازاينرو
به معنی مجموعهاي از Articleها است (اشیاء publication داريم .به بیان ديگر انتشار يا publication نیاز به ايجاد
مختلف پايگاهداده) که توسط ناشر منتشر شده است.
Publisherيا ناشر :به databaseروي Sourceسرور گفته میشود که در واقع قصد replicateدادههاي آن را داريم.
بهعبارتديگر يک Publisherدر واقع يک database Instanceاست که دادههاي موجود در طی فرايند Replicationبه
مکانهاي ديگر را در دسترس قرار میدهد .يک ناشر میتواند يک يا چندين نشريه و هر تعريف منطقی مرتبط با
مجموعهي اشیاء و دادههايی براي Replicateرا در برداشته باشد.
يا توزيعکننده :يک توزيعکننده را میتوان همانند پسربچهاي در نظر گرفت که مسئولیت تحويل Distributor
نشريات به مشترکین را به عهده دارد .يک توزيعکننده میتواند ايفاگر نقش ناشر يا مشترک نیز باشد.
replication Distribution Databaseيا پايگاه دادهي توزيع شده :اين پايگاهداده دربردارندهي تمامی خط فرمانهاي
است .زمانی که هرگونه از تغییرات شماي DMLيا DDLدر Publisherاجرا شود ،دستورات مربوط به اين اعمال که
توسط SQLسرور تولید میشود ،دراين بخش ذخیره خواهد شد .اين پايگاهداده میتواند روي همان سرور Publisher
موجود باشد اما معمو ًال براي عملکرد بهتر توصیه میشود که آن را بر روي يک سرور مجزا قرار دهند .به طور معمول
روي آن قرار دارد، publisher روي همان ماشینی باشد که پايگاهدادهي distribution database مشاهده شده که اگر
www.takbook.com
Subscriberيا مشترک :چرخهي انتشار با دريافت دادهها توسط يک مشترک پايان میيابد .تغییرات منتشر شده میان
تمامی مشترکین يک فرايند انتشار ،از طريق يک توزيعکننده تکثیر میشود؛ بنابراين يک مشترک با اشتراک و عضويت
Database Instance در يک فرايند انتشار در نهايت قادر به دريافت دادهها خواهد بود .بهعبارتديگر Subscriberيک
شده را دريافت میکند و نیز میتواند دادهها را از چندين ناشر ( )publisherيا نشريه replicate است که دادههاي
( )publishersبگیرد .بسته به نوع Replicationاي که انتخاب میشود ،يک Subscriberمیتواند دادهها را متقابالً به ناشر
انتقال داده و يا آنها را براي ساير مشترکین منتشر کند.
Subscriptionيا اشتراک :به درخواست يک مشترک يا subscriberبراي دريافت نشريه يا publicationاطالق میشود
و بر دو نوع است Pull :و Pushکه در واقع دو روش براي انتقال دادهها از distributorيا توزيعکننده به subscriberها
يا مشترکین محسوب میشوند .در ذيل به شرح آنها میپردازيم:
:Push Subscriptionدر روش push subscriptionيک distributorيا توزيعکننده مسئول دادههاي بر صف از يک
بوده و درنهايت آنها را در اختیارsubscriberها قرار میدهد .اين نوع اشتراک مديريت را ساده و متمرکز publisher
میکند چون سناريوي replicationمعمولی ،يک publisherو چندين subscriberرا شامل میشود .مزيت اين اشتراک
امنیت باالي آن است چراکه فرايند آغازين در يک مکان مديريت میشود .بهعبارتديگر کارايی distributorها کاهش
میيابد زيرا کل توزيع subscriberها يکدفعه اجرا میشود.
:Pull subscriptionهمانند روش pushيک distributorيا توزيعکننده دادههاي بر صف يک publisherبوده و اين
ارتباط برقرار کرده و دادههاي صفبندي شدهي آماده براي عمل distributor وظیفهي subscriberها است که با
replicationرا به تصرف خود درآورند .در مقايسه با روش pushاز روش pullبراي نشريههايی با امنیت پايین و تعداد
و يا publication باالي مشترک ها استفاده میشود .اين نوع اشتراک رايج تر بوده چرا که يک مشترک میتواند
نشريههايی را انتخاب کند تا در آن شرکت کند.
حال به توضیح عواملی که براي انجام replicationدر پشتصحنه فعالیت میکنند میپردازيم که Agentنامیده میشوند.
قرار دارند .همچنین تمامی مسیر………COM folder\110\. در exe اين agentها در فايلهاي مربوطه با پسوند
Distribution موجود در dbo.MSxxx__history و dbo.MSxxx__agents اطالعات مربوط به agentها در جداول
databaseثبت شدهاند .حال به شرح انواع agentها و اينکه در کدام نوع از انواع replicationکاربرد دارند میپردازيم
براي روشن شدن اين مبحث در اينجا اشاره میکنیم که replicationدر SQLسرور به سه نوع Snapshotو transactional
www.takbook.com
:Snapshot Agentيک فايل اجرايی است که snapshotفايلهاي دربردارندهي شماتیک يا ساختار و دادههاي جداول و
ذخیره میکند همچنین اطالعات مربوط به وضعیت Distributor اشیاء پايگاهداده را ايجاد کرده و آنها را در
synchronizationرا در distribution databaseثبت میکند.
را از snapshot مورداستفاده قرار میگیرد .و فايلهاي transactional و snapshot :Distribution Agentبراي انواع
distribution dbبه مشترکین انتقال میدهد همچنین تمامی تراکنشهاي منتظر براي انتشار را نیز به subscriberها منتقل
میکند و براي هر دو push subscriptionو pull subscriptionقابلاجرا است.
replication :Log Reader Agentبراي transactional replicationاستفاده میشود تراکنشهاي مشخص شده براي
را از transaction logبه distribution dbروي publisherانتقال میدهد .هر پايگاه دادهي log readerمختص به خود را
دارد که روي distributorاجرا شده و با publisherارتباط برقرار میکند.
ها اجرا کرده و تغییرات subscriber اولیه را براي snapshot کاربرد دارد و merge replication :Merge Agentدر
subscriberها انتقال میدهد .هر اشتراک ادغامی merge agent تدريجی به وجود آمده روي دادهها را نیز ادغام کرده وبه
خود را دارد که قادر به برقراري ارتباط با publisherو subscriberو بهروزرسانی هر دوي آنها میباشد.
اجرا شده و تغییرات Distributor کاربرد دارد و بر روي transactional replication :Queue Reader Agentبراي
صورتگرفته در سمت subscriberرا به publisherبازمیگرداند .برخالف merge agentو agent distributionتنها يک
distribution نمونه از Queue Reader Agentبراي سرويسدهی بهتمامی publisherها و publicationها و براي يک
dbمعین وجود دارد.
فیلترکردن جداول موجود در articleها ما را قادر میسازد تا پارتیشنهايی از دادهها را براي انتشار ايجاد کنیم .به کمک
فیلترکردن دادههاي منتشر شده میتوان:
نشريات يا publicationها را سفارشیسازي کرده و نیز شرايطی را فراهم کرد که applicationها بر اساس •
Static row filterها يا فیلترکردن رديفها بهصورت استاتیک که براي تمامی انواع replicationاز قبیل snapshotو
کاربرد دارد .با استفاده از آن قادر خواهیم بود زير مجموعهاي از رديفهايی را که منتشر merge و transactional
نیز B و A داشته باشند .بهعنوانمثال اگر ما از جدول پايهي يکسانی استفاده کنیم و دو مشترک مختلف به نامهاي
داشته باشیم که هرکدام به زيرمجموعههايی متفاوتی از آن جدول نیاز داشته باشند ،هنگام استفاده از فیلترهاي رديفی
استاندارد نیازمند ايجاد دو نشريه يکی براي مشترک Aو ديگري براي مشترک Bخواهیم بود .اما با استفاده از فیلترهاي
پارامتري میتوانیم براي مشترکین Aو Bبهصورت مجزا مقادير مورد نظر متفاوتی را در نظر بگیريم .اما در نهايت هر
يک از اين مقادير و مجموعه دادهها بهعنوان بخشی از يک نشريه محسوب میشوند.
کاربرد دارد و اين نوع فیلتر به طور معمول همراه با merge replication يا فیلتر الحاق که تنها براي Join filter
ها براي بسط و گسترش فیلترينگ به ديگر جداول مربوطه به کار میرود .مثالً يک نمايندگی parameterized filter
فروش معمو ًال دادههاي جداول ديگر از قبیل مشتريان و ديگر جداول را دارد .اين دادها میتوانند فیلتر شده باشند
بهطوريکه نماينده فروش تنها دادههاي مشتريان خود و سفارشها آنها را دريافت کند .اين نوع فیلتر همچنین میتواند
همراه با static filterها نیز به کار گرفته شود.
:Central subscriberاين يک توپولوژي رايج در انبار دادهها است .سرورها يا پايگاه دادههاي متعددي دادههاي خود
را با يک سرور مرکزي replicateمیکنند.
روي يک سرور مجزا از Distribution database :در اين توپولوژي Central publisher with remote distributor
Distributorدر نظر گرفته میشود از اين ساختار زمانی استفاده میشود که سطح فعالیتهاي replicationافزايش پیدا
میکند و يا اينکه سرور و يا منابع شبکه محدود شدهاند .اين توپولوژي زمان loadرا براي publisherکاهش داده اما
بهطورکلی موجب افزايش ترافیک شبکه میشود.
: Central distributorدر اين توپولوژي publisherهاي متعدد تنها از يک distributorاستفاده میکنند که روي سروري
point مجزا پیادهسازي شده است .اين نوع توپولوژي عمالً چندان مورداستفاده قرار نمیگیرد .چراکه تنها داراي يک
distributor of failureمیباشد (يعنی همان سروري که بهعنوان distributorمرکزي پیکربندي شده است) و اگر سرور
دچار اختالل شده و يا از کار بیفتد ،کل عملیات replicationاي که بر اساس اين سناريو صورت میگیرد ،نابود خواهد
شد.
www.takbook.com
: Publishing Subscriberاين توپولوژي داراي نقشی دوگانه است .در اين ساختار دو سرور دادههاي يکسان را منتشر
میکنند .يکی از سرورهايی که عهدهدار نقش publisherاست دادهها را براي subscriberارسال کرده و سپس subscriber
دادهها را براي هر تعداد از مشترکین موجود منتشر میکند .اين توپولوژي هنگامی کاربرد دارد که يک publisherقصد
انتقال دادهها را از طريق لینکهاي ارتباطی کُند و يا گرانقیمت به subscriberها داشته باشد.
Replication انواع
انواع replicationاي که در SQL Server 2019صورت میگیرند بهقرار زير است:
نوع replicationاي که ما انتخاب میکنیم به فاکتورهاي مختلفی وابسته است اين فاکتورها محیط فیزيکی ،replication
نوع و کمیت دادههايی که قصد replicateآنها را داريم و اينکه آيا دادهها بايد براي subscriberبهروزرسانی شوند يا
خیر را شامل میشود .محیط فیزيکی به تعداد و مکان کامپیوترهاي درگیر در عمل replicationاطالق میشود .حال
اين کامپیوترها میتوانند clientهايی همچون workstationها ،لپتاپها و يا deviceهاي handleبوده و يا سرورها را
در برگیرند.
www.takbook.com
موردنیاز میباشد و براي ديگر applicationها اين مسئله snapshot replication براي برخی از نرمافزارهاي کاربردي
قرار بگیرد. Subscriber مهم است که تغییرات ايجاد شده روي دادهها بهصورت تدريجی در طول زمان در اختیار
برخی از Applicationها نیازمند بازگشت تغییرات صورتگرفته روي داده از از subscriberبه publisherنیز هستند.
transactional replicationو merge replicationآپشنهايی هستند که اين امکان را براي اينگونه applicationها فراهم
میآورند .تغییرات صورتگرفته روي دادهها ،از طريق snapshotقابلپیگیري نیست و هر زمان که يک snapshotگرفته
پیگیري تغییرات از طريق transnational replication خواهد شد .در overwrite شده تأيید شود ،روي دادهي موجود
transaction logهاي SQL Serverو در merge replicationنیز از طريق triggerها و metadata tableها میسر خواهد بود.
حال به شرح هرکدام از انواع replicationمیپردازيم:
Snapshot Replicationيا رونوشت ثبت لحظهاي
دادهها را دقیقاً همانگونه که در يک لحظهي خاص زمانی ظاهر میشوند توزيع میکند و نمیتوان بواسطهي آن آپديت
تولید شده و براي Snapshot اتفاق میافتد synchronization و بهروزرسانی دادهها را مانیتور کرد .وقتیکه عمل
subscriberها ارسال میشود .بايد اين نکته را در نظر داشت که Snapshot Replicationبهخوديخود مورداستفاده قرار
میگیرد اما فرايند پردازش snapshotها که در واقع مراحل کپیبرداري از objectها و دادههاي تعیین شده توسط يک
هاي پايگاهداده براي object نشريه را نیز شامل میشود و معمو ًال براي فراهمآوردن مجموعهي اولیهاي از دادهها و
بهخوديخود هنگامی مناسب snapshot replication کاربرد دارد .استفاده از transactional /merge replication انواع
است که موارد عنوان شده در ذيل محقق باشند:
اگر که حجم زيادي از دادهها در طی يک دوره کوتاه زمانی تغییر کند. •
مناسبترين زمان براي استفاده از snapshot replicationهنگامی است که تغییراتی اساسی و قابلتوجه اما نادر براي
دادهها اتفاق بیفتد .براي مثال اگر لیست قیمت محصوالت موجود در فروشگاه ITProثابت بوده و يک يا دو بار در
سال در يکزمان مشخص آپديت و بهروزرسانی میشوند ،در چنین وضعیتی استفاده از snapshot replicationبعد از
www.takbook.com
مثالً اگر يک جدول نسبتاً کوچک در سرور publisherدر طی روز آپديت شده اما اندکی تاخیر نیز جايز باشد ،اين
تغییرات میتوانند بهعنوان يک Snapshotشبانه تحويل داده شوند Snapshot replication .داراي سربار مداوم کمتري
نسبت به transactional replicationبر روي publisherمیباشد چراکه تغییرات تدريجی را دنبال نمیکند .بااينحال اگر
snapshot مجموعه دادهاي که درحال replicateاست بسیار بزرگ باشد به منابع قابلتوجهی براي ساخت و بهکاربردن
بايد اندازهي کل مجموعه دادهها و فراوانی snapshot replication نیاز دارد .هنگام ارزيابی شرايط براي استفاده از
تغییرات ايجاد شده روي آنها را در نظر گرفت.
Snapshot replicationچگونه کار میکند؟
براي مقداردهی اولیه به subscriberها استفاده میکنند. snapshot ازيک replication به طور پیشفرض هر سه نوع
همیشه Snapshot agentموجود در SQL Serverوظیفة تولید فايلهاي snapshotرا به عهده دارد اما agentمربوط به
transactional ارائه و تحويل اين فايلها بسته به نوع replicationانتخاب شده ،متفاوت است Snapshot replication .و
replicationبراي ارائة فايلها از distribution agentاستفاده میکنند درحالیکه merge replicationبراي اين منظور از
merge agentبهره میگیرد Snapshot agent .روي distributorاجرا میشود distribution agent .و Merge Agentروي
يک Distributorبراي push subscriptionها اجرا شده و همچنین بر روي subscriptionها براي pull subscriberها اجرا
میشوند.
Snapshotمیتواند بالفاصله بعد از ايجاد يک ، subscriptionتولید و اعمال شود و يا اينکه بر اساس يک برنامه در
زمان انتشار ساخته شود Snapshot Agent .فايلهاي snapshotحاوي ساختار و دادههاي جداول منتشر شده ( published
)tablesو نیز اشیاء پايگاهداده را آماده کرده و اين فايلها را براي ناشر يا publisherدر Snapshot folderذخیره میکند
در Distribution databaseموجود در Distributorثبت میکند .میتوان snapshot folder و مسیر رديابی اين اطالعات را
پیشفرض را به هنگام پیادهسازي و پیکربندي يک Distributorمشخص کنیم اما میشود که محل ديگري نیز براي
نشريه ،بهجاي آن فولدر يا عالوهبرآن فولدر پیشفرض در نظر گرفت.
عالوه بر فرايند snapshotاستاندارد که به توضیح آن پرداختیم ،يک فرايند دوبخشی snapshotنیز وجود دارد که در
filter انتشار بهصورت ادغام کاربرد دارد که از parameterized filterها بهره میبرد .همان گونه که قبالً گفتیم يک
به ما اين parameterized filter فرايندي است که اطالعات را محدود و يک زيرمجموعه را تولید میکند .استفاده از
اجازه را میدهد که پارتیشنهاي مختلفی از دادهها را براي subscriberهاي متعدد ارسال کنیم بدون اينکه نیاز به ايجاد
www.takbook.com
از اشیا و دادههاي پايگاهدادهي يک snapshot به طور معمول با گرفتن يک transactional replication عملیات
publicationشروع میشود .بهمحض اينکه Snapshotاولیه گرفته شد ،تغییرات بعدي که روي دادهها و شماهاي موجود
در سمت ناشر يا publisherايجاد شده به subscriberها تحويل داده میشوند .به طور جزئیتر میتوان گفت که تغییرات
و تراکنشهاي که روي articleهاي منتشر شده رخدادهاند از سمت publisherبراي distributorارسال میشود تا آنها
www.takbook.com
میآورند.
قطعاً عنوان کردن يک مثال مسئله را روشنتر میکند :يک وبسايت رزرو بلیط را در نظر میگیريم تمامی بلیطهاي
رزرو شده بهصورت متمرکز در پايگاهدادهي واقع در شهر تهران ذخیره میشوند و در هر شهر از کشور نیز يک مرکز
توزيع يا distribution centerقرار دارد که رزروها را گرفته و بلیطهاي رزرو شده را براي آدرسهاي موجود ارسال
میکند .الزم است که تمامی بلیطهاي رزرو شده از اهواز براي مشتريان مربوطه ارسال شوند .پايگاه توزيع مرکزي
موجود در اهواز میتواند که يک transnational replicationفیلتر شده را راهاندازي کند براي اينکه هر رزرو جديدي
(تراکنشی) که صورت گرفت با ساير شعب مربوط به اين مرکز ،در حداقل زمان ممکن replicateشود( .فیلتر موجب
میشود که اين مرکز تنها رزروها را براي اهواز دريافت کند) .اين شعب نیازمند دسترسی read onlyبراي استفاده از
دادههاي replicateشده هستند که transnational replicationاين امکان را براي آنها فراهم میآورد؛ بنابراين مواردي را
میشود براي transactional replicationبهخاطر سپرد:
ازآنجايیکه عمل replicationدر طی يک تراکنش اتفاق میافتد ،تأخیر تکرار و replicateدادهها بسیار ناچیز است.
به دادهها دارند ،ازاينرو تقريباً هیچگونه استقاللی براي مشترکین يا subscribeها read only مشترکین دسترسی
وجود ندارد.
زمانی که بخواهیم تغییرات تدريجی دادههاي مورد نظر را پس از وقوع براي مشترکین منتشر کنیم.
براي applicationهايی که به تأخیر کمی بین زمانی که يک تغییر در سمت ناشر ايجاد میشود تا زمانی که تغییر به
يک مشترک میرسد نیاز دارند.
هنگامیکه publisherداراي حجم بسیار بااليی از فعالیتها از قبیل درج ،بهروزرسانی و يا حذف باشد.
براي زمانی که Publisherيا Subscriberپايگاهداده اي غیر از SQLسرور باشد .مثالً Oracleباشد.
يک Applicationنیاز به دسترسی براي مداخله در وضعیت دادهها داشته باشد براي مثال اگر رديفی از يک جدول
به هر Applicationاين امکان را میدهد که قادر باشد براي هر تغییر Transactional Replication پنج بار تغییر کند،
مداخله کند (مثالً استفاده از triggerها ) و تغییرات دادهها بهسادگی بهرديفها اعمال نشوند.
Distribution Agent براي پیادهسازي transactional replicationعواملی مانند Snapshot Agentو Log Reader Agentو
فايلهاي دربردارندهي ساختارها ( )schemaو دادههاي جداول snapshot درواقع Snapshot Agent ها دخیل هستند.
ذخیره میکند و نتیجهي عمل Snapshot منتشر شده و اشیاء پايگاهداده را مهیا کرده و اين فايلها را در فولدر
synchronizationرا در Distribution databaseموجود روي Distributorثبت میکند.
Log Reader Agentوظیفهي مانیتور کردن transaction logهاي هر پايگاه دادهاي که براي عمل transactional replication
به transaction log را از replication پیکربندي شده را به عهده داشته و تراکنشهاي مشخص شده براي عمل
distribution databaseکپی میکند Distribution Agent .نیز Snapshotفايلهاي اولیه از پوشهي snapshotو همچنین
تراکنشهاي نگهداشته شده در جداول distribution databaseرا براي مشترکین يا subscriberها کپی میکند.
در دسترس مشترکین قرار Distribution Agent تغییرات تدريجی ايجاد شده سمت ناشر مطابق برنامه زمانبندي
میگیرند که اين جريان انتقال اطالعات میتواند به طور مداوم با حداقل زمان تأخیر و يا در فواصل زمانی
transactional برنامهريزيشده اجرا شود .ازآنجاکه تغییرات دادهها بايد در سمت ناشر ايجاد میشوند( .زمانی که از
replicationبدون آپشنهاي immediate updatingو queued updatingبهره میگیريم{ .البته در ادامه به شرح کارايی
در بهروزرسانیها جلوگیري کرد .در نهايت تمامی مشترکین به conflict اين دو آپشن میپردازيم}) بايد از ايجاد
queued مقادير مشابه و يکسان از يک ناشر دست خواهند يافت .همچنین اگر از آپشنهاي immediate updatingيا
queued updatingبراي transactional replicationبهره بگیريم ،بهروزرسانیها میتوانند سمت مشترکین ايجاد شوند و با
، updatingممکن است تضاد و conflictاتفاق بیفتد.
www.takbook.com
Immediate Updatingبه مشترکین Snapshot // Transactional Replicationاجازه میدهد تا دادههاي replicateشده را
در سمت مشترک بهروزرسانی کرده و تغییرات به وقوع پیوسته را به ناشر و ديگر مشترکین بازگردانی کند .اين آپشن
براي زمانی مفید است که قصد استفاده از Snapshotيا transactional replicationرا داشته باشیم اما نیازمند شرايطی
باشیم که بهروزرسانیهاي گاهبهگاه در سمت مشترک صورت گیرد .براي استفاده از اين آپشن ،ناشر و مشترک بايد
در دسترس بوده و ارتباط بین آن دو برقرار باشد.
Queued Updatingبه مشترکین Snapshot // Transactional Replicationنیز اجازه میدهد دادههاي منتشر شده را بدون
نیاز به يک اتصال شبکهاي اکتیو به ، publisherتغییر دهند .وقتیکه يک نشريه يا publicationرا با استفاده از اين آپشن
ايجاد میکنیم و يکی از مشترکین عملیاتی چون Insertيا Updateيا Deleteرا روي دادههاي منتشر شده پیادهسازي
میکند ،اين تغییرات در يک صف ذخیره میشوند .هنگامیکه ارتباطات شبکهاي مجدداً برقرار شود ،اين تراکنشهاي
بر صف بهصورت غیر همزمان به publisherاعمال میشوند.
منتشر میشوند ،همان دادهها ممکن است publisher ازآنجايیکه که بهروزرسانی دادهها به طور غیر همزمان براي
توسط خود ناشر يا publisherو يا مشترک ديگري نیز آپديت شده باشند در نتیجه به هنگام اعمال آپديتهاي برصف
که به هنگام conflict resolution policy يا ناسازگاري به وجود بیايد .اين conflictها به کمک conflict ممکن است
هايی Application براي Queued updating. تنظیم میشود ،شناسايی و حلوفصل میشوند publication ايجاد يک
مناسب است که کاربران آنها اغلب دادهها را خوانده و گاهبهگاه بهروزرسانی دادهها میپردازند .ارتباطات مشترکین نیز
بايد اکثر اوقات برقرار باشد و اگر که مشترکین آفالين باشند نیز عملیات بهروزرسانی بدون وقفه ادامه خواهد يافت.
نکته :اين آپشنها قابلیت سوئیچ شدن روي يکديگر را دارند بهعنوانمثال براي Subscriptionمشخص کردهايم که از
حالت immediate updatingاستفاده کند ،اما فرضاً تحت شرايطی ارتباطات شبکه دچار مشکل شده بنابراين میتوانیم
بهصورت اتوماتیک replication سوئیچ کنیم .بايد در نظر داشت که queued updating براي دريافت آپديتها روي
SQL از طريق update mode نمیتواند بین حاالت آپديت سوئیچ کند و براي اين منظور بايد تنظیمات مربوط به
را براي سوئیچ بین دو حالت sp_setreplfailovermode ما application انجام شود و يا Server Management Studio
فراخوانی کند( .اين روال به ما اجازه میدهد تا تنظیمات مربوط به failoverرا براي مشترکین يا subscriberها انجام
باشند ).نحوه عملکرد Queued updating به immediate updating دهیم تا قادر به تعويض وضعیت از حالت
transactional replicationدر تصوير 6-8نمايشداده شده است:
www.takbook.com
در شرايطی که چندين مشترک ممکن است که دادههاي مشابه را در زمانهاي مختلفی بهروزرسانی کرده و اين
تغییرات را براي ناشر و ساير مشترکین منتشر کنند.
زمانی که مشترکین نیاز به دريافت دادهها و ايجاد تغییرات بهصورت آفالين داشته باشند و بعداً اين تغییرات را با
ناشر و ديگر مشترکین synchronizeکنند.
هر مشترک به يک پارتیشن متفاوت از دادهها نیاز داشته باشد.
هنگامیکه ممکن است conflictاتفاق بیفتد و در چنین شرايطی بايد قادر به تشخیص و رفع اين مشکل باشیم.
Merge replicationبه سايتهاي مختلف اجازه میدهد تا بهصورت مستقل کار کنند و در نهايت آپديتها را با يکديگر
ادغام کرده تا به نتیجهاي يکسان و يکنواخت دست يابند .ازآنجايیکه بهروزرسانی در بیشتر از يک گره صورت
میگیرد ،دادههاي مشابه ممکن است توسط ناشر و نیز بیش از يک مشترک آپديت شوند بنابراين ممکن است به
راههايی را براي رسیدگی به مشکل merge replication اتفاق بیفتد و conflict هنگام ادغام اين آپديتها تضاد يا
conflictها فراهم میآورد.
Merge Replicationچگونه کار میکند؟
يا نشريه publication اجرا میشود .اگر merge agent و snapshot agent توسط عاملهايی چون Merge replication
فیلتر نشده باشد و يا از فیلترهاي استاتیک استفاده میکند Snapshot agent ،تنها يک snapshotايجاد میکند و اگر که
publicationاز فیلترهاي پارامتري يا parameterized filterها بهره میگیرد snapshot agent،از هر پارتیشن دادهها يک
snapshotتهیه میکند merge agent.نیز snapshotهاي اولیهي تهیه شده را به مشترکین اعمال میکند .اين عامل همچنین
اولیه صورتگرفته را ادغام snapshot تغییرات تدريجی که روي دادهها در سمت ناشر و يا مشترکین پس از ايجاد
کرده وبا توجه به قوانینی که براي آن پیکربندي میکنیم به تشخیص و حلوفصل conflictهاي ايجاد شده میپردازد.
به هنگام استفاده از Merge replicationسه تغییر براي ساختار پايگاه دادهي نشريه اتفاق میافتد:
SQLسرور چندين جدول سیستمی براي پشتیبانی از رديابی دادهها ،انجام عمل synchronizationبهصورت کارآمد و
براي تشخیص Conflictها و نیز براي گزارشدهی ،را به پايگاهداده اضافه میکند .تمامی تغییرات مربوط به دادهها در
جداول سیستمی msmerge__contentsو msmerge__tombstoneذخیره میشوند .اين نوع از replicatinها triggerهايی
را نصب میکند که تغییرات دادههاي هر ستون و يا هر رديف از جدول را دنبال میکنند.
Triggerها تغییرات ايجاد شده روي جدول منتشر شده را ضبط کرده و اين تغییرات را در جدولهاي سیستمی
msmerge__contentsو msmerge__tombstoneثبت میکنند .اين triggerها هنگامیکه snapshot agentبراي اولینبار
براي يک نشريه يا publicationاجرا میشود ،ايجاد میشوندTrigger .ها در سمت يک مشترک نیز هنگامی به وجود
میآيند که snapshotبراي مشترک استفاده شود .در تصوير زير اجزايی که در merge replicationبه کار گرفته میشوند
نمايشداده شده است:
www.takbook.com
SQLServer
Publisher & Distributor
REP-1 :
DB2 DB3
Subscriber 2
Subscriber 1
REP-3 :
REP-2 :
هرگونه تغییري که در جدول مرتبط با لیست کاربران SQLServer در ادامه و در سناريو شکل 44میخواهیم که سرور
برتر ايجاد میشود را با جداول موجود روي سرورهاي DB2و Replicate ،DB3کند؛ بنابراين بايد تنظیمات الزم براي
توزيع و انتشار ( Distributionو )Publicationرا روي سرور SQLServerو تنظیمات مربوط به اشتراک ()Subscription
را روي سرورهاي DB2و DB3انجام دهیم.
اول از هر چیز بايد در نظر داشته باشیم که موقع نصب SQLسرور ،قابلیت Replicationرا نیز فعال کنیم ،براي همین
بهمانند شکل 45بايد تیک گزينهي SQL Server Replicationرا انتخاب و آن را نصب کنید ،در هر سه سرور بايد اين
کار را انجام دهید.
شکل 45
SQL Server Configuration Manager بعد از فعالکردن سرويس SQL Server Replicationبايد بهمانند شکل 47وارد
شويد و سرويس SQL Server Browserرا فعال کنید ،اين کار را بايد در همهي سرورها انجام دهید ،البته براي اينکه
اين سرويس را فعال کنید بايد بر روي آن کلیک راست کنید و گزينهي Propertiesرا انتخاب کنید.
www.takbook.com
شکل 47
در شکل 48بايد وارد تب Serviceشويد و گزينهي Start Modeرا در حالت Automaticقرار دهید و okکنید.
شکل 48
شکل 49
براي اينکه همزمان به هر سه سرور دسترسی داشته باشید بايد SQL Server Management Studioرا اجرا کنید و بهمانند
شکل 50دو سرور DB2و DB3را با کلیک بر روي Connectاضافه کنید.
شکل 50
در شکل 51بايد سرور DB2را وارد کنید و بر روي Connectکلیک کنید ،توجه داشته باشید دقیقاً همین کار را براي
سرور DB3انجام دهید.
شکل 51
همانطور که در شکل 52مشاهده میکنید هر سه سرور به لیست اضافه شده است و حاال میتوانیم عملیات
Replicationرا آغاز کنیم.
www.takbook.com
شکل 52
شکل 53
بهمانند شکل 54سرور توزيعکننده يا Distributorرا انتخاب میکنیم که میتوان خود سرور فعلی را انتخاب کرده و
يا سرور ديگري را بهعنوان توزيعکننده در نظر بگیريم .فقط بايد در نظر داشته باشیم که پیکربندي Distributionروي
سرور ديگر که آن را بهعنوان توزيعکننده انتخاب میکنیم ،از قبل انجام شده باشد .در اينجا ما سرور فعلی را انتخاب
و بر روي Nextکلیک کنید.
شکل 54
در شکل 55گزينهي اول را براي سرويس Agentانتخاب کنید تا سرويس بهصورت اتوماتیکالی اجرا شود.
www.takbook.com
شکل 55
شکل 56مربوط به تعیین مسیر فولدري است که Snapshotهاي گرفته شده از تغییرات در آن کپی میشوند .براي
و Merge agentهاي اجرا شده روي Subscriberها بتوانند به Snapshotهاي publicationها Distribution agent اينکه
دسترسی داشته باشند ،در اين قسمت بايد مسیر فولدر در نظر گرفته شده براي ذخیرهي Snapshotها را معرفی کنیم.
در واقع بايد آدرس شبکهي پوشهي نگهدارندهي snapshotها را مشخص کنیم .مسیر لوکال و پیشفرضی که در اين
قسمت قرار داردpull Subscription ،هاي ايجاد شده سمت مشترکین را پشتیبانی نمیکند چراکه اين مسیر يک مسیر
تحت شبکه نمیباشد و براي ايجاد pull Subscriptionبايد يک مسیر شبکهاي را در اينجا معرفی کنیم که به پوشهي
Snapshotها اشاره کند ،توجه داشته باشید که مسیري که ايجاد میکنید بايد
شکل 56
و نیز محل ذخیرهسازي آن را مشخص میکنیم .اين پايگاهداده براي Distribution در شکل ،58نام پايگاه دادهاي
دادهايی با پسوند ( )MDF.و براي Logفايلها با پسوند ( )ldf.پیکربندي میشود .پايگاه دادهاي مربوط به Distribution
تغییرات ايجاد شده در دادهها را در transactional publicationذخیره میکند تا زمانی که مشترکین يا همان Subscriberها
merge و Snapshot publication بتوانند آپديت شوند .همچنین اين ديتابیس اطالعات را برحسب تاريخ براي
drive publicationذخیره میکند .مسیري که در اينجا در نظر میگیريم حتماً بايد يک آدرس لوکال باشد و با يک
www.takbook.com
شکل 58
سرور و يا سرورهايی که قرار است بهعنوان ناشر و يا همان publisherفعالیت کنند را در شکل 59مشخص میکنیم.
براي انجام توزيع انتشارات و يا publicationهاي خود استفاده میکند .بهصورت اين سرور و يا سرورها از Distributor
پیشفرض سرور فعلی بهعنوان publisherدر نظر گرفته میشود که بسته به ساختار پايگاههاي داده و سناريوي مورد
نظر با کلیک بر روي گزينه Addمیتوانیم سرورهاي ديگري نیز براي اين بخش در نظر بگیريم.
شکل 59
در اين قسمت چگونگی خاتمه يافتن تنظیمات انجام شده را مشخص میکنیم .بهصورت پیشفرض گزينهي
Configure distributionانتخاب شده است.
www.takbook.com
شکل 60
در نهايت در صورت عدم بروز مشکل ،با نمايش عبارت successدر قسمت وضعیت ،انجام موفقیتآمیز تنظیمات را
در شکل 61مشاهده خواهیم کرد.
شکل 61
انجام تنظیمات اين بخش نیز روي سرور اول ( )SQLServerصورت خواهد گرفت چراکه طبق سناريو اين سرور هر
دو نقش ناشر و توزيعکننده را ايفا میکند؛ بنابراين بهمانند شکل 62روي گزينه Local Publicationدر کنسول مديريتی
راست کلیک کرده و گزينهي New Publicationرا انتخاب میکنیم.
www.takbook.com
شکل 62
در شکل ،63لیستی از پايگاههاي دادهي دربردارندهي دادهها و يا اشیايی که قصد انتشار آنها را داريم نمايش داده
میشود .در اينجا لیست همهي ديتابیسهاي موجود را مشاهده میکنید ،بر روي Nextکلیک کنید.
شکل 63
در شکل 64انواع نشريه و يا همان publicationها نمايش داده میشود و درواقع بخشی است که در آن نوع replication
مشخص میشود ،در اين قسمت گزينهي Transactional publicationرا انتخاب کرده و روي Nextکلیک میکنیم.
www.takbook.com
شکل 64
در شکل 65نیز بايد جداول و دادههاي مورد نظر که قرار است Replicationشود را از لیست انتخاب کنید.
شکل 65
در شکل 65با کلیک روي گزينهي Article propertiesمیتوانیم جزئیات توضیحات مرتبط با جدولی را که انتخاب
کرديم و يا توضیحات مربوط بهتمامی اشیاء موجود در Articleرا مشاهده کرده و در صورت نیاز تغییراتی را در آن
ايجاد کنیم .در اين جا ما همان تنظیمات پیشفرض را دستنخورده باقی میگذاريم.
در شکل 66بايد از عملیات فیلترينگ استفاده کنیم ،از جمله داليل استفاده از فیلتر میتوان به ،بهحداقلرساندن
دادههاي ارسالی روي شبکه و کاهش مقدار فضاي ذخیرهسازي براي يک مشترک را يادآور شد .در اين بخش از
تنظیمات با ايجاد فیلترينگ میتوانیم به حذف رديفهايی که به آنها نیاز نداريم از جدول منتشر شده بپردازيم .يک
مثال ساده براي درک فیلترکردن اين است که مثالً نام و نام خانوادگی کاربران برتر تغییر نخواهد کرد بنابراين نیاز به
www.takbook.com
شکل 66
در شکل 67تعیین میکنیم که چه زمانی Snapshot agentاجرا شود .مشترکین به واسطهي snapshotهاي داده و
طرحهاي يک نشريه مقداردهی میشوند و اين Snapshot agentاست که snapshotرا ايجاد میکند .در اين تصوير دو
گزينه وجود دارد اولین گزينه بیانگر ايجاد يک Snapshotبهصورت فوري و در دسترس نگهداشتن آن براي مقداردهی
اولیه به مشترکین است و گزينهي دوم شرايط زمانبندي را براي فعالیت Snapshot agentفراهم میآورد .گزينهي اول
را مارکدار میکنیم.
شکل 67
شکل 68مربوط با مشخصکردن حساب کاربري براي هر Agentمیباشد که اجرا و تنظیمات ارتباطات آن تحت اين
کلیک میکنیم .در شکل ،69 Security Settings انجام خواهد شد .براي انجام اين تغییرات روي گزينهي Account
www.takbook.com
شکل 68
شکل 69
Create the در شکل 70چگونگی پايان يافتن تنظیمات انجام شده را مشخص میکنیم .بهصورت پیشفرض گزينهي
publicationمارکدار شده است.
www.takbook.com
شکل 70
در شکل ،71خالصهاي از تنظیماتی که انجام داديم ،نمايش داده میشود .نام مورد نظر براي نشريه يا publicationاي
را که ايجاد کردهايم در اين بخش مشخص وارد و در نهايت بر روي گزينهي Finishکلیک میکنیم.
شکل 71
Replication پس از پیکربندي موفقیتآمیز ،Publicationمیتوانیم همانند تصوير Publicationايجاد شده را در بخش
کنسول مديريتی مشاهده کنیم.
www.takbook.com
شکل 72
همانطور که قبالً گفتیم در اينجا هر سه سرور موجود در سناريو را از طريق کنسول Management Studioمديريت
اي ن Replication زيرمجموعهي Local Subscription میکنیم .در سرور دوم يعنی ،DB2بهمانند شکل ،73بر روي
سرور در کنسول مديريتی راست کلیک کرده و گزينهي New Subscriptionرا انتخاب میکنیم.
شکل 73
همانطور که در شکل ،74نشانداده شده است بايد سرور publisherو يا نشريهاي را که میخواهیم Subscriptionها
Find SQL Server از قسمت نوار کشويی گزينهي publisher را براي آن ايجاد کرده ،تعیین کنیم .پس در پنجرة
Publisherرا بازکرده و پس از انتخاب سرور مورد نظر (در اينجا )SQLServerنام publicationايجاد شده در لیست
نمايان خواهد شد.
www.takbook.com
شکل 74
در شکل ،75بايد محلی که Distribution Agentها روي آن اجرا میشوند را مشخص کنیم .براي اين منظور دو گزينه
subscriber پیشروي ماست :اجراي همهي Agentها روي Distributorيا Push subscriptionو اجراي هر Agentروي
به توضیح pull\Push Subscriptionها پرداختیم replication .در اوايل اين فصل در مورد Pull subscription خود يا
برحسب شرايط میتوان يکی از اين دو نوع را براي Agentها در نظر گرفت .در قسمت قبل ما يک مسیر لوکال را
براي دسترسی به پوشهي Snapshotها تعیین کرديم و میدانیم آدرس لوکال Pull Subscriptionرا پشتیبانی نمیکند،
بنابراين در اينجا گزينهي اول يعنی Push Subscriptionرا انتخاب میکنیم.
شکل 75
در اين قسمت بايد subscriberها يا مشترکین و ديتابیس آنها را مشخص کنیم .بهصورت پیشفرض ويزارد سروري را
که تنظیمات در حال حاضر روي آن صورت میگیرد بهعنوان يکی از مشترکین انتخاب میکند .با کلیک روي گزينهي
Add SQL Server Subscriberمیتوانیم سرورهاي ديگري را بهعنوان مشخص کنیم .در سناريو ما دو Subscriberوجود
Replicate دارد :سرورهاي DB2و .DB3پس از انتخاب اين سرورها حال نوبت به تعیین ديتابیسی که قرار است عمل
با آنها صورت گیرد ،میباشد .بدين منظور بهمانند شکل 76با کلیک روي نوار کشويی مقابل سرورهاي انتخابی،
www.takbook.com
شکل 76
در شکل 77بايد ديتابیس مربوطه که در قسمت قبلی انتخاب کرديم را ايجاد کنید و بر روي OKکلیک کنید.
شکل 77
FB3 همانطور که در شکل 78مشاهده میکنید ديتابیس مورد نظر ايجاد شده است ،و در ادامه بايد سرور سوم يعنی
را هم به لیست اضافه کنید و براي آن هم ديتابیس DB22را ايجاد کنید ،براي اين کار بر روي Add Subscriberکلیک
کنید و گزينهي Add SQL Server Subscriberرا انتخاب کنید.
www.takbook.com
شکل 78
همانطور که در شکل 79مشاهده میکنید سرور DB3هم به لیست اضافه شده و ديتابیس مورد نظر را هم براي آن
ايجاد کرديم.
شکل 79
مشخص کنیم ،بر روي Distribution Agent در شکل 80بايد آپشنهاي مرتبط با ارتباطات و پردازشها را براي
گزينهي مورد نظر کلیک کنید.
www.takbook.com
شکل 80
تحت آن اجرا شده و عمل همگامسازي با مشترکین را انجام Distribution Agent .براي تعیین حساب کاربري که
خواهد داد بهمانند شکل 81گزينهي Run the SQL Server Agent Service Accountرا انتخاب کرده و براي برقراري
ارتباط با Distributorو Subscriberنیز گزينهي By impersonation the process accountرا برمیگزينیم .اين تنظیمات
بايد براي هر دو سرور انتخاب شده بهعنوان ،Subscriberبهصورت مجزا انجام شود.
شکل 81
پس از انجام تنظیمات باال نتیجهي آن همانند شکل 82خواهد بود ،بر روي Nextکلیک کنید.
www.takbook.com
شکل 82
در شکل ،83بايد برنامهي زمانبندي همگامسازي را براي هر Agentمشخص کنیم .منوي کشويی در اينجا سه گزينه
در اختیار ما قرار میدهد که بواسطهي آنها Distribution agentبه ترتیب میتواند در حالت اجرا بهصورت مداوم ،اجرا
agent بر برحسب تقاضا و يا اجرا بر اساس برنامهي زمانبندي تعیین شده ،قرار گیرد .پس از اطمینان از قرارگرفتن
در وضعیت Run continuouslyروي Nextکلیک میکنیم.
شکل 83
يا نشريه در اين Publication از دادهها و طرحهاي Snapshot نحوهي مقداردهی اولیه هر اشتراک بهواسطهي يک
قسمت مشخص میشود .دو روش براي مقداردهی اولیهي Subscriptionها وجود دارد :بهصورت فوري و در اولین
يا بالفاصله را براي هر دو سرور Immediately همگامسازي يا .Synchronizationاز منوي کشويی موجود گزينهي
موجود انتخاب کرده و روي Nextکلیک میکنیم.
www.takbook.com
شکل 84
در شکل 83میتوانیم تعیین کنیم که تنها Subscriptionايجاد شده و يا فايل اسکريپت پیکربندي Subscriptionنیز
ايجاد شود .در اين بخش گزينهي اول را انتخاب میکنیم.
شکل 83
در شکل ،84خالصهاي از تنظیماتی که براي ايجاد Subscriptionها انجام داديم نمايشداده شده است.
شکل 84
www.takbook.com
شکل 85
يک سطر جديد بهمانند شکل 86به جدول مورد نظر اضافه میکنیم ،بعدازاين کار اين تغییرات بهسرعت و ظرف
مدت چند ثانیه به سرورهاي ديگر هم ارسال میشود.
شکل 86
براي اينکه تغییرات را مشاهده کنیم بهمانند شکل 87وارد سرور DB2شويد و بر روي جدول مورد نظر کلیک
راست و گزينهي Edit Topرا انتخاب کنید.
شکل 87
www.takbook.com
شکل 88
براي اينکه سرويس Replicationرا مانیتور کنیم ،بايد بهمانند شکل 89بر روي Publicationsمورد نظر که با هم ايجاد
کرديم کلیک راست کنید و گزينهي Lunch Replication Monitorانتخاب کنید.
شکل 89
همانطور که در شکل 90مشاهده میکنید هر دو سرور DB2و DB3در حال کار با بهترين Permorfanceهستند،
اگر اطالعات بیشتري از هر سرور بخواهید میتوانید بر روي آنها دو بار کلیک کنید.
www.takbook.com
90 شکل
www.takbook.com
فصل هفتم
SQL Reporting Service
SQL يا همان SQL Server Reporting Serviceيک سرويس براي گزارشگیري از عملکرد شما در SSRS سرويس
است و حتی سازمانهايی که از SQLاستفاده نمیکنند اين قابلیت وجود دارد که سرويس Reportingبه پايگاه دادههاي
ديگر متصل شود و يک گزارش کامل از آنها تهیه کند ،در نظر داشته باشید اين سرويس بسیار کارآمد است و بهتر
است در سازمان خود براي ارائه گزارش کامل فعال کنید.
بايد فايل آن را از سايت مايکروسافت دريافت و در سرور SQL براي راهاندازي اين سرويس در ورژنهاي جديد
SQL Serverکه با هم راه انداختیم نصب کنید ،براي دانلود اين سرويس به شکل 10-1توجه کنید ،در اين صفحه بر
روي Install SQL Server Reporting Servicesکلیک کنید ،بعد از کلیک وارد سايت مايکروسافت خواهید شد.
شکل 10-1
در شکل 10-2بر روي لینک دانلود مورد نظر کلیک کنید.
شکل 10-2
در شکل 10-3بر روي Downloadکلیک کنید و در ادامه فايل مورد نظر را نصب کنید.
www.takbook.com
شکل 10-3
بعد از دانلود فايل شکل 10-4ظاهر خواهد شد که بر روي Install Reporting Servicesکلیک کنید.
شکل 10-4
در شکل 10-5بايد اليسنس نرمافزار را وارد و بر روي Nextکلیک کنید و در ادامه هم بر روي Nextو Installکلیک
کنید.
www.takbook.com
شکل 10-5
Configure در ادامه کار و بعد از نصب شکل 10-6را مشاهده خواهید کرد که براي انجام تنظیمات تکمیلی بر روي
Report Serverکلیک کنید.
شکل 10-6
در شکل 10-7بايد نام سرور SQLخود را وارد و بر روي Connectکلیک کنید.
شکل 10-7
www.takbook.com
شکل 10-8
را فعال کنید شما فقط Reporting که در شکل 10-9میتوانید سرويس تحت وب Web Service URL در قسمت
کافی است بر روي Applyکلیک کنید تا تنظیمات مورد نظر بر روي سرويس IISانجام شود ،همانطور که مشاهده
Reporting تنظیمات مورد نظر انجام شده و آدرس دسترسی به وبسرويس Apply میکنید بعد از کلیک بر روي
مشخص شده است.
شکل 10-9
Change در شکل 10-10بايد براي سرويس Reportingديتابیس ايجاد کنیم براي اين کار بهمانند شکل 10-10بر روي
Databaseکلیک کنید.
www.takbook.com
شکل 10-10
Create a new report server در ادامه بايد يک ديتابیس جديد ايجاد کنیم براي اين کار بهمانند شکل 10-11گزينهي
را انتخاب کنید تا ديتابیس جديد را ايجاد کنیم ،اگر هم از قبل ايجاد کرديد بايد گزينهي دوم را انتخاب database
کنید.
شکل 10-11
که قرار است بر روي آن ديتابیس را ايجاد کنیم را در قسمت اول وارد کنید، SQL در شکل 10-12بايد نام سرور
اگر توجه کنید ما localhostوارد کرديم چون در حال کار بر روي سرور SQLهستیم و میتوانیم locolhostهم وارد
کنیم و يا اينکه نام آن سرور را وارد کنید ،در قسمت بعد بايد نوع احراز هويت را مشخص کنید و کاربر مورد نظر
خود را وارد کنید ،میتوانید با کلیک بر روي Test Connectionاز ارتباط با سرور مطمئن شويد.
www.takbook.com
شکل 10-12
در شکل 10-13بايد نام ديتابیس مربوط به Report Serviceرا وارد و زبان مورداستفاده آن را انتخاب کنید.
شکل 10-13
شکل 10-14
www.takbook.com
شکل 10-15
Exit همانطور که در شکل 10-16مشاهده میکنید ديتابیس مورد نظر به درستی ايجاد شده است و بر روي دکمه
کلیک کنید.
شکل 10-16
اگر وارد SQL Server Engineشويد دو ديتابیس ايجاد شده است که ديتابیس / ReportServerديتابیس اصلی است و
ديتابیس ReportServerTempDBبراي نگهداشتن موقت اطالعات در حال اجرا.
www.takbook.com
شکل 10-17
بعد از انجام مراحل باال اگر مرورگر خود را باز کنید و آدرس زير را اجرا کنید شکل 10-18را مشاهده خواهید
کرد.
http://sqlserver/reports/
در شکل 10-18صفحهي اصلی گزارشگیري را مشاهده میکنید که داراي گزينههاي مختلف است ،براي اينکه بتوانیم
در SQLيک گزارش ايجاد و به آن نما دهیم بايد از ابزارهاي مختلفی استفاده کنیم و بهترين و در دسترسترين ابزار،
Report Bulderاست که بايد آن را بهمانند شکل 10-18دانلود و بر روي سرور مورد نظر نصب کنید ،البته میتوانید
آن را در سیستمهاي ديگر هم نصب کنید.
شکل 10-18
بعد از اجرا ،اولین صفحهاي که باز میشود مانند شکل 10-19است که براي شروع کار بر روي Blank Reportکلیک
کنید.
شکل 10-19
www.takbook.com
شکل 10-20
Microsoft SQL گزينهي Select Connection Type در شکل 10-21نام مرود نظر خود را وارد کنید و در قسمت
Serverرا انتخاب کنید و بر روي Buildکلیک کنید.
شکل 10-21
را وارد کنید ،بعد از واردکردن نام سرور بر روي SQL بايد نام سرور Server Name در شکل 10-22در قسمت
Refreshکلیک کنید ،بعد از کلیک بر روي دکمه Refreshنام ديتابیسهاي مورد نظر در SQLدر قسمت زيري نمايش
داده خواهد شد که شما بايد يکی از ديتابیسها که قرار است از آن گزارش تهیه کنید را انتخاب و بر روي OKکلیک
کنید تا اين ارتباط به لیست اضافه شود.
www.takbook.com
شکل 10-22
در شکل 10-23بعد از ايجاد Data Sourceبايد يک Datasetsايجاد کنید تا بتوانیم اطالعات موجود در جداول را در
خروجی نمايش دهیم براي اين کار بر روي Datasetsمورد نظر کلیک راست کنید و گزينهي Add Datasetرا انتخاب
کنید.
شکل 10-23
در شکل 10-24بايد نام مورد نظر خود را وارد کنید و از قسمت Data Sourceبايد گزينهي DataSource1را که با
کلیک و براي اينکه جداول آن را در خروجی مشخص کنیم بر روي Query Designer هم ايجاد کرديم را انتخاب کنید
کنید.
www.takbook.com
شکل 10-24
در شکل 10-25بايد جدول مورد نظر خود را انتخاب کنید ،بعد از انتخاب لیست آن نمايش داده خواهد شد.
شکل 10-25
در شکل 10-26میخواهیم يک جدول ايجاد کنیم و اطالعات مورد نظر در جدول Employeesرا در اين جدول قرار
دهیم براي اين کار بر روي صفحه مورد نظر کلیک راست کنید و از قسمت Insertگزينهي Tableرا انتخاب کنید.
www.takbook.com
شکل 10-26
در شکل 10-27در جدول مورد نظر اگر موس را قرار دهید آيکون مورد نظر را مشاهده خواهید کرد که بر روي آن
کلیک کنید.
شکل 10-27
در شکل 10-28بايد يکی از ستونهاي موجود را انتخاب کنید تا در خروجی اطالعات آن نمايش داده شود.
شکل 10-28
در شکل 10-29بعد از اينکه سه ستون اول را تکمیل کرديد ،بايد چند ستون ديگر هم اضافه کنید ،براي اين کار بر
روي ستون آخر کلیک راست کنید و از قسمت Insert Columnگزينهي Rightرا انتخاب کنید.
www.takbook.com
شکل 10-29
در شکل 10-30تمام ستونهاي مورد نظر به صفحه اضافه شده است ،همانطور که گفتیم میتوانید بهدلخواه خود
صفحه را ويرايش و زيبا کنید.
شکل 10-30
با کلیک بر روي دکمه ترکیبی CTRL + Sاين فرم گزارش را در جاي مناسب ذخیره کنید.
شکل 10-31
Run اگر بخواهید گزارش مورد نظر را در همین نرمافزار Report Builderاجرا کنید بايد بهمانند شکل 10-32بر روي
کلیک کنید.
www.takbook.com
شکل 10-32
همانطور که در شکل 10-33مشاهده میکنید نتیجه خروجی جدول مورد نظر است ،پس شما توانستید يک فايل
گزارش از جدول SQLايجاد کنی.
شکل 10-33
خوب اين يک مثال ساده از طراحی گزارش در Report Builderاست که فقط با همان نرمافزار اجرا میشود ،ولی اگر
بخواهیم بهصورت تحت وب آن را مشاهده کنیم چه کاري بايد انجام دهیم؟
را اجرا SQL Reporting براي اين کار بايد وارد آدرس زير شويد و سرويس تحت وب Reportمربوط به سرويس
کنید.
http://center2/ReportS/browse/
بعد از بازکردن آدرس مورد نظر بايد بهمانند شکل 10-34بر روي Uploadکلیک کنید و گزارشی را که در قسمت
قبل با نام Report1ذخیره کرديم را انتخاب و آپلود کنید.
شکل 10-34
www.takbook.com
شکل 10-35
همانطور که در شکل 10-36مشاهده میکنید گزارش مورد نظر تحت وب اجرا شده است ،در اين صفحه گزينههاي
مختلفی وجود دارد ،مثالً میتوانید از گزارش مورد نظر خروجیهاي مختلف تهیه کنید و يا اينکه آن را پرينت بگیريد.
شکل 10-36
گزارشهاي زيبا و متنوعی ايجاد کنید ،مانند ايجاد چارتها و Report Builder شما میتوانید با استفاده از نرمافزار
نمودارهاي مختلف براي نمايش زيبا و دقیق اطالعات ،براي اينکه کلی اين موضوع را بیان کنیم بايد بهمانند شکل
37-10بايد وارد Insertشويد و بر روي Chartکلیک کنید که دو گزينه را به شما نشان میدهد که اگر بخواهید سريع
يک نمودار از محصوالت خود ايجاد کنید میتوانید گزينهي Chart Wizardرا انتخاب کنید و يا اگر بخواهید بهصورت
دستی انتخاب کنید میتوانید گزينهي Insert Chartرا انتخاب کنید.
www.takbook.com
شکل 10-37
را به اتمام برسانیم و به سراغ نرمافزار قدرتمند ديگري از Report Builder خوب بهتر است تا به اينجا ،کار با
که به جرات میتوان گفت که يکی از قدرتمندترين Power BI مايکروسافت برويم و آن هم کسی نیست جزء
نرمافزارهاي موجود در بازار است.
نصب و راهاندازي Power BI
بعد از معرفی توسط مايکروسافت تبديل يک ابزار محبوب در هوش تجاري شده است و کاربران زيادي Power BI
به علت زيبايی ،سهولت و کیفیت از اين نرمافزار استفاده میکنند ،براي استفاده از اين نرافزار بايد اليسنس آن را
تعريف کنید ،البته اليسنس رايگان آن در اينترنت وجود دارد اما بعضی از دوستان همین اليسنس رايگان را به قیمت
گزاف به مشتري میفروشند.
شکل 10-38
Power BI, مايکروسافت براي گزارشگیري پیشرفته سه ابزار را در گروه Power Platformقرار داده است که شامل
Power APPs, Microsoft Flowاست و هرکدام براي يک کار خاص طراحی شدهاند.
براي نصب و راهاندازي اين برنامه در ويندوز نیاز به دو نسخهي آن داريم:
که از اسم آن مشخص است که مربوط به نسخه سرور میباشد و بايد بر روي سرور Power BI Reporting Server
SQLشما نصب شود ،توجه داشته باشید که اين نسخه نیاز به اليسنس دارد که بايد تهیه کنید.
Power BI Desktopکه يک نسخهي رايگان است که براي متصل شدن به نسخهي سرور بايد آن را بر روي کالينت
خود نصب کنید ،البته نسخهي موبايل آن هم وجود دارد که در صورت نیاز از آن هم استفاده میکنیم.
براي شروع کار بايد نسخهي سرور را بر روي سرور SQLنصب و تنظیمات آن را انجام دهیم ،از طريق لینک زير
میتوانید نسخهي سرور به همراه نسخهي دسکتاپ را دانلود کنید.
https://www.microsoft.com/en-us/download/details.aspx?id=57270
www.takbook.com
شکل 10-39
در شکل 10-40بايد اليسنس مورد نظر را وارد و بر روي Nextکلیک کنید.
شکل 10-40
در شکل 10-41بايد بر روي Installکلیک کنید تا کار نصب آغاز شود.
www.takbook.com
شکل 10-41
بعد از نصب نرمافزار بايد بهمانند شکل 10-42بر روي Configure Report Serverکلیک کنید تا سرويس مورد نظر
اجرا شود.
شکل 10-42
در شکل 10-43در قسمت Server nameنام سرور خود را وارد و در قسمت Instanceبايد PBIRSرا انتخاب کنید
که بعد از نصب نرمافزار Power BIايجاد شده است و بايد تنظیمات را بر روي آن انجام دهیم.
www.takbook.com
شکل 10-43
در شکل 10-44بايد نام کاربري مورد نظر را براي دسترسی به سرويس Power BIوارد و بر روي APPLYکلیک
کنید تا تغییرات مورد نظر اعمال شود.
شکل 10-44
Reporting در شکل 10-45بايد يک نام جديد در قسمت Virtual Directoryوارد کنید تا با نام قبلی که در سرويس
تنظیم کرديم برخورد نداشته باشد.
www.takbook.com
شکل 10-46
Change در شکل 10-47بايد يک ديتابیس جديد براي سرويس Power BIايجاد کنید براي انجام اين کار بر روي
Databaseکلیک کنید.
شکل 10-47
در شکل 10-48بايد نام ديتابیس را وارد کنید ،اگر نام را تغییر ندهید ،اين ديتابیس با ديتابیس قبلی که براي
ReportServiceايجاد کرديم برخورد میکند و با مشکالتی روبرو میشود که بهتر است نام آن را تغییر دهیم ،بر روي
Nextکلیک کنید تا ديتابیس مورد نظر ايجاد شود.
www.takbook.com
شکل 10-48
APPLY در شکل 10-49بايد يک نام جديد ايجاد کنید تا با نام قبلی مشکلی پیش نیايد ،بعد از واردکردن نام بر روي
کلیک کنید تا تنظیمات جديد اعمال شود و در آخر بر روي Exitکلیک کنید تا پنجره بسته شود.
شکل 10-49
در ادامه براي اينکه سرويس POWER BIرا تحت وب مشاهده کنید بايد از آدرس زير استفاده کنید.
http://sqlserver/reportsBI/browse/
در آدرس باال بايد بهجاي sqlserverبايد نام و يا IPسرور را وارد کنید ،همانطور که در شکل 10-50مشاهده میکنید
صفحهي Reporting Power BIاجرا شده است و میتوانیم عملیات خود را بر روي آن آغاز کنیم.
www.takbook.com
شکل 10-50
در شکل 10-51با کلید بر روي آيکون مورد نظر میتوانید نرمافزارهايی که قرار است با اين سرور کار کنند را مشاهده
میکنید ،براي اينکه بتوانیم بر روي Desktopکار کنیم نسخهي Power BI Desktopرا راهاندازي میکنیم.
شکل 10-51
همانطور که در شکل 10-52مشاهده میکنید ،نرمافزار Power BI Desktopاجرا شده و کارهاي مرود نظر خود را
میتوانید بر روي آن انجام دهید.
شکل 10-52
www.takbook.com
شکل 10-53
در شکل 10-54بايد نام سرور SQLرا به همراه نام ديتابیس آن وارد و بر روي OKکلیک کنید.
شکل 10-54
بهمانند شکل 10-55بايد جدول مورد نظر خود را که در ديتابیس وجود دارد انتخاب کنید و بعد بر روي Loadکلیک
کنید.
www.takbook.com
شکل 10-55
ستونهاي مورد نظر خود را کشیده و در Product بعد از اضافهکردن جدول مورد نظر ،حاال میتوانید از قسمت
Reportsرها کنید ،همانطور که در شکل 10-56مشاهده میکنید بهمحض رهاکردن فیلد مورد نظر اطالعات آن در
صفحه بهصورت آنالين نمايش داده خواهد شد ،مثالً اگر شهر را در صفحه قرار دهید نقشه و موقعیت آن شهر
مشخص خواهد شد که اين يک قابلیت جالب خواهد بود.
شکل 10-56
www.takbook.com
شکل 10-57
در شکل 10-58بايد آدرس سرور Reportingرا که در قسمتهاي قبلی و در شکل 10-49وارد کرديدم را در اين
قسمت وارد و بر روي OKکلیک کنید.
شکل 10-58
در شکل 10-59بايد نام گزارش خود را وارد و بر روي OKکلیک کنید.
www.takbook.com
شکل 10-59
همانطور که در شکل 10-60مشاهده میکنید گزارش مورد نظر بهدرستی ايجاد و بر روي تست آن بر روي آن کلیک
کنید.
شکل 10-60
همانطور که در شکل 10-61مشاهده میکنید گزارش مورد نظر بهدرستی اجرا شده است.
www.takbook.com
شکل 10-61
دو جدول بهمانند SQL آشنا شويد میخواهیم در Power BI خوب براي اينکه بهتر با نحوهي گزارشگیري توسط
جداول يک و دو ايجاد کنیم و از طريق Power BIاز آنها خروجی تهیه کنیم.
در دو جدول باال يک سري درس به همراه يک سري دانش آموزش تعريف شده است که قرار است اطالعات خروجی
آنها را به هم متصل کنیم ،همانطور که در جدول زير مشاهده میکنید اطالعات دانشآموزان به همراه کالس درس
آنها وارد شده است و حاال میخواهیم از طريق نرمافزار Power BIاز آنها خروجی تهیه کنیم.
www.takbook.com
طبق مراحل قبلی نرمافزار Power BIرا بازکرده و دو جدول جديد را بهمانند شکل 10-62به لیست اضافه کنید.
شکل 10-62
شکل 10-63
در شکل 10-64بايد يک ارتباط بین دو جدول مورد نظر ايجاد کنید که در اين دو جدول Class IDتوانايی ارتباط
درست با هم را دارند ،براي همین موضوع بر روي Newکلیک کنید.
www.takbook.com
شکل 10-64
در شکل 10-65و در قسمت اول بايد جدولی که قرار است در خروجی نمايش داده شود را انتخاب کنید که بعد از
انتخاب ستون Class IDکه در هر دو جدول يکی است بهعنوان پل ارتباطی اين دو جدول بهصورت اتوماتیک انتخاب
میشود.
شکل 10-65
در شکل 10-66میتوانید از قسمت Visualizationيک جدول را انتخاب کنید و بعد از انتخاب بايد تیک گزينههايی
که قرار است در خروجی چاپ شوند را مشخص کنید که نتیجه ان را مشاهده میکنید.
www.takbook.com
شکل 10-66
اگر چنانچه بخواهید کمی کار را زيباتر کنید میتوانید بهمانند شکل 10-67ابزار فیلتر قرار دهید تا کاربر با انتخاب
هر کالس بتواند لیست دانشجويان آن را مشاهده کند.
شکل 10-67
Model براي اينکه ارتباط بین دو جدول را بهصورت بهتر مشاهده کنید میتوانید بهمانند شکل 10-68وارد قسمت
شويد و در صفحهي باز شده اگر نشانگر ماوس را بر روي فلش مورد نظر قرار دهید با رنگ مشخص شده ارتباط
بین ستونها در هر دو جدول را مشاهده خواهید کرد.
شکل 10-68
www.takbook.com
شکل 10-69
همانطور که در شکل 10-70مشاهده میکنید فايل Excelمورد نظر انتخاب شده و شما میتوانید هر کدام از
Sheetهاي ان را انتخاب کنید.
شکل 10-70
www.takbook.com
www.takbook.com
فصل هشتم
SQL Failover Clustring
زمانی که صحبت از SQL Serverاست ،يعنی اينکه دسترسی به دادههاي آن در يک لحظه هم نبايد با اختالل روبرو
شود و براي حل اين مشکل بايد يک راهکار پیادهسازي کرد تا سرويسهاي SQLجتی براي ثانیهاي از کار نیفتن ،براي
را معرفی کرد که در اين سرويس چند سرور Failover Clustering حل اين مشکل مايکروسافت سرويسی با نام
در گروهی قرار دارند و چنانچه براي يکی از سرورها مشکلی ايجاد شود سرورهايی ديگري که در Node بهعنوان
آن گروه قرار دارند جايگزين آن میشوند.
براي انجام اين کار نیاز به چند سرور بهمانند شکل 11-1داريم ،در اين سناريو نیاز به يک سرور ،Active Directory
که بايد نقس FAILOVER و دسترسی از طريق شبکه ،و دو سرور ISCSI براي ايجاد ديسک ISCSI يکی سرور
FAILOVERرا بازي کنند که البته اين چند سرور اط ريق سوئیچ به هم متصل میشوند و دو سرور FAILOVERبايد
يک کارت شبکهي ديگر هم داشته باشند.
172.16.1.1
FAILOVER-1
192.168.5.15
Active
Directory
192.168.5.2
FAILOVER-2
SWITCH
192.168.5.16
ISCSI Disk
172.16.1.2
192.168.5.20
شکل 11-1
را آماده کنیم ،براي ايجاد اين سرور شما میتوانید از نرمافزارهاي رايگان مانند ISCSI براي شروع کار بايد سرور
را ايجاد کنید ،ولی در اين آموزش ما از يک ISCSI FreeNASو ...استفاده کنید و ديسکهاي تحت شبکه با پروتکل
ويندوز سرور 2019استفاده میکنیم.
براي شروع کار و ايجاد سرور ،پیشنهاد میشود که از سرورهاي مجازي براي اين کار استفاده کنید ،تا نحوه ايجاد و
مديريت آن آسان باشد ،براي همین ما از يک سرور ESXiاستفاده کرديم و يک ماشین مجازي بهمانند شکل 11-2
Failover Clustring يک ماشین مجازي با نام ISCSI-Serverايجاد کرديم و به آن چهار هارد اضافه کرديم ،براي کار
www.takbook.com
شکل 11-2
بعد از اجرا شدن ويندوز مورد نظر اولین کاري که انجام میدهید اين است که آدرس IPرا بهصورت دستی وارد کنید
و در قسمت نام سرور هم يک نام براي آن وارد و آن را عضو دومین کنید.
بهمانند شکل IP 11-3سرور مورد نظر را وارد و بر روي OKکلیک کنید ،البته میتوانستید از سرويس DHCPهم
براي اين کار استفاده کنید.
شکل 11-3
شکل 11-4
بعد از اينکه مراحل باال را انجام داديد بايد سرويس ISCSIرا بر روي سرور نصب کنیم ،براي اين کار بهمانند شکل
5-11وارد Server Managerشويد و بر ري Add Roles and featuresکلیک کنید.
شکل 11-5
ISCSI تیک گزينهي File and ISCSI Services شويد و از زير مجموعهي Server Roles بهمانند شکل 11-6وارد
Target Serverرا انتخاب و بر روي Nextکلیک کنید و در ادامه بر روي Installکلیک کنید ،فقط توجه داشته باشید
در قسمت آخر تیک گزينهي Restartرا انتخاب کنید تا سرويس بعد از نصب Restartشود.
www.takbook.com
شکل 11-6
To Create an iSCSI virtual بهمانند شکل 11-7در قسمت File and Storage Servicesوارد iSCSIشويد و بر روي
diskکلیک کنید.
شکل 11-7
در شکل 11-8تمام هارد ديسکهاي مجازي که به ماشین مورد نظر اضافه کرديم را مشاهده میکنید که در ادامه بايد
آن را براي سرروهاي مورد نظر به اشتراک بگذاريم ،يکی از هاردها را از لیست انتخاب کنید تا يیبر روي Nextکلیک
کنید،؛ توجه داشته باشید که براي هر هارد بايد اين کار را انجام دهید.
www.takbook.com
شکل 11-8
در شکل 11-9بايد يک نام براي ديسک مجازي خود انتخاب کنید که در زير صفحه مسیر ذخیره شدن اين ديسک
مشخص شده است.
شکل 11-9
در شکل 11-10بايد حجم مورد نظر براي ايجاد ديسک مجازي را مشخص کنید ،که در اينجا 49گیگ وارد شده
است که البته بستگی به نوع کار و حجم اطالعات شما دارد ،توجه داشته باشید اگر گزينهي Fixedرا انتخاب کند کل
فضا به اين هارد مجازي اختصاص داده خواهد شد ولی اگر گزينهي Dynamicallyرا انتخاب کنید به مرور زمان اين
حجم پر خواهد شد که پیشنهاد خود مايکروسافت گزينه اول است.
www.takbook.com
شکل 11-10
در شکل 11-11گزينهي New iSCSI targetرا انتخاب کنید و بر روي Nextکلیک کنید.
شکل 11-11
در شکل 11-12بايد يک نام براي targetخود به دلخواه وارد و بر روي Nextکلیک کنید.
شکل 11-12
در شکل 11-13گزينهي Enter a value for selected typeرا انتخاب کنید و يک نام وارد کنید ،توجه داشته باشید که
اين نام مهم بوده و در ادامه براي ارتباط با هارد ديسک مجازي از آن استفاده خواهد شد.
www.takbook.com
شکل 11-13
در شکل 11-14می توانید ارتباط خود را رمزگذاري کنید ،تا کسی نتواند به هارد ديسک مجازي مورد نظر دست
پیدا کنید ،در حال حاضر نیازي به اين کار نیست و بر روي Nextکلیک کنید.
شکل 11-14
در شکل 11-15بر روي Createکلیک کنید تا targetمورد نظر به همراه هارد ديسک مجازي ايجاد شود.
www.takbook.com
همانطور که در شکل 11-16مشاهده میکنید ،هارد ديسک مجازي مورد نظر داخل درايو Cبا حجم 49گیگابايت
ايجاد شده است و در ادامه بايد 3هاردديسک ديگر را هم به لیست اضافه کنید که براي اينکه به طور کامل متوجه
New iSCSI Virtual شويد يکی از آنها را ايجاد میکنیم ،بر روي صفحهي مورد نظر کلیک راست کنید و گزينهي
Diskرا انتخاب کنید.
شکل 11-16
را براي ايجاد هارد مجازي انتخاب کرده بوديم ،حاال بايد درايو بعدي يعنی Eرا C در شکل 11-17که قبالً درايو
انتخاب و بر روي Nextکلیک کنیم.
www.takbook.com
شکل 11-17
در شکل 11-18بايد نام ديسک را وارد کنید و در پايین صفحه محل ذخیره شدن آن را در درايو Eمشاهده میکنید.
شکل 11-18
در شکل 11-19بايد حجم مورد نظر خود را وارد کنید که در ينجا 49گیگیابايت را وارد و بر روي Nextکلیک کنید.
شکل 11-19
www.takbook.com
شکل 11-20
در شکل 11-21هم بايد بر روي Createکلیک کنید تا هارد ديسک مورد نظر ايجاد شود ،توجه داشته باشید که دقیقاً
همین مراحل را براي دو ديسک ديگر هم انجام دهید تا جمعاً 4ديسک به لیست اضافه شود.
شکل 11-21
همانطور که در شکل 11-22مشاهده میکنید هر چهار ديسک مورد نظر ايجاد شده است و حاال میتوانیم به آنها
متصل شويم.
شکل 11-22
شکل 11-23
براي متصل شدن به ديسکهاي iSCSIابزاري وجود دارد با نام iSCSI Initiatorکه در تمام ويندوزهاي سرور
موجود است و حتی می توانید آن را از اينترنت دانلود کنید و بر روي ويندوز مورد نظر خود نص کنید ،مانند شکل
24-11بر روي iSCSI Initiatorدو بار کلیک کنید.
شکل11-24
در شکل 11—25و در تب Configurationبايد نام Initiator Nameرا که با نام target—serverايجاد کرديم را وارد
کنید.
www.takbook.com
شکل 11-25
در شکل 11—26و در تب Targetsبايد آدرس IPسرور iSCSIرا وارد و بر روي Connectکلیک کنید ،با اين کار
شما توانستید هارد ديسک مورد نظر را به لیست پارتیشنهاي خود اضافه کنید که با هم انها را امادهسازي میکنیم.
شکل 11-26
براي اينکه در سرور Failover-01که عملیات باال را در آن انجام داديم بتوانیم هاردديسکهاي iSCSIرا مشاهده
کنیم بايد بهمانند شکل 11-27در RUNدستور diskmgmt.mscرا اجرا کنید تا سرويس Disk Managementاجرا
شود.
شکل 11-27
www.takbook.com
شکل 11-29
براي هارد GPT که براي هارد ديسکهايی با حداکثر ظرفیت 2ترابايت است و MBR در شکل 11-30میتوانید
ديسکهايی بیشتر از 2ترابايت ،پس گزينهي MBRرا انتخاب و بر روي OKکلیک کنید.
شکل 11-30
www.takbook.com
شما در اين سرور هم بايد آن چهار هارد iSCSIرا به لیست اضافه کنید ،اما يک مشکل اساسی وجود دارد و ان هم
متصل کنید ،براي اين کار iSCSI اين است که شما نمیتوانید بیشتر از يک سرور را بهصورت پیشفرض به سرور
بايد يک سرويس ديگر را بر روي سرور iSCSIنصب کنید و آن هم سرويس Multipath I/Oاست که بهمانند شکل
31-11بايد وارد Server Managerدر سرور iSCSIشويد و از قسمت Featuresتیک گزينهي Multipath I/Oرا انتخاب
و بر روي Nextکلیک کنید.
شکل 11-31
در شکل 11-32حتماً تیک گزينهي … Restart the destinationرا انتخاب و بر روي Installکلیک کنید.
شکل 11-32
www.takbook.com
شکل 11-33
بهمانند شکل 11-34وارد تب MPIO Devicesشويد و بايد در لیست مورد نظر Deviceمورد نظر را حتماً مشاهده
کنید تا عملیات موفقیتآمیز باشد.
شکل 11-34
بعد از انجام مراحل باال بايد وارد سرور Failover-2شويد و بهمانند شکل iSCSI Initiator 11-35را اجرا کنید و دقیقاً
همان کاري که در سرور اول يعنی Failover-1انجام داديد در اين قسمت هم انجام دهید.
www.takbook.com
شکل 11-35
شکل 11-36
شکل 11-37
در ادامه هارد ديسک مورد نظر به لیست اضافه و کارهايی را که در سرور Failover-1انجام داديم در اين سرور هم
بايد انجام دهیم.
بعد از اينکه هارد ديسکهاي مجازي را در هر سرور ايجاد کرديم بايد سرويسهاي ديگري را هم فعال کنیم ،سرويس
بوده که تا ويندوز سرور 2012وجود داشته ولی در Application Server ديگري که از گذشته وجود داشته با نام
ويندوز سرور 2016و 2019اين گزينه وجود ندارد ولی سرويسهاي آن بهصورت پیشفرض بر روي ويندوز فعال
است و مشکلی از اين لحاظ نخواهید داشت.
www.takbook.com
شکل 11-38
Restart نصب اين سرويس کمی زمان بر خواهد بود ،توجه داشته باشید که بعد از نصب سرويس حتماً سرور بايد
شود.
در ادامه بايد کنسول مديريتی سرويس Clustringرات در هر دو سرور اجرا کنید و کارهاي زير را در هر دو سرور
انجام دهید.
بهمانند شکل 11-39وارد Server Managerشويید و از منوي Toolsسرويس Clustringرا اجرا کنید.
شکل 11-39
www.takbook.com
شکل 11-40
در شکل 11-41بايد نام سرور مورد نظر خود را وارد و بر روي Addکلیک کنید ،توجه داشته باشید بايد نام هر دو
سرور را به لیست اضافه کنید.
شکل 11-41
در شکل 11-42بايد گزينهي Run all testsرا انتخاب کنید تا قبل از اينکه موضوع را عملیاتی کنیم مراحل کار تست
شود.
www.takbook.com
شکل 11-42
شکل 11-43
همانطور که در شکل 11-44مشاهده می کنید عملیات با موفقیت انجام شده است ،اما شايد براي شما با خطاهاي
مختلفی تمالم شده باشد که حتماً بايد آن خطا ها را بررسی کنیم.
www.takbook.com
شکل 11-44
خطاهايی که معمو ًال در اين قسمت روي میدهد شامل موارد زير است:
-1کارت شبکهي دوم تعريف نشده باشد.
-2سیستم تحت دامین نباشد.
-3هارد ديسک به درستی در هر دو سرور ايجاد نشده باشد ،که اين خطا يکی از متداولترين خطاها است.
-4سرويس MPIOدر هر سه سرور فعال نباشد.
اگر همهي مواردهاي باال را به درستی انجام دهید ديگر با خطا مواجه نخواهید شد.
در ادامه کار و بعد از تست موفقیت آمیز کار بايد Clusterاصلی خود را ايجاد کنیم براي اين کار بهمانند شکل -45
Create Cluster 11بر روي
شکل 11-45
شکل 11-46
بايد انتخاب شود ،و زمانی که شبکهي Cluster در شکل 11-47بايد مشخص کنید که کدام شبکه بهعنوان شبکهي
را انتخاب میکنید بايد براي آن يک آدرس IPمشخص در نظر بگیريد ،که در اينجا شبکهي اصلی يعنی Cluster
در نظر گرفاه خواهد شد و بعد از اتمام Cluster بهعنوان شبکهي 192.168.5.21 انتخاب شده و آدرس 192.168.5
کانفیگ اگر همه چیز به درستی پیش برود شما میتوانید اين IPرا Pingکنید و از آن استفاده کنید.
شکل 11-47
بهمانند شکل 11-48بر روي Nextکلیک کنید تا کار نصب آغاز شود.
www.takbook.com
شکل 11-48
همانطور که در شکل 11-49مشاهده میکنید عملیات Clustringبه درستی انجام شده است و حاال ما بر روي آدرس
192.168.5.21سرويس کالستر داريم و میتوانید در ادامه از آن استفاده کنیم.
شکل 11-49
توجه داشته باشید که اگر در يک سرور عملیات ايجاد Clustringرا انجام دهید در سرور ديگر هم همین تنظیمات
انجام خواهد شد.
همانطور که در شکل 11-50مشاهده میکنید Clusterمورد نظر با موفقیت ايجاد شده است.
www.takbook.com
شکل 11-50
اگر بهمانند شکل 11-51وارد قسمت Nodeشويد دو سرور Failover-1و Failover-2را مشاهده میکنید که هر دو
در حالت روشن يعنی UPقرار دارند و میتوانند سرويس ارائه دهند.
نصب کنیم ،البته روش Failover-2 و Failover-1 را بر روي هر دو سرور SQL Server در ادامه کار بايد نرمافزار
نصب با قبل تفاوت خواهد داشت.
وارد يکی از سرورها مثالً Failover-2میشويم و نرمافزار SQL Serverرا براي نصب اجرا میکنیم.
New بهمانند شکل 11-52وارد Installationشويد و بر روي Installationکلیک کنید و در صفحهي باز شده بر روي
SQL Server failover clusterکلیک کنید.
www.takbook.com
شکل 11-52
در در شکل 11-53برسیهاي اولیه انجام میشود که اگر از نظر Clustringمشکلی نباشد میتوانید کار را ادامه دهید.
شکل 11-53
در شکل 11-54تیک گزينهي Database Engine Servicesرا انتخاب و بر روي Nextکلیک کنید ،البته اين موارد را
قبالً توضیح داديم.
www.takbook.com
شکل 11-54
يک نام به دلخواه خود وارد کنید ،البته اين نام مهم SQL Server Network Name در شکل 11-55بايد در قسمت
است و براي دسترسی به SQLبايد از اين نام استفاده کنیم ،در قسمت بعدي هم بايد نام Instanceرا وارد کنید.
شکل 11-55
در شکل زير دو سرويس موردنیاز براي فعالسازي Clustringدر SQLرا مشاهده میکنید ،بر روي Nextکلیک کنید.
www.takbook.com
شکل 11-56
در شکل 11-57بايد همهي ديسکهاي موجود را انتخاب کنید ،فقط سه ديسک در لیست قرار دارد ،اما يک ديسک
ديگر که ديسک شمارهي يک باشد در لیست براي انتخاب وجود ندارد ،دلیل آن هم اين است که اصو ًال زمانی که
انتخاب میشود ،اين Quorum را فعال میکنید ،ديسک اول بهصورت پیشفرض بهعنوان ديسک Clustring سیستم
ديسک تشکیلدهندهي تنظیمات اصلی Clustringاست و بهصورت خودکار تنظیم میشود ،البته میتوانستیم در قسمت
ايجاد Clustringاين ديسک را تنظیم کنیم تا خودش يک ديک را انتخاب نکند ،در شکل 11-57مشخص شده است
که کدام ديسک بهعنوان ديسک Quorumانتخاب شده است.
شکل 11-57
در شکل 11-58بايد شبکهي IPV4خود را انتخاب کنید و يک آدرس IPجديد براي SQLوارد کنید ،توجه داشته
باشید اين IPبا IPکه در قسمت Clustringوارد کرديم متفاوت خواهد بود.
www.takbook.com
شکل 11-58
در شکل 11-59بايد نام کاربري که قرار است دسترسی کامل براي اجراي سرويسها را داشته باشد وارد کنید و بر
روي Nextکلیک کنید.
شکل 11-59
Data Directories در شکل 11-60و در تب Server Configurationبر روي Current Userکلیک کنید و بعد در تب
بايد محل ذخیره شدن ديتابیسها و اطالعات کاربران و فايل هاي پشتیبان را مشخص کنید ،سعی کنید هر قسمت را
در يکی از هاردهاي Clusterکه ايجاد کرديم وارد کنید و بر روي Nextکلیک کنید.
www.takbook.com
شکل 11-60
در شکل 11-61بر روي Installکلیک کنید تا کار نصب آغاز شود.
شکل 11-61
بعد از نصب سرويس Clustringبراي SQLسرور اگر وارد سرويس Failover Cluster Managerبهمانند شکل 11-62
مورد نظر Instance با SQL Server کلیک کنید ،همانطور که مشاهده میکنید Roles شويد از سمت چپ بر روي
توسط سرور Failover-2ايجاد شده است.
شکل 11-62
www.takbook.com
شکل 11-63
در شکل 11-64بررسیهاي مربوط به Clustringانجام شده و در صورت نبود خطا بر روي Nextکلیک کنید.
شکل 11-64
همانطور که در شکل 11-65مشاهده میکنید کالستر مورد نظر که با نام شبکهي SQL-Clusterايجاد کرده بوديم
بهصورت اتوماتیک پیدا شده که نشان میدهد این نام را از رسور Failover-2گرفته است ،برای ادامه کار بر روی
Nextکلیک کنید.
www.takbook.com
شکل 11-65
در شکل 11-66هم بايد نام کاربري که قرار است سرويسهاي مورد نظر را اجرا کنید وارد کنید ،سعی کنید همان
کاربري که در Failover-2وارد کرديد در اين قسمت هم وارد کنید.
شکل 11-66
در شکل 11-67بر روي Installکلیک کنید تا کار نصب آغاز شود.
www.takbook.com
شکل 11-67
خوب براي تست عملکرد Clustringبهمانند شکل 11-68نرمافزار SQL Server Management Studioرا اجرا کنید و
در قسمت Server nameبايد همان نام شبکه که در مراحل راهاندازي SQL Clustringوارد کرديد در اين قسمت هم
وارد کنید.
شکل 11-68
در شکل 11-69بهعنوان تست يک ديتابیس در سرور ايجاد کرديم و میخواهیم ببینیم زمانی که يکی از اين سرورهاي
Failoverرا از دست دهیم چه اتفاقی رخ میدهد.
www.takbook.com
شکل 11-69
در شکل 11-70سرور Failover-2را که سرور اصلی در کالسترينگ بوده را خاموش و يا Suspendمیکنیم.
شکل 11-70
Failover-2 اگر بهمانند شکل 11-71وارد سرويس Clustringشويد و در قسمت Nodeمشاهده خواهید کرد سرور
ازکارافتاده.
شکل 11-71
در شکل 11-72وارد قسمت Rolesشويد و همانطور که مشاهده میکنید در ستون Owner nodeسرور تغییر کرده
و Failover-1فعال است.
www.takbook.com
شکل 11-72
را راهاندازي کنیم و توانايی آن را Failover Clustring خوب در اين فصل توانستیم با کمک چهار سرور سرويس
مشاهده کنیم ،اين نوع سرويسها در سازمانهايی مانند بانک که قطع شدن يکلحظه از سیستم میتواند خسارت
جبرانناپذيري وارد کند خیلی حیاتی و مهم است ،پس شما بهعنوان يک DBAبايد نحوهي راهاندازي اين سرويس را
کامالً مسلط باشید.
www.takbook.com
www.takbook.com
فصل نهم
Business Intelligence هوش تجاري –
شما بهعنوان متخصص SQLو برنامهنويس يک مجموعه عظیم قادر هستید از پیچیدهترين اطالعات در داخل نرمافزارها
شويد و از اطالعات SQL با خبر شويد و مشکالت از نظر فنی نخواهید داشته باشید مثالً میتوانید وارد ديتابیس
جدول آن با خبر شويد ،ولی اگر مدير آن سازمان بخواهد اطالعات مورد نظر را مشاهده کند ،به علت نداشتن دانش
فنی الزم توانايی درک مسئله را نخواهد داشت که اين يک مشکل بزرگ در مجموعه خواهد بود و براي حل مشکل
بايد راهکارهايی ارائه شود تا مديران و افراد ديگر بتوانند اطالعات را بهراحتی مشاهده و تحلیل آن را بررسی کنند.
خوب در ادامه کار میخواهیم بهطورکلی عملیات هوش تجاري را در سازمان بیان کنیم ،اگر به شکل 9-1توجه کنید،
هوش تجاري در چند مرحله بههموابسته انجام میشود که آنها را با هم بررسی میکنیم.
Presentationنام دارد .در اين رويکرد ،دادهها قبل از فراخوانی به پايگاهداده تحلیلی ( ،)Data warehouseساختار مناسب
پیدا میکنند و سپس ذخیره میشوند.
که بدون توجه به روال سهاليه ،ETLدادهها را مستقیماً به پايگاه Extract-Load-Transformation مخفف ELT
دادههاي تحلیلی فراخوانی میکند و تغییر ساختار دادهها باتوجهبه نیاز انجام و در جداول جديد ذخیره میشود.
يک بانک اطالعاتی بزرگ است که از طريق آن کلیه دادههاي حال و Data warehouse پايگاهداده تحلیلی يا همان
گذشته يک سازمان جهت انجام عملیات گزارشگیري و آنالیز در دسترس مديران قرار میگیرد .پايگاهداده تحلیلی که
برخی آن را انبار داده میخوانند ،نقش مهمی در تصمیمگیري مديران سازمانها براي تعیین يک استراتژي موفق دارد.
پايگاهداده نقش محوري در سامانههاي هوش تجاري در سازمانها ايفا میکنند.
Cognos دادهها در دسترس کاربران قرار میگیرد .نرمافزارهاي تهیه گزارش مانند Reports يا Presentation در اليه
با دسترسی به اين اليه میتوانند اطالعات موردنیاز مديران و تحلیلگران را استخراج و در ,Business Object ,SAP
قالب گزارش يا Dashboardعرضه نمايند ،البته بهترين نرمافزار در اين زمینه Power BIاست.
در ادامه کار میخواهیم نحوهي نصب و راهاندازي آن را بررسی کنیم.
9-3مقدمهاي بر SSIS
ابزاري میشوندSSIS . Microsoft SQL Server Integration Servicesبا نام SQL Integration Serviceيا SSISشناخته
میکند. براي هوش تجاري است که راهحلهاي تبديل داده را براي سازمانهاي مختلف فراهم
و )Loadاست .اين بدين معنی است که Transform ،Extract ( ETL يک ابزار SQL Server Integration Services
میتوان از SSISبراي استخراج دادهها از طیف گستردهاي از منابع مانند فايلهاي اکسل ،فايلهاي ، Flatپروندههاي
،XMLپايگاههاي داده رابطهاي و غیره استفاده کرد .عالوه بر اين ،آنها را مطابق با نیاز خود تبديل کنید و در آخر
دادهها را در مقصد بارگیري کنید IS .يک ابزار هوشمند تجاري است که راهحلهاي تبديل داده را براي سازمانهاي
مختلف فراهم میکند.
بعد از اينکه سرويس Integrationرا بر روي سرور SQLنصب کرديد در ادامه بايد بهصورت زير عمل کنید:
Visual براي اينکه اين سرويس SSISرا بهصورت کامل راهاندازي کنیم نیاز به نرمافزار SQL Server Data Toolsدر
studioاستفاده داريم ،براي دانلود و نصب آن از طريق لینک زير فايل مربوط به Visual Studio 2017را که براي اين
کار طراحی شده است را دانلود کنید.
https://go.microsoft.com/fwlink/?linkid=2161172&clcid=0x409
همانطور که در شکل 9-3مشاهده میکنید فايل نصبی اجرا شده است و براي شروع بايد بر روي Nextکلیک کنید.
در شکل 9-4بايد يک Instance nameبراي اين سرويس مشخص و بر روي Installکلیک کنید.
www.takbook.com
در ادامه و در شکل 9-6از سمت چپ گزينهي Integration Servicesرا انتخاب کنید و در صفحه باز شده بر روي
را انتخاب کنید ،در قسمت پايین شکل می توانید نام پروژه خود را مشخص و مسیر Integration Services Project
همانطور که در شکل 9-7مشاهده میکنید نماي کلی پروژه Integrationدر Visual Studioباز شده است که براي
درک بهتر محیط آن شمارهگذاري کرديم و در ادامه آنها را توضیح میدهیم.
شکل 9-7
اگر به شکل 9-9توجه کنید يک Packageجديد اضافه شده است اگر دو بار بر روي هر يک از پکیجها کلیک کنید
اطالعات مربوط به همان پکیج نمايش داده خواهد شد و هر پکیج کار مختص به خودش را انجام میدهد ،توجه
داشته باشید که هر Packageداراي پنج تب مختلف است ،يک Packageبايد حداقل شامل يک Control flowباشد.
همانطور که در شکل 9-11مشاهده میکنید چندين گزينهي مختلف وجود دارد که با استفاده از آنها میتوانید به
منابع مختلف و ارتباطات گوناگون دست پیدا کنید ،در
دادههاي مربوط به جريان داده يا يک فايل حافظه نهان ) (.cawرا میخواند و میتواند CACHE
به يک سرور Data Quality Servicesو يک پايگاهداده Data Quality Servicesدر سرور DQS
متصل Analysis Services يا يک پروژه SQL Server Analysis Services به نمونهاي از MSOLAP100
میشود .
میشود . با استفاده از ارائهدهنده OLE DBبه منبع داده متصل OLE DB
میشود . به سرور ) SQL Server Management Objects (SMOمتصل SMOSERVER
مديريت Windows Management Instrumentation به يک سرور متصل میشود و دامنه WMI
تا به اينجاي کار يک پروژه جديد ايجاد کرديم و محیط و ابزارهاي آن را بررسی کرديم در ادامه میخواهیم با تعريف
مثالهاي گوناگون نحوهي کار سرويس SSISرا بررسی کنیم.
شکل 9-12
در شکل 9-14و در قسمت Servernameبايد آدرس سرور FTPخود را وارد کنید ،در قسمت پورت هم اگر تغییري
و Username در سرور ايجاد نکرده باشید همان پورت 21را که پورت پیشفرض است را وارد کنید و در قسمت
Passwordنام کاربري و رمز عبور را وارد و بر روي OKکلیک کنید ،البته قبل از آن میتوانید بر روي TestConnection
در شکل 9-15بعد از اضافه کردن Connectionبايد نام و توضیحات دلخواه خود را وارد کنید.
کلیک کنید و يک فايل به دلخواه از سیستم خود انتخاب New بر روي LocalPath در شکل 9-16بايد در قسمت
کنید که در اينجا يک فايل اکسل انتخاب شده است.
در شکل 9-17بعد از معرفی فايل براي انتقال ،بايد در قسمت Operationنوع عملیات را مشخص کنید و در قسمت
RemotePathبا قرار دادن عالمت " "/مشخص میکنید که فايل در ريشه کپی شود.
بعد از اينکه تظیمات را در قسمت قبل به درستی انجام داديد به مانند شکل 9-17بر روي دکمه Startکلیک کنید تا
عملیات انتقال فايل از سیستم شما به سرور FTPاز طريق SSISانجام شود.
www.takbook.com
همانطور که در شکل 9-18مشاهده میکنید FTPبا موفقیت اجرا شده و در شکل 9-19فايل مورد نظر در FTPکپی
شده است.
براي اينکه بتوانیم هر يک از ابزارها را تنظیم کنید به مانند شکل 9-21بر روي آنها کلیک راست و گزينهي Editرا
انتخاب کنید.
در شکل 9-22بايد بر روي Newکلیک کنید و سروري که SQLبر روي آن نصب شده است را وارد کنید.
www.takbook.com
در شکل 9-23بايد در قسمت Databaseگزينهي All databasesرا انتخاب کنید و بر روي OKکلیک کنید.
در قسمت دوم يعنی Sharinkبايد به مانند شکل 9-24گزينهي All databasesرا انتخاب و بر روي OKکلیک کنید.
در شکل 9-26بايد از قسمت Backup Typeنوع پشتیبان را Fullانتخاب کنید و در قسمت Databaseکل ديتابیس را
انتخاب کنید و در ادامه کار وارد تب Destinationشويد.
به مانند شکل 9-27بايد مسیر مورد نظر براي کپی کردن فايل پشتیبان را مشخص کنید.
www.takbook.com
شويد و از قسمت mail در مرحله آخر بايد ايمیل را تنظیم کنیم براي اين کار به مانند شکل 9-28وارد تب
SmtpConnectionگزينهي New connectionرا انتخاب کنید.
در شکل 9-29نام به دلخواه وارد و آدرس سرور Emailخود را وارد کنید ،اگر تیک گزينهي مورد نظر را انتخاب
کنید از همان نام کاربري و رمز عبور شما که وارد ويندوز شدهايد استفاده خواهد شد.
www.takbook.com
در شکل 9-30و در قسمت Fromو Toايمیل مورد نظر خود را وارد کنید و در قسمت Subjectعنوان ايمیل و در
قسمت MessageSourceمتن ايمیل را وارد و بر روي OKکلیک کنید.
بعد از تکمیل موارد باال به مانند شکل 9-31بر روي دکمه Startکلیک کنید تا عملیات آغاز شود.
www.takbook.com
همانطور که در شکل 9-32مشاهده میکنید عملیات با موفقیت اجرا شده است و در شکل 9-33هم ايمیل تايید
ارسال شده است.
بعد از اضافه کردن ديتابیس میتوانیم از طريق دستور زير خروجی کلی از جدول Sales.Customerرا مشاهده کنید.
SELECT ][CustomerID
],[PersonID
],[StoreID
],[TerritoryID
],[AccountNumber
],[rowguid
],[ModifiedDate
]FROM [AdventureWorks2019].[Sales].[Customer
همانطور که در شکل 9-36مشاهده میکنید ،خروجی جدول Sales.Customerداراي 19820سطر هست که در ادامه
میخواهیم آن را محدودتر کنیم و در خروجی نمايش دهیم.
براي شروع کار به مانند شکل 9-37وارد SSISشويد و Data Flow Taskرا وارد قسمت Control Flowکنید و بعد
از آن بر روي آن دو بار کلیک کنید تا وارد تب Data Flowشويم.
www.takbook.com
به مانند شکل 9-38ابزار OLE DB Sourceرا وارد صفحه Data Flowکنید و بر روي آن کلیک راست کنید و گزينهي
Editرا انتخاب کنید.
در شکل 9-39بايد بر روي Newکلیک کنید و آدرس سرور به همراه ديتابیس مورد نظر را انتخاب کنید ،بعد از اين
کار بايد جدول Sales.Customersرا انتخاب کنید و بر روي OKکلیک کنید.
در ادامه کار به مانند شکل 9-40از ابزارهاي موجود ،ابزار Row Samplingرا به صفحه اضافه کنید و بر روي آن دو
بار کلیکم کنید.
www.takbook.com
در شکل 9-41بايد در قسمت اول مشخص کنید کخ چه تعداد سطر را میخواهید در خروجی نمايش دهید ،همانطور
که در اول اين بخش گفتیم 19820سطر داريم که شما می توانید هر تعداد به دلخواه را در خروجی نمايش دهید که
Sample output name البته خروجی به صورت تصادفی میباشد ،در اين قسمت عدد 10را وارد میکنیم و در قسمت
نام "خروجی اصلی" و در قسمت Unselected output nameنام "خروجی فرعی" را وارد میکنیم ،توجه داشته باشید
که در تب Columnsمیتوانید مشخص کنید که چه ستونهايی در خروجی نمايش داده شوند.
در ادامه براي اينکه خروجی را نمايش دهیم به مانند شکل 9-42دو بار ابزار Multicastرا در صفحه قرار دهید
در ادامه و بعد از مشخص کردن ارتباط به مانند شکل 9-44بر روي لینک ارتباطی "خروجی اصلی" کلیک راست
کنید و گزينهي Enable Data Viewerرا انتخاب کنید.
اگر به شکل 9-45توجه کنید ،بعد از اينکه ابزارها را به درستی تنظیم کرديد میتوانید بر روي دکمه startکلیک کنید
تا خروجی را مشاهده کنیم.
همانطور که مشاهده کرديد توانستیم با استفاده از تعداد سطرها خروجی را کنترل و نمايش دهیم ،ولی اگر بخواهیم
خروجی را به صورت درصد نمايش دهیم نحوهي کار تغییر خواهد کرد ،براي اين کار به مانند شکل 9-47ابزار
Precentage Samplingرا به لیست اضافه کنید.
همانطور که در شکل 9-48مشاهده میکنید بايد درصد مورد نظر خود را وارد کنید که در اينجا 5درصد وارد شده
است و ورودي اصلی و فرعی مشخص شده است.
www.takbook.com
بعد از تکمیل کار بايد بر روي دکمه Startبه مانند شکل 9-49کلیک کنید.
منابع
• Pro SQL Server 2019 Administration, 2nd Edition - Peter A. Carter
• Microsoft SQL Server 2012 - William R. Stanek
• SQL Server 2012 T-SQL Recipes - Jason Brimhall - David Dye - Jonathan Gennick - Andy Roberts - Wayne Sheffield
• Microsoft SQL Server 2012 BIBLE - Patrick LeBlanc, Jose Chinchilla, Aaron Nelson, Jorge Segarra , Adam Jorgensen
• SQL Server Integration Services (SSIS) Step by Step Tutorials - Karthikeyan Anbarsan
• https://www.sqlshack.com/
• https://dba.tosinso.com - مر یم حیات رمضانی
• http://www.hpkclasses.ir -هاله کسمائی
• https://mug.ac - سایت تکنولوژ ی و برنامهنو یسی ماگ از مجموعه وب سایتهای آموزشی موسسه آموزش عالی
آزاد دانش پژوهان
• https://www.sqlservertutorial.net/
تماس با ما