PDA

View Full Version : Restoreکردن بانک SQLدر زمان اجرای برنامه.



sahmah65
سه شنبه 27 فروردین 1387, 07:51 صبح
با سلام خدمت سروران گرامی
چطوری میشه زمان اجرای برنامه DataBase رو Restore کرد؟

hassan razavi
سه شنبه 27 فروردین 1387, 08:22 صبح
اول باید هیچ Connection به Database مورد نظر Open نباشد ( برای همین معمولا از یک برنامه دیگر خارج از برنامه اصلی برای Restore کردن استفاده میشه)
برای نحوه Restore کردن هم (چه دستی و چه اتوماتیک) از StoreProcedure باید استفاده کنید که قبلا مطرح شده. در همین تالار یا تالاری SQL Server جستجو کنید پیدا میکنید.

sahmah65
سه شنبه 27 فروردین 1387, 09:09 صبح
اول باید هیچ Connection به Database مورد نظر Open نباشد
مشکل من هم همینه چطوری میشه از توخود برنامه اون ها رو بست؟ با فرض اینکه فقط همین برنامه داره از اون بانک استفده میکنه.

hassan razavi
سه شنبه 27 فروردین 1387, 09:16 صبح
تمام Connection های موجود در برنامتون رو Close کنید.

gdevnb
سه شنبه 27 فروردین 1387, 09:16 صبح
تو قسمت Sql یه کد دیدم که همین کار رو انجام می داد . من هم قبلاً این مشکل رو داشتم ولی با این کد حل شد. الان دقیقاً نمیدونم کجاست. ولی بگردید حتماً پیدا می کنید.
موفق باشید.

hdv212
سه شنبه 27 فروردین 1387, 09:29 صبح
برای عملیات Admin، مانند Restore کردن، شما بایستی ابتدا دیتابیس رو بر روی حالت Single User ببرید و بعد عملیات Restore رو انجام بدید، این کد یه نمونه از این مورد هست، توضیحات رو به صورت Comment نوشتم :

use this code to kill current connection users for administration purpose like restore database :

--Make Database to single user Mode
ALTER DATABASE YourDB
SET SINGLE_USER WITH ROLLBACK IMMEDIATE


--Restore Database
RESTORE DATABASE YourDB
FROM DISK = 'D:BackUpYourBackUpFile.bak'
WITH MOVE 'YourMDFLogicalName' TO 'D:DataYourMDFFile.mdf',
MOVE 'YourLDFLogicalName' TO 'D:DataYourLDFFile.mdf'



Back sql server dataBase to multiUser
--If there is no error in statement before database will be in multiuser mode.
--If error occurs please execute following command it will convert database in multi user.
ALTER DATABASE YourDB SET MULTI_USER
GO

از این کد هم میتونید برای DisConnect کردن کاربران یا SPID استفاده کنید :

DECLARE @spid varchar(10)

SELECT @spid = spid
FROM master.sys.sysprocesses
WHERE dbid IN (DB_ID('Database1'), DB_ID('Database2'))

WHILE @@ROWCOUNT <> 0
BEGIN
EXEC('KILL ' + @spid)

SELECT @spid = spid
FROM master.sys.sysprocesses
WHERE
dbid IN (DB_ID('Database1'), DB_ID('Database2')) AND
spid > @spid
END

sahmah65
سه شنبه 27 فروردین 1387, 16:44 عصر
با تشکر از همه ی دوستان راه حل بهینه رو از تو سایت پیدا کردم:

ALTER DATABASE DBName
SET OFFLINE WITH ROLLBACK IMMEDIATE