sql >> データベース >  >> RDS >> Sqlserver

修正方法「関連付けられたパーティション関数は、スキームで言及されているファイルグループよりも多くのパーティションを生成します」SQLServerのメッセージ7707

    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


    1. MySQLで列の文字セットと照合を設定する方法

    2. oracle PL / SQLIPv6cidrの範囲IPを計算する方法

    3. SQLite JSON_GROUP_ARRAY()

    4. Excelを超えた5つの兆候