Melakukan Operasi Indeks Online

Berlaku untuk:Database SQL Server Azure SQL Azure SQL Managed Instance

Topik ini menjelaskan cara membuat, membangun kembali, atau menghilangkan indeks secara online di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL. Opsi ONLINE memungkinkan akses pengguna bersamaan ke tabel yang mendasar atau data indeks berkluster dan indeks non-kluster terkait selama operasi indeks ini. Misalnya, saat indeks berkluster sedang dibangun kembali oleh satu pengguna, pengguna tersebut dan pengguna lainnya dapat terus memperbarui dan mengkueri data yang mendasar. Saat Anda melakukan operasi bahasa definisi data (DDL) secara offline, seperti membangun atau membangun kembali indeks berkluster; operasi ini menyimpan kunci eksklusif pada data yang mendasar dan indeks terkait. Ini mencegah modifikasi dan kueri ke data yang mendasarinya hingga operasi indeks selesai.

Catatan

Operasi indeks online tidak tersedia di setiap edisi SQL Server. Untuk informasi selengkapnya, lihat Edisi dan fitur SQL Server yang didukung.

Operasi indeks online tersedia di Azure SQL Database dan Azure SQL Managed Instance.

Dalam Topik Ini

Sebelum Anda mulai

Batasan dan Pembatasan

  • Sebaiknya lakukan operasi indeks online untuk lingkungan bisnis yang beroperasi 24 jam sehari, tujuh hari seminggu, di mana kebutuhan akan aktivitas pengguna bersamaan selama operasi indeks sangat penting.

  • Opsi ONLINE tersedia dalam pernyataan Transact-SQL berikut.

  • Untuk batasan dan batasan lebih lanjut tentang membuat, membangun kembali, atau menghilangkan indeks secara online, lihat Panduan untuk Operasi Indeks Online.

Keamanan

Izin

Memerlukan izin UBAH pada tabel atau tampilan.

Menggunakan SQL Server Management Studio

Untuk membangun kembali indeks secara online

  1. Di Object Explorer, klik tanda plus untuk memperluas database yang berisi tabel tempat Anda ingin membangun kembali indeks secara online.

  2. Luaskan folder Tabel.

  3. Klik tanda plus untuk memperluas tabel tempat Anda ingin membangun kembali indeks secara online.

  4. Perluas folder Indeks .

  5. Klik kanan indeks yang ingin Anda bangun ulang secara online dan pilih Properti.

  6. Di bawah Pilih halaman, pilih Opsi.

  7. Pilih Izinkan pemrosesan DML online, lalu pilih True dari daftar.

  8. Klik OK.

  9. Klik kanan indeks yang ingin Anda bangun ulang secara online dan pilih Bangun ulang.

  10. Dalam kotak dialog Bangun Ulang Indeks , verifikasi bahwa indeks yang benar ada di Indeks untuk membangun kembali kisi dan klik OK.

Menggunakan T-SQL

Untuk membuat, membangun kembali, atau menghilangkan indeks secara online

Contoh berikut membangun kembali indeks online yang ada di database AdventureWorks.

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

Contoh berikut menghapus indeks berkluster secara online dan memindahkan tabel yang dihasilkan (heap) ke grup NewGroup file dengan menggunakan MOVE TO klausa . Tampilan sys.indexeskatalog , sys.tables, dan sys.filegroups dikueri untuk memverifikasi penempatan indeks dan tabel di grup file sebelum dan sesudah pemindahan.

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

Untuk informasi selengkapnya, lihat ALTER INDEX (T-SQL).

Langkah berikutnya