Bölüm işlevini değiştirme

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

Transact-SQL kullanarak bölümlenmiş tablonun veya dizinin bölüm işlevinde belirtilen bölüm sayısını 1'in artımlarıyla ekleyerek veya çıkararak SQL Server, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği'nde tablo veya dizinin bölümlenme şeklini değiştirebilirsiniz. Bir bölüm eklediğinizde, var olan bir bölümü iki bölüme "bölerek" ve yeni bölümlerin sınırlarını yeniden tanımlayarak bunu yaparsınız. Bir bölümü kaldırdığınızda, iki bölümleme sınırlarını tek bir bölümlemeye "birleştirerek" bunu yaparsınız. Bu son eylem, bir bölümü yeniden doldurur ve diğer bölümü atanmamış olarak bırakır. Bölüm işlevini değiştirmeden önce en iyi yöntemleri gözden geçirin.

Dikkat

Birden fazla tablo veya dizin aynı bölüm işlevini kullanabilir. Bir bölüm işlevini değiştirdiğinizde, bunların tümünü tek bir işlemde etkilersiniz. değiştirmeden önce bölüm işlevinin bağımlılıklarını denetleyin.

Tablo bölümleme, Azure Synapse Analytics'teki ayrılmış SQL havuzlarında da kullanılabilir ve bazı söz dizimi farklılıkları vardır. ayrılmış SQL havuzundaki Bölümleme tablolarıhakkında daha fazla bilgi edinin.

Sınırlama

  • ALTER PARTITION FUNCTION yalnızca bir bölümü iki bölüme bölmek veya iki bölümü tek bir bölüme birleştirmek için kullanılabilir. Tablo veya dizinin bölümlenme biçimini değiştirmek için (örneğin, 10 bölümden 5 bölüme), aşağıdaki seçeneklerden herhangi birini kullanabilirsiniz:

    • İstenen bölümleme işleviyle yeni bir bölümlenmiş tablo oluşturun ve ardından eski tablodaki verileri, INSERT INTO ... SELECT FROM Transact-SQL deyimini ya da SQL Server Management Studio (SSMS) içindeki Bölüm Yönetme Sihirbazı aracını kullanarak yeni tabloya ekleyin.

    • Yığında bölümlenmiş kümelenmiş dizin oluşturun.

      Not

      Bölümlenmiş kümelenmiş indeksin bırakılması, bölümlenmiş bir yığın oluşmasına neden olur.

    • DROP EXISTING = ON yan tümcesine sahip Transact-SQL deyimini kullanarak mevcut bir bölümlenmiş dizini silip yeniden oluşturun.

    • Bir dizi ALTER PARTITION FUNCTION ifade yürütün.

  • Veritabanı altyapısı, bölüm işlevini değiştirmek için çoğaltma desteği sağlamaz. Yayın veritabanındaki bir bölüm işlevinde değişiklik yapmak istiyorsanız, bunu abonelik veritabanında el ile yapmanız gerekir.

  • Etkilenen ALTER PARTITION FUNCTION tüm dosya gruplarının çevrimiçi olması gerekir.

İzinler

Aşağıdaki izinlerden herhangi biri, ALTER PARTITION FUNCTION komutunu yürütmek için kullanılabilir:

  • HERHANGİ BİR DATASPACE İZNİNİ DEĞİŞTİRİN. Bu izin varsayılan olarak sysadmin sabit sunucu rolünün üyelerine ve db_owner ve db_ddladmin sabit veritabanı rollerinin üyelerine tanımlıdır.

  • Bölüm işlevinin oluşturulduğu veritabanında CONTROL veya ALTER izni.

  • Bölümleme işlevinin oluşturulduğu veritabanının sunucusunda CONTROL SERVER veya ALTER ANY DATABASE izni.

Veritabanında bölümlenmiş nesneleri sorgulama

