خانه/ وبلاگ/ خطاهای رایج Restore
Backup و Restore

رفع خطاهای رایج هنگام Restore کردن Database

عیب‌یابی ۳ شهریور ۱۴۰۴ ۱۰ دقیقه مطالعه

گرفتن Backup فقط نصف کار است — تا زمانی که Restore آن را در یک لحظه‌ی بحرانی تست نکرده باشی، مطمئن نیستی که واقعاً کار می‌کند. خوشبختانه اکثر خطاهای Restore الگوهای مشخصی دارند. در این راهنما رایج‌ترین آن‌ها را با راه‌حل بررسی می‌کنیم.

خطای ۱: Exclusive access could not be obtained

error
Exclusive access could not be obtained because the database is in use.

این خطا یعنی یک یا چند اتصال فعال (مثلاً یک کوئری باز در SSMS یا یک اپلیکیشن متصل) هنوز به پایگاه‌داده وصل هستند. باید همه‌ی اتصال‌ها را قبل از Restore ببندی:

sql
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;

خطای ۲: The file ... cannot be overwritten. It is being used by database

این خطا وقتی رخ می‌دهد که مسیر فایل‌های داخل Backup با مسیر فایل‌های پایگاه‌داده‌ی فعلی متفاوت است، یا می‌خواهی Backup را با نام دیگری Restore کنی. راه‌حل: مسیرهای جدید را با MOVE مشخص کن:

sql
-- ابتدا نام‌های منطقی فایل‌های داخل 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';

خطای ۳: The media family on device ... is incorrectly formed

معمولاً یعنی فایل Backup ناقص یا خراب است (کپی نصفه‌ونیمه، انتقال شبکه‌ی قطع‌شده، یا فایل دستکاری‌شده). قبل از هر Restore، همیشه یکپارچگی فایل را بررسی کن:

sql
RESTORE VERIFYONLY
FROM DISK = N'D:\Backups\ShopDB_full.bak';

اگر این دستور خطا داد، فایل Backup واقعاً خراب است — باید سراغ نسخه‌ی قبلی‌تر Backup یا کپی دیگری از همان فایل بروی.

خطای ۴: ترتیب اشتباه Restore کردن Backup ها

error
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.

خطای ۵: ناسازگاری نسخه (Restore به یک نسخه‌ی قدیمی‌تر SQL Server)

error
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 مهم

بررسی کنچرا
یکپارچگی فایل با RESTORE VERIFYONLYاز خراب‌نبودن فایل مطمئن شو
نام‌های منطقی فایل با RESTORE FILELISTONLYبرای استفاده‌ی درست از MOVE
بستن اتصالات فعالجلوگیری از خطای Exclusive Access
ترتیب صحیح Backup هاجلوگیری از شکستن زنجیره‌ی LSN

جمع‌بندی

بیشتر خطاهای Restore به یکی از این چهار چیز برمی‌گردند: اتصال‌های فعال، مسیر فایل‌های اشتباه، فایل Backup خراب، یا ترتیب/زنجیره‌ی نادرست Backup ها. تست دوره‌ای Restore (نه فقط گرفتن Backup) تنها راه واقعی برای اطمینان از اینکه استراتژی پشتیبان‌گیری‌ات واقعاً کار می‌کند.

می‌خوای مفاهیم تراکنش و بازیابی را کامل یاد بگیری؟

دوره‌ی رایگان SQLFarsi را با درس تراکنش‌ها ادامه بده.

ادامه‌ی یادگیری