ALTER DATABASE SET-Optionen (Transact-SQL)

Dieses Thema enthält die ALTER DATABASE-Syntax für das Festlegen von Datenbankoptionen. Weitere ALTER DATABASE-Syntax finden Sie unter ALTER DATABASE (Transact-SQL). Datenbankspiegelung und Kompatibilitätsgrade sind zwar SET-Optionen, werden wegen ihres Umfangs jedoch in getrennten Themen beschrieben. Weitere Informationen finden Sie unter ALTER DATABASE-Datenbankspiegelung (Transact-SQL) und ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL).

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

ALTER DATABASE database_name 
SET 
{
    { <optionspec> [ ,...n ] [ WITH <termination> ] }
}

<optionspec>::= 
{
    <auto_option> 
  | <change_tracking_option> 
  | <cursor_option> 
  | <database_mirroring_option>
  | <date_correlation_optimization_option>
  | <db_encryption_option>
  | <db_state_option>
  | <db_update_option> 
  | <db_user_access_option>
  | <external_access_option>
  | <parameterization_option>
  | <recovery_option> 
  | <service_broker_option>
  | <snapshot_option>
  | <sql_option> 
}

<auto_option> ::= 

{
    AUTO_CLOSE { ON | OFF } 
  | AUTO_CREATE_STATISTICS { ON | OFF } 
  | AUTO_SHRINK { ON | OFF } 
  | AUTO_UPDATE_STATISTICS { ON | OFF } 
  | AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }
}

<change_tracking_option> ::=
{
  CHANGE_TRACKING { 
        = ON [ <change_tracking_option_list > ] |
    <change_tracking_option_list> |
        = OFF
  }
}

<change_tracking_option_list> ::=
{
    ( <change_tracking_option> | <change_tracking_option_list> , 
    <change_tracking_option> )
}
  
<change_tracking_option> ::=
{
  AUTO_CLEANUP = { ON | OFF } 
  | CHANGE_RETENTION = { retention_period { DAYS | HOURS | MINUTES } ]
}

<cursor_option> ::= 
{
    CURSOR_CLOSE_ON_COMMIT { ON | OFF } 
  | CURSOR_DEFAULT { LOCAL | GLOBAL } 
}

<database_mirroring_option>ALTER DATABASE Database Mirroring<date_correlation_optimization_option> ::=
{
    DATE_CORRELATION_OPTIMIZATION { ON | OFF }
}

<db_encryption_option> ::=
    ENCRYPTION { ON | OFF }

<db_state_option> ::=
    { ONLINE | OFFLINE | EMERGENCY }

<db_update_option> ::=
    { READ_ONLY | READ_WRITE }

<db_user_access_option> ::=
    { SINGLE_USER | RESTRICTED_USER | MULTI_USER }

<external_access_option> ::=
{
    DB_CHAINING { ON | OFF }

  | TRUSTWORTHY { ON | OFF }
}
<parameterization_option> ::=
{
    PARAMETERIZATION { SIMPLE | FORCED }
}

<recovery_option> ::= 
{
    RECOVERY { FULL | BULK_LOGGED | SIMPLE } 
  | TORN_PAGE_DETECTION { ON | OFF }
  | PAGE_VERIFY { CHECKSUM | TORN_PAGE_DETECTION | NONE }
}

<service_broker_option> ::=
{
    ENABLE_BROKER
  | DISABLE_BROKER
  | NEW_BROKER
  | ERROR_BROKER_CONVERSATIONS
  | HONOR_BROKER_PRIORITY { ON | OFF}
}

<snapshot_option> ::=
{
    ALLOW_SNAPSHOT_ISOLATION { ON | OFF }
  | READ_COMMITTED_SNAPSHOT {ON | OFF }
}
<sql_option> ::= 
{
    ANSI_NULL_DEFAULT { ON | OFF } 
  | ANSI_NULLS { ON | OFF } 
  | ANSI_PADDING { ON | OFF } 
  | ANSI_WARNINGS { ON | OFF } 
  | ARITHABORT { ON | OFF } 
  | COMPATIBILITY_LEVEL = { 80 | 90 | 100 }
  | CONCAT_NULL_YIELDS_NULL { ON | OFF } 
  | NUMERIC_ROUNDABORT { ON | OFF } 
  | QUOTED_IDENTIFIER { ON | OFF } 
  | RECURSIVE_TRIGGERS { ON | OFF } 
}

<termination>::= 
{
    ROLLBACK AFTER integer [ SECONDS ] 
  | ROLLBACK IMMEDIATE 
  | NO_WAIT
}

Argumente

<auto_option>::=

Steuert automatische Optionen.

  • database_name
    Der Name der Datenbank, die geändert werden soll.

  • AUTO_CLOSE { ON | OFF }

    • ON
      Die Datenbank wird ordnungsgemäß heruntergefahren, und ihre Ressourcen werden freigegeben, nachdem der letzte Benutzer die Arbeit beendet hat.

      Die Datenbank wird automatisch wieder geöffnet, wenn ein Benutzer versucht, die Datenbank erneut zu verwenden. Beispielsweise durch Ausgeben einer USE database_name-Anweisung. Wurde die Datenbank ordnungsgemäß heruntergefahren und ist AUTO_CLOSE auf ON festgelegt, wird sie beim nächsten Start des Database Engine (Datenbankmodul) erst dann wieder geöffnet, wenn ein Benutzer versucht, die Datenbank zu verwenden. 

    • OFF
      Die Datenbank bleibt nach dem Beenden der Verwendung durch den letzten Benutzer geöffnet.

    Die Option AUTO_CLOSE ist sehr nützlich für Desktopdatenbanken, da mit ihrer Hilfe Datenbankdateien wie reguläre Dateien verwaltet werden können. Sie können verschoben, zur Sicherung kopiert oder sogar per E-Mail an andere Benutzer gesendet werden.

    HinweisHinweis

    In früheren Versionen von SQL Server ist AUTO_CLOSE ein synchroner Prozess, der die Leistung beeinträchtigen kann, wenn eine Anwendung auf die Datenbank zugreift, die wiederholt Verbindungen zum Database Engine (Datenbankmodul) herstellt und abbricht. Ab SQL Server 2005 ist AUTO_CLOSE ein asynchroner Prozess. Das wiederholte Öffnen und Schließen der Datenbank beeinträchtigt nicht mehr die Leistung.

    Der Status dieser Option kann mithilfe der Spalte is_auto_close_on in der sys.databases-Katalogsicht oder der IsAutoClose-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

    HinweisHinweis

    Ist AUTO_CLOSE auf ON festgelegt, geben einige Spalten in der sys.databases-Katalogsicht und DATABASEPROPERTYEX-Funktion den Wert NULL zurück, da die Datenbank nicht für den Abruf der Daten verfügbar ist. Führen Sie eine USE-Anwendung zum Öffnen der Datenbank aus, um dieses Problem zu beheben.

    HinweisHinweis

    Für die Datenbankspiegelung muss AUTO_CLOSE deaktiviert sein (OFF).

    Wenn die Datenbank auf AUTOCLOSE = ON festgelegt ist, wird mit einem Vorgang, bei dem das automatische Beenden der Datenbank initiiert wird, der Plancache für die Instanz von SQL Server gelöscht. Durch das Löschen des Plancaches wird eine Neukompilierung aller nachfolgenden Ausführungspläne verursacht, und möglicherweise entsteht plötzlich eine temporäre Verringerung der Abfrageleistung. In SQL Server 2005 Service Pack 2 enthält das SQL Server-Fehlerprotokoll für jeden geleerten Cachespeicher im Plancache folgende Informationsmeldung: "SQL Server hat für den '%s'-Cachespeicher (Bestandteil des Plancache) %d Leerungen des Cachespeichers gefunden, die von Datenbankwartungs- oder Neukonfigurierungsvorgängen ausgelöst wurden". Diese Nachricht wird alle fünf Minuten protokolliert, solange der Cache innerhalb dieses Zeitintervalls geleert wird.

  • AUTO_CREATE_STATISTICS { ON | OFF }

    • ON
      Der Abfrageoptimierer erstellt nach Bedarf Statistiken für einzelne Spalten in Abfrageprädikaten, um Abfragepläne und die Abfrageleistung zu verbessern. Diese Statistiken für einzelne Spalten werden erstellt, wenn der Abfrageoptimierer Abfragen kompiliert. Die Statistiken für einzelne Spalten werden nur für Spalten erstellt, die noch nicht der ersten Spalte eines vorhandenen Statistikobjekts darstellen.

      Die Standardeinstellung ist ON. Für die meisten Datenbanken empfiehlt sich die Verwendung der Standardeinstellung.

    • OFF
      Der Abfrageoptimierer erstellt beim Kompilieren von Abfragen keine Statistiken für einzelne Spalten in Abfrageprädikaten. Das Festlegen dieser Option auf OFF kann zu suboptimalen Abfrageplänen und einer beeinträchtigten Abfrageleistung führen.

    Der Status dieser Option kann mithilfe der Spalte is_auto_create_stats_on in der sys.databases-Katalogsicht oder der IsAutoCreateStatistics-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

    Weitere Informationen finden Sie im Abschnitt "Verwenden der datenbankweiten Statistikoptionen" in Verwenden von Statistiken zum Verbessern der Abfrageleistung.

  • AUTO_SHRINK { ON | OFF }

    • ON
      Die Datenbankdateien sind Kandidaten für das automatische periodische Verkleinern.

      Sowohl Daten- als auch Protokolldateien können automatisch verkleinert werden. AUTO_SHRINK reduziert die Größe des Transaktionsprotokolls nur, wenn für die Datenbank das SIMPLE-Wiederherstellungsmodell festgelegt ist oder wenn das Protokoll gesichert wird. Ist diese Option auf OFF festgelegt, werden die Datenbankdateien während der periodisch ausgeführten Überprüfung auf nicht verwendeten Speicherplatz nicht automatisch verkleinert.

      Durch die Option AUTO_SHRINK werden Dateien dann verkleinert, wenn mehr als 25 Prozent der Datei aus nicht verwendetem Speicherplatz bestehen. Die Datei wird auf eine Größe verkleinert, bei der 25 Prozent der Datei aus nicht verwendetem Speicherplatz bestehen, oder auf die Größe, mit der die Datei erstellt wurde, je nachdem, welcher Wert größer ist.

      Eine schreibgeschützte Datenbank kann nicht verkleinert werden.

    • OFF
      Die Datenbankdateien werden bei periodischen Prüfungen auf nicht verwendeten Speicherplatz nicht automatisch verkleinert.

    Der Status dieser Option kann mithilfe der Spalte is_auto_shrink_on in der sys.databases-Katalogsicht oder der IsAutoShrink-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

  • AUTO_UPDATE_STATISTICS { ON | OFF }

    • ON
      Gibt an, dass der Abfrageoptimierer Statistiken aktualisiert, wenn sie von einer Abfrage verwendet werden und veraltet sein könnten. Statistiken sind veraltet, nachdem die Datenverteilung in der Tabelle oder indizierten Sicht durch die Vorgänge INSERT, UPDATE, DELETE oder MERGE geändert wurde. Der Abfrageoptimierer stellt fest, wann Statistiken veraltet sein könnten, indem er die Anzahl der Datenänderungen seit der letzten Statistikaktualisierung ermittelt und sie mit einem Schwellenwert vergleicht. Der Schwellenwert basiert auf der Anzahl von Zeilen in der Tabelle oder indizierten Sicht.

      Bevor der Abfrageoptimierer eine Abfrage kompiliert und einen zwischengespeicherten Abfrageplan ausführt, sucht er nach veralteten Statistiken. Vor dem Kompilieren einer Abfrage ermittelt der Abfrageoptimierer anhand der Spalten, Tabellen und indizierten Sichten im Abfrageprädikat, welche Statistiken veraltet sein könnten. Vor dem Ausführen eines zwischengespeicherten Abfrageplans überprüft das Database Engine (Datenbankmodul), ob der Abfrageplan auf aktuelle Statistiken verweist.

      Die AUTO_UPDATE_STATISTICS-Option gilt für Statistikobjekte, die für Indizes, einzelne Spalten in Abfrageprädikaten und mit der CREATE STATISTICS-Anweisung generierte Statistiken erstellt wurden. Diese Option gilt auch für gefilterte Statistiken.

      Die Standardeinstellung ist ON. Für die meisten Datenbanken empfiehlt sich die Verwendung der Standardeinstellung.

      Verwenden Sie die AUTO_UPDATE_STATISTICS_ASYNC-Option, um anzugeben, ob die Statistiken synchron oder asynchron aktualisiert werden.

    • OFF
      Gibt an, dass der Abfrageoptimierer Statistiken nicht aktualisiert, wenn sie von einer Abfrage verwendet werden und veraltet sein könnten. Das Festlegen dieser Option auf OFF kann zu suboptimalen Abfrageplänen und einer beeinträchtigten Abfrageleistung führen.

    Der Status dieser Option kann mithilfe der Spalte is_auto_update_stats_on in der sys.databases-Katalogsicht oder der IsAutoUpdateStatistics-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

    Weitere Informationen finden Sie im Abschnitt "Verwenden der datenbankweiten Statistikoptionen" in Verwenden von Statistiken zum Verbessern der Abfrageleistung.

  • AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }

    • ON
      Gibt an, dass Statistikaktualisierungen für die AUTO_UPDATE_STATISTICS-Option asynchron sind. Der Abfrageoptimierer wartet nicht, bis Statistikaktualisierungen abgeschlossen sind, bevor Abfragen kompiliert werden.

      Das Festlegen dieser Option auf ON hat nur dann Auswirkungen, wenn AUTO_UPDATE_STATISTICS auf ON festgelegt ist.

      Die AUTO_UPDATE_STATISTICS_ASYNC-Option ist standardmäßig auf OFF festgelegt, sodass der Abfrageoptimierer Statistiken synchron aktualisiert.

    • OFF
      Gibt an, dass Statistikaktualisierungen für die AUTO_UPDATE_STATISTICS-Option synchron sind. Der Abfrageoptimierer wartet, bis Statistikaktualisierungen abgeschlossen sind, bevor Abfragen kompiliert werden.

      Das Festlegen dieser Option auf OFF hat nur dann Auswirkungen, wenn AUTO_UPDATE_STATISTICS auf ON festgelegt ist.

    Der Status dieser Option kann mithilfe der Spalte is_auto_update_stats_async_on in der sys.databases-Katalogsicht ermittelt werden.

    Weitere Informationen dazu, wann synchrone bzw. asynchrone Statistikaktualisierungen verwendet werden sollten, finden Sie im Abschnitt "Verwenden der datenbankweiten Statistikoptionen" in Verwenden von Statistiken zum Verbessern der Abfrageleistung.

<change_tracking_option>:: =

Steuert Änderungsnachverfolgungsoptionen. Sie können die Änderungsnachverfolgung aktivieren, Optionen festlegen, Optionen ändern und die Änderungsnachverfolgung deaktivieren. Beispiele hierzu finden Sie im Abschnitt "Beispiele" weiter unten in diesem Thema.

  • ON
    Aktiviert die Änderungsnachverfolgung für die Datenbank. Wenn die Änderungsnachverfolgung aktiviert wird, können auch die AUTO CLEANUP-Option und die CHANGE RETENTION-Option festgelegt werden.

  • AUTO_CLEANUP = {ON | OFF }

    • ON
      Die Änderungsnachverfolgungsdaten werden nach der angegebenen Beibehaltungsdauer automatisch entfernt.

    • OFF
      Die Änderungsnachverfolgungsdaten werden nicht aus der Datenbank entfernt.

  • CHANGE_RETENTION =retention_period { DAYS | HOURS | MINUTES }
    Gibt die Mindestdauer für die Beibehaltung von Änderungsnachverfolgungsdaten in der Datenbank an. Die Daten werden nur dann entfernt, wenn der AUTO_CLEANUP-Wert auf ON festgelegt ist.

    retention_period ist eine ganze Zahl, welche die numerische Komponente der Beibehaltungsdauer angibt.

    Die Standardaufbewahrungsdauer beträgt 2 Tage. Die Mindestbeibehaltungsdauer ist 1 Minute.

  • OFF
    Deaktiviert die Änderungsnachverfolgung für die Datenbank. Die Änderungsnachverfolgung muss erst für alle Tabellen deaktiviert werden, bevor sie für die Datenbank deaktiviert werden kann

<cursor_option>::=

Steuert Cursoroptionen.

  • CURSOR_CLOSE_ON_COMMIT { ON | OFF }

    • ON
      Alle beim Commit oder Rollback einer Transaktion geöffneten Cursor werden geschlossen.

    • OFF
      Cursor bleiben beim Commit einer Transaktion geöffnet. Beim Rollback einer Transaktion werden alle Cursor geschlossen, sofern sie nicht als INSENSITIVE oder STATIC definiert sind.

    Einstellungen auf Verbindungsebene, die mithilfe der SET-Anweisung festgelegt werden, setzen die Standardeinstellung der Datenbank für CURSOR_CLOSE_ON_COMMIT außer Kraft. ODBC- und OLE DB-Clients geben standardmäßig eine SET-Anweisung aus, durch die CURSOR_CLOSE_ON_COMMIT für die Sitzung auf OFF festgelegt wird, wenn sie eine Verbindung mit einer Instanz von SQL Server herstellen. Weitere Informationen finden Sie unter SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL).

    Der Status dieser Option kann mithilfe der Spalte is_cursor_close_on_commit_on in der sys.databases-Katalogsicht oder der IsCloseCursorsOnCommitEnabled-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

  • CURSOR_DEFAULT { LOCAL | GLOBAL }
    Steuert, ob der Cursorbereich LOCAL oder GLOBAL verwendet.

    • LOCAL
      Wenn LOCAL angegeben wurde und beim Erstellen kein Cursor als GLOBAL definiert wird, ist der Bereich des Cursors lokal für den Batch, die gespeicherte Prozedur oder den Trigger, in dem er erstellt wurde. Der Cursorname ist nur innerhalb dieses Bereichs gültig. Auf den Cursor kann durch lokale Cursorvariablen im Batch, in der gespeicherten Prozedur, im Trigger oder im OUTPUT-Parameter einer gespeicherten Prozedur verwiesen werden. Die Zuordnung des Cursors wird implizit aufgehoben, wenn der Batch, die gespeicherte Prozedur oder der Trigger beendet wird, es sei denn, der Cursor wird in einem OUTPUT-Parameter zurückgegeben. Wenn die Rückgabe in einem OUTPUT-Parameter erfolgt, wird die Zuordnung des Cursors aufgehoben, wenn die Zuordnung der letzten auf ihn verweisenden Variablen aufgehoben wird oder wenn der Cursor den Gültigkeitsbereich verlässt.

    • GLOBAL
      Wenn GLOBAL angegeben wurde und beim Erstellen kein Cursor als LOCAL definiert wird, ist der Bereich des Cursors global für die Verbindung. Auf den Cursornamen kann in jeder gespeicherten Prozedur und in jedem Batch verwiesen werden, die bzw. der von der Verbindung ausgeführt wird.

    Die Zuordnung des Cursors wird implizit nur aufgehoben, wenn die Verbindung getrennt wird. Weitere Informationen finden Sie unter DECLARE CURSOR (Transact-SQL).

    Der Status dieser Option kann mithilfe der Spalte is_local_cursor_default in der sys.databases-Katalogsicht oder der IsLocalCursorsDefault-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

<database_mirroring>

Beschreibungen der Argumente finden Sie unter ALTER DATABASE-Datenbankspiegelung (Transact-SQL).

<date_correlation_optimization_option> ::=

Steuert die Option DATE_CORRELATION_OPTIMIZATION.

  • DATE_CORRELATION_OPTIMIZATION { ON | OFF }

    • ON
      SQL Server verwaltet Korrelationsstatistiken zwischen zwei beliebigen Tabellen in der Datenbank, die durch eine FOREIGN KEY-Einschränkung verknüpft sind und über datetime-Spalten verfügen. Weitere Informationen finden Sie unter Optimieren von Abfragen, die auf korrelierte datetime-Spalten zugreifen.

    • OFF
      Es werden keine Korrelationsstatistiken verwaltet.

    Wenn DATE_CORRELATION_OPTIMIZATION auf ON festgelegt werden soll, darf keine aktive Verbindung mit der Datenbank bestehen, außer der Verbindung, über die die ALTER DATABASE-Anweisung ausgeführt wird. Anschließend werden mehrere Verbindungen unterstützt.

    Die aktuelle Einstellung der Option kann mithilfe der Spalte is_date_correlation_on in der sys.databases-Katalogsicht ermittelt werden.

<db_encryption_option>::=

Steuert den Status der Datenbankverschlüsselung.

Wenn die Verschlüsselung auf Datenbankebene aktiviert wird, werden alle Dateigruppen verschlüsselt. Alle neuen Dateigruppen erben die verschlüsselte Eigenschaft. Wenn Dateigruppen in der Datenbank auf READ ONLY festgelegt sind, schlägt der Datenbankverschlüsselungsvorgang fehl.

Der Verschlüsselungsstatus der Datenbank wird mit der dynamischen Verwaltungssicht sys.dm_database_encryption_keys angezeigt.

<db_state_option>::=

Steuert den Status der Datenbank.

  • OFFLINE
    Die Datenbank ist geschlossen, ordnungsgemäß heruntergefahren und als offline gekennzeichnet. Die Datenbank kann nicht geändert werden, während sie als offline gekennzeichnet ist.

  • ONLINE
    Die Datenbank ist geöffnet und kann verwendet werden.

  • EMERGENCY
    Die Datenbank ist als READ_ONLY gekennzeichnet, die Protokollierung deaktiviert und der Zugriff auf Mitglieder der festen Serverrolle sysadmin beschränkt. Der Status EMERGENCY wird hauptsächlich zu Problembehandlungszwecken verwendet. Beispielsweise kann für eine Datenbank, die aufgrund einer beschädigten Protokolldatei als fehlerverdächtig gekennzeichnet ist, der EMERGENCY-Status festgelegt werden. Dadurch wird u. U. für den Systemadministrator der schreibgeschützte Zugriff auf die Datenbank aktiviert. Nur Mitglieder der festen Serverrolle sysadmin können für eine Datenbank den EMERGENCY-Status festlegen.

Der Status dieser Option kann mithilfe der Spalten state und state_desc in der sys.databases-Katalogsicht oder der Status-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden. Weitere Informationen finden Sie unter Datenbankstatus.

Für eine Datenbank, die als RESTORING gekennzeichnet ist, kann nicht OFFLINE, ONLINE oder EMERGENCY festgelegt werden. Im Status RESTORING kann eine Datenbank sich während eines aktiven Wiederherstellungsvorgangs befinden oder wenn ein Wiederherstellungsvorgang einer Datenbank oder Protokolldatei aufgrund einer beschädigten Sicherungsdatei fehlschlägt. Weitere Informationen finden Sie unter Reagieren auf SQL Server-Wiederherstellungsfehler als Folge von beschädigten Sicherungen.

<db_update_option>::=

Steuert, ob Aktualisierungen für die Datenbank zugelassen sind.

  • READ_ONLY
    Benutzer können Daten aus der Datenbank lesen, jedoch nicht ändern.

  • READ_WRITE
    Die Datenbank ist für Lese- und Schreibvorgänge verfügbar.

Sie müssen über exklusiven Zugriff auf die Datenbank verfügen, um diesen Status zu ändern. Weitere Informationen finden Sie unter der SINGLE_USER-Klausel.

<db_user_access_option> ::=

Steuert den Benutzerzugriff auf die Datenbank.

  • SINGLE_USER
    Gibt an, dass jeweils nur ein Benutzer auf die Datenbank zugreifen kann. Wenn SINGLE_USER angegeben ist und andere Benutzer mit der Datenbank verbunden sind, wird die ALTER DATABASE-Anweisung blockiert, bis alle Benutzer die Verbindung mit der angegebenen Datenbank trennen. Informationen zum Außerkraftsetzen dieses Verhaltens finden Sie unter der WITH <termination>-Klausel.

    Die Datenbank verbleibt im SINGLE_USER-Modus, selbst wenn sich der Benutzer, der die Option festgelegt hat, abmeldet. Dadurch kann ein anderer Benutzer (aber nur einer) eine Verbindung mit der Datenbank herstellen.

    Bevor Sie die Datenbank auf SINGLE_USER festlegen, müssen Sie überprüfen, ob die AUTO_UPDATE_STATISTICS_ASYNC-Option auf OFF festgelegt ist. Wenn diese Option auf ON festgelegt ist, stellt der Hintergrundthread, der zum Aktualisieren von Statistiken verwendet wird, eine Verbindung mit der Datenbank her, und Sie können im Einzelbenutzermodus nicht auf die Datenbank zugreifen. Fragen Sie die is_auto_update_stats_async_on-Spalte in der sys.databases-Katalogsicht ab, um den Status dieser Option anzuzeigen. Wenn die Option auf ON festgelegt wird, sollten Sie folgende Aufgaben ausführen:

    1. Legen Sie AUTO_UPDATE_STATISTICS_ASYNC auf OFF fest.

    2. Führen Sie eine Überprüfung auf aktive asynchrone Statistikaufträge aus, indem Sie die dynamische Verwaltungssicht sys.dm_exec_background_job_queue abfragen.

    Wenn aktive Aufträge vorhanden sind, warten Sie, bis die Aufträge abgeschlossen sind, oder beenden Sie sie manuell mithilfe von KILL STATS JOB.

  • RESTRICTED_USER
    RESTRICTED_USER ermöglicht nur Mitgliedern der festen Datenbankrolle db_owner und den festen Serverrollen dbcreator und sysadmin eine Verbindung mit der Datenbank, begrenzt jedoch nicht deren Anzahl. Alle Verbindungen zur Datenbank werden in dem durch die Beendigungsklausel der ALTER DATABASE-Anweisung angegebenen Zeitraum getrennt. Sobald die Datenbank in den Status RESTRICTED_USER gewechselt hat, werden Verbindungsversuche von nicht qualifizierten Benutzern abgelehnt.

  • MULTI_USER
    Alle Benutzer, die über die entsprechenden Berechtigungen für die Verbindung mit der Datenbank verfügen, sind zugelassen.

Der Status dieser Option kann mithilfe der Spalte user_access in der sys.databases-Katalogsicht oder der UserAccess-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

