PDA

View Full Version : Backup گرفتن از SQL Express 2005



morteza57
جمعه 30 مرداد 1388, 10:36 صبح
این سوال به طور مستقیم و غیر مستقیم چندین بار در این سایت مطرح شده ولی هیچ کدوم به جواب آخر نرسیدند و من می خوام به شکل صریح تر اون رو مطرح کنم.
من از طریق روش اتصال به فایل به دیتابیس خودم متصل می شم (AttachDBFileName). چون در این روش دیتابیس به سرور Attach نمی شه تا اونجایی که من متوجه شدم امکان گرفتن پیشتیبان از طریق اسکریپت های معمول، امکان پذیر نیست.
آیا تنها راه Backup گرفتن از دیتابیس Copy نمودن فایل های MDF هستش یا روش دیگری هم وجود داره؟
متشکرم.

mmramezani2101
جمعه 30 مرداد 1388, 17:22 عصر
این سوال به طور مستقیم و غیر مستقیم چندین بار در این سایت مطرح شده ولی هیچ کدوم به جواب آخر نرسیدند و من می خوام به شکل صریح تر اون رو مطرح کنم.
من از طریق روش اتصال به فایل به دیتابیس خودم متصل می شم (AttachDBFileName). چون در این روش دیتابیس به سرور Attach نمی شه تا اونجایی که من متوجه شدم امکان گرفتن پیشتیبان از طریق اسکریپت های معمول، امکان پذیر نیست.
آیا تنها راه Backup گرفتن از دیتابیس Copy نمودن فایل های MDF هستش یا روش دیگری هم وجود داره؟
متشکرم.

SqlCommand com = new SqlCommand("backup database ChestRenal to disk= "
+ "'" + textBox1.Text.ToString() + "'" , sc);

SC=SqlConnection

morteza57
جمعه 30 مرداد 1388, 17:49 عصر
این روش ها برای دیتابیس هایی که به سرور Attach شدن کارساز هست و در مورد دیتابیس هایی که از AttachDBFileName استفاده می کنند کارایی نداره.

Sajjad.Aghapour
شنبه 31 مرداد 1388, 01:01 صبح
cmd.CommandText="backup database db_name to disk=@path with format";
cmd.Parameters.AddWithValue("@path","C:\\db.bak");
از smo هم میتونید استفاده کنید...

morteza57
شنبه 31 مرداد 1388, 04:16 صبح
دوست گرامی، همونطور که قبلا گفتم این روش ها برای دیتابیس هایی کارایی داره که به سرور Attach شده باشند. برنامه ای که من نوشتم از نوع مالتی مدیا هستش.
از طرفی اگر بخوام یک Instance جدید از SQL Express نصب کنم هم کلی مشکل دیگه داره.
بنابراین من از طریق AttachDBFileName به این پایگاه داده وصل شدم. حالا مشکل من اینه که آیا روشی برای گرفتن پیشتیبان از این طریق وجود داره یا نه؟

Sajjad.Aghapour
شنبه 31 مرداد 1388, 14:14 عصر
بنابراین من از طریق AttachDBFileName به این پایگاه داده وصل شدم. حالا مشکل من اینه که آیا روشی برای گرفتن پیشتیبان از این طریق وجود داره یا نه؟

شما به مشکل برخوردید یا اینکه فقط دارید سوال میپرسید ؟!!.....
..

morteza57
شنبه 31 مرداد 1388, 20:31 عصر
شما به مشکل برخوردید یا اینکه فقط دارید سوال میپرسید ؟!!.....
..

