انتقال SQL database از یک سرور به سروری دیگر


گاهی اوقات شرایطی پیش میاید که شما نیاز به انتقال دیتابیس SQL Server خود و یا مهاجرت به SQL Server ای دیگر دارید. هرچند میتوانید به صورت in-place اقدام به آپگرید SQL Server کنید، اما ممکن است به دلایل زیر مهاجرت را ترجیح دهید:


سیستم عاملی جدید – شما میتوانید Database خود را به SQL Server ای که بر روی سیستم عامل جدید تر نصب شده انتقال دهید.


Installation Rollback اگر در سرور جدید مراحل انتقال و نصب با مشکل مواجه شود شما چیزی را از دست نداده اید و سرور قدیمی همچنان فعال است.


انتقال تک تک – شما میتوانید ابتدا چند تا از SQL Server های خود را با مهاجرت آپگرید کنید و در صورت رضایت از شرایط جدید اقدام به مهاجرت و آپگرید سایر SQL Server ها کنید.


به روز رسانی سخت افزاری – شما میتوانید با مهاجرت به Server ای قوی تر، Server قدیمی خود را برای کار دیگری در نظر بگیرید.


ایجاد محیط تست – با مهاجرت به Server ای دیگر امکان تست کرد محیط جدید را بدون تاثیر گذاشتن روی فعالیت شبکه و کاربران خواهید داشت.


قبل از اقدام به مهاجرت اطمینان حاصل کنید که برنامه های سرور جدید با SQL Server سازگاری دارند، سیستم عامل سالم است و نسخه ی پشتیبان هم تهیه کرده اید. در اینجا ما اقدام به انتقال دیتابیس SQL Server 2008 R2 به SQL Server 2012 میکنیم. اگر از ورژن قدیمی تری استفاده میکنید مشکلی نخواهید داشت، مراحل تقریبا یکسان هستند. در اینجا ما سه روش برای مهاجرت و انتقال دیتابیس به سروری دیگر را توضیح میدهیم: روش Backup and Restore، روش Detach and attach database و روش Copy database در SQL Server Management Studio.


با روش اول شروع می کنیم. اگر نمیتوانید دیتابیس را در حالت Offline قرار دهید از روش Backup and Restore استفاده کنید. ابتدا در SQL Server Management Studio به SQL Server 2008 R2 خود کانکت شوید. نام SQL host و Instance خود را وارد کنید و Authentication را روی Windows Authentication بگذارید. مطمئن شوید که اکانتی در حال حاضر که از آن استفاده میکنید Privilege های لازم برای وصل شدن به دیتابیس را دارد.



بعد از اتصال بر روی دیتابیس مورد نظر کلیک راست کنید و از منوی Tasks گزینه Backup را انتخاب کنید



در اینجا میتوانید تنظیمات را به غیر از Location به صورت پیشفرض رها کنید، ، روی Add کلیک کنید، مسیر و نامی مناسب برای Backup خود انتخاب کنید. سپس میتوانید مسیر قدیمی را Remove کنید.



حالا رویOKکلیک کنید. پنجره ای جدید نمایان خواهد شد و به شما میگوید که تهیه پشتیبان با موفقیت پایان یافت.



اکنون فایل Backup ای در فولدر مربوطه موجود میباشد، آن را به SQL Server جدید انتقال دهید و در اینجا (در Windows Server 2012) نیز SQL Server Management Studio را باز کنید و به Database همان سیستم وصل شوید.



حالا روی فولدر Database کلیک راست کنید و گزینه ی Restore Database را انتخاب کنید.



پیغام “No backupset selected to be restored.” را نادیده بگیرید. گزینه ی Device را انتخاب کنید و بعد برای انتخاب Database روی دکمه سمت راست آن کلیک کنید.



در پنجره ی Select backup devices روی Add کلیک کنید تا محل ذخیره فایل Backup را معرفی کنید. اگر فایل را به سرور جدید انتقال ندادید میتوانید از UNC Path استفاده کنید. در اینجا نیز ما از UNC Path استفاده کردیم.



بعد از تایید، دیتابیس آماده ی Restore شدن است، روی OK کلیک کنید تا مراحل کار آغاز شوند.



بسته به سایز دیتابیس این پروسه قدری طول میکشد اما در نهایت با پیغام موفقیت آمیز بودن Restore روبرو میشوید.



تنها یک مرحله ی دیگر باقیست که در انتهای هر سه روش باید انجام شود، بنابراین برای جلوگیری از تکرار این مرحله آن را در قسمت آخر این پست میگوییم.


اکنون که روش اول را توضیح دادیم به سراغ روش دوم یعنی Detach and attach database میرویم. لازم به ذکر است که حین Detach کردن دیتابیس تا Attach کردن آن در سرور جدید، دیتابیس مورد نظر برای نرم افزار هایی که از آن استفاده میکنند قابل دسترس نخواهد بود.


در SQL Server 2008 R2 بر روی دیتابیس مورد نظر کلیک راست کرده و از منوی Tasks گزینه Detach را انتخاب کنید.



Check Box های Drop Connections و Update Statistics را انتخاب و OK را بزنید.



بعد از این مرحله دیتابیس شما از لیست دیتابیس ها محو میشود.


با استفاده از Windows Explorer به محل ذخیره دیتابیس بروید و فایل های YourDatabaseName.ldf و YourDatabaseName.mdf را به مقصد نهایی (نه در فولدری موقتی) در سرور جدید منتقل کنید زیرا پس از Attach کردن در سرور جدید فایل .mdf شروع به افزایش حجم میکند.