<external_access_option>::=

Steuert, ob externe Ressourcen, z. B. Objekte aus einer anderen Datenbank, auf die Datenbank zugreifen können.

  • DB_CHAINING { ON | OFF }

    • ON
      Die Datenbank kann Quelle oder Ziel einer datenbankübergreifenden Besitzverkettung sein.

    • OFF
      Die Datenbank kann nicht an der datenbankübergreifenden Besitzverkettung teilnehmen.

    Wichtiger HinweisWichtig

    Die Instanz von SQL Server erkennt diese Einstellung, wenn die cross db ownership chaining-Serveroption deaktiviert (0 bzw. OFF) ist. Wenn für cross db ownership chaining der Wert 1 (ON) festgelegt ist, können alle Benutzerdatenbanken unabhängig vom Wert dieser Option Teile von datenbankübergreifenden Besitzketten sein. Diese Option wird mithilfe von sp_configure festgelegt.

    Zum Festlegen dieser Option ist die Berechtigung CONTROL SERVER für die Datenbank erforderlich. Die Option DB_CHAINING kann auf folgenden Systemdatenbanken nicht festgelegt werden: master, model und tempdb.

    Der Status der Option kann mithilfe der Spalte is_db_chaining_on in der sys.databases-Katalogsicht ermittelt werden.

    Weitere Informationen finden Sie unter Besitzketten.

  • TRUSTWORTHY { ON | OFF }

    • ON
      Datenbankmodule (z. B. benutzerdefinierte Funktionen oder gespeicherte Prozeduren), die einen Identitätswechselkontext verwenden, können auf Ressourcen außerhalb der Datenbank zugreifen.

    • OFF
      Datenbankmodule in einem Identitätswechselkontext können nicht auf Ressourcen außerhalb der Datenbank zugreifen.

    TRUSTWORTHY wird auf OFF festgelegt, wenn die Datenbank angefügt wird.

    Standardmäßig ist TRUSTWORTHY für alle Systemdatenbanken mit Ausnahme der msdb-Datenbank auf OFF festgelegt. Für die model-Datenbank und für die tempdb-Datenbank kann der Wert nicht geändert werden. Für die master-Datenbank sollten Sie die Option TRUSTWORTHY niemals auf ON festlegen.

    Zum Festlegen dieser Option ist die Berechtigung CONTROL SERVER für die Datenbank erforderlich.

    Der Status der Option kann mithilfe der Spalte is_trustworthy_on in der sys.databases-Katalogsicht ermittelt werden.

<parameterization_option> ::=

Steuert die Parametrisierungsoption.

  • PARAMETERIZATION { SIMPLE | FORCED }

    • SIMPLE
      Abfragen werden basierend auf dem Standardverhalten der Datenbank parametrisiert. Weitere Informationen finden Sie unter Einfache Parametrisierung.

    • FORCED
      SQL Server parametrisiert alle Abfragen in der Datenbank. Weitere Informationen finden Sie unter Erzwungene Parametrisierung.

    Die aktuelle Einstellung der Option kann mithilfe der Spalte is_parameterization_forced in der sys.databases-Katalogsicht ermittelt werden.

<recovery_option> ::=

Steuert Datenbankwiederherstellungsoptionen und Datenträger-E/A-Fehlerprüfung.

  • FULL
    Stellt nach einem Medienausfall mithilfe von Transaktionsprotokollsicherungen eine vollständige Wiederherstellung bereit. Falls eine Datendatei beschädigt ist, kann die Medienwiederherstellung alle Transaktionen wiederherstellen, für die ein Commit ausgeführt wurde. Weitere Informationen finden Sie unter Sichern beim vollständigen Wiederherstellungsmodell.

  • BULK_LOGGED
    Stellt nach einem Medienausfall eine Wiederherstellung durch die Kombination der besten Leistung und der geringsten Verwendung von Protokollspeicher für bestimmte umfangreiche Vorgänge oder Massenvorgänge bereit. Informationen dazu, welche Vorgänge als Massenprotokoll protokolliert werden, finden Sie unter Vorgänge, für die eine minimale Protokollierung verfügbar ist. Bei dem BULK_LOGGED-Wiederherstellungsmodell ist die Protokollierung für diese Vorgänge minimal. Weitere Informationen finden Sie unter Sichern beim massenprotokollierten Wiederherstellungsmodell.

  • SIMPLE
    Es wird eine einfache Sicherungsstrategie bereitgestellt, die minimalen Protokollspeicherplatz verwendet. Protokollspeicherplatz kann automatisch erneut verwendet werden, wenn er für die Wiederherstellung nach einem Serverfehler nicht mehr benötigt wird. Weitere Informationen finden Sie unter Sicherungen mit dem einfachen Wiederherstellungsmodell.

    Wichtiger HinweisWichtig

    Das Modell der einfachen Wiederherstellung ist einfacher zu verwalten als die anderen beiden Modelle, jedoch auf Kosten eines höheren Datenverlustes, falls eine Datendatei beschädigt ist. Alle Änderungen, die nach der neuesten Datenbank- oder differenziellen Datenbanksicherung durchgeführt wurden, gehen verloren und müssen manuell erneut eingegeben werden.

Das Standardwiederherstellungsmodell wird durch das Wiederherstellungsmodell der model-Datenbank bestimmt. Weitere Informationen zum Auswählen des geeigneten Wiederherstellungsmodells finden Sie unter Auswählen des Wiederherstellungsmodells für eine Datenbank.

