فروم تخصصی - پشتیبانی CPSD

نسخه‌ی کامل: راههای جلوگیری از تخریب فایلهای Access
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
ضمن سلام

در این سلسله مقالات قصد دارم شما رو با یکی از معضلاتی که فایلهای Access با اون دست به گریبان هستند و بعضاً ایجاد مشکلات غیر قابل جبرانی می کنند , آشنا کنم .

مساله تخریب فایلهای Access , مشکلی بوده که همه کاربرا مطمئناً کم و بیش همه با اون سر و کار داشتن و دارن .

این مشکل عملاً یکی از معضلاتی هست که همیشه Access اونو با خودش حمل میکرده .

در این میون میخوام کمک کنم که شما هم به عنوان کاربر برنامه بیکار نشینید و فقط نقش یک ناظر رو بازی نکنید . آستینها رو بالا بزنید و در رفع این مشکل Access , به کمک اون بیاید .

یک همکاری دو طرفه و مسالمت آمیز مطمئناً در نهایت کفه سود رو به سمت شما سنگینی میده .

تخریب ( Corruption ) در موقعی رخ میده که ساختار باینری فایل به هم بریزه .

در این حالت یا فایل به صورت کامل غیر قابل استفاده میشه و یا اینکه به صورت رندوم خطاهایی رو با خودش به همراه میاره .

از اونجایی که فایل به صورت یک تک فایله , ممکنه در صورت تخریب , شما تمامی فایل رو از دست بدید .
تخریب فایلهای اکسس یه امر عمومیه , اگر چه خود اکسس برخی از خطاهای جزئی رو در هنگام خوندن و نوشتن بر روی جداول پوشش میده .
بنا بر این در اغلب موارد فایل شما تخریب میشه ولی شما از اون مطلع نمیشید .

این امر میتونه خیلی خطرناک باشه . چرا که خطاها به مرور افزایش پیدا میکنن و به در گذر زمان به خطاهایی جدی تر و خطرناک تر تبدیل میشن . تا جایی که عملاً بازیابی رو غیر ممکن و یا بسیار سخت میکنن , که حتی در حالت دوم هم نباید به بازیافت 100% فایل امیدوار باشید .

در اینجا به بررسی برخی موارد که میتونه منجر به تخریب فایل بشه میپردازیم :

نقص در سخت افزار :

عمده نقص سخت افزاری رو میشه در هارد دیسک و کارت شبکه جستجو کرد .

یک هارد بد سکتور بیشتر از هر سخت افزار دیگه ای علاقه منده که فایل شما رو با نقص مواجه کنه . کارت شبکه ای هم که در بخش ارسال Packet ها با اشکال مواجه باشه میتونه در صورتی که فایل شما از طریق شبکه به اشتراک گذاشته شده , اون رو با خطراتی جدی مواجه کنه .
متاسفانه Jet Database به Crash سیستم بسیار حساس بوده و کوچکترین خطایی رو در این بخش به سادگی از کنارش نمیگذره .
Jet بر مبنای file-system کار میکنه و عملاً هر گونه Crash , منجر به توقف در عملیات نوشتن و خوندن توسط اون میشه .
( یکی از مزیتهای SQL Server و یا سیستمهای مبتی بر Client Server در همین بخشه )

تداخل نرم افزاری :

استفاده از Add-Ins ها و ActiveX هایی که از ساختار طراحی دقیقی برخوردار نیستند واجرای اونها با خطا مواجه میشه , میتونه در تخریب خود فایل اکسس نقش موثری داشته باشه .
به خاطر داشته باشید که اونها همون فضایی رو از حافظه استفاد میکنن که Access به اونها اختصاص داده , پس نقص در اونها , منجر به نقص در خود Access هم میشه .

تداخل بین نسخه های مختلف JET :

خود JET دارای نسخه های متفاوتی هستش و به مرور مورد بازبینی و تکمیل قرار گرفته . به اشتراک گذاری یک فایل بین سیستمهایی که دارای نسخه های متفاوتی از JET هستند میتونه منجر به تخریب جزئی تا کلی در فایل بشه .

دسترسی چند گانه به فایل :

