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!
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.
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!
In SQL Server 2016 wurde das sog. dynamic data masking eingeführt. Eine Möglichkeit Daten bei…
Seit Sharepoint Server 2007 präsentiert sich die Installation immer auf die gleiche Weise. Gerade mal,…
Es weihnachtet! Gerade bekam ich von einer Kollegin Plätzchen angeboten mit der Größe eines Diskus…
Nein, bitte nicht verwechseln: temporal tables haben nichts zu tun mit temporary tables table variables…
SQL Server 2016.. habe ich schon erwähnt, dass ich den ziemlich cool finde? Wollen wir…
Nach langer Zeit wieder mal eine Artikel von mir.. der mich besonders erfreut. SQL Server…