PDA

View Full Version : سوال: چطور با دلفی بک آپ بانک SQL server رو restoreکنم؟



nilidelphi
سه شنبه 20 مرداد 1388, 16:34 عصر
با سلام
بابا من چند وقت دربه در دارم دونبال یکی میگردم تا طریقه ی درست ریستور کردن بانک اطلاعاتی SQL server2000 رو تو دلفی برام بگه....

البته بلد هستم ولی وقتی دستور restore رو اجرا می کنم هیچ errorی نمیده و اجرا هم می شه ولی مشکل اینجاست که پس از اینکه اجاش کردم وقتی می خوام برناممو دوباره باز کنم با دو تا error مواجه میشم:


1-Unspecified Erroe
2-Tablenameindelphi:cannot perform this operation on a closed dataset

Tablenameindelphi همون نام جدولی است که تو دلفی دادم
البته من وقتی بررسی کردم دیدم که وقتی restore میکنم databaseام خراب میشه و حتی وقتی پروژه برناممو با دلفی باز می کنم همون error شماره 1 رو میده و حتی وقتی میخوام دوباره برنامرو به بانک connect کنم میگه که دیتابیس مورد نظر Attacht نشده در حالی که همون دیتابیس رو با خود SQL server 2000 میتونم باز کنم البته اینم بگم که هیچ تغییری تو محتویات بانک دیده نمیشه.

حالا کسی هست که با این مورد مواجه شده باشه و بتونه مشکل منو حل کنه؟خیلی برام مهمه هاااا؟
یه خواهشم دارم هر کس که جواب میده بازم به این تاپیک سر بزنه چون من از سوال می پرسم.

با تشکرات فراوان

Hsimple11
چهارشنبه 21 مرداد 1388, 01:36 صبح
قبلا خیلی بحث شده بود که. بهترین روش اینه که از Master خود SQL کمک بگیرید چون برای Restore یا BackUp باید ارتباط با بانک قطع شه و بهتره که این اتصال بطور موقت به Master صورت بگیره :


'ALTER DATABASE ِDatabase_Name SET SINGLE_USER WITH ROLLBACK IMMEDIATE '+
'USE master RESTORE DATABASE Database_Name FROM DISK ='+QuotedStr(OpenDialog1.FileName));

یه OpenDialog بذارید که فایل BackUp رو انتخاب کنید.

BOB
دوشنبه 30 آذر 1388, 12:46 عصر
سلام

پیشنهاد میکنم قبل از restore، بانک را آفلاین و پس از آن دوباره آنلاینش کنید.


ALTER DATABASE dbname SET OFFLINE WITH ROLLBACK IMMEDIATE
ALTER DATABASE dbname SET ONLINE WITH ROLLBACK IMMEDIATE

حسین شهریاری
سه شنبه 01 دی 1388, 09:29 صبح
با احترام به نظر کلیه دوستان.
باید به عرض برسونم برای ریستور کردن اطلاعات باید چند نکته را رعایت کنید:

1-پایگاه داده مربوطه به هیچ طریقی نباید Use باشد.حتی اگه توی آنالایزر هم Use باشه اجازه ریستور را به شما نمیده.

2-توی هر زبانی میخای این کارا بکنی اول باید اصطلاحا بازوی تمامی Connection هایی که از طریق Application به پایگاه داده وصل هستند را قطع کنید.مثلا اگه از دلفی استفاده میکنید و یه دونه کانکشن برای کل پروژه توی دیتا ماژول تعریف کردید بیاین و توسط متد Free یا Destore اونا تخریب کنید.

ِDataMoudal.AdoConnection.Free
یا
ِDataMoudal.AdoConnection.ِDestore

3-بعد از این کار توسط کد زیر نسخه پشتیبان را بازیابی کنید:

RESTORE DATABASE DB_NAME FROM DISCK 'PATH+FILENAME'

البته باید عرض کنم شما برای ارسال این دستور نیاز به Query دارید و Query هم باید یه کانکشن داشته باشه پس بیاین و اون کوئری را قبل از ارسال دستور یا در حالت طراحی به پایگاه داده Master وصل کنید.
اگه درست عمل کنید اطلاعات بازیابی میشن و هیچ پیغام خطایی مبنی بر غیر نرمال بودن یا در دسترس بودن پایگاه داده مشاهده نخواهید کرد.

4-مهمترین بخش اینه که ما کانکشن اصلی برنامه را تخریب کردیم و دیگه نمیتونیم ازش استفاده کنیم مگر اینکه یک بار برنامه را بسته مجددا باز کنید.که راه حل منطقی نیست و هیچ کاربری هم نمیپسنده!!
برای حل این مشکل با دستور زیر کانکشن از بین رفته را در زمان کد نویسی مجددا بسازید:

ِDataMoudal.AdoConnection:=TAdoConnection.Create( Owner)

5-در آخرنیز باید خاصیت کانکشن تمام DataSource های برنامه را مقدار دهی مجدد انجام بدید.مثلا:

Form1.AdoTable1.Connection:=ِDataMoudal.AdoConnec tion

من چهار سال پیش حدود دوماه روی این روش کار کردم تا به جواب رسیدم.البته یکسری DLL آماده هم بود ولی من ماژولی را که خودم بنویسم را ترجیه میدم.
انشا الله که بدردتون بخوره.

موفق باشید.

benyaminrahimi
پنج شنبه 03 دی 1388, 19:28 عصر
شما تو ENTERPRICE MANAGER ديتا بيس رو بزبابي کنيد بعد همن لحظه تو SQL PROFILER کدش رو برداريد بعد تو يک SQL COMMAND اجرا کنيد

البته بايد مطمئن باشيد که هيچ ار تباط به بانک نباشه يعني هيچ تيبل يا ويويي اکتيو نباشه

Delphi&Kylix_2939
دوشنبه 07 دی 1388, 00:22 صبح
وقتي ميخواي فايل BackUp تو restore كني نبايد هيچ كس به بانكت دسترسي داشته باشه وقتي هم مي خواي ريستور كني حتما بايد يه ديتابيس ديگروUse كني
مثلا



Use Master RESTORE DATABASE ['+DataBaseName+'] FROM DISK = N'+'Address BackUp File')+' WITH FILE = 1, NOUNLOAD , STATS = 10, RECOVERY Use database Name