Aracılığıyla paylaş


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 IŞLEVI, 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üm fonksiyonu ile yeni bir bölümlenmiş tablo oluşturun ve ardından INSERT INTO ... SELECT FROM Transact-SQL deyimini kullanarak eski tablodaki verileri yeni tabloya ekleyin veya SQL Server Management Studio (SSMS) 'ünde Bölüm Yönetme Sihirbazı'yi kullanın.

    • 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ümcesiyle Transact-SQL CREATE INDEX deyimini kullanarak mevcut bölümlenmiş dizini bırakın ve yeniden oluşturun.

    • ALTER PARTITION FUNCTION ifadelerinin bir dizisini gerçekleştirin.

  • 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.

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

İzinler

ALTER PARTITION FUNCTION'ı yürütmek için aşağıdaki izinlerden herhangi biri 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.

  • CONTROL SERVER veya ALTER ANY DATABASE izinleri, bölümleme fonksiyonunun oluşturulduğu veritabanının sunucusunda.

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: