PDA

View Full Version : بازیابی فایل دیتابیسی که در sql2000 یا 2005 ایجاد شده در sqlserver2008



csharpprogramer88
یک شنبه 23 آبان 1389, 20:16 عصر
سلام
من فایل دیتابیسی دارم با پسوندهای mdf و ldf که نمیدونم در sqlserver 2000 ایجاد شده یا در sqlserveer2005
چطوری میتونم این فایل ها را در sqlserver2008 بازیابی کنم .

با تشکر

mahdi87_gh
یک شنبه 23 آبان 1389, 20:52 عصر
سلام
چطوری میتونم این فایل ها را در sqlserver2008 بازیابی کنم .

بازیابی منظورتون اینه که فایل بکاپ رو restore کنید؟
اگه میخواین attach کنید توی sql 2008 فکر نمیکنم مشکلی وجود داشته باشه. یعنی فرقی نمیکنه 2000 باشه یا 2005. چون جفتش رو پشتیبانی میکنه

Bahmany
یک شنبه 23 آبان 1389, 21:12 عصر
دوست عزیز معمولا Attach کردن فایل مورد نظر در نسخه های بالاتر بدون مشکل انجام میشه ولی شما دیگه نمی تونید اون رو در نسخه قیلی Attach کنید
مثلا فایل بانک اطلاعاتی Sql2000 رو میشه در Sql2005 ، اتچ کرد ولی دیگه نمیشه اون رو در 2000 مجددا اتچ کرد

csharpprogramer88
یک شنبه 23 آبان 1389, 22:19 عصر
تشکر که جواب دادید
همانطور که گفتم من دو فایل با پسوند mdfو ldf دارم که میخوام در 2008 از اون استفاده کنم و جدیدا هم sql2008 را در ویندوز سون نصب کردم

و به این صورت هم اتچ کردم ولی جواب نداد :
در management studio بر روی databases را کلیک و attach را زدم
از صفحه attach database روی add کلیک کردم و از مسیر فایل دیتابیس را با پسوند mdf انتخاب کردم
و ok کردم ولی ارور زیر را صادر کرد حتی از قسمت attach as نام دیتابس را هم تغییر دادم ولی بازم همان خطا را داده

csharpprogramer88
یک شنبه 23 آبان 1389, 22:25 عصر
بازیابی منظورتون اینه که فایل بکاپ رو restore کنید؟
اگه میخواین attach کنید توی sql 2008 فکر نمیکنم مشکلی وجود داشته باشه. یعنی فرقی نمیکنه 2000 باشه یا 2005. چون جفتش رو پشتیبانی میکنه

هر طوری که بتونم از این فایل اطلاعات را بخونم حالا ریستور باشه یا ...
ولی تا اونجایی که من میدونم برای ریستور باید پسوند bak داشته باشیم ولی همانطور که گفتم من mdf,ldf دارم .

برای اتچ هم نوشتم که ارور صادر میکنه

mahdi87_gh
یک شنبه 23 آبان 1389, 23:05 عصر
بعضی مواقع این ارور نشون داده میشه ولی میتونه دلایل متفاوتی داشته باشه.
اول از همه یه کپی بعنوان پشتیبان از فایلهاتون بگیرین و داخل پوشه ای دیگه بریزین.
فایل ldf رو پاک کنید و دوباره سعی کنید attach کنید
موفق باشید

M.YasPro
دوشنبه 24 آبان 1389, 06:44 صبح
سلام
روی hyperlink کلیک کنید تا توضیحات رو ببینیم .

Bahmany
دوشنبه 24 آبان 1389, 07:18 صبح
http://msdn.microsoft.com/en-us/library/ms189625.aspx

csharpprogramer88
دوشنبه 24 آبان 1389, 12:39 عصر
سلام
روی hyperlink کلیک کنید تا توضیحات رو ببینیم .

اگر منظورتون اینه که روی message کلیک کنم (در تصویر هم هست )

حمیدرضاصادقیان
دوشنبه 24 آبان 1389, 12:48 عصر
ببینید این فایل رو میتونید توی یک درایو دیگه کپی کرده و از اونجا attach کنید.

ASKaffash
دوشنبه 24 آبان 1389, 12:52 عصر
سلام
از پسوندهای _Data و ـLog معلوم که با 2000 است ولی ظاهرا فایلهای شما در Seven داری Permission نیستند