Der Status dieser Option kann mithilfe der Spalten recovery_model und recovery_model_desc in der sys.databases-Katalogsicht oder der Recovery-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

  • TORN_PAGE_DETECTION { ON | OFF }

    • ON
      Unvollständige Seiten können vom Database Engine (Datenbankmodul) erkannt werden.

    • OFF
      Unvollständige Seiten können vom Database Engine (Datenbankmodul) nicht erkannt werden.

    Wichtiger HinweisWichtig

    Die TORN_PAGE_DETECTION ON | OFF-Syntaxstruktur wird in zukünftigen Versionen von SQL Server entfernt. Vermeiden Sie das Verwenden dieser Syntaxstruktur bei neuen Entwicklungsarbeiten, und planen Sie die Änderung von Anwendungen, die diese Syntaxstruktur zurzeit verwenden. Verwenden Sie stattdessen die PAGE_VERIFY-Option.

  • PAGE_VERIFY { CHECKSUM | TORN_PAGE_DETECTION | NONE }
    Entdeckt Datenbankseiten, die durch Datenträger-E/A-Pfadfehler beschädigt wurden. Datenträger-E/A-Pfadfehler können die Ursache von Datenbankbeschädigungen sein und werden im Allgemeinen durch Stromausfälle oder Datenträger-Hardwarefehler verursacht, die beim Schreiben der Seite auf den Datenträger auftreten.

    • CHECKSUM
      Berechnet eine Prüfsumme für den Inhalt der gesamten Seite und speichert den Wert im Seitenkopf, wenn eine Seite auf den Datenträger geschrieben wird. Wenn die Seite vom Datenträger gelesen wird, wird die Prüfsumme erneut berechnet und mit dem im Seitenkopf gespeicherten Prüfsummenwert verglichen. Stimmen die Werte nicht überein, wird Fehlermeldung 824 (Hinweis auf einen Prüfsummenfehler) an das SQL Server-Fehlerprotokoll und an das Windows-Ereignisprotokoll gemeldet. Ein Prüfsummenfehler weist auf ein Problem mit dem E/A-Pfad hin. Um die eigentliche Ursache zu ermitteln, müssen die Hardware, die Firmwaretreiber, das BIOS, die Filtertreiber (z. B. Antivirussoftware) und andere Komponenten des E/A-Pfads untersucht werden.

    • TORN_PAGE_DETECTION
      Speichert ein bestimmtes 2-Bit-Muster für jeden 512-Byte-Sektor in der 8-KB-Datenbankseite und wird im Seitenkopf der Datenbank gespeichert, wenn die Seite auf den Datenträger geschrieben wird. Wenn die Seite vom Datenträger gelesen wird, werden die im Seitenkopf gespeicherten zerrissenen Bits mit den tatsächlichen Seitensektorinformationen verglichen. Nicht übereinstimmende Werte weisen darauf hin, dass nur ein Teil der Seite auf den Datenträger geschrieben wurde. In dieser Situation wird Fehlermeldung 824 (Hinweis auf einen Fehler durch eine zerrissene Seite) an das SQL Server-Fehlerprotokoll und an das Windows-Ereignisprotokoll gemeldet. Zerrissene Seiten werden im Allgemeinen bei der Datenbankwiederherstellung entdeckt, wenn es sich tatsächlich um einen unvollständigen Schreibvorgang für eine Seite handelt. Allerdings können auch andere E/A-Pfadfehler jederzeit eine zerrissene Seite verursachen.

    • NONE
      Schreibvorgänge für Datenbankseiten generieren keinen CHECKSUM- oder TORN_PAGE_DETECTION-Wert. SQL Server überprüft während eines Lesevorgangs selbst dann keine Prüfsummen oder zerrissenen Seiten, wenn ein CHECKSUM- oder TORN_PAGE_DETECTION-Wert im Seitenkopf vorhanden ist.

    Beachten Sie beim Verwenden der PAGE_VERIFY-Option die folgenden wichtigen Punkte:

    • In SQL Server 2005 und SQL Server 2008 lautet der Standardwert CHECKSUM. In SQL Server 2000 ist der Standard TORN_PAGE_DETECTION.

    • Wenn eine Benutzer- oder Systemdatenbank auf SQL Server 2005 oder SQL Server 2008 aktualisiert wird, wird der PAGE_VERIFY-Wert (NONE oder TORN_PAGE_DETECTION) beibehalten. Sie sollten CHECKSUM verwenden. 

      HinweisHinweis

      In früheren Versionen von SQL Server wurde die PAGE_VERIFY-Datenbankoption für die tempdb-Datenbank auf NONE festgelegt und kann nicht geändert werden. In SQL Server 2008 lautet der Standardwert für die tempdb-Datenbank für neue Installationen von SQL Server CHECKSUM. Bei der Aktualisierung einer Installation von SQL Server bleibt der Standardwert NONE. Die Option kann geändert werden. Es wird empfohlen, CHECKSUM für die tempdb-Datenbank zu verwenden.

    • TORN_PAGE_DETECTION verwendet zwar weniger Ressourcen, bietet jedoch einen minimalen Teil des Schutzes von CHECKSUM.

    • PAGE_VERIFY kann festgelegt werden, ohne die Datenbank offline zu schalten, zu sperren oder die Parallelität der Datenbank anderweitig zu beeinträchtigen.

    • CHECKSUM und TORN_PAGE_DETECTION schließen sich gegenseitig aus. Beide Optionen können nicht gleichzeitig aktiviert werden.

    Bei Entdecken einer zerrissenen Seite oder eines Prüfsummenfehlers können Sie eine Wiederherstellung ausführen, indem Sie die Daten wiederherstellen oder den Index u. U. neu erstellen, wenn der Fehler auf Indexseiten beschränkt ist. Führen Sie DBCC CHECKDB aus, um bei einem Prüfsummenfehler den Typ der betroffenen Datenbankseite(n) zu bestimmen. Weitere Informationen zu Wiederherstellungsoptionen finden Sie unter RESTORE-Argumente (Transact-SQL). Auch wenn das Datenbeschädigungsproblem durch das Wiederherstellen der Daten behoben wird, sollte die eigentliche Ursache, wie z. B. ein Datenträger-Hardwarefehler, diagnostiziert und baldmöglichst behoben werden, um wiederholte Fehler zu vermeiden.

    SQL Server wiederholt Lesevorgänge, die wegen eines Prüfsummenfehlers, einer zerrissenen Seite oder eines anderen E/A-Fehlers fehlschlagen, vier Mal. Ist der Lesevorgang bei einem dieser Wiederholungsversuche erfolgreich, wird eine Meldung in das Fehlerprotokoll geschrieben, und der Befehl, der den Lesevorgang ausgelöst hat, wird fortgesetzt. Wenn kein Wiederholungsversuch erfolgreich ist, schlägt der Befehl mit Fehlermeldung 824 fehl.

    Weitere Informationen zu Prüfsummen, zerrissenen Seiten, Lesewiederholungen, den Fehlermeldungen 823 und 824 sowie anderen E/A-Überwachungsfunktionen von SQL Server finden Sie auf dieser Microsoft-Website.

    Die aktuelle Einstellung dieser Option kann mithilfe der page_verify_option-Spalte in der sys.databases-Katalogsicht oder der IsTornPageDetectionEnabled-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

<service_broker_option>::=

Steuert die folgenden Service Broker-Optionen: Aktivieren oder Deaktivieren der Nachrichtenübermittlung, Festlegen eines neuen Service Broker-Bezeichners oder Festlegen der Konversationsprioritäten auf ON oder OFF. Weitere Informationen zur Nachrichtenübermittlung und zu Service Broker-Bezeichnern finden Sie unter Verwalten von Service Broker-Identitäten. Weitere Informationen zu Konversationsprioritätsstufen finden Sie unter Konversationsprioritäten Beispiele, die darstellen, wie die HONOR_BROKER_PRIORITY-Option verwendet wird, finden Sie unter Verwalten von Konversationsprioritäten.

  • ENABLE_BROKER
    Gibt an, dass Service Broker für die angegebene Datenbank aktiviert ist. Die Nachrichtenübermittlung wird gestartet, und das is_broker_enabled-Flag wird in der sys.databases-Katalogsicht auf true festgelegt. Die Datenbank behält den vorhandenen Service Broker-Bezeichner bei.

    HinweisHinweis

    ENABLE_BROKER benötigt eine exklusive Datenbanksperre. Wenn Ressourcen in der Datenbank durch andere Sitzungen gesperrt wurden, wartet ENABLE_BROKER, bis die anderen Sitzungen ihre Sperren freigeben. Um Service Broker in einer Benutzerdatenbank zu aktivieren, stellen Sie sicher, dass keine anderen Sitzungen auf die Datenbank zugreifen, bevor Sie die Anweisung ALTER DATABASE SET ENABLE_BROKER ausführen. Setzen Sie zum Beispiel die Datenbank in den Einzelbenutzermodus. Um Service Broker in der msdb-Datenbank zu aktivieren, beenden Sie zunächst den SQL Server-Agent, sodass Service Broker die erforderliche Sperre abrufen kann.

  • DISABLE_BROKER
    Gibt an, dass Service Broker für die angegebene Datenbank deaktiviert ist. Die Nachrichtenübermittlung wird beendet, und das is_broker_enabled-Flag wird in der sys.databases-Katalogsicht auf false festgelegt. Die Datenbank behält den vorhandenen Service Broker-Bezeichner bei.

  • NEW_BROKER
    Gibt an, dass die Datenbank einen neuen Broker-Bezeichner erhalten sollte. Da die Datenbank als neuer Service Broker betrachtet wird, werden alle bestehenden Konversationen in der Datenbank sofort entfernt, ohne Nachrichten über das Beenden des Dialogs zu erstellen. Jede Route, die auf den alten Service Broker-Bezeichner verweist, muss mit dem neuen Bezeichner neu erstellt werden.

  • ERROR_BROKER_CONVERSATIONS
    Gibt an, dass die Service Broker-Nachrichtenübermittlung aktiviert ist. Dadurch wird der vorhandene Service Broker-Bezeichner für die Datenbank beibehalten. Service Broker beendet alle Konversationen in der Datenbank mit einem Fehler. Auf diese Weise können Anwendungen reguläre Cleanups für bestehende Konversationen ausführen.

  • HONOR_BROKER_PRIORITY {ON | OFF}

    • ON
      Bei Sendevorgängen werden die den Konversationen zugewiesenen Prioritätsstufen berücksichtigt. Nachrichten aus Konversationen mit hohen Prioritätsstufen werden in der Regel vor Nachrichten aus Konversationen mit niedrigen Prioritätsstufen gesendet.

    • OFF
      Sendevorgänge werden so ausgeführt, als hätten alle Konversationen die Standardprioritätsstufe.

    Änderungen an der HONOR_BROKER_PRIORITY-Option treten bei neuen Dialogfeldern oder Dialogfeldern, in denen keine Nachrichten darauf warten, gesendet zu werden, sofort in Kraft. Bei Dialogfeldern, in denen Nachrichten darauf warten, gesendet zu werden, wenn ALTER DATABASE ausgeführt wird, wird die neue Einstellung erst übernommen, nachdem einige Nachrichten für das Dialogfeld gesendet wurden. Es kann unterschiedlich lange dauern, bis in allen Dialogfeldern die neue Einstellung verwendet wird.

    Die aktuelle Einstellung dieser Eigenschaft wird in der is_broker_priority_honored-Spalte der sys.databases-Katalogsicht berichtet.

<snapshot_option>::=

