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.

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

 

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!

Fumus

Share
Published by
Fumus

Recent Posts

SQL Server 2019 – static data masking – Du Opfer!

In SQL Server 2016 wurde das sog. dynamic data masking eingeführt. Eine Möglichkeit Daten bei…

5 Jahren ago

MinRole – Oder wie alles etwas einfacher wird

Seit Sharepoint Server 2007 präsentiert sich die Installation immer auf die gleiche Weise. Gerade mal,…

8 Jahren ago

Schritt für Schritt: SQL 2016 – Dynamic Data Masking

Es weihnachtet! Gerade bekam ich von einer Kollegin Plätzchen angeboten mit der Größe eines Diskus…

8 Jahren ago

Schritt für Schritt: SQL Server 2016 – temporal tables

Nein, bitte nicht verwechseln: temporal tables haben nichts zu tun mit temporary tables table variables…

9 Jahren ago

SQL Server 2016 Schritt für Schritt–Installation und First Look

SQL Server 2016.. habe ich schon erwähnt, dass ich den ziemlich cool finde? Wollen wir…

9 Jahren ago

SQL Server 2016 – CTP2

Nach langer Zeit wieder mal eine Artikel von mir.. der mich besonders erfreut. SQL Server…

9 Jahren ago