پشتیبان گیری از SQL Server با Powershell

پشتیبان گیری از SQL Server با Powershell

نوشته شده توسط: تیم فنی نیک آموز
تاریخ انتشار: ۰۱ دی ۱۴۰۱
آخرین بروزرسانی: ۰۳ آبان ۱۴۰۲
زمان مطالعه: 15 دقیقه
۴.۶
(۹)

مقدمه

در این مقاله قصد داریم در مورد چگونگی بک‌آپ SQL با پاور‌شل صحبت کنیم. بررسی خواهیم کرد که چطور به کمک پاور‌شل و منبع آزاد ابزار DBAtools بک‌آپ دیتا‌بیسSQL Server انجام می‌شود. هر سازمان باید یک طرح باز‌یابی فاجعه (Disaster Recovery) داشته باشد تا از بروز خسارات غیر‌منتظره جلوگیری شود. مشکلاتی از‌جمله قطعی برق، حملات سایبری، بلایای طبیعی و… باعث بروز این‌گونه خسارات می‌شوند.

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

پشتیبان گیری از SQL Server با Powershell

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

  • بک‌آپ‌گیری منظم از دیتا‌بیس و بازیابی منظم داده‌ها.
  • اجرای دستور DBCC CHECKDB به‌منظور بررسی ­هماهنگی موجود در دیتا‌بیس‌ها پس از ریستور. ­
  • به‌منظور ­اجرای ­عملکرد‌های فوق در SQL Server می‌توانیم کد T-SQL را نوشته و Maintenance Plan ایجاد کرده و یا SSIS Package آماده ‌کنیم.

اگر‌چه ممکن است به اطلاعات دیگری نیز در مورد اجرای این عملیات نیاز داشته باشیم؛ اما بدون نیاز به این اطلاعات می‌توان از ابزار  DBATools جهت بک‌آپ دیتا‌بیس  و ریستور عملکرد‌ها استفاده کرد. البته قبلاً در مورد ابزار  DBATools صحبت کرده‌ایم. شما می‌توانید از استودیو داده آزور، جهت به‌کارگیری ابزار DBATools استفاده کنید؛ اما ما عملکرد خود را از‌طریق پاور‌شل انجام می‌دهیم. با استفاده از دستور Get-Helpپاور‌شل را راه‌اندازی و سپس ساختار‌های بک‌آپ گرفته‌شده را کنترل می‌کنیم.

بک‌آپ اس‌کیو‌ال به‌کمک پاور‌شل

روش بک‌آپ از طریق  Get-Help *Backup* بسیار آسان است که آن را در تصویر می‌بینید. چنانچه قبلاً از این روش استفاده نکرده‌اید Get-Help به‌منظور آپدیت و به‌روزرسانی، در‌خواست نصب پاور‌شل می‌دهد. سپس باید شما هم مثل ­من، ­این ­در‌خواست­ را تأیید کنید. پس از پایان عملیات نصب، یک فهرست طولانی ایجاد می‌شود. ما نیاز به اطلاعات ابزار DBATools داریم که در تصویر۲ ملاحظه می‌کنید.

بک‌آپ اس‌کیو‌ال به‌کمک پاور‌شل

همان گونه که ­می‌بینید تابع‌ عملکردی وجود دارد که طی ­آن ­عملیات ­زیادی ­حین ­بک‌آپ ­از طریق ابزار DBATools انجام می‌شوند. نخست ­بیایید ­آخرین ­بک‌آپ­ دیتا‌بیس ­را­ که ­با ­به‌کارگیری ­دستور­ Get-DbaLastBackup ‌اجرا‌شده، بررسی کنیم. البته اجازه دهید یکبار دیگر دستور Get-Help Get-DbaLastBackup را اجرا کرده و نتیجه را مشاهده کنیم.

بک‌آپ اس‌کیو‌ال به‌کمک پاور‌شل

تصویر زیر مربوط به زمانی است که این دستور را در سرور خودم اجرا نمودم.

بک‌آپ اس‌کیو‌ال به‌کمک پاور‌شل

طبق­ تصویر ­نتیجه‌ای که مشاهده می‌کنید؛ یعنی قبلاً از دیتا‌بیس بک‌آپ تهیه نشده است. اما از‌آنجا که من دوست ­ندارم ­چنین ­پیغامی ­را­ ببینم ­|Out-Gridview ­را ­به ­دستورGet-DbaLastBackup-SqlInstance لوکال‌هاست اضافه می‌کنم.