Bestimmt die Isolationsstufe für Transaktionen.

  • ALLOW_SNAPSHOT_ISOLATION { ON| OFF }

    • ON
      Aktiviert die Snapshot-Option auf Datenbankebene. Wenn diese aktiviert ist, beginnen DML-Anweisungen mit dem Generieren von Zeilenversionen, selbst wenn keine Transaktion Snapshotisolation verwendet. Nach der Aktivierung dieser Option können Transaktionen die SNAPSHOT-Transaktionsisolationsebene angeben. Wenn eine Transaktion auf der SNAPSHOT-Isolationsstufe ausgeführt wird, sehen alle Anweisungen einen Snapshot der Daten, wie sie beim Start der Transaktion vorlagen. Greift eine Transaktion, die auf der SNAPSHOT-Isolationsstufe ausgeführt wird, auf Daten in mehreren Datenbanken zu, muss entweder in allen Datenbanken ALLOW_SNAPSHOT_ISOLATION auf ON festgelegt sein oder jede Anweisung in der Transaktion muss Sperrhinweise für alle Verweise in einer FROM-Klausel verwenden, die auf eine Tabelle in einer Datenbank verweisen, bei der ALLOW_SNAPSHOT_ISOLATION auf OFF festgelegt ist.

    • OFF
      Deaktiviert die Snapshot-Option auf Datenbankebene. Transaktionen können die SNAPSHOT-Isolationsstufe für Transaktionen nicht angeben.

    Wenn Sie ALLOW_SNAPSHOT_ISOLATION auf einen neuen Status festlegen (von ON zu OFF oder von OFF zu ON), gibt ALTER DATABASE die Kontrolle erst dann an den Aufrufer zurück, wenn ein Commit aller bestehenden Transaktionen in der Datenbank ausgeführt wurde. Hat die Datenbank bereits den in der ALTER DATABASE-Anweisung angegebenen Status, wird die Kontrolle direkt an den Aufrufer zurückgegeben. Erfolgt keine schnelle Rückgabe durch die ALTER DATABASE-Anweisung, verwenden Sie sys.dm_tran_active_snapshot_database_transactions, um zu bestimmen, ob lang andauernde Transaktionen vorhanden sind. Wird die ALTER DATABASE-Anweisung abgebrochen, verbleibt die Datenbank in dem Status, in dem sie sich vor dem Start von ALTER DATABASE befand. In der sys.databases-Katalogsicht wird der Status von Snapshot-Isolationstransaktionen in der Datenbank angegeben. Ist snapshot_isolation_state_desc = IN_TRANSITION_TO_ON, wird ALTER DATABASE ALLOW_SNAPSHOT_ISOLATION OFF für 6 Sekunden angehalten und der Vorgang dann wiederholt.

    Sie können den Status von ALLOW_SNAPSHOT_ISOLATION nicht ändern, wenn die Datenbank OFFLINE ist.

    Wenn Sie ALLOW_SNAPSHOT_ISOLATION in einer READ_ONLY-Datenbank festlegen, wird die Einstellung gespeichert, wenn die Datenbank später auf READ_WRITE festgelegt wird.

    Sie können die ALLOW_SNAPSHOT_ISOLATION-Einstellungen für die Datenbanken master, model, msdb und tempdb ändern. Wenn Sie die Einstellung für tempdb ändern, wird die Einstellung jedes Mal beibehalten, wenn die Instanz von Database Engine (Datenbankmodul) angehalten und neu gestartet wird. Wenn Sie die Einstellung für model ändern, wird diese Einstellung zur Standardeinstellung für alle neu erstellten Datenbanken, mit Ausnahme von tempdb.

    Die Option hat für die Datenbanken master und msdb die Standardeinstellung ON.

    Die aktuelle Einstellung der Option kann mithilfe der Spalte snapshot_isolation_state in der sys.databases-Katalogsicht ermittelt werden.

  • READ_COMMITTED_SNAPSHOT { ON | OFF }

    • ON
      Aktiviert die Read-Committed-Snapshot-Option auf Datenbankebene. Wenn diese aktiviert ist, beginnen DML-Anweisungen mit dem Generieren von Zeilenversionen, selbst wenn keine Transaktion Snapshotisolation verwendet. Nach der Aktivierung dieser Option verwenden die Transaktionen, die die READ COMMITTED-Isolationsstufe angeben, anstelle von Sperren die Zeilenversionsverwaltung. Wenn eine Transaktion auf der Isolationsstufe READ COMMITTED ausgeführt wird, werden Snapshots von Daten für Anweisungen so angezeigt, wie sie beim Start der Anweisung vorlagen.

    • OFF
      Deaktiviert die Read-Committed-Snapshot-Option auf Datenbankebene. Transaktionen, die die READ COMMITTED-Isolationsstufe angeben, verwenden Sperren.

    Wenn READ_COMMITTED_SNAPSHOT auf ON oder OFF festgelegt werden soll, dürfen außer der Verbindung, die den ALTER DATABASE-Befehl ausführt, dürfen keine aktiven Verbindungen zur Datenbank bestehen. Die Datenbank muss sich jedoch nicht im Einzelbenutzermodus befinden. Sie können den Status dieser Option nicht ändern, wenn die Datenbank OFFLINE ist.

    Wenn Sie READ_COMMITTED_SNAPSHOT in einer READ_ONLY-Datenbank festlegen, wird die Einstellung beibehalten, wenn die Datenbank später auf READ_WRITE festgelegt wird.

    READ_COMMITTED_SNAPSHOT kann für die Systemdatenbanken master, tempdb oder msdb nicht auf ON festgelegt werden. Wenn Sie die Einstellung für model ändern, wird die Einstellung zur Standardeinstellung für alle neu erstellten Datenbanken, mit Ausnahme von tempdb.

    Die aktuelle Einstellung der Option kann mithilfe der Spalte is_read_committed_snapshot_on in der sys.databases-Katalogsicht ermittelt werden.

<sql_option>::=

