SQL Serverでエラーメッセージ7707が表示される場合は、パーティション関数に一致する十分なファイルグループを指定していないパーティションスキームを作成しようとしているためです。
幸い、これは簡単に修正できます。
エラーの例
エラーは次のようになります:
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'.
なぜこれが起こったのですか?
私の場合、パーティションスキームを作成するときに3つのファイルグループを指定しましたが、パーティション関数は実際には4つを生成しました。
これが、パーティション関数とパーティションスキームを作成するために使用したコードです。
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
私のパーティション関数には3つの境界値があり、その結果、4つのパーティションになります。私のパーティションスキームでは、3つのファイルグループしか指定されていません(4つあるはずです)。
これは簡単な間違いです。パーティション関数を作成するときに、指定する境界値の数は、実際には結果のパーティションの数より1つ少ないためです。つまり、作成されるパーティションの数は、境界値の数+1に等しくなります。
完全に理解していないと、ファイルグループの数を境界値と誤って一致させてしまい、もう1つのファイルグループを指定する必要があることを忘れてしまう可能性があります。
エラーを修正する
したがって、このエラーを修正するには、パーティションスキームを作成するときにもう1つのファイルグループを指定するだけです。
私のコードは次のようになります:
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
この場合、CatsFg4
を追加しただけです。 ファイルグループのリストに。これは明らかに、指定されたファイルグループが存在することを前提としています。
また、必ずしもまったく新しいファイルグループを作成する必要はないことにも注意してください。ファイルグループを共有できます(つまり、複数のパーティションを1つのファイルグループにマップできます)。
したがって、私はこれを行うことができたでしょう:
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
最後の2つのファイルグループが同じであることに注意してください(CatsFg3
。
しかし、そこで止まる必要はありません。もう1つのアプローチは、すべてにすることです。 ファイルグループにマップされたパーティション。
この場合、ALL
を使用できます 引数を指定し、ファイルグループを1つだけ指定します:
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