JET یک سیستم مبتی بر فایل میباشد ( بر خلاف SQL Sever که بر اساس Client-Server است )
JET جهت استفاده چند کاربر از یک فایل , از یک فایل قفل استفاده میکنه تا بدین وسیله بتونه هماهنگی لازم رو در هنگام نوشتن و خوندن اعمال کنه .
در هنگام اجرای فایل در داخل شبکه با توجه به بار ترافیکی شبکه در صورت ارسال پیغام Time Out از سوی شبکه , دستور در حالت معلق باقی میمونه . در اینگونه موارد فایل نیاز به Repair داره که متاسفانه در اغلب موارد این کار به درستی به انجام نمیرسه .
تا حد امکان از به اشتراک گذاری یک فایل بین چند کاربر , جداً خودداری کنید . در صورت الزام , حتماً اون رو در حالت Front End و Back End طراحی کنید

باگهای موجود در Access و JET

مطمئناً محصولات Microsoft هم خالی از نقص نیستند . بسیاری از خطاها پس از عرضه محصول به بازار آشکار میشه . عمده ترین دلیل عرضه Service Pack ها هم همین آشکار شدن نقائص موجود در داخل برنامه ها هستش .

طراحی ناقص و بی کفایت برنامه

در حالت استفاده از یک فایل در شبکه نیاز به تغییراتی در روال طراحی وجود داره که عملاً در صورت عدم توجه به اونها میتونیم پتانسیل تخریب فایل رو تا حد زیادی بالا ببریم .


قطع برق

قطع برق یکی از مواردی هستش که فایلهای Access به اون خیلی حساسند . خاموش کردن کامپیوتر بدون بستن فایل هم میتونه به همون اندازه مشکل ساز بوده باشه .

کمبود فضا بر روی Hard

در صورتی که فایل اکسس در هنگام اجرا با کمبود فضا مواجه بشه , این امر میتونه فایل رو در معرض یک خطر جدی قرار بده .

خب با این توضیحات میریم سراغ بحث دوم

راههای جلوگیری از تخریب :

نصب آخرین Service Pack و Hotfix ها جهت Access و JET

گزینه Name AutoCorrect رو غیر فعال کنید . این امکان اضافه شده به Access از همون ابتدا در کنار مزایای نسبی خودش مشکلاتی رو هم به همراه آورد .
این امکان هنوز در مراحل تکمیل قرار داره . موجب کاهش کارایی میشه و در تخریب فایل دست داره .

در داخل Subform های مبتنی بر Query اقدام به مخفی کردن فیلدهای مرتبط با foreign key ها نمایید

هرگز به صورت همزمان چند توسعه گر اقدام به تغییر و طراحی یک فایل نکنند

هرگز اقدام به ویرایش کدهای برنامه در هنگام اجرای اون نکنید

از کنار اولین خطای به نمایش در اومده از سوی اکسس به سادگی نگذرید . شاید این آخرین شانس شما برای Backup گیری , Compile , Compact و یا Repair نمودن فایل بوده باشه

اگه فایل Access دچار مشکل شد , اجازه Repair اتوماتیک رو به اون ندید ( معمولاً اقدام به نمایش یک کادر در این خصوص میکنه ) , فایل ldb موجود در کنار فایل اصلی رو پاک کنید . از فایل اصلی یه کپی بگیرید و مجدداً اون رو باز و Compact/Repair رو اجرا کنید

در کدهای برنامه , هر آبجکتی رو که باز میکنید مجدداً ببندیدش . به طور مثال در مورد OpenRecordset ها , حتماً پس از اتمام کار اونها رو Close کنید

فراخوانی توابع API رو با دقت انجام بدید . روالهای کنترل خطای اونها در دست Access نیست .

فایل رو در دو بخش ایجاد کنید , اطلاعات و جداول در داخل یک فایل ( Back End ) و مابقی آبجکتها در داخل فایلی دیگه ( Front End )

فایل رو در فرمت MDE تحویل کاربر نهایی بدید

تا وقتی که الزامی وجود نداره گزینه Record-Level Locking رو در حالت عدم انتخاب قرار بدید

تذکر :

هیچ پیشگیری موثر تر از تهیه نسخه پشتیبان نیست . تهیه نسخه پشتیبان رو یکی از اصلی ترین وظایف روزانه خودتون قرار بدید


در تاپیکهای بعدی سعی میکنم که بعضی از سرفصلهای اشاره شده رو باز تر کنم تا قابل درک تر باشن .


موفق باشید
با سلام

در این بخش میخوام به لزوم طراحی برنامه در حالت Front End / Back End اشاره کنم

در واقع این شیوه طراحی همون جدا کردن اینترفیس برنامه از اطلاعات هستش .

عملاً در حالت استفاده اشتراکی از یک فایل توسط چند کاربر به صورت همزمان , استفاده از این شیوه الزامیه .

این شیوه طراحی دو مزیت اصلی زیر رو داره :

- امکان سرویس دهی و تغییرات آتی برنامه رو به سهولت امکان پذیر میکنه
- به علت جدا بودن اطلاعات از اینترفیس ( فرمها و گزارشها و مابقی آبجکتها ) , بار ترافیکی روی شبکه به طرز چشمگیری کاهش پیدا میکنه . این امر باعث کاهش خطاهای Time Out میشه و ضمناً اطلاعات در حالت محفوظ تری باقی میمونن .

در اینگونه حالات در صورت بروز نقص در فایل در %90 مواقع مشکل به سادگی با جایگزینی Front End برنامه حل میشه .

اکسس دارای یک Add-In داخلی جهت انجام این کار و جداسازی اطلاعات هستش , شما میتونید به اون در داخل مسیر زیر دسترسی پیدا کنید :

Tools | Database Utilities | Database Splitter

موفق باشید
سلام

در ادامه بحث Name AutoCorrect رو بیشتر باز میکنم

این امکان جدید اولین بار در Access 2000 به اون اضافه شد .

در نسخه های قبلی در صورت تغییر در نام یک فیلد موجود در جدول , شما مجبور بودید در هرجایی که نامی از اون فیلد برده شده ( پرس و جوها , فرمها و ... ) بود به صورت دستی تغییرات رو بدید ولی این امکان نورسیده Access به شما این امکان رو میده که این پروسه به صورت خودکار به انجام برسه !!

ولی واقعیت این هستش که Name AutoCorrect بیشتر جنبه تبلیغاتی داره ( لااقل تا نسخه 2003 اون ) . در بسیاری از مواقع تغییرات رو به صورت کامل اعمال نمیکنه و همچنان رد پایی از عدم تغییر رو به جا میذاره .
همین امر باعث میشه که شما عملاً نتونید کل پروسه تغییر رو به اون بسپورید و به ناچار باید خودتون هم وارد عمل بشید !!
گو اینکه این امکان گنجونده شده عملاً فاقد هیچگونه کنترلی در بخش کد نویسیهای انجام شده هستش . یعنی اگه در بخشی از کدهای برنامه به نامی قبل از تغییر اشاره کرده باشید , اکسس هیچگونه تغییری رو در داخل کدهای ارجاع داده شده به اون پس از تغییر نامش , به انجام نمی رسونه .

متاسفانه ردپاهای غلطی که این امکان در پشت برنامه به جا میذاره , پتانسیل برنامه رو برای تخریب تا حد زیادی بالا میبره .

قبل از شروع طراحی این گزینه رو در حالت غیر فعال قرار بدید و عطای اون رو به لقائش ببخشید .

توجه کنید : قبل از شروع طراحی باید اینکار رو انجام داده باشید

در صورتی که فایلی رو قبلاً طراحی کردید , یه فایل جدید ایجاد کنید , Name AutoCorrect رو در داخل اون غیر فعال کنید و کلیه آبجکتهای موجود در داخل فایل اول رو به داخل فایل دوم Import کنید , فایل رو Compact/Repair کنید و به طراحی ادامه بدید .

توصیه : در این خصوص هیچ پیشگیری بهتر از صرف دقت بیشتر در طراحی اولیه نیست

محل این گزینه در داخل مسیر زیر هستش

Tools | Options | General

موفق باشید
ضمن سلام

در این مبحث سعی میشه به بعضی راههای تشخیص یک فایل تخریب شده اشاره بشه :

- در صورتی که فایل رو در داخل شبکه اجرا میکنید , اون رو از روی کامپیوتر خودتون تست کنید . اگه بدون مشکل به کار ادامه داد , مشکل ناشی از نقص موجود در شبکه شماست . معمولاً ریشه این نقص رو میتونید در داخل کارت شبکه پیدا کنید
- فایل رو بر روی دستگاه دیگه ای تست کنید . در صورتی که بدون مشکل کارکرد , مشکل میتونه مربوط به تداخل نرم افزاری پیش اومده با نرم افزاری که اخیراً نصب کردید باشه و یا نقص مرتبط با اختلال بوجود اومده در سخت افزار شما باشه ( به طور مثال بد سکتور شدن هارد دیسک شما )
- لیست پیغامهای خطا رو مطابق با چک لیست زیر بررسی کنید

Unrecognized Database Format

مطمئن بشید که در حال استفاده از نسخه مناسبی از Access هستید . فایلهای کمپایل شده در نسخه های بالاتر توسط نسخه های پایینتر باز نمیشن