Steuert die ANSI-Kompatibilitätsoptionen auf der Datenbankebene.

  • ANSI_NULL_DEFAULT { ON | OFF }
    Legt den Standardwert (NULL oder NOT NULL) einer Spalte, eines alias data type oder eines CLR user-defined type fest, für den die NULL-Zulässigkeit nicht explizit in den CREATE TABLE- oder ALTER TABLE-Anweisungen festgelegt wurde. Spalten, die mit Einschränkungen definiert werden, folgen den Einschränkungsregeln, und zwar ungeachtet dieser Einstellung.

    • ON
      Der Standardwert ist NULL.

    • OFF
      Der Standardwert ist NOT NULL.

    Einstellungen auf Verbindungsebene, die mithilfe der SET-Anweisung festgelegt werden, setzen die Standardeinstellung der Datenbank für ANSI_NULL_DEFAULT außer Kraft. ODBC- und OLE DB-Clients geben standardmäßig eine SET-Anweisung auf Verbindungsebene aus, durch die ANSI_NULL_DEFAULT für die Sitzung auf ON festgelegt wird, wenn sie eine Verbindung mit einer Instanz von SQL Server herstellen. Weitere Informationen finden Sie unter SET ANSI_NULL_DFLT_ON (Transact-SQL).

    Für die ANSI-Kompatibilität wird durch Festlegen der Datenbankoption ANSI_NULL_DEFAULT auf ON der Datenbankstandardwert auf NULL geändert.

    Der Status dieser Option kann mithilfe der Spalte is_ansi_null_default_on in der sys.databases-Katalogsicht oder der IsAnsiNullDefault-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

  • ANSI_NULLS { ON | OFF }

    • ON
      Alle Vergleiche mit einem Nullwert ergeben UNKNOWN.

    • OFF
      Vergleiche von Nicht-UNICODE-Werten mit einem Nullwert ergeben TRUE, wenn beide Werte NULL sind.

    Wichtiger HinweisWichtig

    In einer späteren Version von MicrosoftSQL Server wird ANSI_NULLS immer auf ON festgelegt, und jede Anwendung, für die die Option explizit auf OFF festgelegt wird, löst einen Fehler aus. Verwenden Sie dieses Feature nicht beim Entwickeln neuer Anwendungen, und planen Sie eine Änderung von Anwendungen, in denen es zurzeit verwendet wird.

    Einstellungen auf Verbindungsebene, die mithilfe der SET-Anweisung festgelegt werden, setzen die Standardeinstellung der Datenbank für ANSI_NULLS außer Kraft. ODBC- und OLE DB-Clients geben standardmäßig eine SET-Anweisung auf Verbindungsebene aus, durch die ANSI_NULLS für die Sitzung auf ON festgelegt wird, wenn sie eine Verbindung mit einer Instanz von SQL Server herstellen. Weitere Informationen finden Sie unter SET ANSI_NULLS (Transact-SQL).

    SET ANSI_NULLS muss ebenfalls auf ON festgelegt sein, wenn Sie Indizes auf berechneten Spalten oder indizierten Sichten erstellen oder ändern.

    Der Status dieser Option kann mithilfe der Spalte is_ansi_nulls_on in der sys.databases-Katalogsicht oder der IsAnsiNullsEnabled-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

  • ANSI_PADDING { ON | OFF }

    • ON
      Zeichenfolgen werden vor der Konvertierung oder dem Einfügen in einen varchar-Datentyp oder nvarchar-Datentyp durch Auffüllen mit Leerzeichen auf dieselbe Länge gebracht.

      Nachfolgende Leerzeichen in Zeichenwerten, die in varchar- oder nvarchar-Spalten eingefügt werden, und nachfolgende Nullen in Binärwerten, die in varbinary-Spalten eingefügt werden, werden nicht abgeschnitten. Werte werden nicht bis zur Spaltenlänge aufgefüllt.

    • OFF
      Nachfolgende Leerzeichen für varchar oder nvarchar und Nullen (0) für varbinary werden abgeschnitten.

    Ist OFF festgelegt, wirkt sich diese Einstellung nur auf die Definition neuer Spalten aus.

    Wichtiger HinweisWichtig

    In einer späteren Version von SQL Server wird ANSI_PADDING immer auf ON festgelegt, und jede Anwendung, für die die Option explizit auf OFF festgelegt ist, löst einen Fehler aus. Verwenden Sie dieses Feature nicht beim Entwickeln neuer Anwendungen, und planen Sie eine Änderung von Anwendungen, in denen es zurzeit verwendet wird.

    char(n) und binary(n)-Spalten, die Nullen zulassen, werden durch Auffüllen mit Leerzeichen auf die Länge der Spalte gebracht, wenn ANSI_PADDING auf ON festgelegt ist, nachfolgende Leerzeichen und Nullen (0) werden jedoch abgeschnitten, wenn ANSI_PADDING auf OFF festgelegt ist. char(n) und binary(n)-Spalten, die keine Nullen zulassen, werden durch Auffüllen mit Leerzeichen immer auf die Länge der Spalte gebracht.

    Einstellungen auf Verbindungsebene, die mithilfe der SET-Anweisung festgelegt werden, setzen die Standardeinstellung der Datenbank für ANSI_PADDING außer Kraft. ODBC- und OLE DB-Clients geben standardmäßig eine SET-Anweisung aus, durch die ANSI_PADDING für die Sitzung auf ON festgelegt wird, wenn sie eine Verbindung mit einer Instanz von SQL Server herstellen. Weitere Informationen finden Sie unter SET ANSI_PADDING (Transact-SQL).

    Wichtiger HinweisWichtig

    Es wird empfohlen, für ANSI_PADDING stets den Wert ON festzulegen. ANSI_PADDING muss beim Erstellen oder Bearbeiten von Indizes auf berechneten Spalten oder indizierten Sichten auf ON festgelegt sein.

    Der Status dieser Option kann mithilfe der Spalte is_ansi_padding_on in der sys.databases-Katalogsicht oder der IsAnsiPaddingEnabled-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

  • ANSI_WARNINGS { ON | OFF }

    • ON
      Fehler oder Warnungen werden ausgegeben, wenn Bedingungen wie eine Division durch Null oder Nullwerte in Aggregatfunktionen auftreten.

    • OFF
      Bei Bedingungen wie einer Division durch Null werden keine Warnungen ausgegeben, und Nullwerte werden zurückgegeben.

    SET ANSI_WARNINGS muss auf ON festgelegt sein, wenn Sie Indizes für berechnete Spalten oder indizierte Sichten erstellen oder ändern.

    Einstellungen auf Verbindungsebene, die mithilfe der SET-Anweisung festgelegt werden, setzen die Standardeinstellung der Datenbank für ANSI_WARNINGS außer Kraft. ODBC- und OLE DB-Clients geben standardmäßig eine SET-Anweisung aus, durch die ANSI_WARNINGS für die Sitzung auf ON festgelegt wird, wenn sie eine Verbindung mit einer Instanz von SQL Server herstellen. Weitere Informationen finden Sie unter SET ANSI_WARNINGS (Transact-SQL).

    Der Status dieser Option kann mithilfe der Spalte is_ansi_warnings_on in der sys.databases-Katalogsicht oder der IsAnsiWarningsEnabled-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

  • ARITHABORT { ON | OFF }

    • ON
      Eine Abfrage wird beendet, wenn während der Abfrage ein Überlauffehler oder ein Fehler aufgrund einer Division durch Null auftritt.

    • OFF
      Es wird eine Warnmeldung angezeigt, wenn einer dieser Fehler auftritt. Die Abfrage, der Batch oder die Transaktion wird jedoch so fortgeführt, als sei kein Fehler aufgetreten.

    SET ARITHABORT muss auf ON festgelegt sein, wenn Sie Indizes für berechnete Spalten oder indizierte Sichten erstellen oder ändern.

    Der Status dieser Option kann mithilfe der Spalte is_arithabort_on in der sys.databases-Katalogsicht oder der IsArithmeticAbortEnabled-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

  • COMPATIBILITY_LEVEL { 80 | 90 | 100 }
    Weitere Informationen finden Sie unter ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL).

  • CONCAT_NULL_YIELDS_NULL { ON | OFF }

    • ON
      Das Ergebnis einer Verkettungsoperation ist NULL, wenn einer der Operanden NULL ist. Wenn z. B. die Zeichenfolge "This is" und NULL verkettet wird, ist das Ergebnis NULL statt "This is".

    • OFF
      Der Nullwert wird als leere Zeichenfolge behandelt.

    CONCAT_NULL_YIELDS_NULL muss auf ON festgelegt sein, wenn Sie Indizes auf berechneten Spalten oder indizierten Sichten erstellen oder ändern.

    Wichtiger HinweisWichtig

    In einer späteren Version von SQL Server wird CONCAT_NULL_YIELDS_NULL immer auf ON festgelegt, und jede Anwendung, für die die Option explizit auf OFF festgelegt wurde, löst einen Fehler aus. Verwenden Sie dieses Feature nicht beim Entwickeln neuer Anwendungen, und planen Sie eine Änderung von Anwendungen, in denen es zurzeit verwendet wird.

    Einstellungen auf Verbindungsebene, die mithilfe der SET-Anweisung festgelegt werden, setzen die Standardeinstellung der Datenbank für CONCAT_NULL_YIELDS_NULL außer Kraft. ODBC- und OLE DB-Clients geben standardmäßig eine SET-Anweisung aus, durch die CONCAT_NULL_YIELDS_NULL für die Sitzung auf ON festgelegt wird, wenn sie eine Verbindung mit einer Instanz von SQL Server herstellen. Weitere Informationen finden Sie unter SET CONCAT_NULL_YIELDS_NULL (Transact-SQL).

    Der Status dieser Option kann mithilfe der Spalte is_concat_null_yields_null_on in der sys.databases-Katalogsicht oder der IsNullConcat-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

  • QUOTED_IDENTIFIER { ON | OFF }

    • ON
      Doppelte Anführungszeichen können zum Einschließen begrenzter Bezeichner verwendet werden.

      Alle Zeichenfolgen, die durch doppelte Anführungszeichen begrenzt werden, werden als Objektbezeichner interpretiert. Bezeichner in Anführungszeichen müssen nicht den Transact-SQL-Regeln für Bezeichner entsprechen. Sie können Schlüsselwörter darstellen und Zeichen einschließen, die in Transact-SQL-Bezeichnern sonst nicht zulässig sind. Ein einfaches Anführungszeichen (’), das zur Literalzeichenfolge selbst gehört, kann durch doppelte Anführungszeichen (’’) dargestellt werden.

    • OFF
      Bezeichner dürfen nicht in Anführungszeichen eingeschlossen werden und müssen allen Transact-SQL-Regeln für Bezeichner entsprechen. Literale können in einfache oder doppelte Anführungszeichen gesetzt werden.

    In SQL Server ist es zudem möglich, Bezeichner durch eckige Klammern ([ ]) zu begrenzen. Eckige Klammern können jederzeit verwendet werden. Die Einstellung für QUOTED_IDENTIFIER spielt keine Rolle. Weitere Informationen finden Sie unter Begrenzte Bezeichner (Datenbankmodul).

    Beim Erstellen einer Tabelle wird die Option QUOTED IDENTIFIER immer als ON in den Metadaten der Tabelle gespeichert, selbst wenn die Option beim Erstellen der Tabelle auf OFF festgelegt war.

    Einstellungen auf Verbindungsebene, die mithilfe der SET-Anweisung festgelegt werden, setzen die Standardeinstellung der Datenbank für QUOTED_IDENTIFIER außer Kraft. ODBC- und OLE DB-Clients geben standardmäßig eine SET-Anweisung aus, durch die QUOTED_IDENTIFIER auf ON festgelegt wird, wenn sie eine Verbindung mit SQL Server herstellen. Weitere Informationen finden Sie unter SET QUOTED_IDENTIFIER (Transact-SQL).

    Der Status dieser Option kann mithilfe der Spalte is_quoted_identifier_on in der sys.databases-Katalogsicht oder der IsQuotedIdentifiersEnabled-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

  • NUMERIC_ROUNDABORT { ON | OFF }

    • ON
      Es wird ein Fehler generiert, wenn ein Genauigkeitsverlust in einem Ausdruck auftritt.

    • OFF
      Bei Genauigkeitsverlusten werden keine Fehlermeldungen generiert, und das Ergebnis wird auf die Genauigkeit der Spalte oder Variablen gerundet, in der das Ergebnis gespeichert ist.

    NUMERIC_ROUNDABORT muss auf OFF festgelegt sein, wenn Sie Indizes für berechnete Spalten oder indizierte Sichten erstellen oder ändern.

    Der Status dieser Option kann mithilfe der Spalte is_numeric_roundabort_on in der sys.databases-Katalogsicht oder der IsNumericRoundAbortEnabled-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

  • RECURSIVE_TRIGGERS { ON | OFF }

    • ON
      Das rekursive Auslösen von AFTER-Triggern ist zugelassen.

    • OFF
      Nur das direkte rekursive Auslösen von AFTER-Triggern ist nicht zugelassen. Legen Sie die Serveroption für verschachtelte Trigger mithilfe von sp_configure auf 0 fest, um auch die indirekte Rekursion von AFTER-Triggern zu deaktivieren.

    HinweisHinweis

    Nur die direkte Rekursion wird verhindert, wenn RECURSIVE_TRIGGERS auf OFF festgelegt ist. Sie müssen auch die nested triggers-Serveroption auf 0 festlegen, um die indirekte Rekursion zu deaktivieren.

    Der Status dieser Option kann mithilfe der Spalte is_recursive_triggers_on in der sys.databases-Katalogsicht oder der IsRecursiveTriggersEnabled-Eigenschaft der DATABASEPROPERTYEX-Funktion ermittelt werden.

