Aracılığıyla paylaş


Dizin işlemlerini çevrimiçi gerçekleştirme

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Bu makalede, SQL Server Management Studio veya Transact-SQL kullanarak çevrimiçi dizin oluşturma, yeniden derleme veya bırakma işlemleri açıklanmaktadır. seçeneği, ONLINE bu dizin işlemleri sırasında temel alınan tabloya veya kümelenmiş dizin verilerine ve ilişkili tüm kümelenmemiş dizinlere eşzamanlı kullanıcı erişimi sağlar. Örneğin, kümelenmiş dizin bir kullanıcı tarafından yeniden oluşturulurken, bu kullanıcı ve diğerleri temel alınan verileri güncelleştirmeye ve sorgulamaya devam edebilir.

Kümelenmiş dizin oluşturma veya yeniden derleme gibi veri tanımı dili (DDL) işlemlerini çevrimdışı gerçekleştirdiğinizde, bu işlemler temel alınan veriler ve ilişkili dizinler üzerinde özel (X) kilitler tutar. Bu, dizin işlemi tamamlanana kadar temel alınan verilerde değişiklik ve sorgu yapılmasını önler.

Note

Dizin yeniden oluşturma komutları, büyük bir nesne sütunu bir tablodan bırakıldıktan sonra, çevrimiçi olarak gerçekleştirildiğinde bile kümelenmiş dizinlerde özel kilitler tutabilir.

seçeneği ONLINE aşağıdaki Transact-SQL deyimlerinde kullanılabilir.

Çevrimiçi dizin oluşturma, yeniden oluşturma veya bırakma ile ilgili sınırlamalar ve kısıtlamalar için bkz. Çevrimiçi dizin işlemleri için yönergeler.

Devam ettirilebilen dizin işlemlerini kullanmak için bir dizin işleminin çevrimiçi olarak gerçekleştirilmesi gerekir. Daha fazla bilgi için bkz. Devam edilebilir dizin dikkat edilmesi gerekenler.

Desteklenen platformlar

Çevrimiçi dizin işlemleri SQL Server'ın her sürümünde kullanılamaz. Daha fazla bilgi için, SQL Server 2022 sürümleri ve desteklenen özellikleriyle ilgili ve'a bakın.

Çevrimiçi dizin işlemleri Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği'nde kullanılabilir.

Permissions

ALTER Tablo veya görünümde izin gerektirir.

SQL Server Management Studio'yu kullanma

  1. Nesne Gezgini'nde, dizini çevrimiçi olarak yeniden oluşturmak istediğiniz tabloyu içeren veritabanını genişletin.

  2. Tablolar klasörünü genişletin.

  3. Dizini çevrimiçi olarak yeniden oluşturmak istediğiniz tabloyu genişletin.

  4. Dizinler klasörünü genişletin.

  5. Çevrimiçi olarak yeniden oluşturmak istediğiniz dizinin bağlam menüsünü kullanın ve Özellikler'i seçin.

  6. Sayfa seç'in altında Seçenekler'i seçin.

  7. Çevrimiçi DML işlemeye izin ver seçeneğini belirleyin ve ardından listeden True'u seçin.

  8. Tamam'ı seçin.

  9. Çevrimiçi olarak yeniden oluşturmak istediğiniz dizinin bağlam menüsünü kullanın ve Yeniden Oluştur'u seçin.

  10. Dizinleri Yeniden Oluştur iletişim kutusunda, yeniden oluşturulacak dizinler kılavuzunda doğru dizinin olup olmadığını doğrulayın ve Tamam seçeneğini seçin.

Transact-SQL kullanma

Aşağıdaki örnek, örnek veritabanındaki mevcut bir çevrimiçi dizini AdventureWorks yeniden oluşturur.

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

Aşağıdaki örnek, çevrimiçi olarak bir kümelenmiş dizini siler ve NewGroup yan tümcesini kullanarak sonuçta elde edilen tabloyu (yığın) MOVE TO dosya grubuna taşır. sys.indexes, sys.tablesve katalog görünümleri, taşımadan önce ve sys.filegroups sonra dosya gruplarında dizin ve tablo yerleşimini doğrulamak için sorgulanır.

-- 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');

Daha fazla bilgi için bkz . ALTER INDEX (Transact-SQL).