Fehlerhafte Änderungen an Features des Datenbankmoduls in SQL Server 2008

In diesem Thema werden fehlerhafte Änderungen in Database Engine (Datenbankmodul) beschrieben. Diese Änderungen können unter Umständen zur Funktionsunfähigkeit von Anwendungen, Skripts oder Funktionen führen, die auf früheren Versionen von SQL Server basieren. Diese Probleme können nach einer Aktualisierung auftreten. Weitere Informationen finden Sie unter Verwenden des Updateratgebers zur Vorbereitung auf Aktualisierungen.

Sortierungen

Feature

Beschreibung

Neue Sortierungen

In SQL Server 2008 werden neue Sortierungen eingeführt, die vollständig an die Sortierungen von Windows Server 2008 angepasst sind. Durch die 80 neuen Sortierungen wurde die linguistische Genauigkeit verbessert; sie sind mit dem Versionshinweis "* _100" gekennzeichnet. Beachten Sie, dass eine neue Sortierung für den Server oder die Datenbank möglicherweise von Clients mit älteren Treibern nicht erkannt wird. Unbekannte Sortierungen können zu Anwendungsfehlern führen. Ziehen Sie die folgenden Lösungen in Betracht:

  • Aktualisieren Sie das Clientbetriebssystem, um die zugrunde liegenden Systemsortierungen zu aktualisieren.

  • Wenn auf dem Client Datenbankclient-Software installiert ist, sollten Sie ein Serviceupdate der Datenbankclient-Software in Erwägung ziehen.

  • Wählen Sie eine vorhandene Sortierung aus, die einer Codepage auf dem Client zugeordnet wird.

Weitere Informationen finden Sie unter Festlegen und Ändern von Sortierungen.

Common Language Runtime (CLR)

Feature

Beschreibung

CLR-Assemblys

Wenn eine Datenbank auf SQL Server 2008 aktualisiert wird, wird die Microsoft.SqlServer.Types-Assembly zur Unterstützung neuer Datentypen automatisch installiert. Updateratgeber-Regeln erkennen alle Benutzertypen oder Assemblys mit in Konflikt stehenden Namen. Der Updateratgeber schlägt im Fall von in Konflikt stehenden Assemblys das Umbenennen vor, und bei in Konflikt stehenden Typen das Umbenennen oder das Verwenden von zweiteiligen Namen im Code, um auf diesen bereits vorhandenen Benutzertypen zu verweisen.

Wenn bei einer Datenbankaktualisierung eine Benutzerassembly mit in Konflikt stehendem Namen entdeckt wird, wird diese Assembly automatisch umbenannt und die Datenbank in den Fehlerverdachtmodus versetzt.

Sollte während der Aktualisierung ein Benutzertyp mit in Konflikt stehendem Namen vorhanden sein, werden keine speziellen Schritte ausgeführt. Nach der Aktualisierung sind sowohl der alte Benutzertyp als auch der neue Systemtyp vorhanden. Der Benutzertyp steht nur bei Verwendung von zweiteiligen Namen zur Verfügung.

CLR-Assemblys

SQL Server 2008 installiert .NET Framework 3.5 SP1, woduch Bibliotheken im globalen Assemblycache (Global Assembly Cache, GAC) aktualisiert werden. Wenn die SQL Server-Datenbank nicht unterstützte Bibliotheken enthält, kann die SQL Server-Anwendung nach einer Aktualisierung auf SQL Server 2008 möglicherweise nicht mehr verwendet werden. Das liegt daran, dass durch Warten oder Aktualisieren von Bibliotheken im GAC die entsprechenden Assemblys in SQL Server nicht aktualisiert werden. Wenn eine Assembly sowohl in einer SQL Server-Datenbank als auch im GAC vorhanden ist, müssen die beiden Kopien der Assembly genau übereinstimmen. Stimmen sie nicht überein, tritt ein Fehler auf, wenn die Assembly von der SQL Server CLR-Integration verwendet wird. Weitere Informationen finden Sie unter Unterstützte .NET Framework-Bibliotheken.

Bedienen oder aktualisieren Sie nach der Aktualisierung der Datenbank die Kopie der Assembly in den SQL Server-Datenbanken mit der ALTER ASSEMBLY-Anweisung. Weitere Informationen finden Sie im Knowledge Base-Artikel 949080.

Sie können auch die folgende Abfrage in Ihrer Datenbank ausführen, um festzustellen, ob darin nicht unterstützte .NET Framework-Bibliotheken verwendet werden.

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';

CLR-Routinen

Durch Identitätswechsel innerhalb der benutzerdefinierten CLR-Funktionen, benutzerdefinierten Aggregate oder benutzerdefinierten Typen (User-Defined Types, UDTs) können kann nach der Aktualisierung auf SQL Server 2008 bei der Anwendung der Fehler 6522 auftreten.

Die folgenden Szenarios können in SQL Server 2005 erfolgreich ausgeführt werden, nicht jedoch in SQL Server 2008. Für jedes Szenario werden Auflösungen bereitgestellt.

  1. Benutzerdefinierte CLR-Funktionen, benutzerdefinierte Aggregate oder UDT-Methoden, für die Identitätswechsel verwendet werden, besitzen einen Parameter vom Typ nvarchar(max), varchar(max), varbinary(max), ntext, text, image oder einen umfangreichen UDT, nicht jedoch das DataAccessKind.Read-Attribut für die Methode.

    Um dieses Problem zu beheben, fügen Sie das DataAccessKind.Read-Attribut der Methode hinzu, kompilieren Sie die Assembly erneut, und stellen Sie die Routine und die Assembly erneut bereit.

  2. Eine CLR-Tabellenwertfunktion, die über eine Init-Methode verfügt, die Identitätswechsel ausführt.

    Um dieses Problem zu beheben, fügen Sie das DataAccessKind.Read-Attribut der Methode hinzu, kompilieren Sie die Assembly erneut, und stellen Sie die Routine und die Assembly erneut bereit.

  3. Eine CLR-Tabellenwertfunktion, die über eine FillRow-Methode verfügt, die Identitätswechsel ausführt.

    Um dieses Problem zu beheben, entfernen Sie den Identitätswechsel aus der FillRow-Methode. Greifen Sie mit der FillRow-Methode nicht auf externe Ressourcen zu. Greifen Sie auf externe Ressourcen stattdessen mit der Init-Methode zu.

Dynamische Verwaltungssichten

Sicht

Beschreibung

sys.dm_os_sys_info

Entfernt die Spalte cpu_ticks_in_ms- und die sqlserver_start_time_cpu_ticks.

sys.dm_exec_query_resource_semaphores sys.dm_exec_query_memory_grants

Die Spalte resource_semaphore_id-Spalte stellt keine eindeutige ID in SQL Server 2008 dar. Diese Änderung kann die Abfrageausführung bei der Problembehandlung beeinflussen. Weitere Informationen finden Sie unter sys.dm_exec_query_resource_semaphores (Transact-SQL).

Fehler und Ereignisse

Feature

Beschreibung

Fehler beim Anmelden

In SQL Server 2005 wird der Fehler 18452 zurückgegeben, wenn versucht wird, mit einem SQL-Anmeldenahmen eine Verbindung zu einem Server herzustellen, der nur die Windows-Authentifizierung verwendet. In SQL Server 2008 wird stattdessen der Fehler 18456 zurückgegeben.

Showplan

Feature

Beschreibung

Showplan (XML-Schema)

Ein neues SeekPredicateNew-Element wird dem Showplan-XML-Schema hinzugefügt, und die einschließende XSD-Sequenz (SqlPredicatesType) wird in ein <xsd:choice>-Element konvertiert. Anstelle von einem oder mehreren SeekPredicate-Elementen werden nun eines oder mehrere SeekPredicateNew-Elemente für Showplan XML angezeigt Die beiden Elemente schließen sich gegenseitig aus. SeekPredicate wird im Showplan-XML-Schema für die Rückwärtskompatibilität angezeigt; Abfragepläne, die in SQL Server 2008 erstellt wurden, enthalten jedoch möglicherweise das SeekPredicateNew-Element. Anwendungen, die nur das untergeordnete SeekPredicate-Element aus dem Knoten ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates abrufen sollen, können möglicherweise nicht ordnungsgemäß ausgeführt werden, wenn SeekPredicate nicht vorhanden ist. Schreiben Sie die Anwendung um, so dass entweder das SeekPredicate-Element oder das SeekPredicateNew-Element für diesen Knoten abgerufen wird. Weitere Informationen finden Sie unter Verbesserte Abfrageverarbeitung bei partitionierten Tabellen und Indizes.

