گرفتن Backup فقط نصف کار است — تا زمانی که Restore آن را در یک لحظهی بحرانی تست نکرده باشی، مطمئن نیستی که واقعاً کار میکند. خوشبختانه اکثر خطاهای Restore الگوهای مشخصی دارند. در این راهنما رایجترین آنها را با راهحل بررسی میکنیم.
Exclusive access could not be obtained because the database is in use.
این خطا یعنی یک یا چند اتصال فعال (مثلاً یک کوئری باز در SSMS یا یک اپلیکیشن متصل) هنوز به پایگاهداده وصل هستند. باید همهی اتصالها را قبل از Restore ببندی:
ALTER DATABASE ShopDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE; RESTORE DATABASE ShopDB FROM DISK = N'D:\Backups\ShopDB_full.bak' WITH REPLACE; ALTER DATABASE ShopDB SET MULTI_USER;
این خطا وقتی رخ میدهد که مسیر فایلهای داخل Backup با مسیر فایلهای پایگاهدادهی فعلی متفاوت است، یا میخواهی Backup را با نام دیگری Restore کنی. راهحل: مسیرهای جدید را با MOVE مشخص کن:
-- ابتدا نامهای منطقی فایلهای داخل Backup را ببین RESTORE FILELISTONLY FROM DISK = N'D:\Backups\ShopDB_full.bak'; -- سپس با MOVE مسیر جدید را برای هر فایل مشخص کن RESTORE DATABASE ShopDB_Test FROM DISK = N'D:\Backups\ShopDB_full.bak' WITH MOVE N'ShopDB' TO N'D:\SQLData\ShopDB_Test.mdf', MOVE N'ShopDB_log' TO N'D:\SQLData\ShopDB_Test_log.ldf';
معمولاً یعنی فایل Backup ناقص یا خراب است (کپی نصفهونیمه، انتقال شبکهی قطعشده، یا فایل دستکاریشده). قبل از هر Restore، همیشه یکپارچگی فایل را بررسی کن:
RESTORE VERIFYONLY FROM DISK = N'D:\Backups\ShopDB_full.bak';
اگر این دستور خطا داد، فایل Backup واقعاً خراب است — باید سراغ نسخهی قبلیتر Backup یا کپی دیگری از همان فایل بروی.
The log in this backup set begins at LSN ..., which is too recent to apply to the database. An earlier log backup that includes LSN ... can be restored.
این خطا یعنی زنجیرهی LSN (Log Sequence Number) بین Backup ها شکسته شده — مثلاً یک Log Backup میانی را جا انداختهای یا اشتباه با RECOVERY بهجای NORECOVERY Restore کردهای. حتماً ترتیب کامل و درست را دنبال کن (Full → Differential → همهی Log Backup ها بهترتیب) — جزئیات در تفاوت Full، Differential و Transaction Log Backup.
The database was backed up on a server running version 16.00.1000. That version is incompatible with this server, which is running version 15.00.2000.
SQL Server اجازه نمیدهد یک Backup که با نسخهی جدیدتر گرفته شده، روی نسخهی قدیمیتر Restore شود (فقط برعکسش ممکن است). تنها راهحل، Restore روی همان نسخه یا نسخهی جدیدتر است — یا استفاده از روشهای دیگر انتقال داده مثل Export/Import یا Generate Scripts.
| بررسی کن | چرا |
|---|---|
یکپارچگی فایل با RESTORE VERIFYONLY | از خرابنبودن فایل مطمئن شو |
نامهای منطقی فایل با RESTORE FILELISTONLY | برای استفادهی درست از MOVE |
| بستن اتصالات فعال | جلوگیری از خطای Exclusive Access |
| ترتیب صحیح Backup ها | جلوگیری از شکستن زنجیرهی LSN |
بیشتر خطاهای Restore به یکی از این چهار چیز برمیگردند: اتصالهای فعال، مسیر فایلهای اشتباه، فایل Backup خراب، یا ترتیب/زنجیرهی نادرست Backup ها. تست دورهای Restore (نه فقط گرفتن Backup) تنها راه واقعی برای اطمینان از اینکه استراتژی پشتیبانگیریات واقعاً کار میکند.
دورهی رایگان SQLFarsi را با درس تراکنشها ادامه بده.
ادامهی یادگیری