فک نکنم تو داری کپی میگیری .. کات که نمیکنی .. !!!
من استفاده میکنم مشکلیم پیش نیومده تا حالا ... !!
تازه هر 100 ثانیه هم میگیره ... بانکمم معمولا در حال استفادست ... !!
از یه پروسسور بار هم برای نشون دادن پیشرفت کپی استفاده کردم .... که اگه حجم بانک زیاد بود ... کاربر بتونه مقدار پیشرفت عملیاتو ببینه .. !!
کاری که دوستمون میخواد بکنه ایینه که با دکمه نسخه پشتیبان بگیره .... !!!!
این یعنی این که اگر هم موقع کپی گرفتن اس کیو ال ایراد بگیره ..... تو برنامه دیتا بیس بسته است ... !!!!
شبکه هم مسئله ایه واس خودش .... !!!!
ولی این که برنامه بخواد بخوابه رو نمیفهمم یعنی چی ..... واس چی باید برنامه بخوابه .... !!!؟؟؟
تا حالا برام این مشکل پیش نیومده بود و بانک بدون هیچ اختلالی در روند برنامه کپی میشد ... و نمیدونستم که اسکیو ال اجازه این کارو نمیده ... !!!
وقت کنم حتما امتحان میکنم ... !!!
اگه اینطوری که شما میگی باشه حق با شماست ... !!!
به هر حال دوست عزیز ممنون از اطلاع رسانیت .... داریم یه پروژه تحت شبکه سنگین شروع میکنیم ... حرف شمارو بررسی میکنم ... اگه درست باشه ... شما باعث شدی که ما یه اشتباه بزرگو نکنیم ... !!
ممنون
private void Restore(string strfilename)
{
// try
// {
string command = "ALTER DATABASE LIB3 SET SINGLE_USER WITH ROLLBACK IMMEDIATE " + "USE MASTER" + "RESTORE DATABASE LIB3 FROM DISK='" + strfilename + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand oCommand = null;
SqlConnection oConnection = null;
oConnection = new SqlConnection("Data Source=.;Initial Catalog=lib3;Integrated Security=True");
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCommand = new SqlCommand(command, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("بازیابی اطلاعات از نسخه پشتیبان با موفقیت انجام شد");
// }
// catch (Exception ex)
// {
// MessageBox.Show("error occurd:" + ex.Message);
// }
خب چه خطایی داد متن خطا رو بذار
دوست عزیز میگه دیتابیسی با چنین اسمی وجود نداره سعی کن اسم رو دقیق وارد کنی
اره می دونم ولی اسم دیتا بیسم همینه درسته
مشکل بازیابی رو چکار کنم
سلام از کد زیر برای restore استفاده می کنم
use master ALTER DATABASE [newdent] SET SINGLE_USER WITH ROLLBACK IMMEDIATE RESTORE DATABASE [newdent] FROM DISK = '" + filename + "' ALTER DATABASE [newdent] SET MULTI_USER
اول خطا نمی داد ولی حالا خطای زیر رو میده
The backup set holds a backup of a database other than the existing 'newdent' database.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.
try
{
string command = "ALTER DATABASE qq SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + " RESTORE DATABASE qq FROM DISK='" + strFileName + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand oCammand = null;
SqlConnection oConnection = null;
oConnection = new SqlConnection("Data Source=.;Initial Catalog=qq;Integrated Security=True");
if (oConnection.State == ConnectionState.Closed)
oConnection.Open();
oCammand = new SqlCommand(command, oConnection);
oCammand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("بازيابي اطلاعات با موفقيت انجام شد");
}
catch (Exception ex)
{
MessageBox.Show("Error Occurd :" + ex.Message);
}
ولي اين مشكل را داره error 40 could not open a connection to SqL server
سلام
کد شما اصلاح شد.
try
{
string command = @"ALTER DATABASE qq SET SINGLE_USER with ROLLBACK IMMEDIATE"
+ " USE MASTER" +
" RESTORE DATABASE qq From DISK='" + strFilename + "'with REPLACE";
this.Cursor = Cursors.WaitCursor;
SqlConnection oConnection = new SqlConnection();
SqlCommand oCammand = new SqlCommand();
oConnection.ConnectionString = "Data Source=.;Initial Catalog=qq;Integrated Security=true";
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCammand.Connection = oConnection ;
oCammand.CommandText = command;
oCammand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("بازيابي اطلاعات با موفقيت انجام شد");
}
catch (Exception ex)
{
MessageBox.Show("Error Occurd :" + ex.Message);
}
آخرین ویرایش به وسیله mahdi_7610 : یک شنبه 30 تیر 1392 در 01:37 صبح
از این کد استفاده کنید ببینید بازم error میده؟
restore database newdent from disk = 'E:\ My folder\BackupFile.Bak'
سلام من هرچی کد توی این سایت توی سایت code project توی سایت microsoft بود امتحان کردم نشد که نشد
توی بخش vb گذاشتم
از دوستان میخوام کمک کنند
یک نمونه برنامه باشه که حداقل کار رو انجام بده
حداقل کپیش میکنیم چیکار کنیم
هرکی یجور دستور رو مینویسه کد رو
من الان commandtext داخلش اینه :
" USE Master RESTORE database [E:\test\test\bin\Debug\db.mdf] FROM DISK ='E:\db.BAK' WITH NORECOVERY , MOVE 'db' TO 'E:\test\test\bin\Debug\db.mdf', MOVE 'db_log' TO ' E:\test\test\bin\Debug \db_log.ldf' "
خطایی که میگیره
شما الان دیتا بیس newdent را توی سرورت داری ؟ معمولا اگر دستور with repalce را اضافه کنی این مشکل حل میشه . یعنی به این صورت
use master ALTER DATABASE [newdent] SET SINGLE_USER WITH ROLLBACK IMMEDIATE RESTORE DATABASE [newdent] FROM DISK = '" + filename + "' WITH REPLACE ALTER DATABASE [newdent] SET MULTI_USER
سلام امیدوارم این کد به دردتون بخوره
try
{
string strFileName = "Address";
SqlConnection.ClearAllPools();
SqlConnection connect= new SqlConnection("Data Source=.\\SQLExpress;Initial Catalog=dbName;Integrated Security=True");
SqlCommand command;
command = new SqlCommand("use master", connect);
command.ExecuteNonQuery();
command = new SqlCommand(@"restore database Hesabdari1 from disk = '" + strFileName + "' with replace", connect);
command.ExecuteNonQuery();
connect.Close();
}
catch
{}
با سلام خدمت تمامی دوستان
در حال نوشتن یک برنامه بوسیله C# هستم و در برنامه از پایگاه داده Sql server 2008 express استفاده کردم.
حالا در قسمتی از برنامه احتیاج دارم که به عنوان backup پایگاه داده را به همراه یکسری فایل و فولدر دیگه بریزم توی یک فایل zip و در اینده هم در صورت نیاز انها را به جای اصلی برگردانم یا به اصطلاح restore کنم و می خوام که اینکار رو بوسیله کد نویسی انجام بدم. متاسفانه هر چقدر که سرچ کردم نتوانستم راهی برای انجام اینکار پیدا کنیم که هم موقع backup و هم موقع restore به کار بیاد. بعضی از روش ها هنگام به اصطلاح backup گیری ارور می داد و برخی هم موقع restore کردن. متشکر می شوم اگه کسی بتونه کمک کنه. البته باید اینو بگم که کلا اطلاعاتم در مورد برنامه نویسی و پایگاه داده خیلی کم هست و متشکر می شوم که جواب دوستان به زبان ساده و در صورت امکان همراه با کدهای لازم باشه , هم در مورد backup و هم در مورد restore.
پیشاپیش متشکرم.
شما به راحتی می توانید با استفاده از کلاس زیر عملیات backup , restore را انجام دهید.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using System.IO;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Windows.Forms;
namespace PreservationProje
{
class Back_Restore : IDisposable
{
//نحوه پشتیبان گیری و باز خوانی از اطلاعات پایگاه داده
private string BackUpConString = @"Data source=.;initial catalog=PreservatioData;integrated security=True;multipleactiveresultsets=True";//Connection String baraye Dastyabi be Data base Asli
private string ReStoreConString = "Data Source=.;Initial Catalog=master;Integrated Security=True";//Connection String baraye dastresi be data base Master
//------------------------------------------------------------
public void Dispose()
{
GC.SuppressFinalize(this);
}
//-------------------------------------------------------------
public void ReStorMyDB()
{
if (MessageBox.Show("همه داده های دیتابیس ممکن است تغییر نماید!!! \n yesاگر مطمئن هستید انتخاب نمایید ", "باز خوانی دیتابیس", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
SqlConnection.ClearAllPools();
using (SqlConnection con = new SqlConnection(ReStoreConString))
{
ServerConnection srvConn = new ServerConnection(con);
Server srvr = new Server(srvConn);
if (srvr != null)
{
try
{
Restore rstDatabase = new Restore();
rstDatabase.Action = RestoreActionType.Database;
rstDatabase.Database = "PreservatioData";//Bayad ham nam ba Data base barname tanzim shavad
OpenFileDialog opfd = new OpenFileDialog();
opfd.Filter = "BackUp File|*.araDB";
if (opfd.ShowDialog() == DialogResult.OK)
{
BackupDeviceItem bkpDevice = new BackupDeviceItem(opfd.FileName, DeviceType.File);
rstDatabase.Devices.Add(bkpDevice);
rstDatabase.ReplaceDatabase = true;
rstDatabase.SqlRestore(srvr);
MessageBox.Show("بازخوانی اطلاعات با موفقیت انجام شد", "Server", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception e)
{
MessageBox.Show("ERROR: An error ocurred while restoring the database", "Application Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
}
public void BackUpMyDB()
{
using (SqlConnection con = new SqlConnection(BackUpConString))
{
ServerConnection srvConn = new ServerConnection(con);
Server srvr = new Server(srvConn);
if (srvr != null)
{
try
{
Backup bkpDatabase = new Backup();
bkpDatabase.Action = BackupActionType.Database;
bkpDatabase.Database = "PreservatioData";//Bayad ham nam ba Data base barname tanzim shavad
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "BackUp File|*.araDB";
sfd.FileName = "BackUp_" + (DateTime.Now.ToShortDateString().Replace('/', '.'));
if (sfd.ShowDialog() == DialogResult.OK)
{
BackupDeviceItem bkpDevice = new BackupDeviceItem(sfd.FileName, DeviceType.File);
bkpDatabase.Devices.Add(bkpDevice);
bkpDatabase.SqlBackup(srvr);
MessageBox.Show("پشتیبان گیری از اطلاعات با موفقیت انجام شد", "Server", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception e) { MessageBox.Show(e.ToString()); }
}
}
}
}
}
و در صفحه فرم در تابعی که می خواهید با فراخوانی آن عملیات back up انجام شود دستور زیر را قرار دهید
private void Backuptool_Click(object sender, EventArgs e)
{
using (var back = new ClassBack_Restore())
{ back.BackUpMyDB(); }
}
بک آپ و ریستور
این پروسیجر دارم با این کد ها ولی خطا میده ....... لطفا کمک کنید
ALTER PROCEDURE [dbo].[RestoreProc] @Path varchar(250)
AS
BEGIN
RESTORE DATABASE University
FROM DISK = @Path
WITH
FILE = 1,
NOUNLOAD,
REPLACE,
STATS = 10
END
اینم کد برنامه
string ConnectionString = "Server=(LOCAL);Database=University;Trusted_Connec tion=True;";
SqlConnection Connection = new SqlConnection(ConnectionString);
SqlCommand Command = new SqlCommand("RestoreProc", Connection);
Command.CommandType = CommandType.StoredProcedure;
Command.Parameters.Add("@Path", SqlDbType.VarChar).Value = TBAddress.Text;
SqlConnection.ClearAllPools();
Connection.Open();
Command.ExecuteNonQuery();
Connection.Close();
این خطا رو میده
RESTORE cannot process database 'University' because it is in use by this session. It is recommended that the master database be used when performing this operation.
RESTORE DATABASE is terminating abnormally.
شما باید اوب ارتباط با دیتابیس رو قطع کنین بعد عمل restore را انجام بدین
ALTER DATABASE University SET OFFLINE with ROLLBACK IMMEDIATE
RESTORE DATABASE University
FROM DISK = @Path
WITH
FILE = 1,
NOUNLOAD,
REPLACE,
STATS = 10
این خطا مربوط به اینه که بانکتون در sql server خوده ویزال بازه اون رو dtache کنید درست میشهdatabase be used when performing this operation.
RESTORE DATABASE is terminating abnormally.
از پروسیجر شما استفاده کردم ولی اول کار db رو off میکنه و میگه امکان دسرسی وجود نداره
سلام.
بعد از ری استور کردن بایستی دیتابیس آفلاین شده رو دوباره فعال کرد تا بشه از اون استفاده کرد.
استورد پروسیجر زیر رو استفاده کنید ببینید مشکلتون حل میشه یا نه. اگر خطایی رخ داد متن خطا رو بذارید.
منظور از pathfile@ همون مسیر ذخیره شدن فایل پشتیبان هست که از سمت برنامه برای sp فرستاده میشه.
create proc MyRestore
@pathfile nvarchar(400)
as
ALTER DATABASE DBAzmoon SET OFFLINE WITH ROLLBACK IMMEDIATE
RESTORE DATABASE DBAzmoon FROM DISK = @pathfile WITH REPLACE
ALTER DATABASE DBAzmoon SET ONLINE
GO
گرفتن پشتیبان از پایگاه داده ی SQL با #C
saveFileDialog1.DefaultExt = "BAK";
saveFileDialog1.FileName = "BackupFile";
saveFileDialog1.Filter = @"SQL Backup files (*.BAK) |*.BAK|All files(*.*) |*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.OverwritePrompt = true;
saveFileDialog1.Title = "Backup SQL File";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
objCommand = new SqlCommand("BACKUP DATABASE [databaseName] TO DISK='" + saveFileDialog1.FileName + "'", objconnectin());
objCommand.ExecuteNonQuery();
MessageBox.Show(" تهيه نسخه پشتيبان از اطلاعات با موفقيت انجام شد ");
}
catch (Exception ex) { MessageBox.Show("Error Occurd :" + ex.Message); }
}
بازیابی پشتیبان از پایگاه داده ی SQL با #C
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Backup SQL File (*.bak)|*.bak|All Files (*.*)|*.*";
open.ShowDialog();
if (open.FileName != "")
{
try
{
objCommand = new SqlCommand("alter database BimeDB set OFFLINE with ROLLBACK IMMEDIATE RESTORE DATABASE BimeDB FROM DISK = '" + open.FileName + "' WITH REPLACE", SC1.SqlConnection());
objCommand.ExecuteNonQuery();
MessageBox.Show(" بازیابی اطلاعات با موفقیت انجام شد ");
}
catch (Exception ex) { MessageBox.Show("Error Occurd :" + ex.Message); }
}
آخرین ویرایش به وسیله Mahmoud.Afrad : پنج شنبه 07 فروردین 1393 در 20:08 عصر
با سلام خدمت دوستان من یه سوال اساسی دارم
تمام کدهارو من امتحان کردم و جواب نگرفتم(smo , ... ,.....)
من بانکمو با خود ویژوال استودیو ایجاد کردم و sqlserver نصب نیست. تمام برنامم درست کار میکنه storedprosedure ویو و تیبلو همه چی ولی این درست نمیشه میخواستم ببینم حتما باید sqlserver نصب بشه که بتونم بک آپ بگیرم؟
objCommand = new SqlCommand("alter database BimeDB set OFFLINE with ROLLBACK IMMEDIATE RESTORE DATABASE BimeDB FROM DISK = '" + open.FileName + "' WITH REPLACE", SC1.SqlConnection());
از این دستور استفاده کردم کل بانم بهم ریخت
آخرین ویرایش به وسیله sasan9 : چهارشنبه 20 فروردین 1393 در 18:45 عصر
مشکلم برای بک آپ حل شد تمامی کدهای بک اپ درست کار میکنن باید به این نکته توجه کرد که با اسم پایگاه داده باید مسیرشم داد حالا هرجایی که باشه
ولی بانکم از دسترس خارج شده نمیدونم چکار کنم کسی نمیتونه کمک کنه؟ یه بک آپ ازش دارم
آخرین ویرایش به وسیله sasan9 : چهارشنبه 20 فروردین 1393 در 18:47 عصر