ورود

نسخه کامل مشاهده نسخه کامل : تفاوت backup در sqlserver و sqlexpress



M-B-M
14-12-2010, 23:24
سلام
من از ابزار smo برای backup و restor کردن دیتابیس استفاده می کنم
قبلا که از نسخه sqlserver استفاده می کردم مشکلی نداشتم اما الان که از sqlexpress استفاده می کنم با این خطا روبرو می شوم انگار که سرور قابل شناسایی نیست
(در ضمن من با این پارامتر به sqlexpress در فرم لاگین متصل می شوم )

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

دستورات پشتیبان گیری:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



خطا صادر شده:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


(توضیح اینکه mbm-pc اسم سیستم من است)

M-B-M
15-12-2010, 11:38
دوستان لطفا کمک کنید کارم خیلی گیره

bad_boy_2007
17-12-2010, 22:07
innecrException را بخوان

messhagebox.sh(ex.innerexception.message) که احتمالا کمکت میکنه

نمونه سورس بک آپ و ری استور با استفاده از SMO



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

M-B-M
17-12-2010, 22:27
innecrException را بخوان

messhagebox.sh(ex.innerexception.message) که احتمالا کمکت میکنه

نمونه سورس بک آپ و ری استور با استفاده از SMO



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


اما لینک دانلود مشکل داشت و من هنوز اندر خم این کوچه ام!!!!

bad_boy_2007
17-12-2010, 23:11
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

_H2_
20-12-2010, 20:13
سلام
اصول Backup و Restore در SQLExpress هم همان است.
ولی نسخه Express یک حالت Attach خودکار را هم پشتیبانی میکند که در این حالت شما مسیر فایل را میدهد و خود SQLExpress فرمان Attach و Detach ان را مدیریت میکند.

نتیجه ان میشود که این عملیات و پیدا کردن نام خالی در سرور و... تازه وقتی انجام میشود که Connection باز شود.
در حالت عادی اینگونه خواهد شد که نام سرور و نام دیتابیس شما در SMO صحیح نخواهد بود و کار انجام نمیشود.

راه حل ساده است، یک SqlConnection را باز کنید و پس از باز کردن دو مقدار فوق را از ان بخوانید و به SMO پاس داد و در ان استفاده کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

البته به صورت کلی و به راحتی میتوانید همیشه از همین مکانیزم برای استخراج نام سرور و نام دیتابیس استفاده کنید.
با این روش هم این پارامتر مهم را وابسته به ConnectionString جاریتان میکنید و هم برنامه را برای هر حالتی از کارکرد SQLServer (با و بدون Attach دستی) همانهنگ کنید.

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

M-B-M
23-12-2010, 12:48
سلام h2 جان
من كدي كه استفاده مي كنم اينه


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

و توي اين دستور از متغير srv استفاده مي كنم كه از server مقدار ميگيره
من متوجه نشدم كه اين متغير srv رو بايد از نوع ديگه اي تعريف كنم يا ... چون متغير server كه شما معرفي كردين از نوع string هست و نمي دونم چطور بايد ازش استفاده كنم
اگه ميشه يه راهنمايي بكنين

---------- Post added at 12:48 PM ---------- Previous post was at 12:48 PM ----------

سلام h2 جان
من كدي كه استفاده مي كنم اينه


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

و توي اين دستور از متغير srv استفاده مي كنم كه از server مقدار ميگيره
من متوجه نشدم كه اين متغير srv رو بايد از نوع ديگه اي تعريف كنم يا ... چون متغير server كه شما معرفي كردين از نوع string هست و نمي دونم چطور بايد ازش استفاده كنم
اگه ميشه يه راهنمايي بكنين

M-B-M
23-12-2010, 13:02
سلام h2 جان
من كدي كه استفاده مي كنم اينه


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

و توي اين دستور از متغير srv استفاده مي كنم كه از server مقدار ميگيره
من متوجه نشدم كه اين متغير srv رو بايد از نوع ديگه اي تعريف كنم يا ... چون متغير server كه شما معرفي كردين از نوع string هست و نمي دونم چطور بايد ازش استفاده كنم
اگه ميشه يه راهنمايي بكنين

_H2_
24-12-2010, 00:05
سلام
کدی شبیه این:
(مجدد همین الآن آن را با SMO2010 روی SqlExpress2005 و SqlExpress2010 امتحان کردم)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

البته اگر برای ارتباط user و pass هم دارید، باید آن را هم در نمونه سازی con مدنظر داشته باشید.
موفق باشید.

M-B-M
31-12-2010, 12:15
سلام
من تست كردم اين خطا رو ميده

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

