Partilhar via


Executar operações de índice online

Este tópico descreve como criar, recompilar ou remover índices online no SQL Server 2014 usando SQL Server Management Studio ou Transact-SQL. A opção ONLINE permite acesso simultâneo de usuários aos dados da tabela subjacente ou de índice cluster e qualquer índice não cluster associado durante essas operações de índice. Por exemplo, enquanto um índice cluster estiver sendo recriado por um usuário, esse usuário e os outros poderão continuar atualizando e consultando os dados subjacentes. Quando você executa operações de DDL (linguagem de definição de dados) offline, como a compilação ou recompilação de um índice clusterizado, essas operações mantêm bloqueios exclusivos nos dados subjacentes e índices associados. Isso evita modificações e consultas aos dados subjacentes até que a operação de índice esteja concluída.

Observação

As operações de índice online não estão disponíveis em todas as edições do SQL Server . Para obter mais informações, consulte Recursos compatíveis com as edições do SQL Server 2014.

Neste tópico

Antes de começar

Limitações e Restrições

  • Nós recomendamos a execução de operações de índice online em ambientes empresariais que funcionam 24 horas por dia, sete dias por semana, nos quais a necessidade para atividade de usuário simultânea durante as operações de índice é vital.

  • A opção ONLINE está disponível nas instruções Transact-SQL a seguir.

  • Por obter mais informações sobre limitação e restrições sobre como criar, recriar ou descartar índices online, consulte Diretrizes para operações de índice online.

Segurança

Permissões

Requer a permissão ALTER na tabela ou exibição.

Como usar o SQL Server Management Studio.

Para recriar um índice online

  1. No Pesquisador de Objetos, clique no sinal de adição para expandir o banco de dados que contém a tabela na qual você deseja recriar um índice online.

  2. Expanda a pasta Tabelas .

  3. Clique no sinal de adição para expandir a tabela na qual você deseja recriar um índice online.

  4. Expanda a pasta Índices .

  5. Clique com o botão direito do mouse no índice que você quer recriar online e selecione Propriedades.

  6. Em Selecione uma página, selecione Opções.

  7. Selecione Permitir processamento DML onlinee selecione Verdadeiro na lista.

  8. Clique em OK.

  9. Clique com o botão direito do mouse no índice que você quer recriar online e selecione Recompilar.

  10. Na caixa de diálogo Recriar Índices , verifique se o índice correto está na grade Índices a serem recriados e clique em OK.

Usando o Transact-SQL

Para criar, recriar ou descartar um índice online

  1. No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados.

  2. Na barra Padrão, clique em Nova Consulta.

  3. Copie e cole o exemplo a seguir na janela de consulta e clique em Executar. O exemplo reconstrói um online existente

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

    O exemplo a seguir exclui um índice clusterizado online e move a tabela resultante (heap) para o grupo de arquivos NewGroup usando a cláusula MOVE TO . As exibições do catálogo sys.indexes, sys.tablese sys.filegroups são consultadas para verificar o posicionamento do índice e da tabela nos grupos de arquivos antes e depois da movimentação.

    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
    

Para mais informações, consulte ALTERAR ÍNDICE (Transact-SQL).