Bagikan melalui


Mengubah fungsi partisi

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Anda dapat mengubah cara tabel atau indeks dipartisi di SQL Server, Azure SQL Database, dan Azure SQL Managed Instance dengan menambahkan atau mengurangi jumlah partisi yang ditentukan, dengan kenaikan 1, dalam fungsi partisi tabel atau indeks yang dipartisi dengan menggunakan Transact-SQL. Saat Anda menambahkan partisi, Anda melakukannya dengan "memisahkan" partisi yang ada menjadi dua partisi dan mendefinisikan ulang batas partisi baru. Ketika Anda menjatuhkan partisi, Anda melakukannya dengan "menggabungkan" batas-batas dua partisi menjadi satu. Tindakan terakhir ini mengisi ulang satu partisi dan membiarkan partisi lain tidak ditetapkan. Tinjau praktik terbaik sebelum memodifikasi fungsi partisi.

Perhatian

Lebih dari satu tabel atau indeks dapat menggunakan fungsi partisi yang sama. Saat Anda memodifikasi fungsi partisi, Anda memengaruhi semuanya dalam satu transaksi. Periksa dependensi fungsi partisi sebelum memodifikasinya.

Pemartisian tabel juga tersedia di kumpulan SQL khusus di Azure Synapse Analytics, dengan beberapa perbedaan sintaksis. Pelajari selengkapnya di Tabel partisi di kumpulan SQL khusus.

Batasan

  • ALTER PARTITION FUNCTION hanya dapat digunakan untuk membagi satu partisi menjadi dua, atau untuk menggabungkan dua partisi menjadi satu. Untuk mengubah cara tabel atau indeks dipartisi (dari 10 partisi menjadi 5, misalnya), Anda dapat menggunakan salah satu opsi berikut:

    • Buat tabel baru yang dipartisi dengan fungsi partisi yang diinginkan, lalu sisipkan data dari tabel lama ke dalam tabel baru dengan menggunakan INSERT INTO ... PILIH DARI pernyataan Transact-SQL atau Wizard Kelola Partisi di SQL Server Management Studio (SSMS).

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

    • Lakukan urutan pernyataan ALTER PARTITION FUNCTION.

  • Mesin database tidak menyediakan dukungan replikasi untuk memodifikasi fungsi partisi. Jika Anda ingin membuat perubahan pada fungsi partisi dalam database publikasi, Anda harus melakukan ini secara manual di database langganan.

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

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.

Kueri objek yang dipartisi dalam database

Kueri berikut mencantumkan semua objek yang dipartisi dalam database. Ini dapat digunakan untuk memeriksa dependensi untuk fungsi partisi sebelum memodifikasinya.

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;

Memisahkan partisi dengan Transact-SQL

  1. Di Object Explorer, sambungkan ke database target Anda.

  2. Pada bilah Standar, pilih Kueri Baru.

  3. Salin dan tempel contoh berikut ke dalam jendela kueri dan pilih Jalankan.

    Contoh ini:

    • Memeriksa versi fungsi myRangePF1 partisi sebelumnya dan menghapusnya jika ditemukan.
    • Membuat fungsi partisi yang disebut myRangePF1 yang mempartisi tabel menjadi empat partisi.
    • Memisahkan partisi antara boundary_values 100 dan 1000 untuk membuat partisi antara boundary_values 100 dan 500 dan partisi antara boundary_values 500 dan 1000.
    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);  
    

Menggabungkan dua partisi dengan Transact-SQL

  1. Di Object Explorer, sambungkan ke database target Anda.

  2. Pada bilah Standar, pilih Kueri Baru.

  3. Salin dan tempel contoh berikut ke dalam jendela kueri dan pilih Jalankan.

    Contoh ini:

    • Memeriksa apakah versi sebelumnya dari fungsi myRangePF1 partisi ada, dan menghapusnya jika ditemukan.
    • Membuat fungsi partisi yang disebut myRangePF1 dengan tiga nilai batas, yang akan menghasilkan empat partisi.
    • Menggabungkan partisi antara boundary_values 1 dan 100 dengan partisi antara boundary_values 100 dan 1.000.
    • Ini menghasilkan fungsi myRangePF1 partisi yang memiliki dua titik batas, 1 dan 1.000.
    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);  
    

Menghapus fungsi partisi dengan SSMS

  1. Di Object Explorer, sambungkan ke database target Anda.

  2. Perluas database tempat Anda ingin menghapus fungsi partisi lalu perluas folder Penyimpanan .

  3. Perluas folder Fungsi Partisi.

  4. Klik kanan fungsi partisi yang ingin Anda hapus dan pilih Hapus.

  5. Dalam kotak dialog Hapus Objek , pastikan bahwa fungsi partisi yang benar dipilih, lalu pilih OK.

Langkah berikutnya

Pelajari selengkapnya tentang konsep terkait dalam artikel berikut: