[ DarkMan @ 24.05.2006. 12:04 ] @
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] |