This database is in an unrecognized format

ریشه این نقص نیز مشابه مورد بالایی هستش

Enter password prompt

در صورتی که قبلاً رمز عبوری برای فایلتون در نظر نگرفتید , در هنگام باز کردن فایل برنامه از شما درخواست رمز عبور میکنه ( در این حالت ابتدا با ابزارهای کشف رمز سعی کنید که رمز اون رو پیدا کنید )

The Microsoft Jet Database Engine cannot open the file

Jet database engine از تغییر اطلاعات سر باز میزنه و اعلام میکنه که یک کاربر دیگه در حال تغییر همون اطلاعاته , در حالی که شما تنها کاربری هستید که در حال کار با برنامه اید

AOIndex is not an index in this table


This database is in an unexpected state; Microsoft Access can't open it

این پیغام میتونه در حالتی ایجاد بشه که شما از داخل منوی Tools اقدام به Compact/Repair فایلتون نکرده باشید ( استفاده از روش DAO )

You do not have the necessary permissions to open this object. Please contact your system administrator



مشاهده پیغام بالا در هنگامی که User Level Security فعال نشده باشه

Microsoft Access has encountered a problem and needs to close. We are sorry for the inconvenience

Unexpected error 35012


نقص در شبکه

This object needs a newer version of the Microsoft Jet database module



قبل از اینکه به این ننتیجه برسید که فایل تخریب شده از نصب آخرین Service Pack مطمئن بشید

Operation failed - too many indexes - reduce the number and try again


هنگ کردن Access در هنگام باز کردن یک فایل

The instruction at "0x????????" referenced memory at "0x????????". The memory could not be 'written
'

هر نوع Add-Ins نصب شده رو از حالت نصب خارج کنید

The Visual Basic for Applications Project in this database Is Corrupt


The Microsoft Jet Database Engine could not find object Msys*/databases



Could not find field '***'

Invalid Bookmark


پاک شدن اطلاعات موجود در جداول به صورت رندوم

نمایش #DELETED# در هنگامی که فایل به صورت چند کاربره مورد استفاده واقع نشده

توضیح : مواردی که با رنگ قرمز متمایز شدن , به نقائصی با شدت تخریب بالا اشاره میکنن . این نقصائص میتونن تا حد از دست رفتن کلی فایل هم جلو رفته باشن . در صورتی که حجم فایل زیاد باشه باید بخت و اقبال بلندی داشته باشید تا فایل به صورت کامل Recover بشه ! ( البته اگه Recover بشه )


یادآوری


همیشه از فایلهای مهم خودتون BackUp بگیرید . هیچ روشی موثر تر و ساده تر از این روش نیست


خدا نگهدار
با سلام

در بخشی دیگه اشاره ای دارم به برخی روشها که میتونه به شما در اصلاح فایل تخریب شده کمک کنه .

- در ابتدا از فایل تخریب شده خودتون نسخه پشتیبان تهیه کنید

متاسفانه بعضی ابزارهای اصلاحی موجود در بازار نتیجه خوشایندی رو به همراه ندارند , قبل از اینکه بوسیله اونها بخواید فایلتون رو اصلاح کنید حتماً یک نسخه پشتیبان از اون فایل تهیه کنید

- پاک کردن فایل ldb

اکسس در هنگام کار اقدام به ساخت فایلی با پسوند ldb و با همون نام اصلی در کنار فایل شما میکنه . در اولین قدم اون فایل رو پاک کنید . اگه به شما اجازه پاک کردن اون فایل داده نمیشه , فایل شما هچنان باز مونده . در داخل Task Manager پروسه اجرایی Access رو غیر فعال کنید . اگه مشکل پابرجا بود سیستم رو Restart کنید

- سعی کنید اطلاعات رو از محل Backup قبلی به روز رسانی کنید

تخریب عملاً جزئی از ساختار اشیاء اکسس هستش , یعنی اینکه آبجکت در داخل فایل اکسس آسیب میبینه . از همین رو سعی در حذف آبجکتهای معیوب ( عموماً در اکثر مواقع تنها نیاز به حذف جداول وجود داره ) داشته باشید و پس از اون مرحله آبجکتهای سالم رو از داخل BackUp قبلی گرفته شده , Import کنید

عموماً چهار روش برای جایگذاری مجدد اطلاعت وجود داره , که به ترتیب کارایی و احتمال بازنشانی موفق لیست میکنم :

