Datenbank teilweise online – Restore von Dateigruppen –Fehler 8653

Datenbanken können auch teilweise online sein. Im Falle eines Defekts an einer Datenbankdatei kann diese auf Offline gesetzt werden. Die Datenbank kann in diesem Fall weiter betrieben werden. Das bedeutet, dass INS, UP und DEL  Statements weiterhin funktionieren, zumindest solange nicht auf die fehlende Datei bzw Dateigruppe zugegriffen werden müsste (Z.B Indizes liegen auf den betroffenen Offline Dateien).

Hier ein Beispiel, wie ein Teil einer DB Offline gesetzt wird.

--DB mit mehreren Dateien und Dateigruppen

 

CREATE DATABASE [DBPart]

 ON  PRIMARY 

( NAME = N'DBPart', FILENAME = N'C:_SQLDBDBPart.mdf' , SIZE = 5120KB , FILEGROWTH = 1024KB ), 

 FILEGROUP [KUNDEN] 

( NAME = N'kundendaten', FILENAME = N'C:_SQLDBkundendaten.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ), 

 FILEGROUP [UMSATZ] 

( NAME = N'Umsatzdaten', FILENAME = N'C:_SQLDBUmsatzdaten.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB )

 LOG ON 

( NAME = N'DBPart_log', FILENAME = N'C:_SQLDBDBPart_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)

GO

USE [DBPart]

GO

 

..ein Paar Datensätze

create table kunden (id int identity, name varchar(50)) on KUNDEN

insert into kunden values ('Huber'), (Maier)

 

 

create table Umsaetze (id int identity, sp1 varchar(50)) on UMSATZ

insert into umsaetze values ('##1'), ('sdsd')

 

Nun wird es wichtig. Es müssen Sicherung der Dateigruppen / Dateien vorliegen. Das geht natürlich im SSMS besonders leicht.
image

Nun kann man mit folgenden Befehl Teile der DB Offline setzen. Allerdings sollte das nicht die Primary Dateigruppe betreffen. Diese wird auf jeden Fall gebraucht! Ohne diese, keine DB!

 

Offline setzen einer Datenbankdatei

 

alter database DBPart

modify file (name = N'Umsatzdaten', OFFLINE)

go

alter database DBPart

set online 

 

 

--geht

insert into kunden values ('RAUCH'), ('MAIER')

--geht nicht

insert into umsaetze values ('##1'), ('sdsd')

 

Würde man nun allerdings versuchen die Datenbank wiederherzustellen, hätte man mehrere Problem. Einerseits könnten Inkonsistenzen entstehen, da ja nur ein Teil der DB wiederhergestellt wird, aber aufgrund eines referentiellen Integrität zu Fremdschlüsseln die passenden Primarschlüsselwerte fehlen würden. Auf der anderen Seite würde man Daten verlieren, da man eine alte Sicherung zurückspielt und bis dahin schon einige neue Datensätze hinzugefügt bzw. verändert wurden. Daher ist eine Logfile Sicherung dringend und unbedingt notwendig.

Daher unbedingt das Logfile sichern! (am besten natürlich regelmäßig). Also auch nach dem Verlust bzw Offline setzen der betroffenen Datenbankdatei!

Wer dies nicht gemacht hat bekommt in der Regel den Fehler 8653:

Msg 8653, Level 16, State 1, Line 3
The query processor is unable to produce a plan for the table or view ‚X‘ because the table resides in a filegroup which is not online.

 

Restore der Datenbankdateien

image

 

Nun sollten alle Tabellen wieder zu Verfügung stehen.

 

Nur der Restore kann eine Offline gesetzte Datei /Dateigruppe wieder auf Online bringen.

 

That’s it!

Author: Fumus

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert