Share via


Executar operações de índice online

Este tópico descreve como criar, recriar ou descartar índices online no SQL Server 2012 usando o SQL Server Management Studio ou o 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çãoObservaçã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 2012.

Neste tópico

  • Antes de começar:

    Limitações e restrições

    Segurança

  • Para recriar um índice online, usando:

    SQL Server Management Studio

    Transact-SQL

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.

Ícone de seta usado com o link Voltar ao Início[Top]

Usando 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 online e 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 Recriar.

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

Ícone de seta usado com o link Voltar ao Início[Top]

Usando 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.tables e 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 obter mais informações, consulte ALTER INDEX (Transact-SQL).

Ícone de seta usado com o link Voltar ao Início[Top]