# پایگاه‌های داده > SQL Server > مدیریت دیتابیس (Database Administration) > Backup & Restore >  ريكاوري و بازيابي فايل mdf

## morteza_lll

با سلام دوستان من در sql server 2000   فايل mdf خراب شده و attch نمي شود من دنبال راه حل و يا نرم افزاري كه بتونه اين فايلو برام ريكاوري كنه مي گردم 



اگه دوستان مي تونند منو كمك كنند ممنون مي شم 

هنگام attch  كرد error 3456 ‌مي دهد  :گریه:

----------


## anubis_ir

قبل از هر كاري آخرين سرويس پك اس كيوال سرور خودت رو نصب كن. اگر 2000 است سرويس پك 4 و اگر 2005 است سرويس پك 2 .
اين خطا به معناي خراب بودن لاگ فايل شما است. اين موارد رو ميشه با بازسازي مجدد لاگ فايل درست كرد.
با دستور sp_attach_single_file_db فقط فايل mdf رو اتچ كن به صورت زير و مابقي قضايا
http://www.examnotes.net/archive79-2002-10-75559.html

----------


## morteza_lll

سلام - ممنون از پاسختون دوست عزيز

من sql 2000 دارم سرويس پك 4 رو نصب كردم ولي با اجراي دستور فوق 
اين پيغام خطا را مي دهد در صورت امكان راهنماييم نماييد ممنوم 

Server: Msg 3456, Level 21, State 1, Line 1
Could not redo log record (63685:379:3), for transaction ID (0:30307050), on page (1:147), database shop' (9). Page: LSN = (63684:425:3), type = 1. Log: OpCode = 9, context 2, PrevPageLSN: (63685:377:3).
Connection Broken

----------


## anubis_ir

در اين حالت شما اولين كاري كه بايد بكنيد اتچ كردن ديتابيس به صورت suspect‌ است.
سرور را استاپ كنيد.
فايلهاي mdf و ldf مشكل دار را به يك جاي ديگر منتقل كنيد.(از فايلهاي mdf‌ و ldf‌ اينجا يك بك آپ بگيريد قبل از هر كاري)
سپس سرور را استارت كنيد و 
يك ديتابيس دقيقا با حجم ديتابيس فعلي كه مشكل دارد درست كنيد. (با همان نام و همان مسير اصلي)
سرور را استاپ كنيد.
سپس فايل mdf مشكل دار را روي اين ديتابيس جديد كپي كنيد.
حالا سرور را استارت كنيد.
الان ديتابيس به حالت suspect ظاهر خواهد شد.
از اين مرحله به بعد تقريبا مشخص است:
ابتدا بايد اين ديتابيس را در حالت emergency قرار داد:
USE MASTER
GO
sp_CONFIGURE 'allow updates', 1
RECONFIGURE WITH OVERRIDE

--Change database mode to emergency mode
UPDATE  sysdatabases SET status = 32768 WHERE name = 'yourdatabasename'


سپس يكبار سرور اس كيوال را استاپ و استارت كنيد. (مهم)
دستور زير را اجرا كنيد تا يك لاگ فايل تازه و تميز براي شما اكنون درست شود (مسير و نام مانند قبل باشد)
DBCC TRACEON (3604)
            DBCC REBUILD_LOG(yourdatabasename,'c:\yourdatabasename_  log.ldf')

بعد از آن وضع ديتابيس را به حالت اول برگردانيد:
sp_RESETSTATUS yourdatabasename


اگر وسط كار جايي به شما پيغام داد كه ديتابيس در حال استفاده است با استفاده از دستور زير ديتابيس را در حالت تك يوزر قرار دهيد 
sp_DBOPTION 'yourdatabasename', 'single user',true'


يا برعكس
sp_DBOPTION 'yourdatabasename', 'single user',false'


بعد از اين مراحل بايد ديتابيس شما با يك لاگ درست آماده به كار باشد. اگر اين بين ديتايي هم خراب شده به صورت زير قابل حذف از ديتابيس است و نهايتا ديتابيسي قابل كار كردن حاصل خواهد شد (اين روش زير چند بار من رو نجات داده. خصوصا با اين وضعيت وخيم برق ...)

Declare @DB sysname;
set @DB = 'DBName';
-- Put the database in emergency mode
EXEC('ALTER DATABASE [' + @DB + '] SET EMERGENCY');
--Set single user mode
exec sp_dboption @DB, 'single user', 'TRUE';
-- Repair database
DBCC checkdb (@DB, repair_allow_data_loss);
-- Turn off single user mode
exec sp_dboption @DB, 'single user', 'FALSE';

----------


## captain_black81

The suspect flag on the database "Anbar" is already reset.
Msg 8921, Level 16, State 1, Line 3
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Msg 824, Level 24, State 2, Line 3
SQL Server detected a logical consistency-based I/O error: incorrect pageid (expected 1:408; actual 0:0). It occurred during a read of page (1:408) in database ID 5 at offset 0x00000000330000 in file 'E:\anbar\Anbar.mdf'. Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.

----------


## captain_black81

البته موقع set emergency این ارور
Msg 259, Level 16, State 1, Line 5
Ad hoc updates to system catalogs are not allowed.

----------


## anubis_ir

شما مشكلتون كمي وخيم هست چون tempdb هم خراب شده. (ولي به اعصابتون مسلط باشيد چيزي نيست!)
اگر از ديتابيس‌هاي سيستمي اس كيوال سرور خودتون بك آپ داريد خيلي هم خوب، بايد آنها را restore كنيد. ولي مشكلي كه وجود دارد اين است كه مطابق MSDN اين امكان وجود ندارد :
Backup and restore operations are not allowed on tempdb
پس يك راه سريع و بدون استرس اين است كه سرور را uninstall كنيد و دوباره نصب كنيد تا اين ديتابيس‌هاي سيستمي از نو درست شوند.هرچند امكان ايجاد يك tempdb جديد هم به اين روش هست:
http://support.microsoft.com/kb/288809
حالا پست‌هاي قبلي اين تاپيك به شما كمك خواهند كرد.
در اين حالت نمي‌تونيد ديتابيس suspect شده رو attach كنيد (به سرور جديد نصب شده) و روش پست شماره 4 راه ‌حل مشكل شما است.

----------


## captain_black81

با اینکه در حالت single mode  هستم ولی بازم میگه
Server: Msg 7919, Level 16, State 2, Line 6
Repair statement not processed. Database needs to be in single user mode.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

----------


## captain_black81

چرا با اینکه دیتابیس در حالت سینگل هست بازم ای ارورو میده؟

Server: Msg 7919, Level 16, State 2, Line 6
Repair statement not processed. Database needs to be in single user mode.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

----------


## badnam_051

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

----------


## fakhravari

http://www.sqldbadiaries.com/2010/08...rupt-database/

----------