Aşağıdaki sorgu veritabanındaki tüm bölümlenmiş nesneleri listeler. Bu, bölüm işlevini değiştirmeden önce bağımlılıkları denetlemek için kullanılabilir.

SELECT 
	PF.name AS PartitionFunction,
	ds.name AS PartitionScheme,
    OBJECT_SCHEMA_NAME(si.object_id) as SchemaName,
	OBJECT_NAME(si.object_id) AS PartitionedTable, 
	si.name as IndexName
FROM sys.indexes AS si
JOIN sys.data_spaces AS ds
	ON ds.data_space_id = si.data_space_id
JOIN sys.partition_schemes AS PS
	ON PS.data_space_id = si.data_space_id
JOIN sys.partition_functions AS PF
	ON PF.function_id = PS.function_id
WHERE ds.type = 'PS'
AND OBJECTPROPERTYEX(si.object_id, 'BaseType') = 'U'
ORDER BY PartitionFunction, PartitionScheme, SchemaName, PartitionedTable;

Bölümü Transact-SQL ile bölme

  1. Nesne Gezginihedef veritabanınıza bağlanın.

  2. Standart çubuğunda Yeni Sorguseçin.

  3. Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Executeöğesini seçin.

    Bu örnek:

    • Bölüm işlevinin önceki bir sürümünü myRangePF1 denetler ve bulunursa siler.
    • Tabloyu dört bölüme bölen myRangePF1 adlı bir bölüm işlevi oluşturur.
    • boundary_values 100 ile 1000 arasındaki bölümü, 100 ile 500 arasında bir bölüm ve 500 ile 1000 arasında bir bölüm oluşturmak üzere böler.
    IF EXISTS (SELECT * FROM sys.partition_functions  
        WHERE name = 'myRangePF1')  
        DROP PARTITION FUNCTION myRangePF1;  
    GO
    
    CREATE PARTITION FUNCTION myRangePF1 (int)  
    AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );  
    GO  
    
    ALTER PARTITION FUNCTION myRangePF1 ()  
    SPLIT RANGE (500);  
    

İki bölümü Transact-SQL ile birleştirme

  1. Nesne Gezginihedef veritabanınıza bağlanın.

  2. Standart çubuğunda Yeni Sorguseçin.

  3. Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Executeöğesini seçin.

    Bu örnek:

    • Bölüm işlevinin önceki bir sürümünün myRangePF1 olup olmadığını denetler ve bulunursa siler.
    • Üç sınır değeriyle tanımlanan ve dört bölümle sonuçlanacak myRangePF1 adlı bir bölüm işlevi oluşturur.
    • 1 ile 100 arasındaki sınır_değerleri bölümünü, 100 ile 1.000 arasındaki sınır_değerleri bölümüyle birleştirir.
    • Bu, bölüm işlevi myRangePF1 1 ve 1.000 olmak üzere iki sınır noktasına sahip olmasına neden olur.
    IF EXISTS (SELECT * FROM sys.partition_functions  
        WHERE name = 'myRangePF1')  
        DROP PARTITION FUNCTION myRangePF1;  
    GO 
    
    CREATE PARTITION FUNCTION myRangePF1 (int)  
    AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );  
    GO  
    
    ALTER PARTITION FUNCTION myRangePF1 ()  
    MERGE RANGE (100);  
    

SSMS ile bölüm işlevini silme

  1. Nesne Gezginihedef veritabanınıza bağlanın.

  2. Bölüm işlevini silmek istediğiniz veritabanını genişletin ve ardından Depolama klasörünü genişletin.

  3. Bölüm İşlevleri klasörünü genişletin.

  4. Silmek istediğiniz bölüm işlevine sağ tıklayın ve Silöğesini seçin.

  5. Nesne Sil iletişim kutusunda doğru bölümleme işlevinin seçili olduğundan emin olun ve ardından Tamam'ıseçin.

Sonraki adımlar

aşağıdaki makalelerde ilgili kavramlar hakkında daha fazla bilgi edinin: