ALTER PARTITION FUNCTION (Transact-SQL)

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

Bir bölümleme fonksiyonunu sınır değerlerini bölerek veya birleştirerek değiştirir. Bir ALTER PARTITION FUNCTION ifadeyi çalıştırmak, bölümleme fonksiyonunu kullanan bir tablo veya indeks bölümünü iki bölüme bölebilir. Bu ifade ayrıca iki bölümü tek bir bölüme birleştirebilir.

Dikkat

Birden fazla tablo veya dizin aynı bölüm işlevini kullanabilir. ALTER PARTITION FUNCTION tek bir işlemde hepsini etkiler.

Transact-SQL söz dizimi kuralları

Sözdizimi

  
ALTER PARTITION FUNCTION partition_function_name()  
{   
    SPLIT RANGE ( boundary_value )  
  | MERGE RANGE ( boundary_value )   
} [ ; ]  

Arguments

partition_function_name
Değiştirilecek bölümleme fonksiyonunun adı nedir.

BÖLÜNMÜŞ MENZIL ( boundary_value )
Bölümleme fonksiyonuna bir bölüm ekler. boundary_value yeni bölüm aralığını belirler ve bölünme fonksiyonunun mevcut sınır aralıklarından farklı olmalıdır. boundary_value temelinde, veritabanı motoru mevcut aralıklardan birini ikiye böler. Bu iki sıradan, yeni boundary_value olan yeni bölümdür.

Bir dosya grubu çevrimiçi olmalı. Ayrıca, yeni bölümü tutmak için bölüm fonksiyonunu NEXT USED olarak kullanan bölümleme şeması dosya grubunu işaretlemelidir. Bir CREATE PARTITION SCHEME ifade dosya gruplarını bölümlere atar. Bu ifade CREATE PARTITION FUNCTION , onları tutmak için dosya gruplarından daha az bölüm oluşturur. Bir CREATE PARTITION SCHEME ifade, gerekenden fazla dosya grubu ayırabilir. Eğer böyle olursa, atamamış dosya grupları kalacak. Ayrıca, bölümleme şeması dosya gruplarından birini SONRAKİ KULLANILAN olarak işaretler. Bu dosya grubu yeni bölümü tutar. Eğer bölüm şeması NEXT KULLANILAN' olarak işaretlenen dosya grupları yoksa, bir ALTER PARTITION SCHEME ifade kullanmalısınız.

Bu ALTER PARTITION SCHEME ifade yeni bölümü tutmak için bir dosya grubu ekleyebilir veya mevcut bir dosya grubunu seçebilir. Zaten bölümleri olan bir dosya grubunu ek bölümler için atalayabilirsiniz. Bir bölümleme fonksiyonu birden fazla bölümleme şemasına katılabilir. Bu nedenle, eklediğiniz bölüm fonksiyonunu kullanan tüm bölüm şemalarının NEXT USED dosya grubu olması gerekir. Aksi takdirde, bu ALTER PARTITION FUNCTION ifade, bir hata ile başarısız olur ve bölüm şeması veya NEXT USED dosya grubu olmayan şemalar görüntülenir.

Tüm bölümleri aynı dosya grubunda oluşturursanız, o dosya grubu başlangıçta otomatik olarak SONRAKİ KULLANILAN dosya grubu olarak atanır. Ancak, bir bölünmüş işlem çalıştıktan sonra, artık seçilmiş bir NEXT USED dosya grubu kalmaz. Dosya grubunu SONRAKİ KULLANILAN dosya grubu ALTER PARTITION SCHEME olarak açıkça atanın, aksi takdirde yaklaşan bir bölünme işlemi başarısız olur.

Uyarı

Columnstore indeksi ile sınırlamalar: Sadece bir columnstore indeksi tabloda bulunduğunda boş bölümler bölünebilir. Bu işlemi yapmadan önce columnstore indeksini kaldırmanız veya devre dışı bırakmanız gerekecek.

MERGE [ MENZIL ( boundary_value) ]
Bir bölümü bırakır ve bölümde bulunan değerleri kalan bir bölüme birleştirir. RANGE (boundary_value), düşürülecek bölümün mevcut bir sınır değeri olmalıdır. Bu argüman, kalan bir bölüm kullanmadıkça veya NEXT USED özelliğiyle işaretlediği sürece, orijinal boundary_value tutan dosya grubunu bölüm şemasından çıkarır. Birleştirilmiş bölüm, başlangıçta boundary_value tutmayan dosya grubunda var. boundary_value , değişkenlere (kullanıcı tanımlı tip değişkenler dahil) veya fonksiyonlara (kullanıcı tanımlı fonksiyonlar dahil) referans verebilen sabit bir ifadedir. Transact-SQL bir ifadeye atıfta bulunamaz. boundary_value , ilgili bölümleme sütununun veri tipine ya eşleşmeli ya da örtük olarak dönüştürülebilir olmalıdır. Ayrıca, örtük dönüşüm sırasında boundary_value değerin boyutu ve ölçeği, karşılık gelen input_parameter_type ile eşleşmeyecek şekilde kesemezsiniz.