Showplan (XML-Schema)

Dem komplexen ObjectType-Typ wird im Showplan-XML-Schema ein neues IndexKind-Attribut hinzugefügt. Anwendungen, die eine strenge Validierung von SQL Server-Plänen anhand des SQL Server 2005-Schemas durchführen, generieren einen Fehler.

Transact-SQL

Feature

Beschreibung

ALTER_AUTHORIZATION_DATABASE DDL-Ereignis

Wenn das DDL-Ereignis ALTER_AUTHORIZATION_DATABASE in SQL Server 2005 ausgelöst wird, wird der Wert "object" im ObjectType-Element der XML-Daten von EVENTDATA für das Ereignis zurückgegeben, wenn der Entitätstyp des sicherungsfähigen Elements im DDL-Vorgang (Data Definition Language, Datendefinitionssprache) ein Objekt darstellt. In SQL Server 2008 wird der tatsächliche Typ (z. B. "table" oder "function") zurückgegeben.

CONVERT

Wenn ein ungültiger Stil an die CONVERT-Funktion übergeben wird und eine Konvertierung vom Binärformat ins Zeichenformat oder vom Zeichenformat ins Binärformat ausgeführt werden soll, wird ein Fehler zurückgegeben. In früheren Versionen von SQL Server wurde der ungültige Stil bei Konvertierungen vom Binärformat ins Zeichenformat oder vom Zeichenformat ins Binärformat auf den Standardstil festgelegt.

GRANT/DENY/REVOKE EXECUTE für Assemblys

EXECUTE-Berechtigungen können nicht für Assemblys gewährt, verweigert oder widerrufen werden. Diese Berechtigung hat keine Auswirkungen mehr und generiert einen Fehler. Gewähren, verweigern oder widerrufen Sie die EXECUTE-Berechtigung stattdessen für gespeicherte Prozeduren oder Funktionen, die auf die Assemblymethode verweisen.

GRANT/DENY/REVOKE-Berechtigungen für Systemtypen

Berechtigungen können nicht für Systemtypen gewährt, verweigert oder widerrufen werden. Diese Anweisungen können in früheren Versionen von SQL Server zwar erfolgreich ausgeführt werden; sie haben jedoch keine Auswirkungen. In SQL Server 2008 wird ein Fehler zurückgegeben.

OUTPUT-Klausel

Um nicht deterministisches Verhalten zu vermeiden, kann die OUTPUT-Klausel nicht auf eine Spalte einer Sicht oder Inline-Tabellenwertfunktion verweisen, wenn diese Spalte mithilfe einer der folgenden Methoden definiert wurde:

  • Eine Unterabfrage.

  • Eine benutzerdefinierte Funktion, die auf Benutzer- oder Systemdaten zugreift bzw. bei der davon ausgegangen wird, dass sie einen solchen Zugriff ausführt.

  • Eine berechnete Spalte, die eine benutzerdefinierte Funktion enthält, die in ihrer Definition auf Benutzer- oder Systemdaten zugreift.

Wenn SQL Server eine solche Spalte in der OUTPUT-Klausel erkennt, wird der Fehler 4186 ausgelöst. Weitere Informationen finden Sie unter MSSQLSERVER_4186.

OUTPUT INTO-Klausel

Für die Zieltabelle der OUTPUT INTO-Klausel dürfen keine Trigger aktiviert sein.

precompute rank-Option auf Serverebene

Diese Option wird in SQL Server 2008 nicht unterstützt. Ändern Sie Anwendungen, die dieses Feature derzeit verwenden, so schnell wie möglich.

