sepid1
https://chat.deepseek.com/a/chat/s/07bda4c3-010e-457e-a5ad-97de95c321e3
CREATE DATABASE Rdcms ON
(FILENAME = 'C:\Path\To\Rdcms.mdf'),
(FILENAME = 'C:\Path\To\Rdcms_log.ldf')
FOR ATTACH;
خطای “E: Rdcms.mdf is not a primary database file. (Microsoft SQL Server, Error: 5171)” نشان میدهد که SQL Server فایل MDF را به عنوان یک فایل دیتابیس اصلی (Primary Database File) تشخیص نمیدهد. این مشکل ممکن است به دلایل زیر رخ دهد:
- فایل MDF خراب است.
- فایل MDF به درستی به دیتابیس متصل نشده است.
- فایلهای مرتبط (مانند LDF) وجود ندارند یا خراب هستند.
- اطلاعات متادیتای دیتابیس در SQL Server بهدرستی ثبت نشده است.
راهحلهای ممکن:
۱. اتصال مجدد فایل MDF و LDF
اگر فایلهای MDF و LDF سالم هستند، میتوانید دیتابیس را به صورت دستی به SQL Server متصل کنید:
- فایلهای MDF و LDF را در یک مسیر مناسب قرار دهید.
- از دستور زیر در SQL Server Management Studio (SSMS) استفاده کنید:
CREATE DATABASE Rdcms ON
(FILENAME = 'C:\Path\To\Rdcms.mdf'),
(FILENAME = 'C:\Path\To\Rdcms_log.ldf')
FOR ATTACH;
- مسیر
C:\Path\To\
را با مسیر واقعی فایلهای خود جایگزین کنید.
- اگر فایل LDF وجود ندارد یا خراب است، میتوانید از گزینه
FOR ATTACH_REBUILD_LOG
استفاده کنید:
CREATE DATABASE Rdcms ON
(FILENAME = 'C:\Path\To\Rdcms.mdf')
FOR ATTACH_REBUILD_LOG;
۲. بررسی سلامت فایل MDF
اگر فایل MDF خراب است، میتوانید از دستور DBCC CHECKDB
برای بررسی و تعمیر آن استفاده کنید:
- دیتابیس را در حالت Emergency قرار دهید:
ALTER DATABASE Rdcms SET EMERGENCY;
- دیتابیس را در حالت Single-User قرار دهید:
ALTER DATABASE Rdcms SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
- از دستور
DBCC CHECKDB
برای تعمیر دیتابیس استفاده کنید:
DBCC CHECKDB('Rdcms', REPAIR_ALLOW_DATA_LOSS);
- دیتابیس را به حالت Multi-User برگردانید:
ALTER DATABASE Rdcms SET MULTI_USER;
خطای “Msg 5172, Level 16, State 15, Line 1 – The header for file ‘e:\Rdems.mdf’ is not a valid database file header. The PageAudit property is incorrect” نشان میدهد که هدر فایل دیتابیس (MDF) معتبر نیست و SQL Server نمیتواند فایل را به عنوان یک فایل دیتابیس تشخیص دهد. این مشکل معمولاً به دلایل زیر رخ میدهد:
- فایل MDF خراب شده است.
- فایل MDF به درستی کپی نشده یا انتقال داده نشده است.
- فایل MDF توسط یک برنامه دیگر قفل شده یا در حال استفاده است.
- فایل MDF به دلیل مشکلات سختافزاری یا نرمافزاری آسیب دیده است.
راهحلهای ممکن:
۱. بررسی سلامت فایل MDF
ابتدا مطمئن شوید که فایل MDF سالم است و به درستی کپی شده است:
- فایل MDF را با یک نسخه Backup مقایسه کنید.
- اگر فایل MDF از یک منبع دیگر کپی شده است، مطمئن شوید که فرآیند کپی به درستی انجام شده است.
۲. اتصال مجدد فایل MDF و LDF
اگر فایلهای MDF و LDF سالم هستند، میتوانید دیتابیس را به صورت دستی به SQL Server متصل کنید:
- فایلهای MDF و LDF را در یک مسیر مناسب قرار دهید.
- از دستور زیر در SQL Server Management Studio (SSMS) استفاده کنید:
CREATE DATABASE Rdems ON
(FILENAME = 'e:\Rdems.mdf'),
(FILENAME = 'e:\Rdems_log.ldf')
FOR ATTACH;
- اگر فایل LDF وجود ندارد یا خراب است، میتوانید از گزینه
FOR ATTACH_REBUILD_LOG
استفاده کنید:sql CREATE DATABASE Rdems ON (FILENAME = 'e:\Rdems.mdf') FOR ATTACH_REBUILD_LOG;
۳. تعمیر فایل MDF
اگر فایل MDF خراب است، میتوانید از دستور DBCC CHECKDB
برای بررسی و تعمیر آن استفاده کنید:
- دیتابیس را در حالت Emergency قرار دهید:
ALTER DATABASE Rdems SET EMERGENCY;
- دیتابیس را در حالت Single-User قرار دهید:
ALTER DATABASE Rdems SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
- از دستور
DBCC CHECKDB
برای تعمیر دیتابیس استفاده کنید:
DBCC CHECKDB('Rdems', REPAIR_ALLOW_DATA_LOSS);
- دیتابیس را به حالت Multi-User برگردانید:
ALTER DATABASE Rdems SET MULTI_USER;
۴. استفاده از ابزارهای شخص ثالث
اگر فایل MDF به شدت خراب است و SQL Server نمیتواند آن را تعمیر کند، میتوانید از ابزارهای شخص ثالث مانند Stellar Repair for MS SQL یا SysTools SQL Recovery استفاده کنید. این ابزارها میتوانند دادهها را از فایل خراب استخراج کرده و آنها را به یک دیتابیس جدید منتقل کنند.
۵. بازیابی از Backup
اگر از دیتابیس خود Backup دارید، میتوانید دیتابیس را از طریق Backup بازیابی کنید:
- اگر Backup کامل (Full Backup) دارید، از دستور زیر استفاده کنید:
RESTORE DATABASE Rdems FROM DISK = 'C:\Path\To\Backup.bak' WITH REPLACE;
- اگر Backup تفاضلی (Differential Backup) یا لاگ (Log Backup) دارید، مراحل بازیابی را به ترتیب انجام دهید.
۶. بررسی فایلهای سیستمی
اگر فایل MDF بهدرستی به دیتابیس متصل نمیشود، ممکن است مشکل از سیستمعامل یا فایلهای سیستمی SQL Server باشد. در این حالت:
- SQL Server را ریاستارت کنید.
- سیستمعامل را ریاستارت کنید.
- از سالم بودن فایلهای سیستمی اطمینان حاصل کنید.
۷. بررسی مجوزها (Permissions)
مطمئن شوید که SQL Server به فایلهای MDF و LDF دسترسی دارد:
- مسیر فایلها را بررسی کنید و مطمئن شوید که SQL Server Service Account به آن مسیر دسترسی دارد.
- اگر فایلها در یک درایو شبکه (Network Drive) قرار دارند، دسترسی شبکه را بررسی کنید.
جمعبندی:
خطای “The header for file ‘e:\Rdems.mdf’ is not a valid database file header” معمولاً به دلیل خرابی فایل MDF یا عدم اتصال صحیح آن به SQL Server رخ میدهد. با استفاده از روشهای فوق میتوانید مشکل را برطرف کنید. اگر فایل MDF به شدت خراب است، استفاده از ابزارهای شخص ثالث یا بازیابی از Backup بهترین گزینه است. همیشه بهیاد داشته باشید که قبل از انجام هرگونه عملیات تعمیر، از دیتابیس خود Backup بگیرید.