PDA

View Full Version : ویروسی شدن فایل mdf



arsalansalar
جمعه 14 تیر 1392, 10:37 صبح
با سلام
من فایل mdf دیتابیسم ویروس گرفته است.از نشخه express استفاده می کنم.
بر روی دیتابیسم یک علامت تعجب زده و نوشته (مشکوک)
برای حذف این ویروس چه کار ی انجام دهم؟بک آپ هم ندارم

arsalansalar
جمعه 14 تیر 1392, 13:35 عصر
106630
اینم عکس خطاست

RED-C0DE
پنج شنبه 05 دی 1392, 11:24 صبح
شاید یکم دیر باشه واسه جواب ولی بصورت کلی ج می دم چون چند جا چنین مشکلاتی دیدم..
کلا خرابی دیتا مخصوصا اگه در حجم بالایی باشه می تونه ی شرکت یا اداره رو ب فنا بده ب معنای واقعی (مخصوصا حالتی رو تصور کنید ک نه DBA ای هست نه Backup گیری منظم نه اعتبار سنجی اطلاعات نه هیچی دیگه)

قبل از هرچیز داشتن یک روال پشیبان گیری منظم و مطمئن رو فراموش نکنید چون احتمال این خرابی ها همیشه هست
---
کلا حالتی اتفاق افتاده که محتوای فایل اطلاعاتی شما آسیب دیده Corrupted شده ک دلایل مختلفی می تونه داشته باشه
ی ویروس یا بدافزار خللی در کار وارد کرده باشه (محتوای فایل رو تغییر داده باشه)
آنتی ویروس یا سایر برنامه هایی ک فایلها (هدر یا محتوا)‌ رو بررسی می کنن باعث این مشکل شده باشن (واسه همین می گن فایلها و پروسه ها و شاخه هایی ک با engine دیتابیس در تعامل هستند رو Exclude کنید)
قطع برق، خاموشی سیستم یا بطور کلی حالتی ک باعث شده باشه سرویس های مهم مربوط به engine دیتابیس بدرستی کار خودشون رو به اتمام نرسونده باشن یا هندل فایل شما رو بدرستی آزاد نکرده باشن (اینجا شما گزینه هایی مثل RAID و UPS و تثبیت کننده جریان (برای مناطقی ک نوسان زیاد دارند) رو دارید تا جلوی خرابی هارددیسک و قطع ناگهانی یا نوسان برق رو بگیرین)
خرابی سخت افزاری بطور خاص هارد دیسک و خرابی در درایور کنترلر اون (باز هم RAID و همچنین باید از امکاناتی مثل Checksum Page Verify در دیتابیس و هنگام backup restore از امکانات Verifying استفاده کنید تا از صحت خوندن و نوشتن اطلاعات از/به حافظه اصلی/حافظه جانبی اطمینان حاصل کنید)
و ...

معمولا وقتایی ک بخشی از دیتا روی دیتابیس خراب می شه ب ی همچین پیامایی موقع کارکردن با اون بخش از دیتا برمی خوریم:

Msg 824, Level 24, State 2, Line 1
SQL Server detected a logical consistency-based I/O error: incorrect checksum
(expected: 0x07e505f0; actual: 0x386c1019).
It occurred during a read of page (1:111582) in database ID 6
at offset 0x000000367bc000 in file 'C:\SQLData\AdventureWorks2008R2_Data.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.



ی سری کارها ک بصورت کلی می شه انجام داد (اگه فرصت و زمانی بود شاید ب ریز بنویسم بعدا، فعلا خیلی کلی) اینطور وقتا ک ساختار اطلاعاتی و یکپارچگی دیتابیس دچار مشکل شده:
در Event Viewer سیستم می تونین تا حدی کلیات رو ببینین و اینکه از چ تاریخی این مشکل رخ داده گرچه شاید خیلی قبل تر از اون باشه چون تا وقتی ک دسترسی ب اون بخش انجام نشه خطایی صادر نمی شه.
آخرین بکاپ ها (در صورتی ک بکاپ تهیه کردید) رو به جای مطمئنی کپی کنید
اگر می تونین از بانک موجود بکاپ تهیه کنید حتما سعی کنید وضعیت موجود رو حفظ کنید (اگه خطا خوردید بصورت CONTINUE_AFTER_ERROR بکاپ بگیرید)
ممکنه حالتی باشه ک بانک متصل باشه و کار می کنه ولی بخشی از اون مشکل داشته باشه مثلا بخشی از جداول موقع خوندن و کار کردن ،‌و ب خطاهای این چنینی برخورد کنید (اگر خطا در سطح کلیدهای خارجی باشه با drop create اونا معمولا حل می شه،‌اگه در سطح کلید اصلی جدول باشه کار سخت تر می شه ک این رو هم می شه با بررسی خروجی دستورات زیر ک پایین تر نوشتم فهمید)

می تونین با کمک دستور زیر بخشهای خراب رو ببینین:
SELECT * FROM msdb..suspect_pages
Suspect_Pages
(http://technet.microsoft.com/en-us/library/ms174425.aspx)
و دستور زیر ..ک چندین پارامتر مختلف داره ، راجع بهشون به ریز مطالعه کنید قبل از هرکاری مثل استفاده از پارامتر Rebuild چون خیلی مهمممممه :
DBCC CHECKDB WITH NO_INFOMSGS , ALL_ERRORMSGS , TableResults
DBCC CheckDB
(http://technet.microsoft.com/en-us/library/ms176064.aspx)

اگر بکاپی دارید ک کار می کنه و اوکی هست خدا رو شکر کنید.
اگر بکاپی دارین ک دیتاش قدیمی هست ولی کار می کنه و اگر بکاپی دارین ک جدید هست ولی restore نمی شه، می تونید بکاپ قدیمی رو برگردونین و بخشی از دیتا ک قدیمی هست رو از طریق Page Restoring از روی بکاپ جدید (درسته کل بکاپ جدید مشکل داره ولی امیدوار باشیم اون Page هایی ک می خوایم Restore کنیم و از دلش بکشیم بیرون اوکی و سالم باشه) برگردونیم.
می تونین از طریق خروجی دستور بالا، آدرس و شماره PAge های خراب رو در بیارین و روی همونا فقط کار کنین.
مثلا حالتی برخورد کردم ک در یک جدول با حدود 6 میلیون رکورد در دیتابیس حدود 1ترابایتی‌، فقط 5 page خراب وجود داشت ک چون در سطر کلید اصلی بود باعث میشد خطا بخوره و البته جدول مهمی هم بود. در اون حالت بعد از اینکه بازه ی خرابی رو از روی کلید اصلی پیدا کردم ، از 6 میلیون رکورد، 5 میلیون و خورده ای رو از خود همون جدول بیرون کشیدم و سپس اون بازه ی کوچک دیتایی ک مورد داشت رو بصورت Page Restoring حل کردم...

می تونین از لینک زیر که آقای Paul S.Randal (http://www.sqlskills.com/about/paul-s-randal/)نویسنده اونها هستن کمک های زیادی بگیرین:
http://www.sqlskills.com/blogs/paul/category/corruption/