PDA

View Full Version : خطا بعد از رستور نا موفق



svhasvha
یک شنبه 01 دی 1392, 14:11 عصر
سلام من یه برنامه حسابداری دارم که روسیستم کاربر نصب شده وکار میکنه چند وقته ولی حالا امروز یه چا لازم شد برناه رو restore کنم
قبلان هم این کارو کرده بودم
ولی اینبار باز یابی اطلاعات موفق نبود وخطا دادا که باز یابی با موفقیت صورت نگرفت
که اینم چیز مهمی نیست بعضی اوقات میشه
ولی حالا برنامه خطا میده که نمیتونه به بانک وصل شه!!!!!
cannot open database "......."requested by the login the"......" login failed
یکی دوباری که این اتفاق افتاده قبلا مجبور شدم ویندوزو عوض کنم یعنی حتی با نصب دوباره برنامه هم درست نمیشه
یک بار تو ویندوز7 اینجوری شد حالا تو xp
دسترسی ها تو قسمت security رو هم تغییر دادم ولی باز نشد
خودم حدس میزنم از sql باشه ویه جایش ناقص شده

برنامه از اکسپرس 2008 استفاده میکنه


به نظرتون چیکار کنم (بجز نصب ویندوز)

espootin
دوشنبه 02 دی 1392, 12:04 عصر
با سلام.
خوب بی دلیل پیغام ناموفق بودن بازیابی رو نمیده! شما باید سعی کنید بازیابی کاملا موفقی داشته باشید .
با این وجود ممکنه که قسمت کاربران و دسترسی هاشون ناقص باشد.
شما توی connectionString یک یوزر را معین کرده اید، باید حتما این یوزر را توی sql server چک کنید ببینید login میشه، اگه login میشه ، ببینید دسترسی های مد نظرتون رو داره یا نه.

باید بررسی کنید ، نمیشه با قطعیت گفت که مشکل از کجاست!
درضمن فکر نمی کنم ، نصب مجدد ویندوز کار منطقی باشه.

موفق باشید.

حمیدرضاصادقیان
دوشنبه 02 دی 1392, 13:01 عصر
سلام.
Database شما دارای Backup درستی نیست و وقتی Restore شده عملیات Restore با موفقیت انجام نشده و وسط کار یک Exception داده که بهتون پیغام میده با موفقیت انجام نشده.
و دیتابیس نیز در حالت Restoring هست به همین دلیل نمیتونید بهش وصل بشید.
ببینید با Restore یک Backup دیگه مشکلتون حل میشه یاخیر.
اگر نشد سعی کنید خطایی که هنگام Restore بهتون میده رو برای ما قرار بدید.

پ.ن : اگر آدمها مریض بشن و نتونیم بفهمیم ایرادشون چیه می کشیمشون بعد دوباره متولدشون میکنیم ببینیم مشکل حل شده یانه؟؟؟؟
آیا ماشینی که خرابه کلا معدومش میکنیم دوباره از اول میسازیمش ببینیم مشکل حل میشه یانه؟؟

این خطاها ارتباطی به ویندوز و نصب SQL Server وبرنامه نداره.

svhasvha
دوشنبه 02 دی 1392, 16:57 عصر
سلام ممنون از را هنماییتون
تا حدودی فهمیدم مشکل کجاست ولی تو راه حلش یه خورده موندم
مشکل اینه که به هر دلیلی یه رستور نا موفق صورت میگیره(مثلا فایل بک آپ تو یه فلشه وحین ریستور کردن فلش قطع میشه یا یه هچنین دلیلی) بانک ناقص میشه طوری که حتی نمیشه دی اتچش کرد
نصب مجدد ویندوز هم به این خاطر بود که مشتری نمیتونست صبر کنه تا من مشکلو بفهمم بعد براش حل کنم!!!!!
دیشب یه راه حل موقتی براش پیدا کردم بانک با یه کوری از sql experes حذفش میکنم وبع دوباره فایل بانک رو تو پوشه برنامه کپی میکنم ودوباره بانک سالم رو اتیچ وریستور میکنم......... قضیه حل میشه

ولی کلا مشکل اینه که به هر دلیلی تراکنش ناموفق باشه بانک آسیب میبینه واز کنترل خارج میشه
راه حلش اینه که تراکنش رو با یه ترنسکشن و رولبک کردن مدیریت کنم که درصورت یه همچین خطایی ترا کنش اجرا نشه
ولی نتونستم صورت صحیحی این کارو انجام بدم
اینم کوری ریستور کردنم

strsql = @"ALTER DATABASE [DVM] SET SINGLE_USER with ROLLBACK IMMEDIATE "
+ " USE MASTER " +
" RESTORE DATABASE [DVM] from DISK='" + strFileName + "' with REPLACE";

که این رشته تو C#‎‎‎‎ و بعد از اینکه strFileName که آدرس فایل بک آپ مقدار دهی میشه به بانک ارسال و اجرا میشه

