Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak naprawić „Powiązana funkcja partycji generuje więcej partycji niż jest grup plików wymienionych w schemacie” Msg 7707 w SQL Server

Jeśli otrzymasz komunikat o błędzie 7707 w SQL Server, to dlatego, że próbujesz utworzyć schemat partycji, który nie określa wystarczającej liczby grup plików, aby pasowały do ​​funkcji partycji.

Na szczęście można to łatwo naprawić.

Przykład błędu

Błąd wygląda mniej więcej tak:

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

Dlaczego tak się stało?

W moim przypadku określiłem trzy grupy plików podczas tworzenia schematu partycji, ale funkcja partycji faktycznie wygenerowała cztery.

Oto kod, którego użyłem do utworzenia funkcji partycji i schematów partycji.

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

Moja funkcja partycji ma trzy wartości graniczne, co daje cztery partycje. Mój schemat partycji określa tylko trzy grupy plików (powinny być cztery).

Jest to łatwy błąd do popełnienia, ponieważ podczas tworzenia funkcji partycji liczba określonych wartości granicznych jest w rzeczywistości o jeden mniejsza niż liczba partycji wynikowych. Innymi słowy, liczba utworzonych partycji będzie równa liczbie wartości granicznych + 1.

Jeśli nie jesteś w pełni zadowolony, możesz przypadkowo dopasować liczbę grup plików do wartości granicznych, zapominając, że musisz określić jeszcze jedną grupę plików.

Napraw błąd

Aby naprawić ten błąd, wszystko, co muszę zrobić, to określić jeszcze jedną grupę plików podczas tworzenia schematu partycji.

Mój kod powinien wyglądać mniej więcej tak:

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

W tym przypadku po prostu dodałem CatsFg4 do listy grup plików. To oczywiście zakłada, że ​​określona grupa plików istnieje.

Pamiętaj też, że niekoniecznie musisz tworzyć zupełnie nową grupę plików. Możesz udostępniać grupy plików (tj. mieć wiele partycji zmapowanych do jednej grupy plików).

Dlatego mogłem to zrobić:

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

Zauważ, że ostatnie dwie grupy plików są takie same (CatsFg3 ).

Ale nie musisz na tym poprzestać. Innym podejściem jest posiadanie wszystkich partycje mapowane na grupę plików.

W tym przypadku możemy użyć ALL argument i określ tylko jedną grupę plików:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EF5:Nie można dołączyć pliku „{0}” jako bazy danych „{1}”

  2. Jak działa funkcja STRING_ESCAPE() w SQL Server (T-SQL)

  3. Jak wstawić wartości do kolumny IDENTITY w SQL Server

  4. Przypisz wynik dynamicznego sql do zmiennej

  5. Dlaczego typ DATETIME SQL Server oszczędza czas w taktach 1/300 sekundy?