בפוסט הזה אני מציין מספר נקודות מעניינות לגבי העברה של DB מסביבת Access אל Sql Server ( במקרה שלי גירסת Exrpress )
1- מיקרוסופט הסירו מאקסס את האפשרות לייצא ישירות ל- SQL SERVER
הם ממליצים להשתמש בכלי שלהם שנקרא Sql Server Migration Assitant
יש גירסאות שלו עבור כמה סוגי DB נפוצים ( MySQL ועוד )
2- הכלי עובד יפה, אם כי לא אינטואיטיבי כל כך – ועל כך הפוסט הזה.
דברים שצריך לשים לב אליהם :
שלב 1 – יצוא הטבלאות מ- Access אל Sql Server
- עוד לפני שמפעילים את הכלי – צריך להיות מודעים להתאים גירסת האופיס לגירסת הכלי ( ה=SSMA)
אם ה-Access הוא בגירסת 32 ביט, צריך להפעיל את ה-SSMA 32 Bit ( כי ה-Default הוא 64 ביט )
שימו לב שההתקנה הרגילה מתקינה אצלכם ברשימת התוכניות – 2 גירסאות (32+64 )
אם לא מפעילים את הגירסה שתואמת ל-Office שמותקן על המכונה, מקבלים בהמשך הודעת שגיאה שה-DB שניסיתם לטעון בלתי ניתן לקריאה…מה שכמובן לא נכון. - יצירת DB – לפני שמפעילים את הכלי, יש לייצור DB ב-SQL Server שיקבל את הטבלאות שנייצא.
- יצירת USER עבור ה-DB – שרת ה-Sql server מציע 2 צורות של אוטנטיקציה.
אם משתמשים ב-Windows Auth… על אותה מכונה, לרוב לא תהיה בעיה.
אם זה תחת שרתים אירגוניים, צריך לוודא שליוזרים יש הרשאות ל-DB,
חשוב לתת ליוזרים הרשאות , גם תחת "Security" של ה-Sql Server (=הכללי בעץ)
וגם תחת Security של ה-DB הספציפי.
אפשרות קצת פשוטה יותר -היא שימוש ב-Sql Auth, וגם שם צריך לוודא שהיוזר שיצרתם, מורשה הן לגישה ל-Server והן ל-DB הספציפי. - כאשר סף סוף מפעילים את הכלי – עדיף לא להשתמש ב-wizard שקופץ בכניסה – הוא אומנם מוביל שלב אחרי שלב, אך מדלג על חלק מהשלבים, ולכן לא כל כך עוזר…
- הגדרה שכדאי, ואפילו חובה לבצע עוד בהתחלה, היא להיכנס למקום שבו מוגדר לאיזה סוג שדה הופך כל אחד מהשדות ( למשל : שדה TEXT של Access הופך ל- nvarchar של Sql Server וכדומה )
זה נעשה תחת Tools < Default Project Settings > Type Mapping
כל ההגדרות תקינות …חוץ מאשר….Date של Access – שמועבר בצורה שגויה אל Datetime(2) של Sql Server , הבעיה היא, שכאשר נסיים את תהליך העברת הטבלאות, ונקשור את הטבלאות בחזרה אל פרוייקט ה-Access שלנו, תהיה לנו בעיה – ש-Access לא יודע לקרוא את סוג השדה הזה , ולכן ממיר אותו אל Text …וזה כבר יוצר שגיאות וולידציה, ובעיות בקוד ה-VBA שמצפה ל- Datetime.
הפתרון הוא להגדיר את השדות כ- Datetime רגיל ( בלי ה-2 )
במקרה זה – ההמרה עוברת תקין. - השלב הראשון, הוא "יצירת פרוייקט" (דרך התפריט או דרך כפתור למעלה)
חשוב לשים לב – לבחור במסך יצירת הפרוייקט את גירסת ה- Sql Server שלכם
ה-DropDown הוא כמעט מוסתר, וברירת המחדל היא Azure….מה שלא בטוח שהתכוונתם.- נקודה נוספת באותו עניין – יש אפשרות להגדיר את זה תחת Tools > Defailt project settings (גם כאן ה-Dropdown נסתר מהעין)
- לאחר שמוסיפים את ה-DB של Access באמצעות Add Databases , יש לבצע שמירה של הפרויקט – השמירה גורמת ל-SSMA לטעון את ה-Metadata של הטבלאות.
למה…ככה (מיקרוסופט ? ) - השלב הבא הוא חיבור ל-SQL SERVER, אם לא בחרתם מראש בגירסת ה-SQL SERVER הנכונה, אזי לא תוכלו להתחבר ל-SQL שלכם.
- בסוף אחרי שהכל מוגדר , כדי לגרום לכפתור ה- Convert-Load_AND-MIGRATE לעבוד , חייבים ללחוץ ללחוץ על ה-Access DB הרלוונטי – ורק אז הכפתור הופך ל-Enabled
- לאחר לחיצה על כפתור המרה ( Convert..load..and migrate )
הכלי עובד די מהר וחלק, טוען את כל הטבלאות , ובונה אותן, כולל את המפתחות הזרים והאינדקסים. אפשר לומר שזה החלק הטוב בכלי הזה, שבסופו של דבר הוא באמת מבצע את העבודה.
שלב 2 – חיבור של קובץ ה-Access אל הטבלאות ב-Sql Server
זה תהליך די מוכר לכל מתכנת Access, ואכתוב אותו בקצרה :
- מוחקים ( בלי לפחד 🙂 ) את הטבלאות המקוריות ( בין אם הם מקושרות, ובין אם מאוחסנות בקובץ הזה )
- תחת "נתונים חיצוניים" > יבוא וקישור > מסד נתונים של ODBC > ניצור Connection חדש או בקובץ, או של מערכת ההפעלה ולאחר יצירת ה-Connection נבחר בו כדי לקשור את הטבלאות.
- בשלב יצירת ה-Connection יש לבחור בדרייבר של Sql Server , או Sql Server ODBC Driver
- באחד ממסכי יצירת ה-Connection יש לשים לב לאפשרות של בחירת ה-Default Database – ולהפעיל אותה רק על ה-DB הרלוונטי ב-SQL Server
- לאחר שנבחר ב-Connection שיצרנו – נסמן את הטבלאות לקישור, יש לשים לב לא לסמן גם את טבלאות המערכת של Sql server , אלא רק את הטבלאות המקוריות ששיכות לפרויקט שלנו ( זה לא משנה, אבל חבל סתם להעמיס טבלאות מקושרות שלא נחוצות על הפרוייקט)
- אם אתם לא רוצים לשגע את היוזרים – כדאי לסמן את האפשרות לשמור את הסיסמה ( ואז ללחוץ על אישור בנפרד לכל אחת מהטבלאות….מיקרוסופט …!!!! )
- זה עוד לא נגמר …בשלב זה, כיוון שהטבלאות ב-Sql Server מתחילות תחת "איזור" שנקרא לרוב dbo. אז בקישור ל-Access, פתאום מתווסף לכל הטבלאות בתחילת השם, הביטוי dbo_ , צריך לעבור טבלה-טבלה, ולשנות את השם בחזרה לשם המקורי. (או לכתוב\למצוא סקריפט שעושה זאת …)
אחרת – אם לא נעשה זאת, השאילתות שלנו לא יעבדו. - וכאן הגיע הזמן לבדוק שהכל תקין.
בהצלחה.
נקודה אחרונה, אך ממש לא קשורה – למי שמפתח Web על אותה מכונה שעליה מותקן ה-Sql Server.
אחד ה-Services שמופעלים בהתקנת ה-Sql Server, נקרא Sql Server Reporting Service
ולמרבה הפלא …הוא תופס את Port 80 ….
כך שאם רוצים להמשיך לעבוד , צריך : או להשבית אותו ( services.msc וכו' ) או להמשיך לעבוד בפורט אחר עבור ה-localhost על המכונה.