Freigeben über


Indexvorgänge online durchführen

In diesem Thema wird beschrieben, wie Sie Onlineindizes in SQL Server 2014 mithilfe von SQL Server Management Studio oder Transact-SQL erstellen, neu erstellen oder ablegen. Die OPTION ONLINE ermöglicht gleichzeitigen Benutzerzugriff auf die zugrunde liegenden Tabellen- oder gruppierten Indexdaten und alle zugeordneten nicht gruppierten Indizes während dieser Indexvorgänge. Während beispielsweise ein gruppierter Index von einem Benutzer neu erstellt wird, kann dieser Benutzer und andere die zugrunde liegenden Daten weiterhin aktualisieren und abfragen. Wenn Sie DDL-Vorgänge (Data Definition Language) offline ausführen, z. B. erstellen oder einen gruppierten Index neu erstellen; Diese Vorgänge enthalten exklusive Sperren für die zugrunde liegenden Daten und zugeordneten Indizes. Dadurch werden Änderungen und Abfragen an den zugrunde liegenden Daten verhindert, bis der Indexvorgang abgeschlossen ist.

Hinweis

Onlineindexvorgänge sind in jeder SQL Server-Edition nicht verfügbar. Weitere Informationen finden Sie unter Features Supported by the Editions of SQL Server 2014.

In diesem Themenbereich

Bevor Sie beginnen

Einschränkungen und Beschränkungen

  • Es wird empfohlen, Onlineindexvorgänge für Geschäftsumgebungen auszuführen, die 24 Stunden am Tag, sieben Tage pro Woche ausgeführt werden, bei denen die Notwendigkeit für gleichzeitige Benutzeraktivitäten während indexvorgängen von entscheidender Bedeutung ist.

  • Die Option ONLINE ist in den folgenden Transact-SQL-Anweisungen verfügbar.

  • Weitere Einschränkungen und Einschränkungen beim Erstellen, Neuerstellen oder Ablegen von Indizes online finden Sie in den Richtlinien für Onlineindexvorgänge.

Sicherheit

Erlaubnisse

Erfordert ALTER-Berechtigung für die Tabelle oder Ansicht.

Verwendung von SQL Server Management Studio

So erstellen Sie einen Index online neu

  1. Klicken Sie im Objekt-Explorer auf das Pluszeichen, um die Datenbank zu erweitern, die die Tabelle enthält, in der Sie einen Index online neu erstellen möchten.

  2. Erweitern Sie den Ordner Tabellen .

  3. Klicken Sie auf das Pluszeichen, um die Tabelle zu erweitern, auf der Sie einen Index online neu erstellen möchten.

  4. Erweitern Sie den Ordner "Indizes ".

  5. Klicken Sie mit der rechten Maustaste auf den Index, den Sie online neu erstellen möchten, und wählen Sie "Eigenschaften" aus.

  6. Wählen Sie unter "Seite auswählen" "Optionen" aus.

  7. Wählen Sie "Online-DML-Verarbeitung zulassen" und dann " True " aus der Liste aus.

  8. Klicke auf OK.

  9. Klicken Sie mit der rechten Maustaste auf den Index, den Sie online neu erstellen möchten, und wählen Sie "Neu erstellen" aus.

  10. Überprüfen Sie im Dialogfeld " Indizes neu erstellen", ob sich der richtige Index in den Indizes befindet, um das Raster neu zu erstellen , und klicken Sie auf OK.

Verwenden von Transact-SQL

Um einen Index online zu erstellen, wiederherstellen oder entfernen

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Datenbank-Engine-Instanz her.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen. Im Beispiel wird eine vorhandene Onlineversion neu erstellt.

    USE AdventureWorks2012;  
    GO  
    ALTER INDEX AK_Employee_NationalIDNumber ON HumanResources.Employee  
    REBUILD WITH (ONLINE = ON);  
    GO  
    

    Im folgenden Beispiel wird ein gruppierter Index online gelöscht und die resultierende Tabelle (Heap) mithilfe der MOVE TO Klausel in die Dateigruppe NewGroup verschoben. Die sys.indexes, sys.tables und sys.filegroups Katalogansichten werden abgefragt, um die Index- und Tabellenplatzierung in den Dateigruppen vor und nach der Verschiebung zu überprüfen.

    USE AdventureWorks2012;
    GO
    --Create a clustered index on the PRIMARY filegroup if the index does not exist.
    IF NOT EXISTS (SELECT name FROM sys.indexes WHERE name = 
                N'AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate')
        CREATE UNIQUE CLUSTERED INDEX
            AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
        ON Production.BillOfMaterials (ProductAssemblyID, ComponentID, 
            StartDate)
        ON 'PRIMARY';
    GO
    -- Verify filegroup location of the clustered index.
    SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
        i.data_space_id, f.name AS [Filegroup Name]
    FROM sys.indexes AS i
        JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
        JOIN sys.tables as t ON i.object_id = t.object_id
            AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U')
    GO
    --Create filegroup NewGroup if it does not exist.
    IF NOT EXISTS (SELECT name FROM sys.filegroups
                    WHERE name = N'NewGroup')
        BEGIN
        ALTER DATABASE AdventureWorks2012
            ADD FILEGROUP NewGroup;
        ALTER DATABASE AdventureWorks2012
            ADD FILE (NAME = File1,
                FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\File1.ndf')
            TO FILEGROUP NewGroup;
        END
    GO
    --Verify new filegroup
    SELECT * from sys.filegroups;
    GO
    -- Drop the clustered index and move the BillOfMaterials table to
    -- the Newgroup filegroup.
    -- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.
    DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
        ON Production.BillOfMaterials 
        WITH (ONLINE = ON, MOVE TO NewGroup);
    GO
    -- Verify filegroup location of the moved table.
    SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
        i.data_space_id, f.name AS [Filegroup Name]
    FROM sys.indexes AS i
        JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
        JOIN sys.tables as t ON i.object_id = t.object_id
            AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U');
    GO
    

Weitere Informationen finden Sie unter ALTER INDEX (Transact-SQL).