حذف جداول و استفاده از Import Wizard جهت ورود اونها به داخل فایل
حذف تنها اطلاعات جدوال و وارد نمودن مجدد اطلاعات اونها ( از طریق Append Query )
حذف تنها اطلاعات جدوال و وارد نمودن مجدد اطلاعات اونها ( از طریق DAO )
حذف تنها اطلاعات جدوال و وارد نمودن مجدد اطلاعات اونها ( از طریق ADO )


- استفاده از Compact/Repair

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

- استفاده از Microsoft Jet Compact Utility

این ابزار جهت اصلاح بعضی نقائص عمده میتونه کاربرد داشته باشه . این محصول ارائه شده از سوی مایکروسافت عملاً کارایی بیشتری از امکان گنجونده شده در داخل خود اکسس داره

میتونید اون رو از داخل مسیر زیر دریافت کنید :


Download Jetcomp


اطلاعات بیشتر در خصوص این محصول رو میتونید در آدرس زیر به دست بیارید

http://support.microsoft.com/kb/273956


- کدهای VBA رو Decompile کنید

اجرای فایل اکسس در داخل کامپیوترهای دیگه که از کتابخونه های متفاوتی استفاده میکنن میتونه به کدهای VBA کمپایل شده آسیب برسونه

شما میتونه از دستور زیر در مواقعی که به داخل فایل دسترسی دارید ولی با خطای جدی در هنگام مواجه با کدهای برنامه روبرو میشید استفاده کنید

C:\Program Files\Microsoft Office\Office\MsAccess.exe /decompile C:\FileName.mdb

پس از انجام عملیات فوق , فایل رو ببندید و پس از بازکردن اون , کدهای برنامه رو مجدداً Compile کنید

در پایان در صورتی که موفق نشدید , از ابزارهای Recovery جهت انجام اینکار استفاد کنید

توضیح : ابزارهای Recovery هم معمولاً از همین تکنیکها استفاده میکنن ولیکن شما رو از پیچیدگیهای فنی اونها دور نگه میدارن

یکی از بهترین ابزارهای Recovery در این خصوص نرم افزار accessfix هستش آدرس وب سایت اون هم به شرح زیره

http://www.accessfix.com


تذکر مجدد


باور کنید هیچ راهی بهتر از تهیه نسخه پشتیبان نیست , این کار ساده رو انجام بدید تا هیچ وقت نگران از دست رفتن اطلاعاتتون نباشید

جهت بارگذاری نسخه کامل این محصول بر روی اینجا کلیک کنید


موفق باشید
سلام

لینک بارگذاری نرم افزار OfficeFix در وبلاگ قرار داده شد .

این نرم افزار قویترین نرم افزار بازیابی فایلهای تخریب شده هستش , اگر فایلتون به کمک این نرم افزار به وضعیت قبلیش برنگشت , تقریباً با ضریب بالایی میشه گفت :

فایل شما از بین رفته !

یادآوری : تمامی نرم افزارهای بازیابی , تمام تلاش خودشون رو به کار میبرن که اطلاعات رو برگردونن , بسیاری از اونها قادر به تصحیح و بازیابی آبجکتهای دیگه یا نیستن و یا اینکه بسیار ناقص و تنها بخشی از اون رو به انجام میرسونن .

البته در مورد بعضی فایلها میشه , راه حلهایی رو به کار برد , که در داخل این نرم افزارها امکان گنجوندن اونها به صورت عمومی وجود نداره ( روش برای هر فایل با سعی و خطا همراه هستش و متغیره ) , غالباً این روشها به دلایل تجاری تنها در دست افراد معدودی باقی میمونن .

ولی در تمامی حالتها امکان بازیافت یک فایل تخریب شده با سطح تخریب وسیع , وجود نداره .

خصوصاً اگه بخش Main Instruction آسیب دیده باشه . که در اون حالت بازیافت فایل چیزی شبیه به معجزه خواهد بود .

این بخش معمولاً در دو حالت احتمال تخریبش شدیداً بالا میره :

1 - قطع ناگهانی برق در هنگام انجام برخی عملیات داخلی , به طور مثال در هنگام عملیات Rollback Transaction
2 - قطع ناگهانی پروسه Compact ( به هر شکلی )

موفق باشید
پس كو؟چرا باز نشد واسه من؟
(۲۲ ارديبهشت ۱۳۹۰ ۰۱:۳۷ عصر)ashiss نوشته است: [ -> ]پس كو؟چرا باز نشد واسه من؟

سلام دوست من

چه چیزی باز نشد ؟