Uyarı

Columnstore indeksi ile sınırlamalar: Columnstore indeksi içeren iki boş olmayan bölüm birleştirilemez. Bu işlemi yapmadan önce columnstore indeksini kaldırmanız veya devre dışı bırakmanız gerekecek

En İyi Yöntemler

Her zaman bölüm aralığının her iki ucunda boş bölümler bulundurun. Bölümlerin her iki ucunda da kalmasını sağlayarak bölüm bölünmesi ve bölüm birleşmesinin veri hareketi yapmamasını garanti edin. Bölüm bölünmesi başta, bölüm birleştirmesi ise sonunda gerçekleşir. Doldurulmuş bölümleri bölmekten veya birleştirmekten kaçının. Nüfuslu bölümleri bölmek veya birleştirmek verimsiz olabilir. Bölünme veya birleşme dört katına kadar daha fazla kütük oluşumuna yol açabileceği ve ayrıca ciddi kilitlenmelere yol açabileceği için verimsiz olabilirler.

Bölümlerinizi birden fazla dosya grubuna yerleştirmenin temel nedeni, bölümlerde yedekleme ve geri yükleme işlemlerini bağımsız olarak gerçekleştirebildiğinizden emin olmaktır. Dosya Grupları'nda dosya grupları ve bölümleme stratejileri hakkında daha fazla bilgi edinin.

Sınırlamalar ve Kısıtlamalar

ALTER PARTITION FUNCTION Fonksiyonu tek bir atomik işlemde kullanan tabloları ve indeksleri yeniden bölümler. Ancak, bu işlem çevrimdışı gerçekleşir ve yeniden bölümlemenin kapsamına bağlı olarak kaynak yoğun olabilir.

Sadece bir bölümü ikiye bölmek veya iki bölümü birleştirmek için kullanılır ALTER PARTITION FUNCTION . Bir tablonun başka türlü bölünme şeklini değiştirmek için (örneğin, 10 bölümden beş bölüme) aşağıdaki seçeneklerden herhangi birini kullanın. Sisteminizin yapılandırmasına bağlı olarak, bu seçenekler kaynak tüketiminde değişiklik gösterebilir:

  • Gerekli bölme fonksiyonuyla yeni bir bölümlenmiş tablo oluşturun. Sonra, eski tablodan veriyi yeni tabloya INTO INSERT ... kullanarak ekleyin... SELECT FROM ifadesi.

  • Bir yığın üzerinde bölümlenmiş kümelenmiş bir indeks oluşturun.

    Uyarı

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

  • Mevcut bölümlenmiş bir indeks, DROP EXISTING = ON cümlesi ile Transact-SQL CREATE INDEX ifadesini kullanarak bırakın ve yeniden oluşturun.

  • Bir dizi ifade ALTER PARTITION FUNCTION çalıştırın.

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

ALTER PARTITION FUNCTION bölüm fonksiyonunu kullanan herhangi bir tabloda devre dışı bırakılmış kümelenmiş bir indeks varsa başarısız olur.

Veritabanı motoru, bir bölüm fonksiyonunu değiştirmek için replikasyon desteği sağlamaz. Yayın veritabanındaki bir bölüm fonksiyonundaki değişiklikler, abonelik veritabanında manuel olarak uygulanmalıdır.

Permissions

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

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

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

  • CONTROL SERVER veya ALTER ANY DATABASE permission on the server of the database in the created in the partition function.

Örnekler

A. Bir bölmeli tablo veya indeksin bir bölümünü iki bölüme ayırın

Aşağıdaki örnek, bir tabloyu veya dizini dört bölüme bölmek için bir bölüm işlevi oluşturur. ALTER PARTITION FUNCTION Bir bölümü ikiye ayırarak toplamda beş bölme oluşturur.

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  
--Split the partition between boundary_values 100 and 1000  
--to create two partitions between boundary_values 100 and 500  
--and between boundary_values 500 and 1000.  
ALTER PARTITION FUNCTION myRangePF1 ()  
SPLIT RANGE (500);  

B. Bölünmüş bir tablonun iki bölümünü tek bir bölüme birleştirin

Aşağıdaki örnek, yukarıdaki aynı bölümleme fonksiyonunu oluşturur ve ardından iki bölümü tek bir bölüme birleştirerek toplamda üç bölüm elde eder.

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  
--Merge the partitions between boundary_values 1 and 100  
--and between boundary_values 100 and 1000 to create one partition  
--between boundary_values 1 and 1000.  
ALTER PARTITION FUNCTION myRangePF1 ()  
MERGE RANGE (100);  

Sonraki Adımlar

Tablo bölmesi ve ilgili kavramlar hakkında daha fazla bilgi edinmek için aşağıdaki makalelerde bilgi edinebilirsiniz: