Kaip atkurti duomenų bazę iš MDF į SQL Server 2005?

Turiu MDF failą ir LDF failus duomenų bazei, sukurtai MS SQL Server 2005. Kai bandau prijungti MDF failą į kitą SQL Server, gaunu šį klaidos pranešimą.

The log cannot be rebuilt because there were open transactions/users when the database was shutdown, no checkpoint occurred to the database, or the database was read-only. This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure.

Norėčiau atlikti bet kurią iš šių parinkčių:

  • Pridėkite duomenų bazę neprarandant duomenų (mažai tikėtina, bet norėčiau sutaupyti šiek tiek laiko).
  • Pridėkite duomenų bazę su duomenų praradimu (visi sandoriai buvo prarasti).
  • Atkurkite tik schemą (be duomenų) iš MDF failo.

Kokias SQL komandas galiu bandyti paleisti savo duomenų bazę dar kartą?

15
21 апр. kovo 21 d 2009-04-21 18:07 '09, 18:07 2009-04-21 18:07
@ 8 atsakymai

Ekspertų mainuose suradau šį dokumentą.

patrikt: Turėsite duomenų praradimą, bet tai gali būti padaryta.

 1. Išimkite duomenų bazę ir perkelkite MDF, kad išsaugotumėte vietą. 2. Sukurkite naują to paties pavadinimo duomenų bazę, tuos pačius failus, tą pačią failo vietą ir tą patį failo dydį. 3. Sustabdyti SQL serverį. 4. Pakeiskite mdf failą. 5. Pradėkite SQL.  DB bus įtariamas. 6. „ALTER DATABASE“ („ALTER DATABASE“) jūsų „SET“ AVARINIS 7. ALTER DATABASE yourdb SET SINGLE_USER 8. DBCC CHECKDB (jūsųdb, REPAIR_ALLOW_DATA_LOSS) 9. ALTER DATABASE yourdb SET MULTI_USER 10. ALTER DATABASE yourdb SET ONLINE
21
21 апр. atsakymas duotas Martin 21 Bal 2009-04-21 18:27 '09, 18:27, 2009-04-21 18:27

Čia yra detalių, kurios apima 2) ir 3 dalis), jei vėl sukurtas žurnalas neveikia, o tai gali atsitikti, jei MDF failas yra sugadintas.

Duomenis ir struktūrą galite atkurti tik skaitydami MDF failą su trečiosios šalies įrankiu, kuris gali de-šifruoti tai, kas parašyta dvejetainiais duomenimis, bet net ir su tokiais įrankiais, kurių ne visada baigsite.

Tokiais atvejais galite pabandyti „ ApexSQL Recover“ . Iš to, ką aš žinau, tai yra vienintelė priemonė, kuri gali atlikti tokį darbą, bet yra gana brangi.

Labai gera idėja yra pabandyti atkurti juos iš bet kokių senų atsarginių kopijų, jei turite.

11
28 мая '13 в 12:33 2013-05-28 12:33 atsakymą pateikė George'as Oberas gegužės 13 d., 13 val. 12:33 2013-05-28 12:33

Iš „Post“ SQL Server forumuose MDF prijungimas be LDF :

Jei norite prijungti MDF be LDF, galite atlikti šiuos veiksmus: Jis yra išbandytas ir veikia gerai

  • Sukurkite naują duomenų bazę su tuo pačiu pavadinimu ir tais pačiais MDF ir LDF failais

  • Sustabdyti SQL serverį ir pervadinkite esamą MDF į naują ir nukopijuokite pradinę MDF į šią vietą ir ištrinkite LDF failus.

  • Paleiskite „SQL Server“

  • Dabar jūsų duomenų bazė bus pažymėta kaip įtartina. 5. Atnaujinkite duomenų bazes, kad atnaujintumėte avarinį režimą. Paleidimo metu jis nenaudos LOG failų.

 Sp_configure "allow updates", 1 go Reconfigure with override GO Update sysdatabases set status = 32768 where name = "BadDbName" go Sp_configure "allow updates", 0 go Reconfigure with override GO 
  1. Perkraukite SQL serverį. dabar duomenų bazė bus parengta avariniu režimu

  2. Dabar vykdykite dokumentais neapdirbtą dbcc, kad sukurtumėte žurnalo failą

