ویرگول
ورودثبت نام
Ramin Mehraninejad (raminpix)
Ramin Mehraninejad (raminpix)توسعه‌دهنده نرم‌افزار و علاقه‌مند به هوانوردی، کیهان‌شناسی، نوشتن و کشف ناشناخته‌ها...
Ramin Mehraninejad (raminpix)
Ramin Mehraninejad (raminpix)
خواندن ۳ دقیقه·۷ سال پیش

تجربه من در مهاجرت از MySQL به SQL Server - قسمت اول

مقدمه داستان

چهار سال پیش که نسخه 5.5 دیتابیس MySQL نصب کردم تا برای کانورت و تجمیع اطلاعات نرم افزار Legacy که مبتنی بر FoxPro بود ازش استفاده کنم اصلا فکر نمی کردم که این روند برای چهار سال دیگه هم ادامه پیدا کنه و MySQL موقتی ما به یک دیتابیس گزارش گیری و تحلیلی با کلی Function پیاده سازی شده و جداول مختلف تبدیل بشه و هر روز ازش استفاده بشه.

اما بلاخره زمان آن فرا رسید که سیستم Legacy جاش رو بده به سیستم جدیدی که از دیتابیس Microsoft SQL Server استفاده می کرد و ما در Integration با داده های موجود در SQL Server دچار چالش شدیم و با وجود اینکه چند سالی بود روی MySQL کارهای مختلفی انجام داده بودیم و حتی نرم افزار و Script های مختلفی بر اساس این دیتابیس نوشته بودیم نیاز به تغییر احساس شد.

خلاصه که بعد از ارزیابی شرایط تصمیم گرفتیم طبق یک برنامه ریزی کلی از MySQL نسخه 5.5.21 به Microsoft SQL Server نسخه 2014 (که موجود بود و چند Database مختلف هم داشت) مهاجرت کنیم و تمام جداول و index های تعریف شده در آنها و Function هایی که نوشته بودیم را به SQL Server منتقل کنیم.

ویژگی های مسئله

برخی از جداول ما به لحاظ تعداد رکورد تا حدود 2 میلیون رکورد را در خود ذخیره کرده بودن و نوع داده عمدتا VARCHAR و INT و FLOAT بود و خبری از BLOB و یا انواع داده ای خاص نبود.

ما برای انجام برخی محاسبات مثل تبدیل تاریخ به تعداد روز و ... و یا Text Normalizing(برای بهبود جستجو در متن) Function هایی نوشته بودیم که لازم بود در SQL Server هم port بشن.

خوشبختانه! ما constraint خاصی برای foreign key ها نداشتیم و از این بابت نگرانی(ریسک) خاصی وجود نداشت.

در مورد Application هایی که به MySQL متصل می شدن هم همه بر اساس Java و یا Python نوشته شده بودن و تغییرات لازم برای استفاده از SQL Server در آنها پیچیدگی زیادی نداشت.

تصویر کلی

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

  • حذف جداول بلا استفاده و سازماندهی مجدد (جابجایی) جداول میان Schema های موجود و یا Schema جدید.
  • انتقال Schema و جداول موجود در آنها به Database مقصد در SQL Server.
  • بازنویسی مجدد Function های پیاده سازی شده در MySQL بر اساس Syntax و قواعد SQL Server.
  • اعمال تغییرات لازم در Query های Ad hoc و همچنین Application های مبتنی بر MySQL و استفاده از بانک اطلاعاتی SQL Server.

قبل از بستن چمدانها

قبل از مهاجرت نیاز داشتیم تا جداولی که بصورت موقت در MySQL ایجاد شده بودند پاک کنیم و یک سری از جداول را هم بر اساس سال (تاریخ) در Schema های متناظر آنها قرار بدیم. (یعنی یک خانه تکانی قبل از شروع سفر!)

همینطور باید می فهمیدیم جابجایی جداول در Schema ها چقدر روی Query های موردی (یا همان Ad-hoc) و Application هایی که از ساختار فعلی جداول و Schema ها استفاده می کردن اثر خواهد داشت. پس شروع کردیم چند نمونه از Query های قبلی را در ساختار جدید که بصورت تستی آماده کرده بودیم اجرا کنیم و تغییراتی که باید در Query ها اعمال میشد را شناسایی کردیم. (نکته ای که وجود داشت این بود که چون تعداد Query های Ad hoc نسبتا زیاد بودن تصمیم گرفتیم موارد پر کاربرد را در ابتدا و بقیه را فراخور نیاز اصلاح کنیم!)

در مورد Application ها هم تغییراتی که لازم بود در Query ها اعمال کنیم تا با ساختار جدید همچنان اجرا بشن مشخص شد.

برای انتقال دسته ای جداول میان Schema های مختلف هم کار را با نوشتن یک Script جمع و جور در Python که لیست جداول و schema مبدا و مقصد را از یک فایل Excel میخواند و جداول را در MySQL منتقل می کرد انجام دادیم.

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

قسمت دوم - استفاده از ابزار SQL Server Migration Assistant for MySQL



sql servermysqlsoftwaredatabase
۱۲
۱
Ramin Mehraninejad (raminpix)
Ramin Mehraninejad (raminpix)
توسعه‌دهنده نرم‌افزار و علاقه‌مند به هوانوردی، کیهان‌شناسی، نوشتن و کشف ناشناخته‌ها...
شاید از این پست‌ها خوشتان بیاید