بعضی از Data Centerها یک اینترفیس جداگانه برای کمک به این موضوع دارند. اما اگر این ابزار هم موجود نباشد چه باید کرد؟ بدتر از این تصور کنید دیتابیس مورد نظر از نوع Express بوده و دسترسیهای شما در حداقل ممکن قرار داشته باشد. در این طور مواقع چند راه به ذهن میرسد.
۱- اسکریپت کردن دیتابیس و نگهداری اسکریپتها به عنوان backup. من این راه رای برای یک دیتابیس SQL Express انجام دادم ولی جواب نگرفتم.
۲- استفاده از مکانیزم Export. خوشبختانه این راه را در مورد دیتابیس مورد قبل انجام دادم و جواب داد.
۳- کد نویسی و استفاده از Sql Server Management Object. من از این راه استفاده نکردم ولی خیلی به آن خوشبین نیستم. چون ظاهراً این کدها باید در همان ماشینی اجرا شوند که SQL Server در آن نصب است. خیلی از مواقع Database Server ما با Web Server یکی نیست.
۴- استفاده از راه حل خیلی خلاقانهای که در این مقاله codeproject.com توضیح داده شده. در این راه حل هیچ نیازی نیست که برنامه backup گیری روی database server اجرا شود. میتوان آن را روی کامپیوتر local غیر سرور خود اجرا کرد. روش این برنامه گرفتن backup روی خود سرور، ایجاد یک جدول دیتابیسی موقتی، insert کردن محتوای فایل backup در جدول موقتی، select معمولی از جدول موقتی و انتقال آن به کامپیوتر local و ذخیره آن به صورت یک backup واقعی! البته من با این که با یکی از قلقهای این برنامه کنار آمدم ولی نتوانستم از آن استفاده واقعی بکنم. چون احتیاج به دسترسی bulk داشتم. هر چند که این روش برای من کار نکرد ولی خلاقیت آن مرا شگفت زده کرد. مطمئن هستم میتوان با استفاده از راه حل های مشابهی مشکل دسترسی bulk را هم حل کرد.
Comments
در این گونه موارد من میرم سراغ محصولات RedGate.
(کل اطلاعات رو روی یه سرور دیگه کپی می کنم)- با Sql Compare شما رو انتقال میدم.- یا SQL Data Compare دادگان رو انتقال می دم.- دوباره با Sql Compare اشکالات رو برطرف می کنم.- جالا از پایگاه داده محلی پشتیبان میگیرم.زمانبر و خسته کنندش، ولی چاره چیه؟در ضمن این محصولات (Red Gate) دارای یک SDK هم هست که میشه تمام این کارارو با 30-40 حط کد نوشت.
اشکال استفاده از Export عدم انتقال ساختار (Schema) و طبعا توابع ،روال های ذخیره شده و … است.
البته در این کاربرد خاصی که من دارم، ساختار دیتابیس مهم نیست چون اونو این طرف خط هم دارم. مهم فقط دیتاست.
اصلاً RedGate رو فراموش کرده بودم.
من هم مثل آقای یزدان پناه از محصولات رred gate استفاده می کنم sql compare که با همه چی خوب کار می کنه ولی باید بگم که SQL Data Compare محدودیت هایی داره مثلا اگر دیتا بیس قدیمی یا بدون کلید داشته باشین باید خودتون column ها را Map کنین که وقت گیره و برای حجم داده های زیاد باهاش جواب نگرفتم.
اگه دیتابیس سرور و وب سرور یک جا باشند میشه بکآپ را در مسیر وبسایت اشتراکی گرفت. مثلاً c:interputwwwrootyoursite.comdb.bak
و بعد با http://yoursite.com/db.bak بهش دسترسی پیدا کرد.
این هم راه جالبیه. البته بعضی وقتها اجازه browse کردن به شاخههای دیگر کامپیوتر وجود ندارد.
کلا اگه بشه به یک درایو غیر از سرور دیتابیس دسترسی پیدا کرد مشکل حل است.مثلا در یک LAN با دادن Permission لازم MS SQL به پوشه ی Share شده کلاینت و دادن مسیر کامل پوشه ی Share شده در MS SQL توانستم از طریق خود Management Studio پشتیبان را براحتی بگیرم.
من با SMO یک برنامه WCFی ساختم که با گرفتن دستور از سمت کلاینت از بانک اطلاعات مورد نظر Backup گرفته، Zip میکند و به سمت کلاینت ارسال میکند. از نظر API و انجام عملیات هیچ مشکلی با SMO نیست. همانطور که گفتید بزرگترین مشکل این است که قسمت سرور این برنامه باید بر روی سرور SQL نصب شود. کاربردش برای زمانی است که مثلا شما یک سرور اختصاصی در جایی دارید که بانکهای اطلاعاتی منبع بر روی آن قرار دارد و سرعت اینترنت هم اینفدر پایین است که برنامه نویسان ترجیح میدهند بانک را در سیستم خود داشته باشند. راه 4 واقعاً هوشمندانه بود البته اگر بر روی هاست دسترسیهای لازم را نبندند.