این دیگه از اون سوال ها بود ((:


هنگام اجرای دستورات فوق، خطای زیر به وجود می یاد.


Could not locate entry in sysdatabases for database 'RuleManager'. No entry found with that name. Make sure that the name is entered correctly.
BACKUP DATABASE is terminating abnormally.

لازم به ذکر هستش که نام دیتابیس من RuleManager هستش.

Sajjad.Aghapour
شنبه 31 مرداد 1388, 22:46 عصر
کدی رو که گذاشته بودم یه بار تست کردم، مشکلی نداشت....


//Con_Str
"data source=.\\SQLEXPRESS;attachdbfilename=|datadirecto ry|db.mdf;initial catalog=db;integrated security=true;user instance=true"
//

اینجا رو هم یه نگاه بندازید...
http://support.microsoft.com/kb/290787

mn_zandy63
یک شنبه 01 شهریور 1388, 22:28 عصر
من نمی تونم هنگام نصب برنامه روی سیستم کاربر دیتابیس رو Attach کنم (چون نام کاربری و رمز عبور سرور رو ندارم)
بی ربطه ها٬ ولی من متوجه نشدم٬ Attach کردن یا نکردن دیتابیس چه ارتباطی با نام کاربری و رمز عبور سرور داره؟ :متفکر:
اگه رمز عبور یا به عبارتی کاربری در سرور نداشته باشی از این روش هم نمیتونی استفاده کنی
اینطور نیست؟ :متفکر:

morteza57
دوشنبه 02 شهریور 1388, 00:01 صبح
بی ربطه ها٬ ولی من متوجه نشدم٬ Attach کردن یا نکردن دیتابیس چه ارتباطی با نام کاربری و رمز عبور سرور داره؟ :متفکر:
اگه رمز عبور یا به عبارتی کاربری در سرور نداشته باشی از این روش هم نمیتونی استفاده کنی
اینطور نیست؟ :متفکر:

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

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

این مشکل از یک غفلت کوچک توسط من به وجود اومده بود. این دیتابیس رو من توسط Management Studio به وجود آورده و توسعه داده بودم و در نهایت اون رو داخل پروژه خودم کپی کرده و با استفاه از ویژوال استودیو به اون کانکت شدم. از دیتابیس Property گرفتم و کانکشن استرینگ اون رو داخل فایل App.Config کپی کردم.
دیتابیس بدون مشکل بالا میومد و اعمال مختلف روی اون اجرا می شد و لذا من هیچ شکی به رشته اتصال دیتابیس نداشتم.
ولی غافل از این که در رشته اتصالی که من از ویژوال استودیو کپی کرده بودم، مشخصه Initial Catalog وجود نداشت و چون دیتابیس در زمان RunTime به سرور Attach می شد، و من در رشته اتصال دیتابیس مشخصه Initial Catalog رو ذکر نکرده بودم، سرور نام دیتابیس من رو برابر با محل قرارگیری اون در نظر می گرفت(مثلا [E:\DB\RuleMANAGER.MDF]).
بنابراین هنگامی که من دستور گرفتن پشتیبان از دیتابیس رو می دادم، سرور می گفت که نام RuleMANAGER رو پیدا نمی کنه (و حق با اون بود)
پس از اینکه این مشخصه Initial Catalog رو به رشته اتصال اضافه کردم، خطای مورد نظر عوض شد و یه چیزی تو این مایه ها شد:
Unable to open the phisycal file

این مشکل نیز بدین جهت به وجود اومده بود که دیتابیس به حالت ReadOnly رفته بود. (این که چرا به این حالت رفته بود برای من هم سواله)
احتمالا می دونید که وقتی یک دیتابیس به حالت ReadOnly می ره هنگامی که به Management Studio اون رو Attach می کنیم رنگش خاکستری می شه و مشخص می شه که ReadOnly شده ولی نمی دونم چرا در این مورد این عمل انجام نمی شد و کاملا عادی نمایش داده می شد.
پس از اجرای دستور زیر تونستم از روش های معمول جهت گرفتن پشتیبان استفاده کنم.
ALTER DATABASE [E:\DB\RuleMANAGER.MDF] SET read_write

این بود داستان گرفتاری من!

mn_zandy63
دوشنبه 02 شهریور 1388, 23:15 عصر
خوشحالم که مشکلت حل شد

Happy Coding...

f_pakzad
سه شنبه 31 شهریور 1388, 22:35 عصر
م
این بود داستان گرفتاری من!

برای من دقیقا همین مشکل پیش اومد
هرچی می زدم تو سر خودم نمی فهمیدم اشکال از کجاست
پست شما رو دیدم ذوق زده شدم:لبخند:

saadi2
سه شنبه 31 شهریور 1388, 23:58 عصر
برای من دقیقا همین مشکل پیش اومد
هرچی می زدم تو سر خودم نمی فهمیدم اشکال از کجاست
پست شما رو دیدم ذوق زده شدم:لبخند:

چه فایده ؟ وقتی init catalog رو به کانکشن استرینگ اضافه کنی با جابجایی برنامه در هارد دیسک دیگه بکاپ عمل نمی کنه

a.maleki
دوشنبه 13 مهر 1388, 10:53 صبح
دوستان سلام
من از کدی که فرمودید استفاده کردم ولی خطای زیر رو می ده ممنون میشم که راهنمایم کنید


Connection property has not been initialized.

viper2009
سه شنبه 14 مهر 1388, 19:11 عصر
کدی رو که گذاشته بودم یه بار تست کردم، مشکلی نداشت....


//Con_Str
"data source=.\\SQLEXPRESS;attachdbfilename=|datadirecto ry|db.mdf;initial catalog=db;integrated security=true;user instance=true"
//

اینجا رو هم یه نگاه بندازید...
http://support.microsoft.com/kb/290787

آیا این دستور دیتا بیس رو Attach می کنه منظورم اینکه وقتی SqlServer را باز کنیم این دیتا بیس Attach یا وصل در SQLserver?

من یک دیتا بیس از شما می گیرم و حالا می خوام بدون Attach کردن دستی با استفاده از یک دکمه این کار صورت بگیره

f_pakzad
پنج شنبه 16 مهر 1388, 21:23 عصر
چه فایده ؟ وقتی init catalog رو به کانکشن استرینگ اضافه کنی با جابجایی برنامه در هارد دیسک دیگه بکاپ عمل نمی کنه


اره..درست میگید.حالا چیکار کنم؟؟؟:ناراحت::ناراحت:

morteza57
پنج شنبه 16 مهر 1388, 21:49 عصر
عبارت initial catalog رو در رشته اتصال استفاده نکنید. مشکلات زیادی داره که چند تای اون همین ها بود که گفتید.
من دو تا تابع با زبان C#‎ نوشتم که عمل Backup و Restore رو بدون مشکل (تا اونجایی که من تست کردم) انجام می دن. اینجا می ذارم تا همه استفاده کنند.
لطفا اگه مشکلی داشت حتما ذکر کنید تا یه فکری به حالش بکنیم.

f_pakzad
چهارشنبه 22 مهر 1388, 14:18 عصر
عبارت initial catalog رو در رشته اتصال استفاده نکنید. مشکلات زیادی داره که چند تای اون همین ها بود که گفتید.
من دو تا تابع با زبان C#‎‎ نوشتم که عمل Backup و Restore رو بدون مشکل (تا اونجایی که من تست کردم) انجام می دن. اینجا می ذارم تا همه استفاده کنند.
لطفا اگه مشکلی داشت حتما ذکر کنید تا یه فکری به حالش بکنیم.

شما در این زیربرنامه آدرس فیزیکی فایل mdf رو قرار دادید
یعنی منظورتون اینه که یه openfiledialog بذاریم و ادرس دیتا بیس رو از کاربر بیریم؟
در غیر این صورت از کجا بفهمیم کاربر نرم افزار رو در چه ادرسی نصب کرده؟

morteza57
چهارشنبه 22 مهر 1388, 14:39 عصر
OpernFileDialog در تابعی استفاده شده که وظیفه اون، Restore کردن هستش و نه Backup گرفتن! طبیعتا کاربر باید آدرس فایل Backup رو بده تا بتونه اون رو Restore کنه.
ولی اینکه از کجا بفهمیم که نرم افزار در کدوم آدرس نصب شده که کاری نداره. کافیه که آدرس فایل اجرایی برنامه رو داشته باشید و آدرس نسبی دیتابیس نسبت به فایل اجرایی رو هم که دارید. پس خیلی راحت می تونید کل آدرس رو بدست بیارید.
مثلا اگر دیتابیس رو در یک پوشه به نام DB در دایرکتوری نرم افزار گذاشته باشید، آدرس کامل اون رو می تونید در هنگام اجرای نرم افزار از طریق زیر بدست بیارید.
System.Windows.Forms.Application.StartupPath+"DB\\MyDatabase.MDF"