csharpprogramer88
دوشنبه 24 آبان 1389, 13:16 عصر
من در سون 2008 را نصب کردم و میخوام این دو فایل را بازیابی کنم

فایل ldf را هم طبق گفته دوستمون حذف کردم بازم درست نشد

مسیر اونم تغییر دادم ولی بازم نشد و ارور هم با این کارها تغییری نکرد.

Rezahak
دوشنبه 24 آبان 1389, 13:19 عصر
موقع اجراي managment studio انرا با دسترسي administrator يعني run as administrator باز كن ببين مي شه!!!!

csharpprogramer88
دوشنبه 24 آبان 1389, 13:26 عصر
از همه دوستانی که لطف کردند و راهنمایی فرمودند تشکر میکنم
بالاخره با راهنماییRezahak حل شد
(http://www.barnamenevis.org/forum/member.php?u=162453)

Bahmany
دوشنبه 24 آبان 1389, 13:49 عصر
دوست عزیز اگه به SQLServer2000 دسترسی داری از جداولت Script بگیر و برای انتقال داده ها نیز از اسکریپت زیر جهت ساخت Insert Script استفاده کن





CREATE PROC [InsertGenerator]
(@schemaName varchar(100), @tableName varchar(100)) as

--Declare a cursor to retrieve column specific information for the specified table
DECLARE cursCol CURSOR FAST_FORWARD FOR
SELECT DISTINCT column_name,data_type
FROM information_schema.columns
WHERE table_name = @tableName
AND table_schema = @schemaName
OPEN cursCol
DECLARE @string nvarchar(3000) --for storing the first half of INSERT statement
DECLARE @stringData nvarchar(3000) --for storing the data (VALUES) related statement
DECLARE @dataType nvarchar(1000) --data types returned for respective columns
SET @string='INSERT INTO ' + @schemaName + '.' + @tableName + '('
SET @stringData=''

DECLARE @colName nvarchar(50)

FETCH NEXT FROM cursCol INTO @colName,@dataType

IF @@fetch_status<>0
begin
print 'Table '+@tableName+' not found, processing skipped.'
close curscol
deallocate curscol
return
END

WHILE @@FETCH_STATUS=0
BEGIN
IF @dataType in ('varchar','char','nchar','nvarchar')
BEGIN
SET @stringData=@stringData+''''+'''+isnull('''''+'''' '+ replace('+@colName+','''''''','''''''''''')+'''''+ ''''',''NULL'')+'',''+'
END
ELSE
if @dataType in ('text','ntext') --if the datatype is text or something else
BEGIN
SET @stringData=@stringData+'''''''''+isnull(replace(c ast('+@colName+' as varchar(2000)),'''''''',''''''''''''),'''')+'''''' ,''+'
END
ELSE
IF @dataType = 'money' --because money doesn't get converted from varchar implicitly
BEGIN
SET @stringData=@stringData+'''convert(money,''''''+is null(cast('+@colName+' as varchar(200)),''0.0000'')+''''''),''+'
END
ELSE
IF @dataType='datetime'
BEGIN
SET @stringData=@stringData+'''convert(datetime,'+'''+ isnull('''''+'''''+convert(varchar(200),'+@colName +',121)+'''''+''''',''NULL'')+'',121),''+'
END
ELSE
IF @dataType='image'
BEGIN
SET @stringData=@stringData+'''''''''+isnull(cast(conv ert(varbinary,'+@colName+') as varchar(6)),''0'')+'''''',''+'
END
ELSE --presuming the data type is int,bit,numeric,decimal
BEGIN
SET @stringData=@stringData+''''+'''+isnull('''''+'''' '+convert(varchar(200),'+@colName+')+'''''+''''',' 'NULL'')+'',''+'
END

SET @string=@string+@colName+','

FETCH NEXT FROM cursCol INTO @colName,@dataType
END
DECLARE @Query nvarchar(4000)

SET @query ='SELECT '''+substring(@string,0,len(@string)) + ') VALUES(''+ ' + substring(@stringData,0,len(@stringData)-2)+'''+'')'' FROM ' + @schemaName + '.' + @tableName
print @query
exec sp_executesql @query
--select @query

CLOSE cursCol
DEALLOCATE cursCol