ALTER PARTITION FUNCTION (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Megváltoztatja a partíciós függvényt a határértékeinek felosztásával vagy összeolvasztásával is. Egy utasítás futtatásával ALTER PARTITION FUNCTION két részre oszthat egy táblázatot vagy indexpartíciót, amely a partíciós függvényt használja. Az állítás két partíciót is egyesíthet egy partícióba.

Caution

Több tábla vagy index is használhatja ugyanazt a partíciófüggvényt. ALTER PARTITION FUNCTION mindegyiket egyetlen tranzakcióban érinti.

Transact-SQL szintaxis konvenciók

Szemantika

  
ALTER PARTITION FUNCTION partition_function_name()  
{   
    SPLIT RANGE ( boundary_value )  
  | MERGE RANGE ( boundary_value )   
} [ ; ]  

Arguments

partition_function_name
A módosítandó partíciós függvény neve.

OSZTOTT TARTOMÁNY ( boundary_value )
Egy partíciót ad hozzá a partíciós függvényhez. boundary_value meghatározza az új partíció tartományát, és eltérnie kell a partíciófüggvény meglévő határtartományaitól. boundary_value alapján az adatbázis motor az egyik meglévő tartományt ketté osztja. E két tartomány közül az új boundary_value az új partíció.

Egy fájlcsoportnak online kell léteznie. És annak a partíciós séma, amely a partíciós függvényt KÖVETKEZŐ HASZNÁLT módként használja az új partíció tárolására, meg kell jelölnie a fájlcsoportot. Egy CREATE PARTITION SCHEME utasítás fájlcsoportokat rendel partíciókhoz. Az utasítás CREATE PARTITION FUNCTION kevesebb partíciót hoz létre, mint a fájlcsoportok, amelyek tárolják őket. Egy CREATE PARTITION SCHEME nyilatkozat több fájlcsoportot félretehet, mint amennyi szükséges. Ha ez megtörténik, akkor végül nem hozzárendelt fájlcsoportok lesznek. Emellett a partíciós séma az egyik fájlcsoportot KÖVETKEZŐ HASZNÁLTNAK jelöli. Ez a fájlcsoport tartalmazza az új partíciót. Ha nincs olyan fájlcsoport, amit a partíció séma KÖVETKEZŐ HASZNÁLT (KÖVETKEZŐ HASZNÁLT) jelöl meg, akkor egy ALTER PARTITION SCHEME utasítást kell használni.

Az ALTER PARTITION SCHEME utasítás hozzáadhat egy fájlcsoportot, vagy választhat egy létezőt, hogy megtartsa az új partíciót. Kijelölhetsz egy fájlcsoportot, amely már tartalmaz partíciókat, hogy további részeket is tároljon. Egy partíciós függvény több partíciós sémában is részt vehet. Ezért minden partíciós sémának, amely használja azt a partition függvényt, amelyhez a részeket hozzáadod, rendelkeznie kell egy KÖVETKEZŐ HASZNÁLT fájlcsoporttal. Ellenkező esetben a ALTER PARTITION FUNCTION mondat hibával meghibázik, amely megjeleníti a partíciós sémát vagy olyan sémákat, amelyekben nincs NEXT USED fájlcsoport.

Ha az összes partíciót ugyanabban a fájlcsoportban hozod létre, az a fájlcsoport automatikusan automatikusan a KÖVETKEZŐ HASZNÁLT fájlcsoportnak van kijelölve. Azonban egy split művelet után már nincs kiválasztott NEXT USED fájlcsoport. A fájlcsoportot kifejezetten a következő használt fájlcsoportként rendeld be ALTER PARTITION SCHEME , különben egy közelgő split művelet meghibás.

Megjegyzés:

Korlátok a columnstore indexgel: Csak üres partíciók oszthatók be, ha columnstore index van a táblán. A művelet végrehajtása előtt el kell távolítanod vagy letiltanod a columnstore indexet.

MERGE [ TÁVOLSÁG ( boundary_value) ]
Kidob egy partíciót, és az adott partícióban lévő értékeket egy maradék partícióval egyesíti. A RANGE (boundary_value) egy meglévő határértéknek kell lennie annak a partíciónak, amelyet el kell vetni. Ez az érv eltávolítja azt a fájlcsoportot, amely eredetileg boundary_value volt a partíciós sémából, hacsak egy maradék partíció nem használja azt, vagy jelöli meg a KÖVETKEZŐ HASZNÁLT tulajdonsággal. Az összevont partíció abban a fájlcsoportban létezik, amely először nem tartotta meg boundary_value . boundary_value egy állandó kifejezés, amely képes változókra (beleértve a felhasználó által definiált típus változókat) vagy függvényekre (beleértve a felhasználó által definiált függvényeket is) hivatkozni. Nem utalhat Transact-SQL kifejezésre. boundary_value vagy egyezik, vagy implicit módon átalakíthatónak kell lennie a megfelelő partíciós oszlop adattípusára. Az implicit átalakítás során sem lehet boundary_value úgy lerövidíteni, hogy az érték mérete és mérete ne egyezzen a megfelelő input_parameter_type értékével.

Megjegyzés:

Korlátok a columnstore indexgel: Két nem üres partíció, amely columnstore indexet tartalmaz, nem lehet összevonni. A művelet végrehajtása előtt el kell engedned vagy letiltanod a columnstore indexet

Ajánlott eljárások

Mindig tartsd üres partíciókat a partíció mindkét végén. Tartsd meg a partíciókat mindkét végén, hogy biztosítsd a partíció szétválása és a felosztás összevonása ne okozzon adatmozgást. A partíció felosztása az elején, a partíció pedig a végén történik. Kerüld a feltöltődő partíciók szétválasztását vagy összevonását. A feltöltött partíciók felosztása vagy összevonása hatástalan lehet. Ezek hatékonyabbak lehetnek, mert a hasadás vagy összeolvadás akár négyszer több rönktermelést is okozhat, és súlyos záródást is okozhat.

Az elsődleges ok, amiért a partíciókat több fájlcsoportra helyezed, az, hogy biztosítsd a mentési és helyreállítási műveleteket önállóan a partíciókon. További információ a Filegroupsfájlcsoportjairól és particionálási stratégiáiról.

Korlátozások és korlátozások

ALTER PARTITION FUNCTION egyetlen atomi műveletben újraosztja azokat a táblákat és indexeket, amelyek a függvényt használják. Ez a művelet azonban offline módon történik, és a megosztás mértékétől függően erőforrásigényes lehet.

Csak egy partíció kettőre osztására vagy két partíció egyesítésére használják ALTER PARTITION FUNCTION . Ahhoz, hogy megváltoztassuk a táblázat egyéb partíciójának módját (például 10 partícióról öt partícióra), alkalmazza az alábbi lehetőségek bármelyikét. A rendszer konfigurációjától függően ezek az opciók eltérhetnek az erőforrás-fogyasztásban:

  • Hozzon létre egy új partíciós táblát a szükséges partíciós funkcióval. Ezután a régi táblából származó adatokat az új táblába helyezzük be egy INSERT INTO... SELECT FROM utasítás.

  • Hozz létre egy partíciózott, klaszterelt indexet egy halomban.

    Megjegyzés:

    A particionált fürtözött index megszüntetése eredményez egy particionált halmot.

  • Ejtsd el és építs újra egy meglévő partíciós indexet a Transact-SQL CREATE INDEX utasítással a DROP EXISTING = ON klauzulával együtt.

  • Futtatj egy utasítássorozatot ALTER PARTITION FUNCTION .

Az összes érintett fájlcsoportnak ALTER PARTITION FUNCTION online állapotban kell lennie.

ALTER PARTITION FUNCTION akkor hibázik, ha bármely olyan táblán, amely a partíciós függvényt használja, letiltott klaszterelt index létezik.

Az adatbázis motor nem támogatja replikációt egy partíciós függvény módosításához. A kiadóadatbázis partíciós funkciójának módosításait manuálisan kell alkalmazni az előfizetési adatbázisban.

Permissions

A következő engedélyek bármelyike használható a végrehajtáshoz ALTER PARTITION FUNCTION:

  • Bármely adatterület módosítási joga. Ez az engedély alapértelmezés szerint a sysadmin rögzített kiszolgálói szerepkör tagjaira, valamint a db_owner és db_ddladmin rögzített adatbázis-szerepkörök tagjaira vonatkozik.

  • CONTROL vagy ALTER engedély azon az adatbázison, amelyben a partíció függvényt létrehozták.

  • CONTROL SERVER vagy ALTER ANY DATABASE engedély annak az adatbázisnak a kiszolgálóján, amelyben a partíciófüggvény létrejött.

Példák

A. Oszd szét egy partíciós táblázatot vagy indexet két részre

Az alábbi példa egy partíciófüggvényt hoz létre egy tábla vagy index négy partícióra való particionálásához. ALTER PARTITION FUNCTION az egyik partíciót ketté osztja, így összesen öt partíciót alkotnak.

IF EXISTS (SELECT * FROM sys.partition_functions  
    WHERE name = 'myRangePF1')  
DROP PARTITION FUNCTION myRangePF1;  
GO  
CREATE PARTITION FUNCTION myRangePF1 (int)  
AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );  
GO  
--Split the partition between boundary_values 100 and 1000  
--to create two partitions between boundary_values 100 and 500  
--and between boundary_values 500 and 1000.  
ALTER PARTITION FUNCTION myRangePF1 ()  
SPLIT RANGE (500);  

B. Egyesítsük egy partíciós táblázat két partícióját egy partícióba

A következő példa ugyanazt a partíciós függvényt hozza létre, mint fent, majd két partíciót egyesít egy partícióvá, így összesen három partíciót adunk.

IF EXISTS (SELECT * FROM sys.partition_functions  
    WHERE name = 'myRangePF1')  
DROP PARTITION FUNCTION myRangePF1;  
GO  
CREATE PARTITION FUNCTION myRangePF1 (int)  
AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );  
GO  
--Merge the partitions between boundary_values 1 and 100  
--and between boundary_values 100 and 1000 to create one partition  
--between boundary_values 1 and 1000.  
ALTER PARTITION FUNCTION myRangePF1 ()  
MERGE RANGE (100);  

Következő lépések

További információkat a táblázatfelosztásról és kapcsolódó fogalmakról a következő cikkekben találhat: