ALTER PARTITION FUNCTION (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Mengubah fungsi partisi dengan memisahkan atau menggabungkan nilai batasnya. Menjalankan pernyataan ALTER PARTITION FUNCTION dapat membagi satu tabel atau partisi indeks yang menggunakan fungsi partisi menjadi dua partisi. Pernyataan ini juga dapat menggabungkan dua partisi menjadi satu partisi.

Perhatian

Lebih dari satu tabel atau indeks dapat menggunakan fungsi partisi yang sama. ALTER PARTITION FUNCTION memengaruhi semuanya dalam satu transaksi.

Konvensi sintaks transact-SQL

Sintaksis

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

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

partition_function_name
Adalah nama fungsi partisi yang akan dimodifikasi.

RENTANG TERPISAH ( boundary_value )
Menambahkan satu partisi ke fungsi partisi. boundary_value menentukan rentang partisi baru, dan harus berbeda dari rentang batas yang ada dari fungsi partisi. Berdasarkan boundary_value, mesin database membagi salah satu rentang yang ada menjadi dua. Dari kedua rentang ini, yang memiliki boundary_value baru adalah partisi baru.

Grup file harus ada secara online. Dan, skema partisi yang menggunakan fungsi partisi sebagai NEXT USED untuk menahan partisi baru harus menandai grup file. Pernyataan CREATE PARTITION SCHEME menetapkan grup file ke partisi. Pernyataan CREATE PARTITION FUNCTION membuat lebih sedikit partisi daripada grup file untuk menahannya. Pernyataan CREATE PARTITION SCHEME dapat menyisihkan lebih banyak grup file daripada yang diperlukan. Jika itu terjadi, maka Anda akan berakhir dengan grup file yang tidak ditetapkan. Selain itu, skema partisi menandai salah satu grup file sebagai NEXT USED. Grup file ini menyimpan partisi baru. Jika tidak ada grup file yang ditandai skema partisi sebagai NEXT USED, Anda harus menggunakan pernyataan ALTER PARTITION SCHEME.

Pernyataan ALTER PARTITION SCHEME dapat menambahkan grup file, atau memilih yang sudah ada, untuk menahan partisi baru. Anda dapat menetapkan grup file yang sudah menyimpan partisi untuk menyimpan partisi tambahan. Fungsi partisi dapat berpartisipasi dalam lebih dari satu skema partisi. Untuk alasan ini, semua skema partisi yang menggunakan fungsi partisi tempat Anda menambahkan partisi harus memiliki grup file NEXT USED. Jika tidak, pernyataan ALTER PARTITION FUNCTION gagal dengan kesalahan yang menampilkan skema atau skema partisi yang tidak memiliki grup file NEXT USED.

Jika Anda membuat semua partisi dalam grup file yang sama, grup file tersebut awalnya ditetapkan untuk menjadi grup file NEXT USED secara otomatis. Namun, setelah operasi pemisahan berjalan, tidak ada lagi grup file NEXT USED yang dipilih. Secara eksplisit menetapkan grup file sebagai grup file NEXT USED dengan menggunakan ALTER PARTITION SCHEME atau operasi pemisahan yang akan datang akan gagal.

Catatan

Batasan dengan indeks penyimpan kolom: Hanya partisi kosong yang dapat dipisahkan saat indeks penyimpan kolom ada pada tabel. Anda harus menghilangkan atau menonaktifkan indeks penyimpan kolom sebelum melakukan operasi ini.

MERGE [ RANGE ( boundary_value) ]
Menghilangkan partisi dan menggabungkan nilai apa pun yang ada di partisi ke dalam partisi yang tersisa. RANGE (boundary_value) harus berupa nilai batas yang ada, dari partisi yang akan dihilangkan. Argumen ini menghapus grup file yang awalnya menyimpan boundary_value dari skema partisi kecuali partisi yang tersisa menggunakannya, atau menandainya dengan properti NEXT USED. Partisi gabungan ada di grup file yang tidak menyimpan boundary_value pada awalnya. boundary_value adalah ekspresi konstanta yang dapat mereferensikan variabel (termasuk variabel jenis yang ditentukan pengguna) atau fungsi (termasuk fungsi yang ditentukan pengguna). Ini tidak dapat mereferensikan ekspresi Transact-SQL. boundary_value harus cocok atau secara implisit dapat dikonversi ke jenis data kolom partisi yang sesuai. Anda juga tidak dapat memotong boundary_value selama konversi implisit dengan cara yang ukuran dan skala nilainya tidak cocok dengan input_parameter_type yang sesuai.

Catatan

Batasan dengan indeks penyimpan kolom: Dua partisi tidak kosong yang berisi indeks penyimpan kolom tidak dapat digabungkan. Anda harus menghilangkan atau menonaktifkan indeks penyimpan kolom sebelum melakukan operasi ini

Praktik Terbaik

Selalu simpan partisi kosong di kedua ujung rentang partisi. Pertahankan partisi di kedua ujungnya untuk menjamin bahwa pemisahan partisi dan penggabungan partisi tidak menimbulkan pergerakan data apa pun. Pemisahan partisi terjadi di awal dan penggabungan partisi terjadi di akhir. Hindari memisahkan atau menggabungkan partisi yang diisi. Memisahkan atau menggabungkan partisi yang diisi dapat tidak efisien. Mereka bisa tidak efisien karena pemisahan atau penggabungan dapat menyebabkan pembuatan log sebanyak empat kali lebih banyak, dan juga dapat menyebabkan penguncian yang parah.

Alasan utama untuk menempatkan partisi Anda pada beberapa grup file adalah untuk memastikan bahwa Anda dapat secara independen melakukan operasi pencadangan dan pemulihan pada partisi. Pelajari selengkapnya tentang grup file dan strategi pemartisian di Filegroups.

Batasan dan Pembatasan

ALTER PARTITION FUNCTION mempartisi ulang tabel dan indeks apa pun yang menggunakan fungsi dalam satu operasi atomik. Namun, operasi ini terjadi secara offline, dan tergantung pada tingkat partisi ulang, mungkin intensif sumber daya.

Hanya gunakan ALTER PARTITION FUNCTION untuk membagi satu partisi menjadi dua, atau menggabungkan dua partisi menjadi satu. Untuk mengubah cara tabel dipartisi (misalnya, dari 10 partisi menjadi lima partisi), jalankan salah satu opsi berikut. Bergantung pada konfigurasi sistem Anda, opsi ini dapat bervariasi dalam konsumsi sumber daya:

  • Buat tabel baru yang dipartisi dengan fungsi partisi yang diperlukan. Kemudian, sisipkan data dari tabel lama ke dalam tabel baru dengan menggunakan INSERT INTO... Pernyataan SELECT FROM.

  • Buat indeks berkluster yang dipartisi pada timbunan.

    Catatan

    Menghilangkan indeks berkluster yang dipartisi menghasilkan tumpukan yang dipartisi.

  • Hilangkan dan bangun kembali indeks yang dipartisi yang ada dengan menggunakan pernyataan TRANSACT-SQL CREATE INDEX dengan klausa DROP EXISTING = ON.

  • Jalankan urutan pernyataan ALTER PARTITION FUNCTION.

Semua grup file yang dipengaruhi oleh ALTER PARTITION FUNCTION harus online.

ALTER PARTITION FUNCTION gagal ketika indeks terkluster yang dinonaktifkan ada pada tabel apa pun yang menggunakan fungsi partisi.

Mesin database tidak menyediakan dukungan replikasi untuk memodifikasi fungsi partisi. Perubahan pada fungsi partisi dalam database publikasi harus diterapkan secara manual dalam database langganan.

Izin

Salah satu izin berikut dapat digunakan untuk menjalankan ALTER PARTITION FUNCTION:

  • Izin ALTER ANY DATASPACE. Izin ini default untuk anggota peran server tetap sysadmin dan peran database tetap db_owner dan db_ddladmin .

  • IZIN CONTROL atau ALTER pada database tempat fungsi partisi dibuat.

  • IZIN CONTROL SERVER atau ALTER ANY DATABASE pada server database tempat fungsi partisi dibuat.

Contoh

J. Membagi partisi tabel atau indeks yang dipartisi menjadi dua partisi

Contoh berikut membuat fungsi partisi untuk mempartisi tabel atau indeks menjadi empat partisi. ALTER PARTITION FUNCTION membagi salah satu partisi menjadi dua untuk membuat total lima partisi.

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. Menggabungkan dua partisi tabel yang dipartisi ke dalam satu partisi

Contoh berikut membuat fungsi partisi yang sama seperti di atas, lalu menggabungkan dua partisi ke dalam satu partisi, untuk total tiga partisi.

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

Langkah berikutnya

Pelajari selengkapnya tentang pemartisian tabel dan konsep terkait dalam artikel berikut ini: