Ще получите грешка 7710, ако се опитате да разделите дял в SQL Server, но не сте посочили „следваща използвана“ файлова група.
Цялата грешка изглежда така:
Msg 7710, Level 16, State 1, Line 1 Warning: The partition scheme 'MyPartitionScheme' does not have any next used filegroup. Partition scheme has not been changed.
Където MyPartitionScheme
е името на въпросната схема за дялове.
Ако получите тази грешка, ще трябва да добавите „следваща използвана“ файлова група, като използвате ALTER PARTITION SCHEME
изявление.
Проблемът
Ето бърз преглед на проблема.
Когато се опитам да разделя дял:
ALTER PARTITION FUNCTION MoviesPartitionFunction()
SPLIT RANGE (500);
Получавам следната грешка:
Msg 7710, Level 16, State 1, Line 1 Warning: The partition scheme 'MoviesPartitionScheme' does not have any next used filegroup. Partition scheme has not been changed.
Това е така, защото не съм посочил „следваща използвана“ файлова група за MoviesPartitionScheme
, което в моя случай е схемата за дялове, която използвах за прилагане на MoviesPartitionFunction
към файловите групи, които да се използват от дяловете.
Ето как създадох оригиналната си функция за дялове и схема на дялове:
CREATE PARTITION FUNCTION MoviesPartitionFunction (int)
AS RANGE LEFT FOR VALUES (-1, 100, 10000);
CREATE PARTITION SCHEME MoviesPartitionScheme
AS PARTITION MoviesPartitionFunction
TO (MoviesFg1, MoviesFg2, MoviesFg3, MoviesFg4);
Така че в момента има четири дяла и аз се опитвам да добавя пети.
Решението
Можем да разрешим горния проблем, като добавим „следваща използвана“ файлова група за схемата на дяловете.
Можем да използваме съществуваща файлова група или да създадем нова.
Нека създадем нов и се опитаме да разделим дяла отново:
ALTER DATABASE Test ADD FILEGROUP MoviesFg5;
ALTER DATABASE Test
ADD FILE
(
NAME = MoviesFg5dat,
FILENAME = '/var/opt/mssql/data/MoviesFg5dat.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP MoviesFg5;
ALTER PARTITION SCHEME MoviesPartitionScheme
NEXT USED MoviesFg5;
ALTER PARTITION FUNCTION MoviesPartitionFunction()
SPLIT RANGE (500);
Резултат:
Commands completed successfully.
Отлично, така че работи и вече не получаваме грешката.