بک‌آپ اس‌کیو‌ال به‌کمک پاور‌شل

حد‌اقل تصویر بالا واضح‌تر است.     

اکنون می‌توانیم خیلی سریع بک‌آپ بگیریم و به این منظور ما از Backup-DBaDatabase  استفاده کردیم که باز‌یابی مجدد از دستور *Backup*.صورت‌گرفته است. برای بررسی این دستور ­به فایل راهنما توجه کنید.

بک‌آپ اس‌کیو‌ال به‌کمک پاور‌شل

در‌واقع محتوای فایل راهنما شامل تمام آن مواردی است که ­در ­استفاده از­ دستور نیاز داریم. اعم‌از: سینتکس و نیز نمونه‌‌هایی از کار‌برد دستورات آماده و غیره. بر اساس این اطلاعات من دستور ذیل را به‌منظور اجرای بک‌آپ دیتا‌بیس‌های موجود بر روی لوکال‌هاست (localhost)می‌نویسم.

Backup-DbaDatabase -SqlInstance localhost

بک‌آپ اس‌کیو‌ال به‌کمک پاور‌شل

همان گونه که در تصویر مشاهده می‌کنید، من به کمک یک دستور ساده توانستم بک‌آپ دیتا‌بیس را آماده کنم. مهم‌ترین موضوع در اینجا این است که من چطور باید محل این دیتا‌بیس یا دیتا‌بیس‌ها را مشخص کنم. پاسخ این سؤال در بخش سینتکس فایل راهنما موجود است.

قبل از هر چیزی اجازه دهید این دستور را که شما در بک‌آپ‌گیری نیاز دارید، برایتان به اشتراک بگذارم.

با استفاده از دستور ذیل صرفاً می‌توانید فقط بک‌آپ master database  را بر روی لوکال‌هاست بگیرید.

Backup-DbaDatabase -SqlInstance localhost -Database master

چنانچه­ بخواهید ­بک‌آپ  بیش از یک دیتا‌بیس را ­تهیه ­کنید­ باید ­از ­کد ­ذیل ­استفاده ­کنید بک‌آپ دیتا‌بیس‌های master و model را تهیه کنید:

Backup-DbaDatabase -SqlInstance localhost -Database master, model

در‌واقع ما دیتا‌بیس‌ها را تعیین کردیم، اما نمی‌دانیم از کجا به آنها دسترسی پیدا کنیم؟

به طور پیش‌فرض،SQL Server یک بک‌آپ در محلی که در حین تنظیمات دیتا‌بیس تعیین کرده‌اید، ایجاد می‌کند؛ اما­ چنانچه ­مایل ­به ­تغییر ­این ­مکان ­­باشید­، چه ­باید­ کرد؟ به کمک ­دستور ­ذیل ­شما­ قادر ­خواهید بود master دیتا‌بیس را بر روی لوکال‌هاست و در دایرکتوری D:\SQLBackup file  بک‌آپ‌گیری کنید:

Backup-DbaDatabase -SqlInstance localhost -Database master -BackupDirectory D:\SQLbackup

پشتیبان گیری از SQL Server با Powershell

مجدداً دستور Get-DbaLastBackup  را جهت کنترل درستی بک‌آپ‌های گرفته‌شده استفاده می‌کنیم.

پشتیبان گیری از SQL Server با Powershell

از‌آنجا‌که نوع کار‌برد دستور متفاوت بود، ما نتایج را در ساختار شبکه‌ای Out-GridView  نشان دادیم.

پشتیبان گیری از SQL Server با Powershell

هنگامی­که من داده را بررسی کردم. متوجه شدم ما صرفاً یک بک‌آپ کامل Full Backup تهیه کردیم. چنانچه بخواهیم­differential backup  یا  log backup ‌داشته باشیم، چه ­اقدامی­ باید ­انجام ­داد؟ از نظر یک مسئول دیتا‌بیس ­این دو نوع بک‌آپ نیز به همان Full Backup از اهمیت برخوردار هستند؛ لذا باید در بین ساختار بک‌آپ‌های دیتا‌بیس موجود باشند.

با به‌کار‌گرفتن ابزار DbaTools می‌توان بک‌آپ کامل Full Backup  و نیز نوع بک‌آپ‌های differential  و log را تهیه کرد. برای این کار باید نوع پارامتر را در دستور  Backup-DbaDatabase مشخص کنیم. اجازه دهید در اینجا با یک مثال  diff backup را برای دیتا‌بیس MSHOWTO ­بر روی لوکال‌هاست بگیریم. (البته به‌منظور اجرای این عملکرد لازم است که  full backup از دیتا‌بیس MSHOWTO داشته باشیم)

