ورود

View Full Version : یک مشکل در restore



ehsan_zanganeh
شنبه 01 دی 1386, 21:58 عصر
با سلام
من از کد زیر برای restore کردن دیتابیس استفاده می کنم. جواب هم می ده. اما می خوام آدرس Filename بانک ساخته شده و نام منطقی فایل backup رو بصور اتوماتیک پیدا کنه و قرار بده . در واقع می خوام هر فایل backup ی رو که خواستم روی هر دیتابیسی restore کنم.



IF NOT EXISTS (SELECT * FROM master..sysdatabases WHERE name = 'test')
BEGIN
CREATE DATABASE test
ALTER DATABASE test SET SINGLE_USER with ROLLBACK IMMEDIATE;
RESTORE DATABASE test FROM DISK='c:\test_empty.bak' WITH REPLACE,
MOVE 'personeli_Data' TO 'D:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf',
MOVE 'personeli_Log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ndf';
ALTER DATABASE test SET MULTI_USER;
END


مرسی اگه کمکم کنید.

AminSobati
یک شنبه 02 دی 1386, 11:38 صبح
دوست عزیزم،
شما میتونین String مورد نظرتون رو در زمان اجرای برنامه بسازین و پارامترهای دلخواه رو جایگذاری و سپس به کمک exec اجرا کنین. خلاصه کلام اینکه باید سراغ Dynamic TSQL برین

ehsan_zanganeh
سه شنبه 04 دی 1386, 19:39 عصر
با کد زیر تونستم حلش کنم:



--و برگردان اطلاعات از یک فایل پشتیبان
--و درصورت وجود داشتن فقط بازیابی اطلاعات
-- =============================================
DECLARE @temp varchar(500)
DECLARE @data_filename varchar(500)
DECLARE @log_filename varchar(500)

SELECT @temp=filename FROM master..sysdatabases WHERE name = 'test';
set @data_filename=left(@temp,len(@temp)-4)+'_data.mdf'
set @log_filename=left(@temp,len(@temp)-4)+'_log.mdf'

IF NOT EXISTS (SELECT * FROM master..sysdatabases WHERE name = 'test')
BEGIN
CREATE DATABASE test
SELECT @temp=filename FROM master..sysdatabases WHERE name = 'test'
set @data_filename=left(@temp,len(@temp)-4)+'_data.mdf'
set @log_filename=left(@temp,len(@temp)-4)+'_log.mdf'

ALTER DATABASE test SET SINGLE_USER with ROLLBACK IMMEDIATE;
RESTORE DATABASE test FROM DISK='c:\jahiziyeh_empty.bak' WITH REPLACE,
MOVE 'jahiziyeh_data' TO @data_filename,
MOVE 'jahiziyeh_Log' TO @log_filename;
ALTER DATABASE test SET MULTI_USER;
END
ELSE
BEGIN
SELECT @temp=filename FROM master..sysdatabases WHERE name = 'test'
set @data_filename=left(@temp,len(@temp)-4)+'_data.mdf'
set @log_filename=left(@temp,len(@temp)-4)+'_log.mdf'

ALTER DATABASE test SET SINGLE_USER with ROLLBACK IMMEDIATE;
RESTORE DATABASE test FROM DISK='c:\jahiziyeh_empty.bak' WITH REPLACE,
MOVE 'jahiziyeh_data' TO @data_filename,
MOVE 'jahiziyeh_Log' TO @log_filename;
ALTER DATABASE test SET MULTI_USER;
END