_H2_
01-01-2011, 21:17
سلام
دوست من، این دیگر از بدیهیات است که شما باید dll های مورد نیاز را Reference کنید.
مثلاً برای برای SMO2008 (که کد فوق برای آن هم نوشته شده) حداقل باید چهار dll زیر را Reference کنید:
Microsoft.SqlServer.Smo
Microsoft.SqlServer.SmoExtended
Microsoft.SqlServer.ConnectionInfo
Microsoft.SqlServer.Management.Sdk.Sfc

M-B-M
11-01-2011, 10:01
سلام
Microsoft.SqlServer.Smo رو كه اضافه كرده بودم،
Microsoft.SqlServer.ConnectionInfo رو sql همراه c# نداشت از sqlserver برداشتم اضافه كردم،
بقيه رو كه sql 2005 نداشت فكر كنم مخصوص 2008 باشه

اخر هم خطا داد و backup نگرفت

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
راستي من از sql همراه خود c# استفاده مي كنم

_H2_
15-01-2011, 23:21
سلام
همانطورکه در پست قبلی اشاره ای داشتم، اون کد و dll ها برای نسخه SMO2008 بود.
برای نسخه SMO2005 شاید نیاز باشد چند مورد جزئی تغییر کند.
مطمئن نیستم الآن 2005 را جایی نصب داشته باشم که کد آزمایش شده ای برایتان بگذارم ...

M-B-M
16-01-2011, 10:47
پس من منتظر مي مانم تا ...

_H2_
24-01-2011, 00:11
سلام
همان سمپل ...
support.h02.ir/fwlink/?LinkId=1006043097

را در زمان SqlServer2005 نوشته بودم و مطلب فوق را در ان ویرایش کردم و یکبار برای دیتابیس Attach شده و یکبار با AttachDbFilename امتحان کردم و جواب داد، میتوانید کد زیر را در سمپل دانلودی فوق قرار داده و کد را امتحان کنید:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

1)
دقت کنید که مسیر فایل پشتیبانگیری شما در جاییی باشد که با UAC مشکلی ایجاد نشود.
(((
دلایلش را قبلاً در تاپیکی شرح داده بودم
مثل همان ریشه درایو D در کدفوق خوب است
)))

2)
نسخه 9 فایلهای Microsoft.SqlServer.ConnectionInfo و Microsoft.SqlServer.Smo باید به پروژه Reference شده باشند.

موفق باشید.

M-B-M
24-01-2011, 21:59
سلام
من واقعا شرمنده ام
فکر کنم مشکل از ویندوزم بود
من ویندوز سیستمم رو عوض کردم
بعد کد های شما رو تست کردم هم کد بالا و هم کدی که قبلا گذاشته بودید هر دو جواب داد

حالا می خواستم بدونم این دو کد چه فرقی با هم دارند؟
کدام کد بهتر جواب می دهد؟
کدام کد را توصیه می کنید؟
...

راستی ایا میتوان برای Backup پسورد تعریف کرد که دیگری نتواند از ان استفاده غیر مجاز کند؟
چطور؟

_H2_
24-01-2011, 23:05
سلام


حالا می خواستم بدونم این دو کد چه فرقی با هم دارند؟
کدام کد بهتر جواب می دهد؟
کدام کد را توصیه می کنید؟

در واقع هیچ تفاوتی ندارد.
یکی با SMO2008 و نیاز به چهار Reference آزمایش کردم
و دیگری را
با SMO2005 و نیاز به دو Reference آزمایش کردم

(چون گفتید نسخه 2008 ندارید یا مشکل دارد و... از نسخه 2005 و بوطر مختصر تر استفاده شد که احتمال جوابش بیشتر شود.)
ولی تفاوتی وجود ندارد



ایا میتوان برای Backup پسورد تعریف کرد که دیگری نتواند از ان استفاده غیر مجاز کند؟
چطور؟

بله، خصیصه ای (Property) به همین نام در شی Backup و Restore وجود دارد که اگر در زمان Backup پرشود، تخصیص داده میشود و باید به صورت صحیح در زمان Restore هم پر شود.

M-B-M
25-01-2011, 16:09
سلام
آيا اين كد اشتباهه؟

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

_H2_
28-01-2011, 13:25
سلام
Restore شرایط خاص تری دارد، در زمان Restore نباید هیچ Connection باز دیگری به دیتابیس مورد نظر وجود داشته باشد، چه در برنامه و رایانه و شبکه و...

در برنامه تان اگر تمام Connection ها را Close یا Dispose کنید،
متد System.Data.SqlClient.SqlConnection.ClearAllPools هم تمام Connection های باز در مخزن ADO.Net را آزاد خواهد کرد.

در نتیجه...

آيا اين كد اشتباهه؟
پیشنهاد میشود خصیصه ReplaceDatabase را true کنید و حداقل قبل SqlRestore متد System.Data.SqlClient.SqlConnection.ClearAllPools را هم اجرا کنید.
(و در صورت داشتن رمزعبور، آن را هم با SetPassword تنظیم کنید.)

موفق باشید.