ورود

View Full Version : سوال: مشکل در restore کردن. (در کجای پروسیجر از use master استفاده کنم؟) (sql2000)



FVVSBN
چهارشنبه 20 مرداد 1389, 01:13 صبح
سلام.
یه پروسیجر ساختم که با موفقیم بکاپ میگیره. کدش اینه:

CREATE PROCEDURE backup1 (@path varchar(255) ) As
BACKUP DATABASE fvstell
to disk=@path
with init
GO


ولی در بازیابی error میده که دیتابیس در حال استفاده هست.

اینم کد restore


CREATE PROCEDURE restore1 (@path varchar(250)) AS
restore database fvstell from disk=N'@path' with file=1,nounload,stats=10,REPLACE
GO


حداقل 50 سایت و تاپیک خوندم. میگفتن راهش استفاده از use master هست

اما هر جای این کد use master یا use fvstell به کار بردم بازم نشد.

sql2000 هست. personal edition.

chaghoyekond
پنج شنبه 21 مرداد 1389, 10:49 صبح
این کد را در کوئری بنویس خودم امتحان کردم جواب می ده البته اسم دیتابیس خودم هست تو خودت عوض کن نیازی به use master هم نیست
ALTER DATABASE honar
SET OffLINE
GO
drop database honarestan
RESTORE DATABASE honar FROM DISK='f:\bak\honar.bak'
WITH
FILE = 1,
NOUNLOAD,
REPLACE,
STATS = 10

FVVSBN
پنج شنبه 21 مرداد 1389, 10:50 صبح
یه سوال دیگه هم اضافه کنم.

برای پروژم برنامه نصب ساختم بدون هیچ مشکلی همه چی رو نصب میکنه.

ولی اینکه چجوری باید دیتابیس رو attach کنیم در sqlexpress 2005 برام سواله.

لطفا کمکم کنید.

زبان برنامه نویسیم C# 2008 هست.

تاپیک های رو خوندم جواب دقیقی نیافتم.

farhad_esfandiar
پنج شنبه 21 مرداد 1389, 11:24 صبح
این کد تو یکی از تاپیکها قبلی مطرح شده بود، امیدوارم به کارت بیاد
procedure attach_database (databasename , datafilepath , logfilepath:string);
var
computer_name, strcommand, dbase_Name, file1, file2: string;
begin
//database name
computer_name:=GetComputerName+'\SQLEXPRESS';
dbase_Name:=trim(databasename);
file1:=trim(datafilepath);//database file
file2:=trim(logfilepath);//log file
with DataModule1.AttachConn do
begin
close;//connect to master system database
ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='+'master'+';Data Source='+computer_name+'';
open;
end;//with attachconn
//sql commands for attaching
strcommand:='EXEC sp_attach_db @dbname = '+dbase_Name+', ';
strcommand:=strcommand + '@filename1 = "'+File1+'"'+', ';
strcommand:=strcommand + '@filename2 = "'+File2+'"'+'';
with DataModule1.qryAttach do begin
close;
sql.Clear;
sql.Text:=strcommand;
try
ExecSQL;
ShowMessage('بانک اطلاعاتي با موفقيت نصب گرديد');
//Application.Terminate;
Except on E:Exception do begin
Showmessage('نصب بانک اطلاعاتي با مشکل مواجه شد');
Application.Terminate;
end;
end;//try - except
end;//with query attach
end;

FVVSBN
پنج شنبه 21 مرداد 1389, 12:12 عصر
این کد را در کوئری بنویس خودم امتحان کردم جواب می ده البته اسم دیتابیس خودم هست تو خودت عوض کن نیازی به use master هم نیست
ALTER DATABASE honar
SET OffLINE
GO
drop database honarestan
RESTORE DATABASE honar FROM DISK='f:\bak\honar.bak'
WITH
FILE = 1,
NOUNLOAD,
REPLACE,
STATS = 10


اینجوری نوشتم جواب نداد :


CREATE PROCEDURE restore_fvs AS
ALTER DATABASE fvstell
SET OffLINE
GO
drop database fvstell
RESTORE DATABASE fvstell FROM DISK='@path'
WITH
FILE = 1,
NOUNLOAD,
REPLACE,
STATS = 10

hamid-nic
جمعه 22 مرداد 1389, 14:36 عصر
سلام
دوست عزیز استفاده از عبارت Use... در SP ها مجاز نیست .

chaghoyekond
شنبه 23 مرداد 1389, 10:44 صبح
دوست عزیز یادم رفت بگم که جلوی allter database و drop database اسم دیتابیس فعلیت که الان فعاله رو بنویسی و جلوی restore اسم دیتابیسی رو که می خوای restore کنی، اگر اسماشون مشابهه تغییر بده می بینی که در کدمن هم 2 اسم استفاده شده . اون خط اول رو من ننوشتم یه بار اونو بردار ببین جواب می ده

FVVSBN
یک شنبه 24 مرداد 1389, 00:59 صبح
ممنون از کمکت

هرجوری نوشتم نشد.

هنگام حتی نمیتونه ذخیرش کنه که بگیم هنگام اجرا error mide ya na

نام بکاپ اینه:fvstellbak.bak

نام دیتابیس هم اینه:fvstell


مثلا وقتی اینجوری مینویسم :

CREATE PROCEDURE restore1 AS
ALTER DATABASE fvstell
SET OffLINE
GO
drop database fvstellbak
RESTORE DATABASE fvstell FROM DISK='L:\fvs BackUpFVS BackUp\fvstellbak.bak'
WITH
FILE = 1,
NOUNLOAD,
REPLACE,
STATS = 10

این ارور رو میده:

Error 3701: Cannot drop the database 'fvstellbak', because it does not exist in the system catalog.

یا وقتی اینجور مینویسم:

CREATE PROCEDURE restore1 AS
ALTER DATABASE fvstellbak
SET OffLINE
GO
drop database fvstell
RESTORE DATABASE fvstellbak FROM DISK='L:\fvs BackUpFVS BackUp\fvstellbak.bak'
WITH
FILE = 1,
NOUNLOAD,
REPLACE,
STATS = 10

این ارور رو میده:

Error 3702: Cannot drop the database 'fvstell' because it is currently in use.

FVVSBN
پنج شنبه 28 مرداد 1389, 13:14 عصر
با استفاده از پروسیجر نشد.

ولی توی برنامه با کد زیر بک آپ گرفتم:

"USE master BACKUP DATABASE fvstell to disk=@path"

و با کد زیر restore کردم


"USE master RESTORE DATABASE fvstell FROM DISK = N'" + strPath + "'";