PDA

View Full Version : مشکل در Restore نمودن فایل Backup



Neeloofar
سه شنبه 03 بهمن 1385, 14:45 عصر
سلام

من از یک دیتابیس در یک ویندوز سرور (2000) که Sql Server2000 روش نصب بود بک آپ گرفتم (db.bak). از دیتابیس یک Script تهیه کردم و توسط اون، دیتابیس db با تمامی آیجکتهاش روی SQL سیستم خودم ایجاد شد.
الان روی سیستم خودم که SQL2005 و ویندوز Pro هست فایل db.bak ر Restore نمیشه.
پیغام زیر رو میده:
اصلا امکانش هست؟

aliila
سه شنبه 03 بهمن 1385, 16:42 عصر
شما باید ابتدا همگی یوزر ها را از برنامه خارج کنید بعدا ریستور کنید
برای این کار باید دیتا بیس خود را به حالت تک کاربره تبدیل کنید و بعد از ریستور عکس این کار را انجام دهید


USE master;
GO
ALTER DATABASE AdventureWorks
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE AdventureWorks
SET READ_ONLY;
GO
ALTER DATABASE AdventureWorks
SET MULTI_USER;
GO

Neeloofar
سه شنبه 03 بهمن 1385, 17:36 عصر
سلام

از توجهتون ممنون.
از کد بالا که نشد. (Master رو به db یعنی بانک مورد تغییر داده و کد رو اجرا کردم)


Msg 5011, Level 14, State 5, Line 1
User does not have permission to alter database 'AdventureWorks' or the database does not exist.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.