WITH <termination>::=

Gibt an, wann beim Übergang der Datenbank von einem Zustand in einen anderen für unvollständige Transaktionen ein Rollback ausgeführt werden soll. Wird die Beendigungsklausel ausgelassen, wartet die ALTER DATABASE-Anweisung auf unbestimmte Zeit, wenn keine Sperre für die Datenbank besteht. Es kann nur eine Beendigungsklausel angegeben werden, und diese steht hinter den SET-Klauseln.

HinweisHinweis

Nicht alle Datenbankoptionen verwenden die WITH <termination>-Klausel. Weitere Informationen finden Sie in der Tabelle unter "Festlegen von Optionen" im Abschnitt mit den Hinweisen.

  • ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE
    Gibt an, ob ein Rollback sofort oder nach Ablauf der angegebenen Sekundenzahl ausgeführt werden soll.

  • NO_WAIT
    Gibt an, dass die Anforderung fehlschlägt, wenn diese Änderung des Datenbankstatus oder der Datenbankoption nicht sofort vollständig vorgenommen werden kann, ohne dass darauf gewartet werden muss, dass Transaktionen selbst einen Commit oder Rollback ausführen.

Hinweise

Festlegen von Optionen

Verwenden Sie die sys.databases-Katalogsicht oder DATABASEPROPERTYEX, um die aktuellen Einstellungen für Datenbankoptionen abzurufen. Eine Liste der Standardwerte, die einer Datenbank bei ihrem Erstellen zugewiesen werden, finden Sie unter Festlegen von Datenbankoptionen.

Wenn Sie eine Datenbankoption festlegen, tritt die Änderung sofort in Kraft.

Wenn Sie die Standardwerte einer Datenbankoption für alle neu erstellten Datenbanken ändern möchten, ändern Sie die entsprechende Datenbankoption in der model-Datenbank.

Nicht alle Datenbankoptionen verwenden die WITH <termination>-Klausel oder können zusammen mit anderen Optionen festgelegt werden. In der folgenden Tabelle sind die Optionen und ihr Options- und Beendigungsstatus aufgeführt.

Optionskategorie

Kann mit anderen Optionen angegeben werden

Kann die WITH <termination>-Klausel verwenden

<db_state_option>

Ja

Ja

<<db_user_access_option>>

Ja

Ja

<db_update_option>

Ja

Ja

<<external_access_option>>

Ja

Nein

<cursor_option>

Ja

Nein

<auto_option>

Ja

Nein

<<sql_option>>

Ja

Nein

<recovery_option>

Ja

Nein

<<database_mirroring_option>>

Nein

Nein

ALLOW_SNAPSHOT_ISOLATION

Nein

Nein

READ_COMMITTED_SNAPSHOT

Nein

Ja

<<service_broker_option>>

Ja

Nein

DATE_CORRELATION_OPTIMIZATION

Ja

Ja

<parameterization_option>

Ja

Ja

<change_tracking_option>

Ja

Ja

<db_encryption>

Ja

Nein

Der Plancache für die Instanz von SQL Server wird gelöscht, indem eine der folgenden Optionen festgelegt wird:

OFFLINE

READ_WRITE

ONLINE

MODIFY FILEGROUP DEFAULT

MODIFY_NAME

MODIFY FILEGROUP READ_WRITE

COLLATE

MODIFY FILEGROUP READ_ONLY

READ_ONLY

 

Durch das Löschen des Plancaches wird eine Neukompilierung aller nachfolgenden Ausführungspläne verursacht, und möglicherweise entsteht plötzlich eine temporäre Verringerung der Abfrageleistung. Für jeden geleerten Cachespeicher im Plancache enthält das SQL Server-Fehlerprotokoll folgende Meldung zur Information: "SQL Server hat für den '%s'-Cachespeicher (Bestandteil des Plancache) %d Leerungen des Cachespeichers gefunden, die von Datenbankwartungs- oder Neukonfigurierungsvorgängen ausgelöst wurden". Diese Nachricht wird alle fünf Minuten protokolliert, solange der Cache innerhalb dieses Zeitintervalls geleert wird. 

Beispiele

A. Festlegen von Optionen für eine Datenbank

Im folgenden Beispiel werden die Optionen für das Wiederherstellungsmodell und die Datenseitenüberprüfung für die AdventureWorks -Beispieldatenbank festgelegt.

USE master;
GO
ALTER DATABASE AdventureWorks 
SET RECOVERY FULL, PAGE_VERIFY CHECKSUM;
GO

B. Festlegen der Datenbank auf READ_ONLY

Das Ändern des Status einer Datenbank oder Dateigruppe auf READ_ONLY oder READ_WRITE erfordert den exklusiven Zugriff auf die Datenbank. Im folgenden Beispiel wird die Datenbank auf den SINGLE_USER-Modus festgelegt, um exklusiven Zugriff zu erhalten. Anschließend wird in dem Beispiel der Zustand der AdventureWorks-Datenbank auf READ_ONLY festgelegt und der Zugriff auf die Datenbank an alle Benutzer zurückgegeben.

HinweisHinweis

In diesem Beispiel wird die Beendigungsoption WITH ROLLBACK IMMEDIATE in der ersten ALTER DATABASE-Anweisung verwendet. Für alle unvollständigen Transaktionen wird ein Rollback ausgeführt, und alle anderen Verbindungen zur AdventureWorks-Beispieldatenbank werden sofort getrennt.

USE master;
GO
ALTER DATABASE AdventureWorks
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE AdventureWorks
SET READ_ONLY;
GO
ALTER DATABASE AdventureWorks
SET MULTI_USER;
GO

C. Aktivieren der Snapshotisolation für eine Datenbank

Im folgenden Beispiel wird die Option für das Snapshotisolations-Framework für die AdventureWorks-Datenbank aktiviert.

USE AdventureWorks;
GO
-- Check the state of the snapshot_isolation_framework
-- in the database.
SELECT name, snapshot_isolation_state,
     snapshot_isolation_state_desc AS description
FROM sys.databases
WHERE name = N'AdventureWorks';
GO
USE master;
GO
ALTER DATABASE AdventureWorks
    SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
-- Check again.
SELECT name, snapshot_isolation_state,
     snapshot_isolation_state_desc AS description
FROM sys.databases
WHERE name = N'AdventureWorks';
GO

Das Resultset zeigt, dass das Framework für die Snapshotisolation aktiviert ist.

name            snapshot_isolation_state  description
--------------- ------------------------  -----------
AdventureWorks  1                         ON

D. Aktivieren, Ändern und Deaktivieren der Änderungsnachverfolgung

Im folgenden Beispiel wird die Änderungsnachverfolgung für die AdventureWorks-Datenbank aktiviert und die Aufbewahrungsdauer auf 4 Tage festgelegt.

ALTER DATABASE AdventureWorks
SET CHANGE_TRACKING = ON
(AUTO_CLEANUP = ON, CHANGE_RETENTION = 2 DAYS);

Das folgende Beispiel veranschaulicht, wie die Beibehaltungsdauer in 3 Tage geändert wird.

ALTER DATABASE AdventureWorks
SET CHANGE_TRACKING (CHANGE_RETENTION = 3 DAYS);

Das folgende Beispiel veranschaulicht, wie die Änderungsnachverfolgung für die AdventureWorks-Datenbank deaktiviert wird.

ALTER DATABASE AdventureWorks
SET CHANGE_TRACKING = OFF;

Dokumentänderungsverlauf

Aktualisierter Inhalt

Die Beschreibungen für AUTO_CREATE_STATISTICS, AUTO_UPDATE_STATISTICS und AUTO_UPDATE_STATISTICS_ASYNC wurden überarbeitet, um die Genauigkeit zu verbessern.