PDA

View Full Version : backup و restore در SQLEXPRESS



bachebahal_1363
سه شنبه 27 فروردین 1387, 08:59 صبح
سام خدمت دوستان
من کلی در تاپیک های سایت جستجو کردم اما هیچ کدوم راه دقیق و کاملی رو از گرفتن backup و restore از دیتابیس attach شده به برنامه به من ارائه نکرد
برای مثال یا قبل از گرفتن پشتیبان باید بانک اطلاعاتی را جستجو کردن و سپس انتخاب کرد
من میخواهم فقط با زدن یک کلیک و پرسیدن مسیر ذخیره پشتیبان بانک بدون انتخاب دیتابیسهای موجود در شبکه و یا در کلاینت از بانک اطلاعاتی خودبرنامه یک پتیبان تهیه کند
اگر کسی اطلاعاتی داره کمک کنه

hdv212
سه شنبه 27 فروردین 1387, 09:33 صبح
من دقیقا متوجه منظور شما نشدم، ولی برای backup کردن میتونید از این دستور استفاده کنید :

BackUp Database :

BACKUP DATABASE [mydb] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\mydb.bak' WITH
NOFORMAT, NOINIT, NAME = N'mydb-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
برای Restore کردن هم میتونید از این دستور استفاده کنید :

Restore Database :

RESTORE DATABASE [mydb] FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\mydb.bak' WITH
FILE = 1, NOUNLOAD, STATS = 10

bachebahal_1363
سه شنبه 27 فروردین 1387, 10:49 صبح
من دقیقا متوجه منظور شما نشدم، ولی برای backup کردن میتونید از این دستور استفاده کنید :

BackUp Database :

BACKUP DATABASE [mydb] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\mydb.bak' WITH
NOFORMAT, NOINIT, NAME = N'mydb-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
برای Restore کردن هم میتونید از این دستور استفاده کنید :

Restore Database :

RESTORE DATABASE [mydb] FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\mydb.bak' WITH
FILE = 1, NOUNLOAD, STATS = 10

منظور من دقیقا این هست که در یک برنامه Windows application C # یک فایل SQl به صورت Attach در برنامه من وجود دارد . در واقع از SQLExpress استفاده می کنم و از SQL SERVER استفاده نمی کنم به این معنی که برای مثال در یک کامپیوتر کلاینت امکان داده چندین SERVER موجود باشه و یا در بعضی از برنامه ها مانند برنامه که در پایین گذاشتم ابتدا باید SERVER های موجود در کلاینت را جستجو کرد و سپس بانک اطلاعاتی مورد نظر را انتخاب و از آن پشتیبان تهیه کرد . اما نیاز من این نیست که جستجویی انجام بشه و فقط می خواهم از بانک اطلاعاتی برنامه خودم یک پشتیبان تهیه کنم.
در مورد راه های ارائه شده از طرف شما ؛ برنامه هایی که به صورت Database Attachment هستند , امکان استفاده از این دستور را ندارد چون دستور به صورت ADO نمی توان استفاده کرد و باید به صورت T-SQL در خود SQL SERVER از آن استفاده کرد . در برنامه من نیازی به نصب SQL SERVER در سیستم کلاینت نمی باشد و فقط با نصب نرم افزار خود برنامه یک دیتابیس به صورت درون برنامه ای یا Attachment می باشد که برنامه از آن استفاده می کند.

hdv212
سه شنبه 27 فروردین 1387, 11:47 صبح
منظور من دقیقا این هست که در یک برنامه Windows application C # یک فایل SQl به صورت Attach در برنامه من وجود دارد . در واقع از SQLExpress استفاده می کنم و از SQL SERVER استفاده نمی کنم به این معنی که برای مثال در یک کامپیوتر کلاینت امکان داده چندین SERVER موجود باشه و یا در بعضی از برنامه ها مانند برنامه که در پایین گذاشتم ابتدا باید SERVER های موجود در کلاینت را جستجو کرد و سپس بانک اطلاعاتی مورد نظر را انتخاب و از آن پشتیبان تهیه کرد . اما نیاز من این نیست که جستجویی انجام بشه و فقط می خواهم از بانک اطلاعاتی برنامه خودم یک پشتیبان تهیه کنم.
شما وقتی از ConnectionString مخصوص خودتون استفاده میکنید، فقط به دیتابیس خودتون دسترسی دارید(البته فقط برای ویرایش Express این امر امکان پذیر است)، نیازی به جستجوی دیتابیس های دیگه ندارید.


در مورد راه های ارائه شده از طرف شما ؛ برنامه هایی که به صورت Database Attachment هستند , امکان استفاده از این دستور را ندارد چون دستور به صورت ADO نمی توان استفاده کرد و باید به صورت T-SQL در خود SQL SERVER از آن استفاده کرد . در برنامه من نیازی به نصب SQL SERVER در سیستم کلاینت نمی باشد و فقط با نصب نرم افزار خود برنامه یک دیتابیس به صورت درون برنامه ای یا Attachment می باشد که برنامه از آن استفاده می کند.
شما نه تنها میتونید این دستور رو به صورت Command توسط Ado اجرا کنید، بلکه کلیه ی دستورات T-Sql رو هم میتونید توسط Ado اجرا کنید.

gdevnb
سه شنبه 27 فروردین 1387, 11:54 صبح
منظور من دقیقا این هست که در یک برنامه Windows application C # یک فایل SQl به صورت Attach در برنامه من وجود دارد . در واقع از SQLExpress استفاده می کنم و از SQL SERVER استفاده نمی کنم به این معنی که برای مثال در یک کامپیوتر کلاینت امکان داده چندین SERVER موجود باشه و یا در بعضی از برنامه ها مانند برنامه که در پایین گذاشتم ابتدا باید SERVER های موجود در کلاینت را جستجو کرد و سپس بانک اطلاعاتی مورد نظر را انتخاب و از آن پشتیبان تهیه کرد . اما نیاز من این نیست که جستجویی انجام بشه و فقط می خواهم از بانک اطلاعاتی برنامه خودم یک پشتیبان تهیه کنم.
در مورد راه های ارائه شده از طرف شما ؛ برنامه هایی که به صورت Database Attachment هستند , امکان استفاده از این دستور را ندارد چون دستور به صورت ADO نمی توان استفاده کرد و باید به صورت T-SQL در خود SQL SERVER از آن استفاده کرد . در برنامه من نیازی به نصب SQL SERVER در سیستم کلاینت نمی باشد و فقط با نصب نرم افزار خود برنامه یک دیتابیس به صورت درون برنامه ای یا Attachment می باشد که برنامه از آن استفاده می کند.
Sql Express یکی از ورژنهای Sql Server هستش. وحتی اگه شما از Sql Express هم استفاده کنید در سیستم مقصد نیازه Sql Server Engine نصب بشه.
دستور فوق در برنامه شما هم میتونه جواب بده(Using Ado.net)

bachebahal_1363
سه شنبه 27 فروردین 1387, 16:46 عصر
من برنامه خودم رو بر روی کامپیوتر های مختلف تست کردم و نیازی به نصب SQL Engin نیست
برای مثال نرم افزار حسابداری HOLO که بر روی یک سیستم نصب می شه و توسط دلفی نوشته شده بدون اینکه لازم باشه در کامپیوتر شما SQL با هر ورژنی نصب باشه دیتابیسی داره که نسبت به اون استفاده می کنه .
اگر شما برنامه ای به صورت آموزشی دارین که من بتونم از اون ایده بگیرم ممنون می شم تو سایت بزارین

bachebahal_1363
سه شنبه 27 فروردین 1387, 16:49 عصر
شما وقتی از ConnectionString مخصوص خودتون استفاده میکنید، فقط به دیتابیس خودتون دسترسی دارید(البته فقط برای ویرایش Express این امر امکان پذیر است)، نیازی به جستجوی دیتابیس های دیگه ندارید.


شما نه تنها میتونید این دستور رو به صورت Command توسط Ado اجرا کنید، بلکه کلیه ی دستورات T-Sql رو هم میتونید توسط Ado اجرا کنید.

درسته امکان استفاده از ADO به صورت SQLCOmmand هست اما شما در هر صورت برای این کار باید Connection خودتون رو Open کنید تا اتصال ADO با دیتابیس برقرار بشه و زمانی که Connection باز باشه دستور BACKUP و یا RERSTOR کار نمی کنه چون در این حالت باید CONNECTION رو Close کنید .

hdv212
سه شنبه 27 فروردین 1387, 17:32 عصر
درسته امکان استفاده از ADO به صورت SQLCOmmand هست اما شما در هر صورت برای این کار باید Connection خودتون رو Open کنید تا اتصال ADO با دیتابیس برقرار بشه و زمانی که Connection باز باشه دستور BACKUP و یا RERSTOR کار نمی کنه چون در این حالت باید CONNECTION رو Close کنید .
اوووه! حالا فهمیدم مشکل شما چیه، درسته در صورتی که Connection شما برای دیتابیس مورد نظر باز باشه شما نمیتونید این عملیات رو انجام بدید، اما این کار راه حل داره، شما قبل از دستورات T-Sql این خط کد رو اضافه کنید :

use master
go
در این حالت، در Connection جاری، دیتابیس شما از حالت استفاده خارج میشه و به دیتابیس master سوییچ میشه، حالا میتونید کارتون رو انجام بدید.

gdevnb
سه شنبه 27 فروردین 1387, 18:54 عصر
من برنامه خودم رو بر روی کامپیوتر های مختلف تست کردم و نیازی به نصب SQL Engin نیست
برای مثال نرم افزار حسابداری HOLO که بر روی یک سیستم نصب می شه و توسط دلفی نوشته شده بدون اینکه لازم باشه در کامپیوتر شما SQL با هر ورژنی نصب باشه دیتابیسی داره که نسبت به اون استفاده می کنه .
اگر شما برنامه ای به صورت آموزشی دارین که من بتونم از اون ایده بگیرم ممنون می شم تو سایت بزارین
این چیزی که شما میگید هم عجیبه و هم جالب. ولی احتمالاً یه ربطی به SqlExpress داره.
توجه کنید که حداکثر حجم دیتابیس در این ورژن از Sql محدوده(2G)
من این مطلب رو تو یه سایت خوندم که داشت RDBMS ها با هم مقایسه میکرد. دوستان اگه نظری در استفاده از این روشی که دوستمون گفتن دارن اینجا در موردش بحث کنیم.
بعد یه سوال
برای چی از ADO استفاده میکنی؟

bachebahal_1363
سه شنبه 27 فروردین 1387, 20:02 عصر
این چیزی که شما میگید هم عجیبه و هم جالب. ولی احتمالاً یه ربطی به SqlExpress داره.
توجه کنید که حداکثر حجم دیتابیس در این ورژن از Sql محدوده(2G)
من این مطلب رو تو یه سایت خوندم که داشت RDBMS ها با هم مقایسه میکرد. دوستان اگه نظری در استفاده از این روشی که دوستمون گفتن دارن اینجا در موردش بحث کنیم.
بعد یه سوال
برای چی از ADO استفاده میکنی؟

ازنظراستفاده از ADO به نظر من بهترین راه برقراری ارتباط با دیتابیس ADO هست و همچنین سریع ترینش . درمورد حجم استفاده ازدیتابیس هم در ورژن 2008 به 4Gb ارتقا پیدا کرده و امکان ذخیره اطلاعات تا 4Gb رو داره . من حتی با همین ورژن ذخیره فایل های تصویری رو هم امتحان کردم و به هیچ مشکلی برخورد نکردم حتی مشکل لود و یا ذخیره اطلاعات و سرعتی بسیار عالی برای این کار رو داره . یک نمونه از استفاده از SQLExpress رو به صورت فایل ضمیمه قرار دادم که استفاده کنید .
http://barnamenevis.org/forum/attachment.php?attachmentid=10862&d=1189415836

Mahdi.Kiani
سه شنبه 27 فروردین 1387, 20:19 عصر
برای مثال نرم افزار حسابداری HOLO که بر روی یک سیستم نصب می شه و توسط دلفی نوشته شده بدون اینکه لازم باشه در کامپیوتر شما SQL با هر ورژنی نصب باشه دیتابیسی داره که نسبت به اون استفاده می کنه .


MSDE را نصب می کنه ...


پ و :
اگه یه روز خسته از هر کاری شده بودین و خواستین کمی استراحت کنین و بخندین زنگ بزنین پشتیبانی هولو ... مطمئن باشین که دقایقی به یاد ماندنی را براتون فراهم می کنه و روحتون را برای لحاظی شاد می کنه :لبخند:

gdevnb
سه شنبه 27 فروردین 1387, 21:03 عصر
من برنامه خودم رو بر روی کامپیوتر های مختلف تست کردم و نیازی به نصب SQL Engin نیست

لطف کن و پروژتو بزار ما هم تست کنیم
با تشکر.

bachebahal_1363
چهارشنبه 28 فروردین 1387, 02:08 صبح
لطف کن و پروژتو بزار ما هم تست کنیم
با تشکر.

دو تا پست قبل یک نمونه از برنامه ای که با SQLEXPRESS کار می کنه رو گذاشتم . شما هم می تونین امتحانش کنید. هم عکس وارد می کنید هم text

gdevnb
چهارشنبه 28 فروردین 1387, 03:17 صبح
تو قسمت سی شارپ هر لحظه 10 تا پست جابجا میشه اگه لینکشو بزاری ممنون میشم.

bachebahal_1363
چهارشنبه 28 فروردین 1387, 17:47 عصر
تو قسمت سی شارپ هر لحظه 10 تا پست جابجا میشه اگه لینکشو بزاری ممنون میشم.

http://barnamenevis.org/forum/attach...2&d=1189415836

gdevnb
چهارشنبه 28 فروردین 1387, 18:04 عصر
http://barnamenevis.org/forum/attach...2&d=1189415836
bachebahal_1363 عزیز روی لینکی که گذاشتی کلیک کن!
منتظرم.

xxxxxxxxxx
چهارشنبه 28 فروردین 1387, 18:22 عصر
تایپیم 10 لینکش سالم بود و دانلود شد.

Mahdi-563
چهارشنبه 28 فروردین 1387, 19:46 عصر
در رابطه با نرم افزار هلو که دوستان بحث کردن چیز عجیبی نیست و هلو در نسخه جدیدش فقط بعضی از جداولش رو برای امنیت بیشتر اومده تبدیل به اس کیو ال کرده و مابقی جداول پادکس می‌بباشد که می‌تونم به جرعت بگم این موتور که دیگه منسوخ شده و اینتربیس جاشو گرفته تقریبا با کپی یه سری dll روی سیستم طرف به راحتی کار میکنه ولی باز تاکید می کنم که این موتور ارزش استفاده نداره