ولی از طریق Properties دیتابیس اونو به Single تبدیل کردم. (یک آیکون آدمک به آیکون بانک اضافه شده و جلوی بانک نوشت:(Single User)

ولی بازم در عمل Restore خطای بالا رو میده.!؟
فکر کنم این راه حلی که گفتی برای Restore در همون سرور اصلی هست. بازم بگم که من فقط یک فایل بک آپ و یک فایل حاوی Script دیتابیس دارم و دیگه به سرور اصلی که بانک اصلی در اون قرار داره هیچوقت دسترسی نخواهم داشت.

AminSobati
سه شنبه 03 بهمن 1385, 23:03 عصر
این دستور رو اجرا کنین:


print @@version
go
restore headeronly from disk='...'

و به جای سه نقطه آدرس کامل و دقیق فایل Backup رو بدین. حالا نتیجه اجرای این دستورات رو پست بفرمایید

Neeloofar
سه شنبه 03 بهمن 1385, 23:37 عصر
خدمت شما:


Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
Oct 14 2005 00:33:37
Copyright (c) 1988-2005 Microsoft Corporation
Express Edition on Windows NT 5.1 (Build 2600: Service Pack 2)

(1 row(s) affected)




BackupName: db Backup
BackupDescription: null
BackupType: 1
ExpirationDate:
Compressed: 0
Position: 1
DeviceType : 2
UserName: sa
ServerName : SECURITY-SRV
DatabaseName: db
DatabaseVersion: 539
DatabaseCreationDate: یک تاریخ
BackupSize: 32458752
FirstLSN: 4082000000043400001
LastLSN: 4082000000043700001
CheckpointLSN: 4082000000043400007
DatabaseBackupLSN: 4076000000003000002
BackupStartDate: یک تاریخ
BackupFinishDate: یک تاریخ
SortOrder: 0
CodePage: 232
UnicodeLocaleId: 1025
UnicodeComparisonStyle: 196609
CompatibilityLevel: 80
SoftwareVendorId: 4608
SoftwareVersionMajor: 8
SoftwareVersionMinor: 0
SoftwareVersionBuild: 194
MachineName: SECURITY-SRV



لیست رو هر کار میکردم موقع Save AS بهم میخورد. خدا پدر این Babylon رو بیامورزه. نذاشت ما یک کلمه هم تایپ کنیم.:لبخند:

از توجهتون ممنون. منتظر پاسخ شما هستم

aliila
چهارشنبه 04 بهمن 1385, 07:49 صبح
من با کدی که در ردیف 2 نوشتم این کار را بار ها و بارها انجام دادهام حتی از روی کلاینت و از هارد خود کلاینت ریستور کردم
USE master را به هیچ صورت نمی توانید حذف کنید و حتما لازم است
ابتدا کد زیر را اجرا کنید


USE master;
GO
ALTER DATABASE AdventureWorks
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO



سپس کد ریستور را اجرا کنید
ودر آخر کد زیر



USE master;
ALTER DATABASE AdventureWorks
SET MULTI_USER;

Neeloofar
چهارشنبه 04 بهمن 1385, 13:01 عصر
سلام

جناب aliila درسته من کدشما رو اشتباه به کار میردم. ولی پس از اجرا قسمت اول پس از اینکه Single میشه این پیام رو بعد از اقدام به Restore نمودن دیتابیس میده.



System.Data.SqlClient.SqlError: The backup set holds a backup of a database other than the existing 'db' database. (Microsoft.SqlServer.Smo)


ضمنا من ریستور از رو از طریق کد نمیکنم. از طریق منوی Restore انجام میدم.
اگه ممکنه کد Restore کردن رو هم بگذارید.

در ضمن من با ریستور کردن این فایل در سرور اصلی خودش مشکلی نداشتم. روی سیستم خودم مشکل داره!

من SQLExpress رو سیستم دارم مشکلی از این بابت نیست؟
.
.
.
.

aliila
چهارشنبه 04 بهمن 1385, 14:23 عصر
اشکال کار شما در همین جاست
با یک کانکشن دیتا بیس را به حالت سینگل میبرید و با یک کانکشن دیگر ( کنسول اسکول ) میخواهید آن را ریستور کنید
آیا برای شما قبل قبول است ؟ کنسول اسکول کانکشن دوم را میخواهد تشکیل دهد
کلیه دستورات باید در یک کوری آنالیزر قرار گیرد و در سه مرحله اجرا گردد

AminSobati
چهارشنبه 04 بهمن 1385, 22:42 عصر
نکنه دارین Backup یک دیتابیس رو روی دیتابیس دیگه ای Restore میکنید؟!
در ضمن بهتره با دستور TSQL یعنی خود RESTORE این کار رو انجام بدین

Neeloofar
پنج شنبه 05 بهمن 1385, 00:22 صبح
اشکال کار شما در همین جاست
با یک کانکشن دیتا بیس را به حالت سینگل میبرید و با یک کانکشن دیگر ( کنسول اسکول ) میخواهید آن را ریستور کنید
آیا برای شما قبل قبول است ؟ کنسول اسکول کانکشن دوم را میخواهد تشکیل دهد
کلیه دستورات باید در یک کوری آنالیزر قرار گیرد و در سه مرحله اجرا گردد

منظورتون اینه که که باید برای ریستور کردن کد آن را بعد از کد Singleکردن بنویسم؟


نکنه دارین Backup یک دیتابیس رو روی دیتابیس دیگه ای Restore میکنید؟!
در ضمن بهتره با دستور TSQL یعنی خود RESTORE این کار رو انجام بدین

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

من SQL2000 رو نصب کردم. و تمام خطاهای بالا رو اونجا هم میداد.
خطای دیگه‌ای که میداد این بود که بعد Singleکردن و اقدام به ریستور خطای Database in use صادر میشد. مشکلش هم این بود که من درخت دیتابیس رو باز نگه میداشتم و این توسط خود کنسول مورد استفاده قرار میگرفت. درخت رو بستم و دیتا بیس رو restore کردم.

بهرحال مشکل حل شد و فایل mdf ایجاد شده رو در 2005 Attach کردم.

از توجه همگیتون ممنون.

AminSobati
پنج شنبه 05 بهمن 1385, 13:33 عصر
کاش به جای جمله اولیتون چند تا ناسزا مینوشتید. اونقدر هم دیگه ... .:لبخند:

اختیار دارین! جسارت نشه! من از روی پیغام خطایی که ارسال کردین این حدس رو زدم:
The backup set holds a backup of a database other than the existing 'db' database
به هر حال خوشحالم که مشکل حل شد..

Sk1900n3
دوشنبه 08 شهریور 1389, 13:54 عصر
سلام
این کد واسه ی ایجاد نسخه پشتیبان

BACKUP DATABASE [myDb] TO
DISK = N'd:\db.bak'
WITH NOFORMAT, NOINIT, NAME = N'MyDb Full Database Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10


و این هم واسه استفاده از نسخه پشتیبان

RESTORE DATABASE dbSchem

FROM DISK = N'd:\db.bak'
WITH FILE = 1, REPLACE,
MOVE N'dbSchem' TO N'D:\Install & Other\dbSchem\dbSchem.mdf',
MOVE N'dbSchem_Log' TO N'D:\Install & Other\dbSchem\dbSchem_Log.ldf',
NOUNLOAD, STATS = 10


این کد جواب میده و خودمم جواب گرفتم

حالا اگه میخوایی با .net این کارو انجام بدین میتونین از dll استفاده کنید

Interop.SQLDMO.dll

اینم یک کلاس که این کارو انجام میده