حالا به نظرم اگه این کوری رو تو یه ترنس اکشن اجرا کنم که صورت خطا رول بک بشه قضیه حل میشه
حالا به نظر شما این راه حل درسته؟
و اگه درسته چطور این کارو انجام بدم چند حالت اجرا کردم خطا داد
نکته اینکه بعد خطای اجرای کوری ریستور شدن بانک بهصورت زیر در میاد
114319

بازم ممنون

svhasvha
دوشنبه 02 دی 1392, 20:55 عصر
دوستای گلم چی شد کسی نمیتونه کمکی کنه؟

espootin
دوشنبه 02 دی 1392, 21:34 عصر
با استفاده از Checksum شما می توانید فایل backup تون را بررسی کنید که خطایی نداشته باشه و هنگام restore کردن مشکلی پیش نیاد.

این گزینه رو به آخر دستور backup اضاف کنید:
with checksum

برای بررسی آن نیز می توانید از دستور زیر استفاده کنید.


restore verifyonly
from disk = '[Backup_file_address]'
with checksum;


اگر Valid داد، یعنی فایل backup تون مشکلی نداره.

موفق باشید.

svhasvha
دوشنبه 02 دی 1392, 21:51 عصر
با استفاده از Checksum شما می توانید فایل backup تون را بررسی کنید که خطایی نداشته باشه و هنگام restore کردن مشکلی پیش نیاد.

این گزینه رو به آخر دستور backup اضاف کنید:
with checksum

برای بررسی آن نیز می توانید از دستور زیر استفاده کنید.


restore verifyonly
from disk = '[Backup_file_address]'
with checksum;


اگر Valid داد، یعنی فایل backup تون مشکلی نداره.

موفق باشید.
دوست گلم یعنی این کدی که نوشتین رو من دقیقا به انتهای اون رشته که تو پست گذاشتم اضافه کنم؟؟؟
شرمندتم من کد نویس سی شارپم تو کدهای اس کیو ال زیاد حرفه ای نیستم
اگه ممکنه اون کوری که تو پست گذاشتم رو اصلاح کنید!!!!!!

حمیدرضاصادقیان
دوشنبه 02 دی 1392, 22:53 عصر
ببینید شما میتونید در یک Try..Catch کنترل کنید که اگر خطا داد و Restore با موفقیت انجام نشد دیتابیس مورد نظر رو حذف کنید.
اون هم که میره تو حالت Restoring من هم در پست قبل بهش اشاره کردم.چون وسط کار هست و در همون حالت باقی می مونه تا اینکه یک Backup درست رو Restore کنید.
این کدی هم که دوستمون نوشتن ربطی به Restore نداره و هنگامی که میخواهید Backup بگیرید به کارتون میاد.

svhasvha
سه شنبه 03 دی 1392, 08:59 صبح
ببینید شما میتونید در یک Try..Catch کنترل کنید که اگر خطا داد و Restore با موفقیت انجام نشد دیتابیس مورد نظر رو حذف کنید.
اون هم که میره تو حالت Restoring من هم در پست قبل بهش اشاره کردم.چون وسط کار هست و در همون حالت باقی می مونه تا اینکه یک Backup درست رو Restore کنید.
این کدی هم که دوستمون نوشتن ربطی به Restore نداره و هنگامی که میخواهید Backup بگیرید به کارتون میاد.
مشکل این کد در چیه؟


BEGIN TRAN

ALTER DATABASE [DVM] SET SINGLE_USER with ROLLBACK IMMEDIATE
USE MASTER
RESTORE DATABASE [DVM] from DISK='" + strFileName + "' with REPLACE
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRAN
END

COMMIT TRAN


اینم متن خطاش

Msg 226, Level 16, State 6, Line 4
ALTER DATABASE statement not allowed within multi-statement transaction.
Msg 3021, Level 16, State 0, Line 6
Cannot perform a backup or restore operation within a transaction.
Msg 3013, Level 16, State 1, Line 6
RESTORE DATABASE is terminating abnormally.
Msg 3902, Level 16, State 1, Line 15
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.

حمیدرضاصادقیان
چهارشنبه 04 دی 1392, 09:45 صبح
مشکل اینه که دستور Alter Database نمیتونه داخل یک Transaction باشه.من Try..Catch خود C# رو گفتم

svhasvha
پنج شنبه 05 دی 1392, 08:31 صبح
مشکل اینه که دستور Alter Database نمیتونه داخل یک Transaction باشه.من Try..Catch خود C#‎ رو گفتم

سلام ممنون از جوابت اما دوست گلم Try..Catch واسه مدیریت خطاس که اگه خطایی رخ داد برنامه هنگ نکنه یعنی از خطا جلو گیری نمیکنه کلا کاری با خطا نداره وقتی هم که خطایی تو ریستور رخ بده دیگه بانک از دست رفته !!!!! حرف من اینه که اگر خطا رخ داد ترکنش رولبک بشه یعنی برگرده به حالت قبل از ریستور هرچند تو خود دستور ریستور رولبک نوشته ولی نمیدونم چرا جواب نمیده