Backup-DbaDatabase -SqlInstance localhost -Database master -BackupDirectory D:\SQLBackup -Type Differential

پشتیبان گیری از SQL Server با Powershell

شما بلا‌فاصله یاد می‌گیرید که چطور می‌توان در بک‌آپ به اطلاعاتی چون  time stamp، نام دیتا‌بیس و نوع بک‌آپ دسترسی داشته باشید و نیز در‌عین‌حال چطور بک‌آپ، دیتابیسی با نام متفاوت، دارای مهر زمانی ایجاد کنید.

Backup-DbaDatabase -SqlInstance localhost -Database MSHOWTO -BackupDirectory D:\SqlBackup -BackupFilename servername-instancename-dbname-timestamp.bak -ReplaceInName

پشتیبان گیری از SQL Server با Powershell

همان گونه که در تصویر بالا ملاحظه می‌کنید دستور نوشته‌شده، با موفقیت اجرا شد، در این قسمت  -ReplaceInName را مشاهده کردیم که درباره آن توضیح خواهم داد.

ReplaceInName به­ معنای­ جایگزین‌ کردن ­رشته فایل پشتیبان با ارز‌ش‌های واقعی است و ما باید این دستور­را ­در­ دستور­ بک‌آپ­ تعیین­ کنیم. همچنین ­این ­امکان ­وجود ­دارد ­که ­نام­ دیتا‌بیس ­و ­اطلاعات ­مهر‌زمان ­را­ در­ مورد بخش   ReplaceInName بک‌آپ، مد نظر داشته باشیم. همچنین در صورت تمایل می‌توانید اطلاعات مربوط به نوع بک‌آپ را اینجا اضافه کنید. ( -BackupFileNameرا به‌جای -dbname-backuptype-timestamp.bak )

پشتیبان گیری از SQL Server با Powershell

در پایان اجازه دهید توضیح دهم که به کمک چه دستوری می‌توان بک‌آپ هر دیتا‌بیس را در فولدر به نام خودش ذخیره کرد. چنانچه­ دستور ­ذیل ­را­­ راه‌اندازی ­کنید­ خواهید ­دید­ فولدری به نام  MSHOWTO ‌‌ در مسیر  D:\SQLBackup  دیتا‌بیس MSHOWTO  بر روی لوکال‌هاست ایجاد‌شده و بک‌آپ در اینجا گرفته شده است.

Backup-DbaDatabase -SqlInstance localhost -Database MSHOWTO -BackupDirectory D:\SqlBackup -BackupFilename servername-instancename-dbname-timestamp.bak -ReplaceInName -CreateFolder

پشتیبان گیری از SQL Server با Powershell

ملاحظه می‌کنید بک‌آپ با موفقیت انجام شده است. با هم بررسی کنیم:

پشتیبان گیری از SQL Server با Powershell

همان گونه که می‌بینید یک فولدر به نام MSHOWTO ایجاد شده و بک‌آپ موفقی با نامی که در‌خواست کرده بودید، در مسیر  D:\SQLBackup انجام شده است.

 

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

; Compress Backup فشرده‌سازی بک‌آپ :

Backup-DbaDatabase -SqlInstance localhost -Database MSHOWTO -BackupDirectory D:\SqlBackup -BackupFilename servername-instancename-dbname-timestamp.bak -ReplaceInName -CreateFolder -CompressBackup

کنترل صحت بک‌آپ گرفته‌شده:

Backup-DbaDatabase -SqlInstance localhost -Database MSHOWTO -BackupDirectory D:\SqlBackup -BackupFilename servername-instancename-dbname-timestamp.bak -ReplaceInName -CreateFolder                    –CompressBackup -Checksum -Verify

بک‌آپ فقط کپی CopyOnly بدون شکستن ساختار بک‌آپ

Backup-DbaDatabase -SqlInstance localhost -Database MSHOWTO -BackupDirectory D:\SqlBackup -BackupFilename servername-instancename-dbname-timestamp.bak -ReplaceInName -CreateFolder                    –CompressBackup -Checksum -Verify -CopyOnly

نتیجه‌گیری 

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

چه رتبه ای می‌دهید؟

میانگین ۴.۶ / ۵. از مجموع ۹

اولین نفر باش

title sign
معرفی نویسنده
تیم فنی نیک آموز
مقالات
402 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
تیم فنی نیک آموز
title sign
دیدگاه کاربران