Aracılığıyla paylaş


ALTER PARTITION FONKSIYONU (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. ALTER PARTITION FUNCTION ifadesi çalıştırmak, bölüm 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 BÖLÜM FONKSIYONU 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. A CREATE PARTITION SCHEME ifadesi, dosya gruplarını bölümlere atar. CREATE PARTITION FUNCTION ifadesi, dosya gruplarından daha az bölüm oluşturur. A CREATE PARTITION SCHEME ifadesi, gerekenden fazla dosya grubunu 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ı SONRAKİ KULLANILAN olarak işaretlenen dosya grubu yoksa, ALTER PARTITION SCHEME ifadesi kullanmalısınız.

ALTER PARTITION SCHEME ifadesi, 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, ALTER PARTITION FUNCTION ifadesi, NEXT USED dosya grubu olmayan bölüm şeması veya şemaları gösteren bir hata ile başarısız olur.

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. ALTER PARTITION SCHEME kullanarak dosya grubunu SONRAKİ KULLANILAN dosya grubu 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.

BIRLEŞME [ 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 BÖLÜM FUNKSİSİ, fonksiyonu tek bir atomik işlemde kullanan tüm 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.

ALTER PARTITION FUNCTION sadece bir bölümü ikiye bölmek veya iki bölümü birleştirmek için kullanın. 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 tablodaki verileri yeni tabloya INSERT INTO... ile 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 bırakın ve yeniden oluşturun, Transact-SQL CREATE INDEX ifadesini DROP EXISTING = ON cümlesi ile kullanın.

  • ALTER PARTITION FUNCTION ifadelerinden oluşan bir dizi çalıştırın.

ALTER PARTITION FUNCTION işlevinden etkilenen 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 bulunduğunda 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

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ü 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 izinleri, bölümleme fonksiyonunun oluşturulduğu veritabanının sunucusunda.

Ö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: