קובץ Access פגום? קודם מחלצים את הנתונים ורק אחר כך את הטפסים. סדר החילוץ, מה טבלת MSysCompactErrors חושפת, ואיך מאמתים במספרים שהחילוץ באמת הצליח.
עיקרי הדברים
- הטבלאות הן הנכס. טופס נבנה מחדש בשעה, רשומת לקוח שאבדה לא חוזרת.
- Access רושם בטבלת המערכת `MSysCompactErrors` כל אובייקט שלא הצליח לתקן. זו רשימת המשימות שלכם.
- ייבוא לקובץ ריק חדש עדיף על המשך עבודה בקובץ שנפגם, גם כשהתיקון דיווח על הצלחה.
- אימות מספרי הוא חלק מהחילוץ, לא שלב אחריו. בלי ספירת שורות וסכומי בקרה אין דרך לדעת מה חסר.
- זו שאלה אחרת מהודעת Unrecognized database format, שבה עדיין לא ידוע אם הקובץ בכלל פגום.
כשקובץ Access כבר פגום, ההחלטה החשובה אינה איך לתקן אלא מה להציל ובאיזה סדר. הנתונים בטבלאות הם החלק היחיד שלא ניתן לשחזר משום מקום אחר. טפסים, דוחות, שאילתות ומודולים אפשר לבנות מחדש בזמן שניתן להעריך מראש. לכן חילוץ הטבלאות קודם לכל פעולה אחרת.
מה שווה להציל, ובאיזה סדר?
סדר העדיפות נגזר משאלה אחת: אם האובייקט הזה יאבד, האם קיים עותק שלו במקום אחר בעולם? לנתונים אין עותק כזה. לטופס יש - הוא נמצא בראש של מי שמשתמש בו כל יום.
| עדיפות | אובייקט | קיים מקור חלופי | עלות בנייה מחדש |
|---|---|---|---|
| 1 | טבלאות והרשומות שבהן | אין | בלתי אפשרי |
| 2 | קשרים, מפתחות ואינדקסים | לרוב אין | שעות |
| 3 | שאילתות שמורות | לעיתים בגיבוי ישן | שעות |
| 4 | מודולי VBA ומאקרו | לעיתים בגיבוי ישן | ימים |
| 5 | טפסים | המשתמשים יודעים בעל פה מה הם עושים | ימים |
| 6 | דוחות | פלט מודפס ישן משמש כמפרט | ימים |
השורה התחתונה: אם נותרו לכם שעתיים עם הקובץ לפני שהוא מפסיק להיפתח, כל השעתיים הולכות לשורות 1 ו-2.
סדר החילוץ שלא מאבד עוד נתונים
- הוציאו את כל המשתמשים והעתיקו את הקובץ הפגום לתיקייה נפרדת. כל העבודה מכאן מתבצעת על עותק, והמקור נשאר ללא נגיעה כראיה.
- צרו מסד נתונים ריק חדש, באותה גרסת Access שבה הקובץ המקורי נוצר.
- מהקובץ החדש, השתמשו ב-External Data כדי לייבא אובייקטים מהקובץ הפגום. ייבוא קורא מהמקור ולא כותב אליו, ולכן הוא הפעולה הבטוחה ביותר שיש.
- ייבאו קודם את הטבלאות בלבד. אל תסמנו טפסים ודוחות באותו מעבר: אובייקט אחד שנתקע יכול להפיל ייבוא שלם.
- ייבאו טבלאות בקבוצות קטנות. כשקבוצה נכשלת אתם יודעים בדיוק איזו טבלה אשמה, במקום לקבל כישלון גורף.
- רק אחרי שהנתונים בפנים, נסו את השאילתות, המודולים ואז הטפסים והדוחות.
- אם טבלה מסרבת להיכנס בשלמותה, ייבאו אותה בפלחים לפי טווח מפתח ראשי. חלק מהרשומות עדיף על אפס.
Compact and Repair הוא כלי לגיטימי, אבל הוא כותב את הקובץ מחדש במקום, ולכן הוא בא אחרי שיש עותק ולא לפניו. הוא גם דורש גישה בלעדית לקובץ, כלומר אף משתמש אחר לא מחובר.
מה טבלת MSysCompactErrors מספרת לכם
כש-Access מתקן קובץ באופן חלקי בלבד, הוא רושם את האובייקטים שלא הצליח לתקן בטבלת מערכת בשם MSysCompactErrors. הטבלה הזו היא התיעוד הכי מדויק שתקבלו על מה בדיוק אבד.
- אם היא ריקה, התיקון היה מלא מבחינת Access - עדיין צריך לאמת את התוכן.
- אם היא מכילה טבלאות, זו הרשימה שאתם מנסים לחלץ מהגיבוי הישן ביותר שיש.
- אם היא מכילה רק טפסים ודוחות, נשמתם לרווחה: אלה אובייקטים ניתנים לבנייה מחדש.
- שמרו העתק שלה לפני שאתם ממשיכים. פעולה נוספת עלולה לדרוס אותה.
הטבלה הזו גם מסבירה למה ייבוא עדיף על קישור בשלב הזה. קישור לטבלה בקובץ הפגום ממשיך לקרוא ממנו בכל פתיחה, כלומר אתם נשארים תלויים בקובץ שכבר הוכיח שאינו יציב. ייבוא מעתיק את הרשומות פנימה פעם אחת, וכל מה שנכנס נמצא מעכשיו בקובץ בריא ואינו תלוי במקור. בסיום העבודה שמרו את הקובץ הפגום המקורי בארכיון ואל תמחקו אותו: לפעמים מגלים אחרי שבוע שחסרה טבלה שאיש לא חשב עליה.
כשהחילוץ חלקי: על מה מוותרים
חילוץ חלקי הוא התוצאה השכיחה, לא החריגה. ההחלטה הקשה היא לא טכנית אלא עסקית, והיא צריכה להתקבל על ידי מי שאחראי על התהליך ולא על ידי מי שמריץ את הייבוא.
- חסרות רשומות מהיום האחרון - לרוב ניתן לשחזר ידנית ממסמכים, מיילים או מהמערכת שממנה הגיעו.
- חסרה טבלת עזר (רשימת ערים, קודי מוצר) - נבנית מחדש מהר, ולעיתים אפילו נכון יותר.
- חסרות רשומות היסטוריות - כאן מחליטים אם ההיסטוריה נחוצה לתפעול או רק לארכיון, ומארכבים בנפרד.
- חסר קשר בין טבלאות - הנתונים קיימים אבל הקישור אבד. זו העבודה היקרה ביותר לשחזור, ולכן היא מקבלת עדיפות גבוהה בזמן החילוץ עצמו.
איך יודעים שהחילוץ הצליח?
קובץ שנפתח אינו הוכחה. ההוכחה היא מספרים שמתאימים לעולם שמחוץ למסד הנתונים:
- השוו ספירת שורות לכל טבלה מול הגיבוי האחרון התקין, ורשמו את ההפרש.
- הריצו סכום בקרה על שדה כספי מרכזי והשוו אותו לדוח שהופק לפני התקלה.
- בדקו את הרשומה האחרונה בכל טבלה תפעולית: התאריך שלה אומר לכם עד לאיזו נקודה בזמן החילוץ הגיע.
- חפשו רשומות יתומות - שורות בטבלת בת שאין להן אב. הן הסימן לקשר שנשבר בחילוץ.
- בקשו ממשתמש שמכיר את המערכת לחפש חמישה מקרים אמיתיים שהוא זוכר. זה תופס מה שספירות לא תופסות.
- תעדו את התוצאות בכתב. ההפרשים האלה הם מה שיישאל עליו בעוד חודשיים.
מגבלות שכדאי להכיר לפני שבונים מחדש
אם אתם בונים מחדש, שווה לדעת לתוך מה. פורמט Access מוגבל ל-2GB לקובץ, פחות המקום שנדרש לאובייקטי מערכת. בנוסף:
- עד 32,768 אובייקטים במסד נתונים אחד.
- עד 255 שדות בטבלה אחת.
- עד 255 משתמשים במקביל.
- עד 32 טבלאות בשאילתה אחת.
המספרים האלה נדיבים לעסק קטן, אבל אף אחד מהם אינו הסיבה האמיתית לעבור. הסיבה האמיתית היא שקובץ יחיד על תיקייה משותפת הוא נקודת כשל אחת לכל העסק. העברת הטבלאות ל-SQL Server, כשה-Access נשאר בינתיים כממשק, מסירה בדיוק את נקודת הכשל הזו בלי לכתוב מחדש את המסכים.
קשור: Access מציג Unrecognized database format, תוכנית מעבר מ-Access למערכת ווב, מה זה בסיס נתונים.
מקורות
שאלות נפוצות
למה לייבא לקובץ חדש במקום לתקן את הקיים?
ייבוא קורא מהקובץ הפגום וכותב לקובץ נקי, כך שהמקור לא משתנה ואפשר לנסות שוב אחרת. תיקון במקום כותב מחדש את אותו קובץ, ואם הוא נכשל באמצע אתם נשארים עם קובץ במצב גרוע יותר מזה שהתחלתם ממנו.
מה עושים אם טבלה אחת מסרבת להיכנס?
מייבאים אותה בפלחים לפי טווח מפתח ראשי, ומצמצמים את הטווח עד שמאתרים את הרשומות הבעייתיות. הרשומות שמסביבן נכנסות בשלמותן. חילוץ של 98 אחוז מהטבלה שווה הרבה יותר מכישלון מלא בגלל שלוש שורות.
האם Compact and Repair בטוח להרצה בשלב הזה?
הוא בטוח רק על עותק ורק אחרי שיש גיבוי בצד. הפעולה כותבת את הקובץ מחדש ודורשת גישה בלעדית, כלומר אף משתמש אחר לא מחובר. אם היא מצליחה חלקית, בדקו את `MSysCompactErrors` כדי לראות מה לא שרד.
כמה זמן לוקח לבנות מחדש טפסים ודוחות?
זה תלוי בכמות ובמורכבות, אך זו עבודה עם אומדן ולוח זמנים, בניגוד לנתונים שאבדו. לכן הכלל הוא לתת לטפסים את הזמן שנשאר אחרי הנתונים, ולא לפניהם. תיעוד של הפלט הרצוי מקצר את הבנייה משמעותית.
להמשך קריאה
שירות רלוונטי
פיתוח MVP
להפוך רעיון למוצר מאומת תוך שבועות, לא חודשים.
על הכותב
יהונתן סעדיה
מפתח פרילנסר לאוטומציה, אתרים ו-MVP
אני יהונתן סעדיה, מפתח בכיר שבונה אוטומציה עסקית, אתרים מותאמים ומוצרי MVP לעסקים קטנים ובינוניים בארה"ב, אירופה וישראל. המדריכים האלה נכתבים מתוך עבודה אמיתית עם לקוחות, לא מתיאוריה.
בוא נעבוד יחדיש לך פרויקט דומה?
ספר לי מה אתה רוצה לבנות או איזה תהליך להפוך לאוטומטי. אני חוזר תוך 24 שעות עסקים עם כמה שאלות ממוקדות, ואז עוברים על זה יחד בשיחת היכרות חינמית של 30 דקות, בלי התחייבות. בסוף יש לך היקף עבודה, לוח זמנים ומחיר קבוע - או תשובה כנה שלא שווה לבנות את זה.
