PDA

View Full Version : restore کردن DB با یه نام جدید



mina1363
سه شنبه 10 شهریور 1388, 17:53 عصر
سلام دوستان من برای restore کردن دیتا بیسم از کد زیر استفاده کردم وقتی با نام خود دیتا بیسم که ازش بک آپ گرفتم ری استورش کنم مشکلی نداره ولی وقتی با یه نام جدید میخوام اونو ری استور کنمerror زیر رو میده باید چکار کنم که بتونم با یه نام دیگه ری استورش کنم؟
این error اش است:

Cannot open database "MedadDB" requested by the login. The login failed.
Login failed for user 'PERSIAN\mina'.
و این هم کدم برای ری استور کردن:


OpenFileDialog open = new OpenFileDialog();
if (open.ShowDialog() == DialogResult.OK)
{
open.Filter = "Backup File (.*Bak)|.*Bak";
open.DefaultExt = "Bak";
SqlConnection cn = new SqlConnection();
cn.ConnectionString = @"Data Source=.;Initial Catalog=MedadDB;Integrated Security=True";
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cn.Open();
cmd.CommandText = "RESTORE DATABASE MedadDB FROM DISK=N'" + open.FileName + "' WITH REPLACE";
cn.ChangeDatabase("master");
cmd.Connection = cn;
cmd.ExecuteNonQuery();
cn.Close();
MessageBox.Show(" ںھیں ی ں êيهçی¢ ںë¤ںê ¬§");
}
else
MessageBox.Show(" ںھیں ی ں êيهçی¢ ںë¤ںê 묧");

واین هم کدم برای backup گرفتن :


con.ConnectionString = "server=(local);database=MedadDataBase;Integrated Security=true";
SaveFileDialog save = new SaveFileDialog();
save.AddExtension = true;
save.CheckFileExists = false;
save.CheckPathExists = true;
save.OverwritePrompt = true;
save.FileName = "BackUp";
save.Filter = "Backup File (*.Bak)|*.Bak";
save.DefaultExt = "Bak";
save.RestoreDirectory = true;
save.InitialDirectory = "C:\\";
if (save.ShowDialog() == DialogResult.OK)
{
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
string query = "BACKUP DATABASE MedadDataBase TO DISK = @Destination";
cmd.CommandText = query;
cmd.Parameters.Add("@Destination", System.Data.SqlDbType.VarChar);
cmd.Parameters["@Destination"].Value = save.FileName;
cmd.ExecuteNonQuery();
con.Close();
}
MessageBox.Show("پشتیبان گیری به درستی انجام شد");

mina1363
پنج شنبه 12 شهریور 1388, 08:32 صبح
سلام دوستان من دیتا بیسم رو برای اینکه portable بشه تبدیلش کردم به sqlexpress حالا دیگه همین کدهای بکآپ و ری استور روش جواب نمیده کسی میتونه به من کمک کنه؟
و بعدش میخوام بتونم نسخه های متعددی از دیتا بیسم با نامهای مختلف داشه باشم این چه طور ممکنه؟
لطفا کمکم کنید

Reza_Yarahmadi
پنج شنبه 12 شهریور 1388, 12:10 عصر
سلام دوست عزیز
در جواب سؤال اولتون باید بگم فکر نمیکنم بشه زمان رستور اسم بانک رو عوض کرد. چون اطلاعات مربوط به بانک (از جمله اسمش) توی فایل بک آپ ذخیره شده و زمان رستور کردن SQLServer طبق اون اطلاعات فایل بانک رو ترمیم میکنه. اگر قصد دارید چند بانک داشته باشید میتونید به روش زیر عمل کنید:
اول SQLServer رو غیر فعال (Stop) کنید.
بعد از فایلهای بانکتون یه کپی بگیرید
SQLServer رو فعال کنید
فایلهای کپی رو با یه اسم دیگه Attach کنید.
در مورد SQLExpress هم اصلا نیازی نیست بک آپ و رستور استفاده کنید ، میتونید فایلهای بانک رو به راحتی کپی کنید (چه به عنوان بک آپ گیری ، چه رستور کردن)

mina1363
پنج شنبه 12 شهریور 1388, 16:12 عصر
در مورد SQLExpress هم اصلا نیازی نیست بک آپ و رستور استفاده کنید ، میتونید فایلهای بانک رو به راحتی کپی کنید (چه به عنوان بک آپ گیری ، چه رستور کردن)

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

راستی کدهای لازم برای کپی و paste کردن یک object (مثل همین ) دیتا بیس رو میدونید؟

Reza_Yarahmadi
پنج شنبه 12 شهریور 1388, 17:10 عصر
یعنی اگر بخوام از کپی و paste در حین اجرای برنامه استفاده کنم موقع paste کردن بهم ایراد میگیره که این برنامه در حال استفاده توسط برنامه دیگری است پس باید از چه روشی استفاده کنم که بتونم از برنامه در حال اجرا از دیتا بیس sqlexpress کپی بگیرم؟
احتمالا بصورت ویزاردی به بانک وصل میشی. اگه به اینصورت وصل میشی باید اول دسترسی تمام ابزارها رو به بانک قطع کنی بعد بانک رو کپی کنی.

کدهای لازم برای کپی و paste کردن یک object (مثل همین ) دیتا بیس رو میدونید؟
File.Cope("SourceFilePath", "DestinationFilePath");

mina1363
پنج شنبه 12 شهریور 1388, 18:00 عصر
ممنون. ولی چه جوری با "کد"، دسترسی ابزارها را به پایگاه داده قطع کنم؟ چون این اتفاق وقتی کاربر در حال استفاده از برنامه است باید بیفته. یعنی کاربر در حین کار با برنامه درخواست Restore می کند.
اگه ممکنه بیشتر توضیح بدید.ممنون.

mina1363
جمعه 13 شهریور 1388, 09:45 صبح
اگر از این کد :


SqlConnection.ClearAllPools();

برای قطع کردن دسترسی ها به دیتا بیس استفاده کنم درسته؟

mina1363
جمعه 13 شهریور 1388, 10:24 صبح
سلام دوست عزیز نه از کد بالا که گفتم

SqlConnection.ClearAllPools();

جواب نمیده و همون error بالا رو میده میشه بیشتر راهنمایی کنید که با کد چه جوری تمام دسترسی ها به دیتا بیسم رو قطع نکم؟
ممنونم