در SQL Server 2012 بر روی Database کلیک راست کرده و گزینه ی Attach را انتخاب کنید.



در پنجره Attach Database بر روی Add کلیک کنید و فایل ,mdf را معرفی کنید. سپس OK را بزنید.



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


روش آخر آسان ترین راه است. استفاده از گزینه Copy database در SQL Server Management Studio. اگر در SQL Server 2008 R2 از Copy database استفاده کنید و SQL Server 2012 را به عنوان مقصد معرفی کنید با ارور Index was outside the bounds of the array.روبرو میشوید زیرا SQL Server 2008 R2 Management Studio با SQL Server 2012 سازگار نیست.



برای رفع این مشکل باید در SQL Server 2012 کنسول Management Studio را باز کنیم و به Instance موجود در SQL Server 2008 R2 وصل شویم. از منوی File گزینه ی Connect Object Explorer را انتخاب کنید.



نام سرور قدیمی را وارد کنید روی Connect کلیک کنید.



اکنون که به SQL Server قدیمی وصل شدیم، باید روی دیتابیس مورد نظر کلیک راست کرده و از منوی Tasks گزینه Copy Databaseرا انتخاب کنیم.



ویزارد به طور خودکار نام سرور مبدا را پیدا میکند، آن را چک کنید تا مغایرتی نداشته باشد. سپس روی Next کلیک کنید.



در قسمت Destination server نام سرور مقصد (در اینجا نام همین سرور فعلی) را وارد کنید و Next را بزنید.



اگر با ارور


“SQL Server Agent does not appear to be running on the destination server.  If SQL Server Agent is not running on the destination server, Copy Database Wizard will not function properly. Do you want to continue?”


روبرو شدید، No را بزنید و SQL Agent را اجرا کنید.



در قسمت بعد دو گزینه پیش رو دارید. گزینه اول (Detach method) سریع تر است ولی دیتابیس را در حالت Offline قرار میدهد، گزینه دوم (Object method) کند تر است ولی دیتابیس همچنان Online میماند. بر اساس نیاز خود یکی را انتخاب کنید و Next را بزنید.



در قسمت بعد مشخص کنید که قصد کپی کردن دارید یا انتقال.



در قسمت بعد با دو گزینه مواجه میشوید. گزینه اول یعنی در صورت وجود دیتابیسی با همین نام در سیستم مقصد انتقال را متوقف کن، و گزینه دوم یعنی در صورت وجود دیتابیسی با همین نام در سیستم مقصد آن را Overwrite کن. یکی را انتخاب و Next را بزنید.



در اینجا اگر قصد کپی کردن Object خاصی از دیتابیس را دارید آن را به کادر سمت راست (Selected objects) بیاورید.



سپس مشخص کنید Log ها چگونه ذخیره شوند، در فایل متنی یا در Windows Event Viewer.



در قسمت بعد میتوانید تعیین کنید انتقال هم اکنون صورت گیرد یا طبق برنامه (Schedule) انجام شود.



و در مرحله ی بعد نیز بر روی Finish کلیک کنید.


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



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


و اما قسمتی که در انتهای هر سه روش باید انجام دهیم قرار دادن دیتابیس در حالت 2012 Mode است تا این دیتابیس نیز از ویژگی های جدید SQL Server 2012 برخوردار شود. بعد از انجام یکی از روش های اشاره شده از دیتابیس مورد نظر Properties بگیرید.



در صفحه Option و در قسمت Compatibility Level آخرین ورژن موجود (در اینجا SQL Server 2012) را انتخاب کنید. توجه داشته باشد که دیتابیس های SQL Server 2012 را نمیتوانید به SQL Server های قدیمی تر انتقال دهید. به طور کلی دیتابیس های یک SQL Server قابل انتقال به ورژن های پایین تر نیستند.



آخرین بروز رسانی در 4 آذر, 5:46 بعد از ظهر از Reza Zaarei.

با سلام سه سوال داشتم من یه دیتابیس دارم که تقریبا 600 تا ÷ایگاه داده داره sql server 2000 هم هست واسه نرم افزار هولو میخواستم بدونم راهی هست که بشه توش بعد از ویندوز زدن دیتا ها رو دونه دونه و یکی یکی ریستور یا اتچ نکر و همه رو یکجا بک آپ گرفت و یک جا ریستور کرد؟


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


ایمیلم : life.h4rd@yahoo.com


با سلام سه سوال داشتم من یه دیتابیس دارم که تقریبا 600 تا ÷ایگاه داده داره sql server 2000 هم هست واسه نرم افزار هولو میخواستم بدونم راهی هست که بشه توش بعد از ویندوز زدن دیتا ها رو دونه دونه و یکی یکی ریستور یا اتچ نکر و همه رو یکجا بک آپ گرفت و یک جا ریستور کرد؟


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


ایمیلم : life.h4rd@yahoo.com



با درود فراوان برشما


من نمی تونم بگم راهی هست یا نه اما اگه شما بتونید از سیستمی که sql2000 برروی آن نصب است،پشتیبان بگیرید و نسخه SQLخود را به 2005 و یا 2008ببرید فکر می کنم که خیلی بهتر باشه

600 تا پایگاه داده داره ؟!


فک کنم بشه این کار رو کرد با استفاده از گزینه restore fille and file group


یه تست کنید ببنید دقیق مطمئن نیستم

تمامی زمان ها +8 است. زمان اکنون 4:25 قبل از ظهر است.
Back To Top