DBCC REBUILD_LOG (dbname, „c: dbname.ldf“) - dokumentais nesukurtas žingsnis sukuria naują žurnalo failą.

(pakeiskite „dbname“ ir „log“ failo pavadinimą pagal „ur“ prašymą)

  1. Paleiskite sp_resetstatus

  2. Perkraukite SQL serverį ir patikrinkite, ar duomenų bazė yra internete.

UPDATE: DBCC REBUILD_LOG nėra SQL2005 ar naujesnės versijos. Tai turėtų veikti:

 USE [master] GO CREATE DATABASE [Test] ON (FILENAME = N'C:\MSSQL\Data\Test.mdf') FOR ATTACH_REBUILD_LOG GO 
9
21 апр. Atsakymą pateikė Jose Basilio balandžio 21 d 2009-04-21 18:11 '09 18:11 2009-04-21 18:11

Bandėte ignoruoti „ldf“ ir tiesiog pridėkite „mdf“:

sp_attach_single_file_db [@dbname =] 'dbname', [@physname =] 'fizinis vardas'

Aš tiksliai nežinau, kas atsitiks su jūsų atviraisiais sandoriais (galbūt tik prarastu), tačiau ji gali grąžinti jūsų duomenis internete.

-don

5
22 апр. Don Dickinson atsakymas balandžio 22 d 2009-04-22 06:05 '09, 06:05 am. 2009-04-22 06:05
2
21 апр. atsakymas duotas SQLMenace balandžio 21 d 2009-04-21 19:52 '09 19:52 val. 2009-04-21 19:52

Rasta kitas būdas, kuris veikia visiškai:

  • Sukurkite naują duomenų bazę su tuo pačiu numatytuoju pavadinimu duomenų bazėje.
  • Sustabdyti SQL serverį.
  • Nukopijuokite seną mdf failą, kad perrašytumėte naujai sukurtą MDF failą ir ištrintumėte naują ldf failą.
  • Paleiskite „SQL Server“, duomenų bazė bus parengta avariniu režimu.
  • Atjunkite avarinio režimo duomenų bazę
  • Nukopijuokite originalų ldf failą į numatytąjį duomenų bazės aplanką (kur naujasis LDF failas sukuriamas ir ištrinamas pagal 3 žingsnį.
  • Pridėti MDF duomenų bazės failą.

Gavau darbo duomenų bazę po to, kai bandžiau visus aukščiau nurodytus dalykus.

1
13 сент. atsakymas į folbaj 13 sep . 2010-09-13 17:29 '10, 17:29, 2010-09-13 17:29

Turėjau šią problemą, bet nė vienas iš pirmiau minėtų atsakymų man nepadarė.

Bet vietoj to aš jį rado, todėl nusprendžiau jį bendrinti visiems kitiems:

http://www.kodyaz.com/articles/sql-server-attach-database-mdf-file.aspx

1
16 янв. atsakymą pateikė Brett Rigby, sausio 16 d 2012-01-16 13:46 '12, 13:46, 2012-01-16 13:46

Tikiuosi, kad tai lengva padaryti

  • Atidarykite „SQL Server“
  • Spustelėkite „Naujas prašymas“
  • Paleiskite šį užklausą

    sp_attach_single_file_db @dbname = 'dbname', @physname = 'C: Duomenų bazė \ t

Kur dbname norite rodyti objekto naršyklėje, kur @physname yra vietinė jūsų mdf failo vieta.

Tikiuosi, kad tai padės kam nors, aš padariau aukščiau, gavau ir struktūrą, ir duomenis.

Išbandyta „SQL Server 2000“ ir „2008“. Jis neveikia „SQL Server 2000“, tačiau jis veikia puikiai 2008 m.

0
21 нояб. Abdul Rahman atsakymas lapkričio 21 d 2013-11-21 09:47 '13, 9:47, 2013-11-21 09:47