Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Este artigo descreve como criar, recriar ou descartar índices online usando o SQL Server Management Studio ou o Transact-SQL. A opção ONLINE permite o acesso simultâneo do usuário à tabela subjacente ou aos dados de índice clusterizados e a quaisquer índices não clusterizados associados durante essas operações de índice. Por exemplo, enquanto um índice clusterizado está sendo reconstruído por um usuário, esse usuário e outros podem continuar a atualizar e consultar os dados subjacentes.
Quando você executa operações DDL (linguagem de definição de dados) offline, como criar ou reconstruir um índice clusterizado, essas operações mantêm bloqueios exclusivos (X) nos dados subjacentes e índices associados. Isso impede modificações e consultas aos dados subjacentes até que a operação de índice seja concluída.
Note
Os comandos de reconstrução de índice podem manter bloqueios exclusivos em índices clusterizados depois que uma coluna de objeto grande é descartada de uma tabela, mesmo quando executada online.
A opção ONLINE está disponível nas seguintes declarações Transact-SQL.
- CRIAR ÍNDICE
- ÍNDICE ALTER
- QUEDA ÍNDICE
-
ALTER TABLE (Para adicionar ou remover restrições
UNIQUEouPRIMARY KEY)
Para obter limitações e restrições relativas à criação, reconstrução ou eliminação de índices online, consulte Diretrizes para operações de índice online.
Para usar operações de índice retomáveis, uma operação de índice deve ser executada online. Para obter mais informações, consulte Considerações sobre índice retomável.
Plataformas suportadas
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 Edições e recursos com suporte do SQL Server 2022.
As operações de índice online estão disponíveis no Banco de Dados SQL do Azure e na Instância Gerenciada SQL do Azure.
Permissions
Requer a permissão ALTER na tabela ou exibição.
Usar o SQL Server Management Studio
No Pesquisador de Objetos, expanda o banco de dados que contém a tabela na qual você deseja reconstruir um índice online.
Expanda a pasta Tabelas.
Expanda a tabela na qual você deseja reconstruir um índice online.
Expanda a pasta Índices.
Use o menu de contexto para o índice que você deseja reconstruir online e selecione Propriedades.
Em Selecione uma página, selecione Opções .
Selecione Permitir processamento de DML onlinee, em seguida, selecione True na lista.
Selecione OK.
Use o menu de contexto para o índice que você deseja reconstruir online e selecione Reconstruir.
Na caixa de diálogo Reconstruir Índices, verifique se o índice correto está na Índices para reconstruir grade e selecione OK.
Utilize o Transact-SQL
O exemplo a seguir recria um índice online existente no banco de dados de exemplo AdventureWorks.
ALTER INDEX AK_Employee_NationalIDNumber
ON HumanResources.Employee
REBUILD WITH (ONLINE = ON);
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 de catálogo sys.indexes, sys.tablese sys.filegroups são consultadas para verificar o índice e o posicionamento da tabela nos grupos de arquivos antes e depois da mudança.
-- 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 AdventureWorks2022
ADD FILEGROUP NewGroup;
ALTER DATABASE AdventureWorks2022
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');
Para obter mais informações, consulte ALTER INDEX (Transact-SQL).