View Full Version : مشکل در restore کردن
kathy11ir
یک شنبه 07 خرداد 1385, 07:51 صبح
سلام!
من دستورات زیر را جهت restore کردن بانک
وارد کردم
DataModule141.ADOCommand1.Parameters.ParamValues['@SQLString']:='CREATE
DATABASE Mbackup ';
DataModule141.ADOCommand1.Execute;
pathe:=FileListBox8.FileName;
s:=pathe;
DataModule141.ADOCommand1.Parameters.ParamValues['@SQLString']:='RESTORE DATABASE Mbackup FROM DISK='+char(39)+s+char(39);
DataModule141.ADOCommand1.Execute;
اما در هنگام restore کردن پیغام خطای زیر را می دهد.(باید این نکته را در نظر داشته باشید که بانک اصلی من که از آن backup گرفته شده به نام vb و بانک خالی ایجاد شده به نام Mbackup و نام فایل پشتیبان به نام Mbackup2006528.bak می باشد)
the databaseto be restore was named "vb " .reissue the statement using the WITH
REPLACE option to overwrite the Mbackup database
چگونه مشکل فوق را حل کنم ؟
در ضمن چه دستوری در delphi می توانم بکار ببرم که مشخص کند بانک اطلاعاتی خاصی در sql می باشد ؟
متشکرم
farideh_en
یک شنبه 07 خرداد 1385, 23:24 عصر
سلام
دوست عزیز آیا موقع resotr کردن از databaseتون که استفاده نمیکنین؟نا اونجا که میدونم موقع restor کردن نباید برنامتون فعال باشه!!
kathy11ir
دوشنبه 08 خرداد 1385, 07:03 صبح
سلام!
نه ، من اصلا" از بانک اصلی که vb می باشد درهنگام restore کردن استفاده نمی کنم . و همانطور که دیدید ابتدا یک بانک جدید ایجاد می کنم و سپس بانک پشتیبان را Restore می کنم و می ریزم روی بانک جدیدم
h_baqery
دوشنبه 08 خرداد 1385, 08:49 صبح
چون بانک رو می سازید و فایلهای اون وجود دارند و روی آنها دارید restore می کنید باید به همراه دستور restore از کلید with replace استفاده کنید که در BOL کاملا توضیح داده شده .
kathy11ir
دوشنبه 08 خرداد 1385, 18:16 عصر
سلام !
متشکرم . ولی نمی دانم دقیقا" کجا را جستجو کنم اگر ممکن است ، کد کامل restore کردن را برای من ارسال نمایید و یا راهنمایی کامل تری بکنید .
من دستورات زیر را جهت backup و restore کردن وارد کردم ولی..
backup
decodedate(date,year,mon,day);
edit1.Text:= INTTOSTR(year)+INTTOStr(mon)+inttostr(day) ;
name:='vb2'+ edit1.Text+'.bak';
path:=pathe+'\'+name;
x:='BACKUP DATABASE vb TO DISK='+ char(39)+ path + char(39);
DataModule141.ADOCommand1.Parameters.ParamValues['@SQLString']:=x;
DataModule141.ADOCommand1.Execute;
ShowMessage('پÔÊíÈÇäí ÇÒ ÈÇä˜ ÇØáÇÚÇÊí ÈÇ ãæÝÞíÊ ÇäÌÇã ÑÏíÏ');
restore
DataModule141.ADOCommand1.Parameters.ParamValues['@SQLString']:='CREATE DATABASE vb2 ';
DataModule141.ADOCommand1.Execute;
ShowMessage(' پÇíÇå ÏÇÏå ãæÝÞíÊ ÂãíÒ ÓÇÎÊå ÔÏ');
DataModule141.ADOCommand1.Parameters.ParamValues['@SQLString']:='Use Master';
DataModule141.ADOCommand1.Execute;
pathe:=FileListBox8.FileName;
s:=pathe;
DataModule141.ADOCommand1.Parameters.ParamValues['@SQLString']:='RESTORE DATABASE vb2 FROM DISK='+char(39)+s+char(39);
DataModule141.ADOCommand1.Execute;
ShowMessage('ÝÇíá پÔÊíÈÇä ãæÝÞíÊ ÂãíÒ ÇÍíÇ ÔÏ');
بااین وجود باز هم خطای
the databaseto be restore was named "vb " .reissue the statement using the WITH
REPLACE option to overwrite the Mbackup database
را می دهد . لطفا" راهنمایی نمایید چطوری این مشکل را رفع کنم
AminSobati
چهارشنبه 10 خرداد 1385, 12:17 عصر
اگر از دستور RESTORE استفاده میکنید که باید WITH REPLACE بدین، اما اگر با کمک خود EM دارید Restore انجام میدین، در قسمت Options، آیتمی به اسم Force Restore داره که باید انتخاب کنین
kathy11ir
چهارشنبه 10 خرداد 1385, 13:36 عصر
چگونه و کجا with replace را اضافه نمایم ، در صورت امکان یک مثال بزنید
متشکرم
AminSobati
چهارشنبه 10 خرداد 1385, 16:24 عصر
RESTORE DATABASE MyDB FROM DISK='c:\mybakup.bak' WITH REPLACE
farideh_en
پنج شنبه 11 خرداد 1385, 16:28 عصر
با سلام
منم مشکل همین دوستمون دارم یعنی می خوام از داخل برنامه دلفی از database ام که sql server 2000 هست database را restor کنم ولی error ای که میده این پیغام هستش:
Exclusive access could not be obtained because the database is in use.
البته من در sp از command زیر استفاده کردم :
Restore Database amval
from Disk='c:\backup\backupdb.bak'
with File=1,
MOVE 'Rest_data' to 'c:\amval.mdf',
MOVE 'Rest_log' to 'c:\amval.ldf',
STANDBY='c:\amval', REPLACE
میخواستم بدونم اصلاٌ میشه از داخل برنامه دلفی کارrestor را موقعی که برنامه در حال اجراست انجام داد؟ اگه امکانش هست ممنون میشم راهنمایی کنید
ali_kolahdoozan
پنج شنبه 11 خرداد 1385, 16:57 عصر
میشه فقط kill user یادتون نره .
kathy11ir
پنج شنبه 11 خرداد 1385, 20:30 عصر
سلام
من هنوز مشکلم رفع نشده . میشه لطفا" یکی دستورات را بصورت کامل بنویسد .
اگر باید kill user کرد . چطوری ، چگونه و با چه دستوراتی ؟
متشکرم
AminSobati
پنج شنبه 11 خرداد 1385, 20:37 عصر
اول مطمئن بشید که خودتون در اون دیتابیس نیستید. مثلا USE Master انجام بدین. حالا سایر کاربرها رو Kill کنین.
kathy11ir
جمعه 12 خرداد 1385, 18:31 عصر
سلام
من مشکل ار پیدا کردم اما نمی دانم چگونه حل کنم .وقتی restore می کنم فایل مورد نظر با نام database اصلی و در مسیر آن database می خواهد ذخیره گردد . چگونه آن مسیر را تغییر دهم ؟
مسیر move to physical file name را چگونه در برنامه تغییر دهم ؟
در ضمن می توانید تفاوت backup و attach کردن را بیان کنید ؟ و بگویید اگر من به جای backup از attach,deattach استفاده کنم در برنامه مشکلی بوجود می آید؟
در ضمن دستور refresh کردن بانک اطلاعاتی را می توانید برای من ارسال نمایید؟
متشکرم
farideh_en
جمعه 12 خرداد 1385, 20:58 عصر
سلام من از دستور use master در sp استفاده کردم ولی error میده میشه کاملتر راهنمایی کنین.ممنون/
AminSobati
جمعه 12 خرداد 1385, 21:48 عصر
Backup حالتهای گوناگون داره. مثلا در Complete Backup تمام فایلهای دیتابیس بصورت فشرده تبدیل به یک فایل میشن. اما زمانیکه Attach میکنید، خود فایل اصلی دیتابیس رو به SQL Server ملحق میکنید. اما Backup حالتهای دیگه ای میتونه داشته باشه. مثلا Differential Backup. در این حالت فقط از تغییراتی که دیتابیس از زمان آخرین Complete Backup داشته Backup تهیه میشه، لذا برای Restore کردنش، به فایل Backup قبلی هم نیاز دارید. اگر برای انتقال برنامتون به کامپیوتر مشتری دارید سوال میکنید، Attach کردن مشکلی نداره. اما این روش برای جایی که دیتابیسشون در حاله کاره، برای Backup گیری استفاده نمیشه چون Detach کردن کار تمام کابرها رو مختل میکنه.
دستور Refresh کردن دیتابیس وجود نداره؛ چون اساسا Refresh کردن دیتابیس معنی نداره و همیشه دیتابیس شما کاملا Fresh هستش!
درد مورد تغییر مسیر move to physical file name، شما دستور Restore رو میتونین به شکل یک String در برنامه بسازید و آدرس مورد نظر رو در این String جایگذاری کنید، سپس توسط ADO به SQL Server بفرستید تا اجرا بشه.
دستور USE Master چه خطایی میده؟ لطفا پست کنید..
farideh_en
شنبه 13 خرداد 1385, 13:00 عصر
در ضمن errore برنامه the database 'amval' because it is currently in use. میباشد
AminSobati
شنبه 13 خرداد 1385, 13:02 عصر
دوست عزیز
بعد از اجرای کد، دستور EXEC SP_WHO رو در QA اجرا کنین و ببینید آیا واقعا کسی در دیتابیس مورد نظر وجود داره یا خیر
farideh_en
شنبه 13 خرداد 1385, 14:01 عصر
جناب آقای sobati ممنونم از راهنماییهای ارزشمندتون.
موفق باشین.
kathy11ir
یک شنبه 14 خرداد 1385, 09:00 صبح
سلام
مشکل من در یک مورد حل گردید اما باز در همین مورد با مشکل دیگری روبرو شدم.
من در QA دستور زیر را وارد می کنم . و برنامه درست عمل می کند .
use master
RESTORE FILELISTONLY
FROM DISK = 'C:\vb2200662.bak'
RESTORE DATABASE vb2
FROM DISK = 'C:\vb2200662.bak'
WITH MOVE 'vb_Data' TO 'C:\vb2.mdf',
MOVE 'vb_Log' TO 'C:\vb2.ldf'
اما وقتی می خواهم این دستور را در برنامه دلفی اعمال کنم عمل restore را انجام نمی دهد :
DataModule141.ADOCommand1.Parameters.ParamValues['@SQLString']:='CREATE DATABASE vb2 ';
DataModule141.ADOCommand1.Execute;
ShowMessage(' ÇíÇå ÏÇÏå ãæÝÞíÊ ÂãíÒ ÓÇÎÊå ÔÏ');
DataModule141.ADOCommand1.Parameters.ParamValues['@SQLString']:='use master' ;
DataModule141.ADOCommand1.Execute;
DataModule141.ADOCommand1.Parameters.ParamValues['@SQLString']:='RESTORE FILELISTONLY FROM DISK ='+char(39)+s+char(39)+' RESTORE DATABASE vb2 FROM DISK = '+char(39)+s+char(39)+' '+' '
+'WITH MOVE '+char(39)+'vb_Data'+char(39)+' TO '+char(39)+'C:\vb2.mdf'+char(39)+' '+', MOVE '+char(39)+'vb_Log'+char(39)+' TO '+char(39)+'C:\vb2.ldf'+char(39);
DataModule141.ADOCommand1.Execute;
همچنین من وقتی می خواستم که'use master' را در یک store procedure بنویسم خطا می داد که نمی توانم این کار را انجام دهم .
چگونه می توانم ارتباط با db که در حال حاضر به برنامه متصل می باشد را قطع و سپس مجددا" وصل نمود ؟
متشکرم
AminSobati
یک شنبه 14 خرداد 1385, 11:18 صبح
دوست عزیز لطفا کدها رو داخل تگ
قرار بدین تا متوجه بشیم چیه!
استفاده از دستور USE داخل SP مجاز نیست. اگر کاربرها در حال کار با دیتابیس هستند، قبل از دستور Restore، این کار رو انجام بدین:
[code]
ALTER DATABASE MyDatabase
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
این دستور باعث میشه ارتباط تمام کاربرها با دیتابیس قطع بشه.
برای قطع ارتباط با دیتابیس، باید Connection رو Close کنین.
farideh_en
یک شنبه 14 خرداد 1385, 14:28 عصر
سلام دوست عزیز منم مشکل شمارو داشتم ولی با کمک دوستان آقای ثباتی و کلاهدوز حل شد. تو برنامتون یک Adoconnection بزارین و اونو به master وصل کنین و یک ADOQUERY قرار بدین که به این ADOCONNECTION وصل بشه و کد زیر را در ADOQUERY در قسمت TString بنویسید :
SET NOCOUNT ON
DECLARE @strSQL varchar(255)
PRINT 'Killing Users'
PRINT '-----------------'
CREATE table #tmpUsers(
spid int,
eid int,
status varchar(30),
loginname varchar(50),
hostname varchar(50),
blk int,
dbname varchar(50),
cmd varchar(30))
INSERT INTO #tmpUsers EXEC sp_who
DECLARE LoginCursor CURSOR
READ_ONLY
FOR SELECT spid, dbname FROM #tmpUsers WHERE dbname ='YOUR DATABASENAM'
DECLARE @spid varchar(10)
DECLARE @dbname2 varchar(40)
OPEN LoginCursor
FETCH NEXT FROM LoginCursor INTO @spid, @dbname2
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
PRINT 'Killing ' + @spid
SET @strSQL = 'KILL ' + @spid
EXEC (@strSQL)
END
FETCH NEXT FROM LoginCursor INTO @spid, @dbname2
END
CLOSE LoginCursor
DEALLOCATE LoginCursor
DROP table #tmpUsers
PRINT 'Done'
SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
USE Master RESTORE DATABASE YOURDATABASENAME FROM DISK='C:\Backup\backupdb.BAK' WITH REPLACE
بعد داخل برنامه دلفی یک Button قرار بدین. و بنویسین
;ADOQuery1.ExecSQL
همین.
امیدوارم که مشکل شمام حل بشه.
موفق باشین.
AminSobati
یک شنبه 14 خرداد 1385, 15:58 عصر
چرا به جای kill کردن از set single_user استفاده نمیکنید
Arminizer_88
دوشنبه 15 خرداد 1385, 16:46 عصر
سلام !
متشکرم . ولی نمی دانم دقیقا" کجا را جستجو کنم اگر ممکن است ، کد کامل restore کردن را برای من ارسال نمایید و یا راهنمایی کامل تری بکنید .
من دستورات زیر را جهت backup و restore کردن وارد کردم ولی..
backup
decodedate(date,year,mon,day);
edit1.Text:= INTTOSTR(year)+INTTOStr(mon)+inttostr(day) ;
name:='vb2'+ edit1.Text+'.bak';
path:=pathe+'\'+name;
x:='BACKUP DATABASE vb TO DISK='+ char(39)+ path + char(39);
DataModule141.ADOCommand1.Parameters.ParamValues['@SQLString']:=x;
DataModule141.ADOCommand1.Execute;
ShowMessage('پÔÊíÈÇäí ÇÒ ÈÇä˜ ÇØáÇÚÇÊí ÈÇ ãæÝÞíÊ ÇäÌÇã �ÑÏíÏ');
restore
DataModule141.ADOCommand1.Parameters.ParamValues['@SQLString']:='CREATE DATABASE vb2 ';
DataModule141.ADOCommand1.Execute;
ShowMessage(' پÇí�Çå ÏÇÏå ãæÝÞíÊ ÂãíÒ ÓÇÎÊå ÔÏ');
DataModule141.ADOCommand1.Parameters.ParamValues['@SQLString']:='Use Master';
DataModule141.ADOCommand1.Execute;
pathe:=FileListBox8.FileName;
s:=pathe;
DataModule141.ADOCommand1.Parameters.ParamValues['@SQLString']:='RESTORE DATABASE vb2 FROM DISK='+char(39)+s+char(39);
DataModule141.ADOCommand1.Execute;
ShowMessage('ÝÇíá پÔÊíÈÇä ãæÝÞíÊ ÂãíÒ ÇÍíÇ ÔÏ');
بااین وجود باز هم خطای
the databaseto be restore was named "vb " .reissue the statement using the WITH
REPLACE option to overwrite the Mbackup database
را می دهد . لطفا" راهنمایی نمایید چطوری این مشکل را رفع کنم
لطفا از تگ های شکننده استفاده کنید!!!
3lool
دوشنبه 15 خرداد 1385, 23:31 عصر
آقا واقعا دستتون درد نکنه من و خیلی کمک میکنه این کد های شما ...
Milad Mohseny
پنج شنبه 18 خرداد 1385, 23:49 عصر
ممنون ما هم استفاده کردیم .
bahman.net
شنبه 20 خرداد 1385, 01:21 صبح
ممنون ما هم بی بهره نماندیم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.