Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako povratiti bazu bez loga (kad imate samo MDF fajl)

[es] :: MS SQL :: Kako povratiti bazu bez loga (kad imate samo MDF fajl)

[ Pregleda: 3273 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
..mtsns-ns.customer.sbb.co.yu.

Jabber: DarkMan


Profil

icon Kako povratiti bazu bez loga (kad imate samo MDF fajl)24.05.2006. u 12:04 - pre 218 meseci
Nekim nesretnim slucajem ostao vam je MDF i nemate LDF fajl. Restauracija baze samo sa MDF fajlom je moguca ali podaci najverovatnije nece biti konzistentni (i to verovatno podaci zadnjeg dana).
Navescu dva postupka za restauraciju i zatim kako proveriti konizstentnost podataka i ako je potrebno kako pokusati popraviti greske.

1. Postupak

Ovaj postupak se moze odraditi ili iz Enterprise Manager-a ili izvsavanjem stored procedure.

1a. Enterpirse Manager

- otvorite granu Databases
- kliknite desnim dugmetom misa i odaberite All Tasks->Attach Database
- pronadjite i selektujete vas MDF fajl (posto nemate LDF pored linije za log ce stajati X)
- unesite ime vase baze i odaberite korisnika/vlasnika baze i kliknite na OK
- pojavice se poruka o gresci "Filename specified for log is incorrect. Do you want to continue" i vi kliknite na YES

1b. Stored procedure

- koristite sledeci skript (ovaj skrip radi isti posao kao i gore napisano uputstvo tj. sam Enterprise Manager koristi ovu proceduru za obavljanje tog zadatka)
Code:

exec sp_attach_single_file_db @dbname = '<ime vase baze>', @physname = '<putanja do vaseg MDF fajla>'


Gore navedeni postupak mozda prodje ali moze i da vam prijavi sledecu gresku:
Citat:

Could not open new database '<ime vase baze>'. CREATE DATABASE is aborted.
Device activation error. The physical file name '<putanja do vaseg MDF fajla>' may be incorrect.


2. Postupak

Ako vam Attach Database vam nije pomogao mozete probati sledecu proceduru:
- kreirajte praznu bazu sa istim imenom koje ste i ranije koristili (i isti collate)
- zaustavite SQL server
- na mesto novog MDF fajla iskopirajte vas stari MDF fajl a LDF fajl obrisite
- pokrenite SQL server
- ako pogledate u Enterprise Manager-u, pored vase baze ce pisati (Suspect) a baza ce biti nedostupna
- u SQL Analyzer-u (ili necem drugom za izvrsavanju skripte) pokreniti seldecu skriptu:
Code:

-- LISTING 1: Undocumented DBCC Command REBUILD_LOG
EXEC sp_configure 'allow updates', 1
RECONFIGURE WITH OVERRIDE
GO

BEGIN TRAN

UPDATE master..sysdatabases
SET status = status | 32768
WHERE name = '<ime vase baze>'

IF @@ROWCOUNT = 1
BEGIN
   COMMIT TRAN
   RAISERROR('emergency mode set', 0, 1)
END
ELSE
BEGIN
   ROLLBACK
   RAISERROR('unable to set emergency mode', 16, 1)
END

GO

EXEC sp_configure 'allow updates', 0
RECONFIGURE WITH OVERRIDE
GO

-- Restart SQL Server at this point. (Tako pise u skripti ali nije potrebno, ko hoce moze da proba)

DBCC REBUILD_LOG('<ime vase baze>','<putanja do LDF fajla koji treba kreirati>')
GO

ALTER DATABASE <ime vase baze> SET MULTI_USER
GO

/*Perform physical and logical integrity checks at this point.
Bcp data out if your integrity checks demonstrate that problems exist.
*/

- posle izvrsenja ove skripte zaustavite i ponovo pokrenite SQL server
- ako pogledate u Enterprise Manager-u pored baze ne bi trebalo da pise nista (ni Suspect niti Emergency Mode)


Provera ispravnosti baze i popravka greski

- izvrsite sledece:
Code:

DBCC CHECKDB (<ime vase baze>)

- ako u rezultatu nema ni jedne greske onda se smatrajte veoma srecnim covekom jer je posao za vas zavrsen
- ako ne spadate u grupu srecnih ljudi mozete probati sledece stvari i to u navedenom redosledu
- prvo morate prebaciti bazu u Single user mode izvrsavanjem sledeceg:
Code:

ALTER DATABASE <ime vase baze> SET SINGLE_USER

- sad sledi popravka baze, prvo probajte sa popravkama koje garantuju da nece doci do gubitka podataka:
Code:

DBCC CHECKDB (<ime vase baze>, REPAIR_FAST)

- pokrenite ovo vise puta (neke greske moze da popravi nako sto je neka prethodna popravljena) i ako se broj gresaka ne smanjuje probate sledece (takodje garantuje da nece doci do gubitka podataka):
Code:

DBCC CHECKDB (<ime vase baze>, REPAIR_REBUILD)

- isto pokreniti vise puta, ako se greske i dalje ne smanjuju probajte zadnju opciju (ovde ce doci do gubitka podataka):
Code:

DBCC CHECKDB (<ime vase baze>, REPAIR_ALLOW_DATA_LOSS)

- takodje pokrenite vise puta (bar 5-6 puta) dok vise ne bude prijavljivao greske
- u slucaju da se greske i posle bezbroj pokretanja ne smanjuju mozete probati da rucno obrisete podatke koji su vezani za problematicne podatke (koji se javljaju u greskama) i zatim ponovite zadnji postupak sa REPAIR_ALLOW_DATA_LOSS
- na kraju ovog postupka vratite bazu u MULTI_USER
Code:

ALTER DATABASE <ime vase baze> SET MULTI_USER


Edit: Za popravku gresaka je izbacen deo pokretanja server u single user modu jer je dovoljno postaviti bazu koju popravljate u single user mod.

[Ovu poruku je menjao DarkMan dana 25.05.2006. u 18:36 GMT+1]
 
Odgovor na temu

[es] :: MS SQL :: Kako povratiti bazu bez loga (kad imate samo MDF fajl)

[ Pregleda: 3273 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.