sql >> Databáze >  >> RDS >> Sqlserver

Jak opravit „Přidružená funkce oddílu generuje více oddílů, než kolik je skupin souborů uvedených ve schématu“ Msg 7707 v SQL Server

Pokud se na serveru SQL zobrazí chybová zpráva 7707, je to proto, že se pokoušíte vytvořit schéma oddílů, které neurčuje dostatek skupin souborů, aby odpovídaly funkci oddílu.

Naštěstí to lze snadno opravit.

Příklad chyby

Chyba vypadá asi takto:

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

Proč se to stalo?

V mém případě jsem při vytváření schématu oddílů zadal tři skupiny souborů, ale funkce oddílů ve skutečnosti vygenerovala čtyři.

Zde je kód, který jsem použil k vytvoření funkce oddílu a schémat oddílů.

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

Moje oddílová funkce má tři hraniční hodnoty, což vede ke čtyřem oddílům. Moje schéma oddílů určuje pouze tři skupiny souborů (měly by být čtyři).

To je snadná chyba, protože když vytváříte funkci oddílu, počet zadaných hraničních hodnot je ve skutečnosti o jednu menší než počet výsledných oddílů. Jinými slovy, počet vytvořených oddílů se bude rovnat počtu hraničních hodnot + 1.

Pokud nejste úplně na kouli, můžete nechtěně přiřadit počet skupin souborů k hraničním hodnotám a zapomenout, že musíte zadat ještě jednu skupinu souborů.

Opravit chybu

Takže k opravě této chyby vše, co musím udělat, je určit jednu další skupinu souborů při vytváření schématu oddílů.

Můj kód by měl vypadat spíše takto:

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

V tomto případě jsem jednoduše přidal CatsFg4 do seznamu skupin souborů. To samozřejmě předpokládá, že zadaná skupina souborů existuje.

Všimněte si také, že nemusíte nutně vytvářet celou novou skupinu souborů. Můžete sdílet skupiny souborů (tj. mít více oddílů namapovaných na jednu skupinu souborů).

Proto jsem mohl udělat toto:

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

Všimněte si, že poslední dvě skupiny souborů jsou stejné (CatsFg3 ).

Ale nemusíte se tam zastavit. Dalším přístupem je mít vše oddíly mapované do skupiny souborů.

V tomto případě bychom mohli použít ALL argument a zadejte pouze jednu skupinu souborů:

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. Připojte se ke vzdálené databázi PostgreSql pomocí Powershell

  2. formátovat interval s to_char

  3. SQL Server 2008 Spatial:Najděte bod v mnohoúhelníku

  4. 4 tipy pro nastavení upozornění SQL Server