Jika Anda mendapatkan pesan kesalahan 7707 di SQL Server, itu karena Anda mencoba membuat skema partisi yang tidak menentukan grup file yang cukup untuk mencocokkan fungsi partisi.
Untungnya, ini mudah diperbaiki.
Contoh Kesalahan
Kesalahannya terlihat seperti ini:
Msg 7707, Level 16, State 1, Line 1 The associated partition function 'CatsPartitionFunction' generates more partitions than there are file groups mentioned in the scheme 'CatsPartitionScheme'.
Mengapa Ini Terjadi?
Dalam kasus saya, saya menetapkan tiga grup file saat membuat skema partisi, tetapi fungsi partisi sebenarnya menghasilkan empat.
Berikut kode yang saya gunakan untuk membuat fungsi partisi dan skema partisi.
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO
CREATE PARTITION SCHEME CatsPartitionScheme
AS PARTITION CatsPartitionFunction
TO (CatsFg1, CatsFg2, CatsFg3);
GO
Fungsi partisi saya memiliki tiga nilai batas, yang menghasilkan empat partisi. Skema partisi saya hanya menetapkan tiga grup file (seharusnya ada empat).
Ini adalah kesalahan yang mudah dilakukan, karena saat Anda membuat fungsi partisi, jumlah nilai batas yang Anda tentukan sebenarnya kurang satu dari jumlah partisi yang dihasilkan. Dengan kata lain, jumlah partisi yang dibuat akan sama dengan jumlah nilai batas + 1.
Jika Anda tidak sepenuhnya siap, Anda mungkin secara tidak sengaja mencocokkan jumlah grup file dengan nilai batas, lupa bahwa Anda perlu menentukan satu grup file lagi.
Perbaiki Kesalahan
Jadi untuk memperbaiki kesalahan ini, yang perlu saya lakukan adalah menentukan satu grup file lagi saat membuat skema partisi.
Kode saya akan terlihat lebih seperti ini:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO
CREATE PARTITION SCHEME CatsPartitionScheme
AS PARTITION CatsPartitionFunction
TO (CatsFg1, CatsFg2, CatsFg3, CatsFg4);
GO
Dalam hal ini, saya cukup menambahkan CatsFg4
ke daftar grup file. Ini jelas mengasumsikan bahwa filegroup yang ditentukan ada.
Perhatikan juga bahwa Anda tidak perlu membuat grup file yang sama sekali baru. Anda dapat berbagi filegroup (yaitu memiliki beberapa partisi yang dipetakan ke satu filegroup).
Oleh karena itu, saya bisa melakukan ini:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO
CREATE PARTITION SCHEME CatsPartitionScheme
AS PARTITION CatsPartitionFunction
TO (CatsFg1, CatsFg2, CatsFg3, CatsFg3);
GO
Perhatikan bahwa dua grup file terakhir adalah sama (CatsFg3
).
Tetapi Anda tidak perlu berhenti di situ. Pendekatan lain adalah memiliki semua partisi yang dipetakan ke filegroup.
Dalam hal ini kita bisa menggunakan ALL
argumen, dan tentukan hanya satu filegroup:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO
CREATE PARTITION SCHEME CatsPartitionScheme
AS PARTITION CatsPartitionFunction
ALL TO (CatsFg1);
GO