bachebahal_1363
پنج شنبه 29 فروردین 1387, 21:54 عصر
bachebahal_1363 عزیز روی لینکی که گذاشتی کلیک کن!
منتظرم.

نمی دونم چرا اینجوری می شه اما در تاپیک 10 که فرستادم کار می کنه اما دوباره فایل Zip شدش رو براتون می زارم

bachebahal_1363
پنج شنبه 29 فروردین 1387, 21:56 عصر
در رابطه با نرم افزار هلو که دوستان بحث کردن چیز عجیبی نیست و هلو در نسخه جدیدش فقط بعضی از جداولش رو برای امنیت بیشتر اومده تبدیل به اس کیو ال کرده و مابقی جداول پادکس می‌بباشد که می‌تونم به جرعت بگم این موتور که دیگه منسوخ شده و اینتربیس جاشو گرفته تقریبا با کپی یه سری dll روی سیستم طرف به راحتی کار میکنه ولی باز تاکید می کنم که این موتور ارزش استفاده نداره

من با پادکس کار نکردم اما SQLExpress تنها خوبی که داره لازم به هیچ گونه اضافه کردن dll به سیستم کلاینت نمی باشد و تنها با نصب DotNetFramwork 2.0 or 3.0 or 3.5 می تونید به راحتی از اون استفاده کنین

gdevnb
پنج شنبه 29 فروردین 1387, 23:17 عصر
من با پادکس کار نکردم اما SQLExpress تنها خوبی که داره لازم به هیچ گونه اضافه کردن dll به سیستم کلاینت نمی باشد و تنها با نصب DotNetFramwork 2.0 or 3.0 or 3.5 می تونید به راحتی از اون استفاده کنین
دوستان عزیز در استفاده از SQLExpress یا MSDE مراقب باشید.این دوسری محدودیت حجم بانک اطلاعاتی دارند تا 1 یا 2 G و محدودیت های دیگه.
البته فکر کنم با split کردن فایلهای بانک اطلاعاتی SqlServer به فایلهای ndf بتونید از این محدودیت خلاص بشید.

bachebahal_1363
جمعه 30 فروردین 1387, 18:19 عصر
مثل اینکه اصلا از سوالی که من مطرح کردم داریم خارج می شیم
کسی نمونه برنامه ای ، کدی ، چیزی نداره یه کمکی به ما بکنه؟

gdevnb
شنبه 31 فروردین 1387, 01:39 صبح
مثل اینکه اصلا از سوالی که من مطرح کردم داریم خارج می شیم
کسی نمونه برنامه ای ، کدی ، چیزی نداره یه کمکی به ما بکنه؟
دوست عزیز هیچ کار خاصی لازم نیست انجام بدید .
فقط پروژه ای که از این بانک دراه استفاده میکنه رو ببند.
بعد فایلتو کپی کن تو مکانی که میخوای پشتیبان اونجا باشه.

linux
شنبه 31 فروردین 1387, 07:56 صبح
دوستان عزیز در استفاده از SQLExpress یا MSDE مراقب باشید.این دوسری محدودیت حجم بانک اطلاعاتی دارند تا 1 یا 2 G و محدودیت های دیگه.
البته فکر کنم با split کردن فایلهای بانک اطلاعاتی SqlServer به فایلهای ndf بتونید از این محدودیت خلاص بشید.

محدودیت 4 گیگابایتی دارند، شما نگران این مورد نشو ، هیچ شرکتی که کار حسابداری می کنه در طول 10 سال مالی هم به این محدودیت نمی رسه.

linux
شنبه 31 فروردین 1387, 07:57 صبح
مثل اینکه اصلا از سوالی که من مطرح کردم داریم خارج می شیم
کسی نمونه برنامه ای ، کدی ، چیزی نداره یه کمکی به ما بکنه؟
ببین راحترین کار برای شما استفاده از smo هست یک جستجو تو گوگل بکنید،کلی مطلب پیدا می کنید.

bachebahal_1363
شنبه 31 فروردین 1387, 08:18 صبح
ببین راحترین کار برای شما استفاده از smo هست یک جستجو تو گوگل بکنید،کلی مطلب پیدا می کنید.

smo در مورد Sql Server قابل اجراست و کلیه کدهاش رو امتحان کردم اما در مورد دیتابیس Attach شده کار نمی کنه

linux
شنبه 31 فروردین 1387, 09:55 صبح
smo در مورد Sql Server قابل اجراست و کلیه کدهاش رو امتحان کردم اما در مورد دیتابیس Attach شده کار نمی کنه
می توانید استفاده کنید، http://blogs.msdn.com/sqlexpress/archive/2007/03/20/backup-and-restore-with-user-instances.aspx این لینک را ببنید
این هم کدش


using System;
using System.Data.SqlClient;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;