READPAST-Tabellenhinweis

Der READPAST-Tabellenhinweis kann nicht angegeben werden, wenn die READ_COMMITTED_SNAPSHOT-Datenbankoption auf ON festgelegt ist und eine der folgenden Bedingungen zutrifft:

  • Die Transaktionsisolationsstufe der Sitzung ist READ COMMITTED.

  • Der READCOMMITTED-Tabellenhinweis wird ebenfalls in der Abfrage angegeben.

Um den READPAST-Hinweis in diesen Fällen anzugeben, entfernen Sie den READCOMMITTED-Tabellenhinweis (sofern vorhanden), und nehmen Sie den READCOMMITTEDLOCK-Tabellenhinweis in die Abfrage auf.

sp_helpuser

Die folgenden Spaltennamen, die im Resultset der gespeicherten Prozedur sp_helpuser zurückgegeben werden, wurden geändert.

Vorheriger SpaltennameNeuer Spaltenname
GroupNameRoleName
Group_nameRole_name
Group_idRole_id
Users_in_groupUsers_in_role

Transparente Datenverschlüsselung

Die transparente Datenverschlüsselung (Transparent Data Encryption, TDE) erfolgt auf E/A-Ebene: Die Struktur der Seite im Speicher ist nicht verschlüsselt, und die Seite wird erst beim Schreiben auf einen Datenträger verschlüsselt. Die Datenbankdateien und die Protokolldateien werden verschlüsselt. Anwendungen von Drittanbietern, die den regulären Seitenzugriffsmechanismus von SQL Server umgehen, beispielsweise durch direktes Scannen der Daten- oder Protokolldateien), generieren einen Fehler, wenn TDE in einer Datenbank verwendet wird, da die Daten in den Dateien verschlüsselt sind. In diesen Fällen kann mithilfe der Windows-Kryptografie-API eine Lösung zum Entschlüsseln der Daten außerhalb von SQL Server für die Anwendungen entwickelt werden.

XQuery

Feature

Beschreibung

Datetime-Unterstützung

Die Datentypen xs:time, xs:date und xs:dateTime in SQL Server 2005 unterstützen keine Zeitzonen. Zeitzonendaten werden der UTC-Zeitzone zugeordnet. SQL Server 2008 stellt standardkonformes Verhalten bereit. Dies führt zu folgenden Änderungen:

  • Werte ohne Zeitzone werden überprüft.

  • Die bereitgestellte Zeitzone wird beibehalten; wenn keine Zeitzone bereitgestellt wird, wird diese Einstellung ebenfalls beibehalten.

  • Die interne Speicherdarstellung wird geändert.

  • Die Auflösung von gespeicherten Werten wird erhöht.

  • Negative Jahre sind nicht zulässig.

Ändern Sie Anwendungen und XQuery-Ausdrücke gemäß den Anforderungen der neuen Typwerte. Weitere Informationen finden Sie unter Verwenden von XML mit den Datentypen 'time', 'date', 'datetime2' und 'datetimeoffset'.

XQuery und Xpath-Ausdrücke

In SQL Server 2005 sind Schritte in einem XQuery-Ausdruck oder einem XPath-Ausdruck zulässig, die mit einem Doppelpunkt (":") beginnen. Die folgende Anweisung enthält zum Beispiel einen Namenstest (CTR02)) innerhalb des Pfadausdrucks, der mit einem Doppelpunkt beginnt.

SELECT FileContext.query('for n$ in //CTR return <C>{data )(n$/:CTR02)} </C>) AS Files FROM dbo.MyTable;

In SQL Server 2008 ist diese Verwendung nicht zulässig, da sie nicht den XML-Standards entspricht. Der Fehler 9341 wird zurückgegeben. Entfernen Sie den führenden Doppelpunkt, oder geben Sie ein Präfix für den Namenstest an, z. B. (n$/p1:CTR02) oder (n$/CTR02).

Änderungsverlauf

Aktualisierter Inhalt

Änderungen, die die Funktionsfähigkeit beeinträchtigen, für XQuery-Ausdrücke und Xpath-Ausdrücke hinzugefügt.