namespace CreateRANU
{
classProgram
{
staticvoid Main(string[] args)
{
BackupDatabase();
RestoreBackup();
}
publicstaticvoid BackupDatabase()
{
string sConnect = Properties.Settings.Default.BackupConnectionString ;
string dbName;
using (SqlConnection cnn = newSqlConnection(sConnect))
{
cnn.Open();
dbName = cnn.Database.ToString();
ServerConnection sc = new ServerConnection(cnn);
Server sv = new Server(sc);
// Check that I'm connected to the user instance
Console.WriteLine(sv.InstanceName.ToString());
// Create backup device item for the backup
BackupDeviceItem bdi = new BackupDeviceItem(@"C:\AppDataBackup\SampleBackup.bak", DeviceType.File);
// Create the backup informaton
Backup bk = new Backup();
bk.Devices.Add(bdi);
bk.Action = BackupActionType.Database;
bk.BackupSetDescription = "SQL Express is a great product!";
bk.BackupSetName = "SampleBackupSet";
bk.Database = dbName;
bk.ExpirationDate = newDateTime(2007, 5, 1);
bk.LogTruncation = BackupTruncateLogType.Truncate;
// Run the backup
bk.SqlBackup(sv);
Console.WriteLine("Your backup is complete.");
}
}
publicstaticvoid RestoreBackup()
{
string sConnect = Properties.Settings.Default.BackupConnectionString ;
string dbName;
using (SqlConnection cnn = newSqlConnection(sConnect))
{
cnn.Open();
dbName = cnn.Database.ToString();
cnn.ChangeDatabase("master");
ServerConnection sc = new ServerConnection(cnn);
Server sv = new Server(sc);
// Check that I'm connected to the user instance
Console.WriteLine(sv.InstanceName.ToString());
// Create backup device item for the backup
BackupDeviceItem bdi = new BackupDeviceItem(@"C:\AppDataBackup\SampleBackup.bak", DeviceType.File);
// Create the restore object
Restore resDB = new Restore();
resDB.Devices.Add(bdi);
resDB.NoRecovery = false;
resDB.ReplaceDatabase = true;
resDB.Database = dbName;
// Restore the database
resDB.SqlRestore(sv);
Console.WriteLine("Your database has been restored.");
}
}
publicstaticvoid CreateDatabase()
{
using (SqlConnection cn = newSqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=True;User Instance=True;Connection Timeout=60"))
{
cn.Open();
SqlCommand cmd = newSqlCommand("CREATE DATABASE forumTest1", cn);
cmd.ExecuteNonQuery();
SqlConnection cn2 = newSqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=True;AttachDbFilename=|DataDirectory|\for umTest1.mdf;User Instance=True;Connection Timeout=60");
cn2.Open();
}
}
}
}

gdevnb
شنبه 31 فروردین 1387, 11:38 صبح
smo در مورد Sql Server قابل اجراست و کلیه کدهاش رو امتحان کردم اما در مورد دیتابیس Attach شده کار نمی کنه
bachebahal_1363 عزیز من پروژه ای رو که شما گذاشته بودید رو دانلود کردم و در مورد بک آپ زمانی که برنامه ات در حال اجرا نیست خیلی راحت با کپی پیست کارت راه میفته.
محدودیت 4 گیگابایتی دارند، شما نگران این مورد نشو ، هیچ شرکتی که کار حسابداری می کنه در طول 10 سال مالی هم به این محدودیت نمی رسه.

linux جان ممنون از توجهت , ولی کلی گفتم منظورم کار حسابداری نبود. هر چند که بعضی از پروژه های حسابداری زودتر از اینا به این حجم می رسن.
در مورد فایل ndf آیا نمیشه با Split کردن دیتابیس این محدودیت پیش نیاد؟

bachebahal_1363
یک شنبه 01 اردیبهشت 1387, 16:47 عصر
می توانید استفاده کنید، http://blogs.msdn.com/sqlexpress/archive/2007/03/20/backup-and-restore-with-user-instances.aspx این لینک را ببنید
این هم کدش


using System;
using System.Data.SqlClient;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;


namespace CreateRANU
{
classProgram
{
staticvoid Main(string[] args)
{
BackupDatabase();
RestoreBackup();
}
publicstaticvoid BackupDatabase()
{
string sConnect = Properties.Settings.Default.BackupConnectionString ;
string dbName;
using (SqlConnection cnn = newSqlConnection(sConnect))
{
cnn.Open();
dbName = cnn.Database.ToString();
ServerConnection sc = new ServerConnection(cnn);
Server sv = new Server(sc);
// Check that I'm connected to the user instance
Console.WriteLine(sv.InstanceName.ToString());
// Create backup device item for the backup
BackupDeviceItem bdi = new BackupDeviceItem(@"C:\AppDataBackup\SampleBackup.bak", DeviceType.File);
// Create the backup informaton
Backup bk = new Backup();
bk.Devices.Add(bdi);
bk.Action = BackupActionType.Database;
bk.BackupSetDescription = "SQL Express is a great product!";
bk.BackupSetName = "SampleBackupSet";
bk.Database = dbName;
bk.ExpirationDate = newDateTime(2007, 5, 1);
bk.LogTruncation = BackupTruncateLogType.Truncate;
// Run the backup
bk.SqlBackup(sv);
Console.WriteLine("Your backup is complete.");
}
}
publicstaticvoid RestoreBackup()
{
string sConnect = Properties.Settings.Default.BackupConnectionString ;
string dbName;
using (SqlConnection cnn = newSqlConnection(sConnect))
{
cnn.Open();
dbName = cnn.Database.ToString();
cnn.ChangeDatabase("master");
ServerConnection sc = new ServerConnection(cnn);
Server sv = new Server(sc);
// Check that I'm connected to the user instance
Console.WriteLine(sv.InstanceName.ToString());
// Create backup device item for the backup
BackupDeviceItem bdi = new BackupDeviceItem(@"C:\AppDataBackup\SampleBackup.bak", DeviceType.File);
// Create the restore object
Restore resDB = new Restore();
resDB.Devices.Add(bdi);
resDB.NoRecovery = false;
resDB.ReplaceDatabase = true;
resDB.Database = dbName;
// Restore the database
resDB.SqlRestore(sv);
Console.WriteLine("Your database has been restored.");
}
}
publicstaticvoid CreateDatabase()
{
using (SqlConnection cn = newSqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=True;User Instance=True;Connection Timeout=60"))
{
cn.Open();
SqlCommand cmd = newSqlCommand("CREATE DATABASE forumTest1", cn);
cmd.ExecuteNonQuery();
SqlConnection cn2 = newSqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=True;AttachDbFilename=|DataDirectory|\for umTest1.mdf;User Instance=True;Connection Timeout=60");
cn2.Open();
}
}
}
}


linux جان یک مشکلی من در نوشتن کدهای بالا دارم . اون هم در قسمت
Microsoft.SqlServer.Management.Common;
هست . من زمانی که reference ، smo رو به برنامه اضافه می کنم فقط دو قسمت زیر را می توان using کرد و قسمت common موجود نمی باشد .
using
Microsoft.SqlServer.Management.Nmo;
using Microsoft.SqlServer.Management.Smo;
همچنین در قسمت زیر برنامه به من ایراد می گیره که ServerConnection وجود ندارد لطفا reference اون رو به برنامه اضافه کنید .
ServerConnection sc = new ServerConnection(cnn);

bachebahal_1363
دوشنبه 02 اردیبهشت 1387, 22:54 عصر
آقای linux درباره مسئله ای که من مطرح کردم نظری ندارین؟

bachebahal_1363
سه شنبه 03 اردیبهشت 1387, 15:34 عصر
bachebahal_1363 عزیز من پروژه ای رو که شما گذاشته بودید رو دانلود کردم و در مورد بک آپ زمانی که برنامه ات در حال اجرا نیست خیلی راحت با کپی پیست کارت راه میفته.

linux جان ممنون از توجهت , ولی کلی گفتم منظورم کار حسابداری نبود. هر چند که بعضی از پروژه های حسابداری زودتر از اینا به این حجم می رسن.
در مورد فایل ndf آیا نمیشه با Split کردن دیتابیس این محدودیت پیش نیاد؟

gdevnb عزیز حرف شما کاملا درسته اما حساب کنید بنده یک برنامه نوشتم به یک اداره دادم بعد به یوزر می گم هر موقع خواستی backup بگیری برو فلان فایل رو از فلان جا پیداش کن بعد کپیش کن هر جا می خوای بعد دوباره اگه خواستی ازش استفاده کنی دوباره برش گردون همون جا که بود .
به نظر شما این واقعا وجهه یک برنامه نویسو پائین نمیاره ؟

bachebahal_1363
سه شنبه 03 اردیبهشت 1387, 15:36 عصر
می توانید استفاده کنید، http://blogs.msdn.com/sqlexpress/archive/2007/03/20/backup-and-restore-with-user-instances.aspx این لینک را ببنید
این هم کدش


using System;
using System.Data.SqlClient;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;


namespace CreateRANU
{
classProgram
{
staticvoid Main(string[] args)
{
BackupDatabase();
RestoreBackup();
}
publicstaticvoid BackupDatabase()
{
string sConnect = Properties.Settings.Default.BackupConnectionString ;
string dbName;
using (SqlConnection cnn = newSqlConnection(sConnect))
{
cnn.Open();
dbName = cnn.Database.ToString();
ServerConnection sc = new ServerConnection(cnn);
Server sv = new Server(sc);
// Check that I'm connected to the user instance
Console.WriteLine(sv.InstanceName.ToString());
// Create backup device item for the backup
BackupDeviceItem bdi = new BackupDeviceItem(@"C:\AppDataBackup\SampleBackup.bak", DeviceType.File);
// Create the backup informaton
Backup bk = new Backup();
bk.Devices.Add(bdi);
bk.Action = BackupActionType.Database;
bk.BackupSetDescription = "SQL Express is a great product!";
bk.BackupSetName = "SampleBackupSet";
bk.Database = dbName;
bk.ExpirationDate = newDateTime(2007, 5, 1);
bk.LogTruncation = BackupTruncateLogType.Truncate;
// Run the backup
bk.SqlBackup(sv);
Console.WriteLine("Your backup is complete.");
}
}
publicstaticvoid RestoreBackup()
{
string sConnect = Properties.Settings.Default.BackupConnectionString ;
string dbName;
using (SqlConnection cnn = newSqlConnection(sConnect))
{
cnn.Open();
dbName = cnn.Database.ToString();
cnn.ChangeDatabase("master");
ServerConnection sc = new ServerConnection(cnn);
Server sv = new Server(sc);
// Check that I'm connected to the user instance
Console.WriteLine(sv.InstanceName.ToString());
// Create backup device item for the backup
BackupDeviceItem bdi = new BackupDeviceItem(@"C:\AppDataBackup\SampleBackup.bak", DeviceType.File);
// Create the restore object
Restore resDB = new Restore();
resDB.Devices.Add(bdi);
resDB.NoRecovery = false;
resDB.ReplaceDatabase = true;
resDB.Database = dbName;
// Restore the database
resDB.SqlRestore(sv);
Console.WriteLine("Your database has been restored.");
}
}
publicstaticvoid CreateDatabase()
{
using (SqlConnection cn = newSqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=True;User Instance=True;Connection Timeout=60"))
{
cn.Open();
SqlCommand cmd = newSqlCommand("CREATE DATABASE forumTest1", cn);
cmd.ExecuteNonQuery();
SqlConnection cn2 = newSqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=True;AttachDbFilename=|DataDirectory|\for umTest1.mdf;User Instance=True;Connection Timeout=60");
cn2.Open();
}
}
}
}


آقای linux من واقعا به این موضوع احتیاج دارم که تو برنامم یک backup داشته باشم و واقعا گیر کردم . اگر امکان داره بهم کمک کنید.

smt_414
سه شنبه 03 اردیبهشت 1387, 18:20 عصر
سلام

من واقعا به این موضوع احتیاج دارم که تو برنامم یک backup داشته باشم و واقعا گیر کردم . اگر امکان داره بهم کمک کنید.

اگه درست فهمیده باشم فقط بک آپ گیری و ریستور احتیاج دارید
یه نگاه به این بندازید


//دستورات بک آپ
void func_back_up()
{
SqlConnection objConnection = new SqlConnection(" ");
SqlCommand objCommand_desire = new SqlCommand();
objCommand_desire.CommandType = CommandType.Text;
objCommand_desire.Connection = objConnection;
objCommand_desire.CommandText = "BACKUP DATABASE x TO DISK ='" + آدرس + "'";
objConnection.Open();
objCommand_desire.ExecuteNonQuery();
objConnection.Close();
}

//دستورات قطع ارتباط پایگاه
void func_disconnect()
{
SqlConnection objConnection = new SqlConnection(" ");
SqlCommand objCommand_desire = new SqlCommand();
objCommand_desire.CommandType = CommandType.Text;
objCommand_desire.Connection = objConnection;
objCommand_desire.CommandText = "ALTER DATABASE x SET SINGLE_USER WITH ROLLBACK IMMEDIATE";
objConnection.Open();
objCommand_desire.ExecuteNonQuery();
objConnection.Close();
}

//دستورات ری استور
void func_restore()
{
SqlConnection objConnection = new SqlConnection(" ");
SqlCommand objCommand_desire = new SqlCommand();
objCommand_desire.CommandType = CommandType.Text;
objCommand_desire.Connection = objConnection;
objCommand_desire.CommandText = "use master RESTORE DATABASE x FROM DISK ='" + آدرس + "'";
objConnection.Open();
objCommand_desire.ExecuteNonQuery();
objConnection.Close();
}


امیدوارم به کارتون بیاد

bachebahal_1363
سه شنبه 03 اردیبهشت 1387, 19:27 عصر
سلام


اگه درست فهمیده باشم فقط بک آپ گیری و ریستور احتیاج دارید
یه نگاه به این بندازید


//دستورات بک آپ
void func_back_up()
{
SqlConnection objConnection = new SqlConnection(" ");
SqlCommand objCommand_desire = new SqlCommand();
objCommand_desire.CommandType = CommandType.Text;
objCommand_desire.Connection = objConnection;
objCommand_desire.CommandText = "BACKUP DATABASE x TO DISK ='" + آدرس + "'";
objConnection.Open();
objCommand_desire.ExecuteNonQuery();
objConnection.Close();
}

//دستورات قطع ارتباط پایگاه
void func_disconnect()
{
SqlConnection objConnection = new SqlConnection(" ");
SqlCommand objCommand_desire = new SqlCommand();
objCommand_desire.CommandType = CommandType.Text;
objCommand_desire.Connection = objConnection;
objCommand_desire.CommandText = "ALTER DATABASE x SET SINGLE_USER WITH ROLLBACK IMMEDIATE";
objConnection.Open();
objCommand_desire.ExecuteNonQuery();
objConnection.Close();
}

//دستورات ری استور
void func_restore()
{
SqlConnection objConnection = new SqlConnection(" ");
SqlCommand objCommand_desire = new SqlCommand();
objCommand_desire.CommandType = CommandType.Text;
objCommand_desire.Connection = objConnection;
objCommand_desire.CommandText = "use master RESTORE DATABASE x FROM DISK ='" + آدرس + "'";
objConnection.Open();
objCommand_desire.ExecuteNonQuery();
objConnection.Close();
}


امیدوارم به کارتون بیاد

ممنون از پاسختون اما زمانی که این کد رو اجرا می کنم ایراد زیر رو به من می گیره :

User does not have permission to alter database 'database1', or the database does not exist.
ALTER DATABASE statement failed.

smt_414
سه شنبه 03 اردیبهشت 1387, 20:56 عصر
سلام


objCommand_desire.CommandText = "ALTER DATABASE x SET SINGLE_USER WITH ROLLBACK IMMEDIATE";

User does not have permission to alter database 'database1', or the database does not exist.
ALTER DATABASE statement failed

من به این مورد بر نخورده بودم
احتمالا این موضوع رو توی بخش SQL مطرح کنید
دوستان سریعتر جواب می دن

موفق باشید

linux
سه شنبه 03 اردیبهشت 1387, 22:49 عصر
آقای linux درباره مسئله ای که من مطرح کردم نظری ندارین؟


The Microsoft.SqlServer.Management.Common namespace resides in the Microsoft.SqlServer.ConnectionInfo.dll assembly file.

gdevnb
چهارشنبه 04 اردیبهشت 1387, 00:25 صبح
gdevnb عزیز حرف شما کاملا درسته اما حساب کنید بنده یک برنامه نوشتم به یک اداره دادم بعد به یوزر می گم هر موقع خواستی backup بگیری برو فلان فایل رو از فلان جا پیداش کن بعد کپیش کن هر جا می خوای بعد دوباره اگه خواستی ازش استفاده کنی دوباره برش گردون همون جا که بود .
به نظر شما این واقعا وجهه یک برنامه نویسو پائین نمیاره ؟
دوست عزیز من منظورم این نبود. شاید بد توزیح دادم.
شما با کد نویسی اول کانکشن رو close میکنی بعد با دستور کپی فایلهای مورد نظرتون رو هر جا که خواستید ذخیره می کنید.(پشتیبان)
برای بازگردانی پشتیبان همین راه رو عکس می کنید(بازگردانی)

File.Copy(source,dis,true)

majidf4252
پنج شنبه 09 خرداد 1387, 11:18 صبح
من از این دستورات استفاده می کنم برای بک آپ گیری با اس کیو ال اکسپرس

برای بک آپ گیری:
ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\dbName.M DF;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection con = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand();
try
{
con.Open();
string query = "BACKUP DATABASE [C:\\dbName.MDF] TO DISK = N'E:\\backup_db.BAK'";
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
}
catch
{
MessageBox.Show("اشکال در ارتباط با بانک اطلاعاتی");
}[/QUOTE]

برای بازیابی:

ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\dbName.M DF;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection con = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand();
try
{
con.Open();
string query = "USE master; RESTORE DATABASE [C:\\dbName.MDF] FROM DISK = N'E:\\backup_db.BAK'";
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
}
catch
{
MessageBox.Show("اشکال در ارتباط با بانک اطلاعاتی");
}

بک آپ گیری میکنه ولی وقتی میخوام برگردونم اخطار:
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.

لطفا راهنمایی کنید

kianoosh59
شنبه 05 اردیبهشت 1388, 03:58 صبح
damet jilizzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

mehdi_RM
جمعه 05 تیر 1388, 14:33 عصر
بک آپ گیری میکنه ولی وقتی میخوام برگردونم اخطار:
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.

لطفا راهنمایی کنید

منم تو Rstore همین مشکل رو دارم

kh1387
سه شنبه 17 اردیبهشت 1392, 10:00 صبح
با سلام
من هر وقت کد زیر رو اجرا می کنم


USE [master]; RESTORE DATABASE [D:\C#\PhoneBooklet\bin\Debug\phone.mdf]
FROM DISK = N'D:\C#\PhoneBooklet\bin\bkp1392-2-17.bak' WITH FILE = 1, NOUNLOAD, STATS = 10

پیام زیر رو بهم میده!!!


بانک شما در حال استفاده می باشد!!

کسی می دونه مشکل از کجاست؟

kh1387
سه شنبه 24 اردیبهشت 1392, 10:03 صبح
کسی از دوستان راهنمایی نمی کنند؟