Megosztás a következőn keresztül:


Folyamatosan folytatható táblamegkötések hozzáadása

A következőkre vonatkozik: Az SQL Server 2022 (16.x) és újabb verziói az Azure SQL DatabaseAzure SQL Managed InstanceSQL-adatbázist a Microsoft Fabricben

Az online indexek létrehozásának és újraépítésének újrakezdhető művelete már támogatott az SQL Server 2019, az Azure SQL Database és a felügyelt Azure SQL-példány esetében. Az újra felhasználható műveletek lehetővé teszik az indexműveletek végrehajtását, amíg a tábla online állapotban van (ONLINE=ON) és a következőket is:

  • Egy index létrehozási vagy újraépítési műveletének szüneteltetése és újraindítása többször a karbantartási időszaknak megfelelően

  • Az index létrehozásából vagy újraépítési hibákból, például ha az adatbázis feladatátvétele történik vagy a lemezterület elfogy, vissza lehet állni.

  • Tranzakciónaplók csonkolásának engedélyezése indexlétrehozási vagy újraépítési művelet során.

  • Az indexművelet szüneteltetésekor az eredeti indexnek és az újonnan létrehozottnak is lemezterületre van szüksége, és frissíteni kell az adatmanipulációs nyelv (DML) műveletei során.

Az SQL Server 2022, az SQL Database és a felügyelt SQL-példány új bővítményei lehetővé teszik az data definition language (DDL) parancsok, mint például az ALTER TABLE ADD CONSTRAINT, és az elsődleges vagy egyedi kulcs hozzáadására irányuló műveletek újrakezdhetőségét. Az elsődleges vagy egyedi kulcs hozzáadásáról további információt az ALTER TABLE table_constraint című témakörben talál.

Megjegyzés:

Az újra felhasználható táblamegkötések csak az ELSŐDLEGES KULCS és AZ EGYEDI KULCS kényszerekre vonatkoznak. A külső kulcs kényszerek esetén nem támogatott az újraindítható táblamegkötés.

Folytatható műveletek

Az SQL Server korábbi verzióiban a ALTER TABLE ADD CONSTRAINT művelet végrehajtható a ONLINE=ON beállítással. Azonban egy nagy táblázat esetén a művelet befejezése több órát is igénybe vehet, és jelentős mennyiségű erőforrást használhat fel. Az ilyen végrehajtás során hibák vagy megszakítások is előfordulhatnak. Újrakezdhető képességeket vezettünk be, hogy ALTER TABLE ADD CONSTRAINT a felhasználók szüneteltethetik a műveletet egy karbantartási időszak alatt, vagy újraindíthatják onnan, ahonnan a végrehajtás során megszakadt, anélkül, hogy az elejétől kezdve újraindítanák a műveletet.

Támogatott forgatókönyvek

Az új, újraindítható funkció a következő ügyfélforgatókönyveket támogatja:

  • Szüneteltetheti vagy folytathatja a futó ALTER TABLE ADD CONSTRAINT műveletet, például szüneteltetheti azt egy karbantartási időszakban, és a karbantartási időszak befejeződése után újrakezdheti a műveletet.

  • Rendszerhibák és átállások után folytassa a ALTER TABLE ADD CONSTRAINT műveletet.

  • ALTER TABLE ADD CONSTRAINT A művelet végrehajtása egy nagy táblán a rendelkezésre álló kis naplóméret ellenére.

Megjegyzés:

A folytatható művelethez ALTER TABLE ADD CONSTRAINT online kell végrehajtani a ALTER parancsotWITH ONLINE = ON.

Ez a funkció különösen hasznos nagy táblákhoz.

ALTER TABLE T-SQL szintaxisa

A táblakényszerben végrehajtható műveletek engedélyezéséhez használt szintaxissal kapcsolatos információkért tekintse meg az ALTER TABLE (Transact-SQL) szintaxisát és beállításait.

Megjegyzések az ALTER TABLE-hez

  • Az aktuális T-SQL szintaxis < parancsához hozzáadtunk egy új WITH <resumable_options záradékot.

  • A RESUMABLE lehetőség új, és hozzá lett adva a meglévő ALTER TABLE (Transact-SQL) szintaxishoz.

  • MAX_DURATION = felhasznált idő [PERCBEN] RESUMABLE = ON (ONLINE = ON szükséges). MAX_DURATION jelzi azt az időt (percekben megadott egész számérték), ameddig egy folytatható online hozzáadási kényszerművelet végrehajtható a szüneteltetés előtt. Ha nincs megadva, a művelet a befejezésig folytatódik.

AZ ALTER INDEX T-SQL szintaxisa

A folytatható táblamegkötési művelet szüneteltetéséhez, folytatásához vagy megszakításához ALTER TABLE ADD CONSTRAINThasználja az ALTER INDEX (Transact-SQL ) T-SQL szintaxist.

Az újrahasználható korlátozások esetében a meglévő ALTER INDEX ALL parancsot használja a rendszer.

ALTER INDEX ALL ON <table_name>  
      { RESUME [WITH (<resumable_index_options>,[...n])]
        | PAUSE
        | ABORT
      }
<resumable_index_option> ::=
 { 
    MAXDOP = max_degree_of_parallelism
    | MAX_DURATION =<time> [MINUTES]
    | <low_priority_lock_wait>  
 }
 <low_priority_lock_wait>::=  
{  
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] ,   
                          ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )  
}  

Megjegyzések az ALTER INDEXhez

ALTER INDEX ALL ON <Table> PAUSE

  • A végrehajtott újraművelhető és online táblamegkötési művelet szüneteltetése

ALTER INDEX ALL ON <Table> RESUME [WITH (<resumable_index_options>,[...n])]

  • Folytassa a manuálisan vagy hiba miatt szüneteltetett táblakorlát hozzáadási műveletet.

MAX_DURATION használva RESUMABLE=ON

  • Az az idő (percekben megadott egész szám), amelyet a rendszer végrehajt az újrakezdhető táblamegkötési művelet végrehajtása után. Az idő lejárta után a folytatható művelet szünetel, ha még mindig fut.

WAIT_AT_LOW_PRIORITY használt RESUMABLE=ON és ONLINE = ON

  • Ha szüneteltetés után újra elindít egy online táblakorlát hozzáadási műveletet, várnia kell a táblát blokkoló műveletek befejeződésére. WAIT_AT_LOW_PRIORITY azt jelzi, hogy a táblakorlát hozzáadása alacsony prioritású zárolásokat alkalmaz, lehetővé téve más műveletek számára a folytatást, amíg az újraindítható művelet várakozik. A WAIT_AT_LOW_PRIORITY lehetőség kihagyása egyenértékű a WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE). További információ: WAIT_AT_LOW_PRIORITY.

ALTER INDEX ALL ON <Table> ABORT

  • Egy futó vagy szüneteltetett táblamegkötési művelet megszakítása, amely újraindíthatóként lett deklarálva. A megszakítási műveletet kifejezetten parancsként kell végrehajtani ABORT, hogy leállítsa a folytatható kényszerműveletet. Az újrahasználható táblakényszerítési művelet meghiúsulása vagy szüneteltetése nem szünteti meg a végrehajtást. Ehelyett határozatlan ideig szüneteltetett állapotban hagyja a műveletet.

Az újra felhasználható műveletekre PAUSERESUMEABORT vonatkozó további információkért lásd: ALTER INDEX (Transact-SQL).

Az folytatható művelet állapotának megtekintése

A folytatható táblamegkötési művelet állapotának megtekintéséhez használja a sys.index_resumable_operations nézetet.

Permissions

A táblán való művelethez ALTER engedély szükséges.

Nincs szükség új engedélyekre az újraindítható ALTER TABLE ADD CONSTRAINT funkcióhoz.

Példák

Íme néhány példa a megszakított táblamegszorítás hozzáadásának folytatható műveleteire.

1. példa

Folytatható ALTER TABLE művelet egy 240 perces MAX_DURATION oszlopban fürtözött elsődleges kulcs hozzáadásához.

ALTER TABLE table1
ADD CONSTRAINT PK_Constrain PRIMARY KEY CLUSTERED (a)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);

2. példa

Folytatható ALTER TABLE művelet az a és b oszlopokon lévő egyedi korlátozás hozzáadásához, amely MAX_DURATION 240 percig tart.

ALTER TABLE table2
ADD CONSTRAINT PK_Constrain UNIQUE CLUSTERED (a,b)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);

3. példa

ALTER TABLE a fürtözött elsődleges kulcs hozzáadásának művelete, amely szüneteltethető és folytatható.

Az alábbi táblázat két munkamenetet (Session #1 és Session #2) jelenít meg időrendben az alábbi T-SQL-utasítások használatával. Session #1 végrehajt egy folytatható ALTER TABLE ADD CONSTRAINT műveletet, amely egy elsődleges kulcsot hoz létre az Col1 oszlopon. Session #2 ellenőrzi a futó kényszer végrehajtási állapotát. Egy idő után szünetelteti az újrahasználható műveletet. Session #2 ellenőrzi a szüneteltetett kényszer állapotát. Végül Session #1 folytatja a szüneteltetett kényszert, és Session #2 újra ellenőrzi az állapotot.

1. szakasz 2. szekció
Újra felhasználható hozzáadási kényszer végrehajtása

ALTER TABLE TestConstraint
ADD CONSTRAINT PK_TestConstraint PRIMARY KEY (Col1)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 30);
A kényszer állapotának ellenőrzése

SELECT sql_text, state_desc, percent_complete
FROM sys.index_resumable_operations;
A műveletet megjelenítő kimenet

sql_text state_desc teljes_sázalék
ALTER TABLE TestConstraint (...)FUTÁS43.552
Az újra felhasználható kényszer szüneteltetése

ALTER INDEX ALL ON TestConstraint PAUSE;
Error

Msg 1219, Level 16, State 1, Line 6
Your session has been disconnected because of a high priority DDL operation.

Msg 1750, Level 16, State 1, Line 6
Could not create constraint or index. See previous errors.

Msg 0, Level 20, State 0, Line 5
A severe error occurred on the current command.
The results, if any, should be discarded.
A kényszer állapotának ellenőrzése

SELECT sql_text, state_desc, percent_complete
FROM sys.index_resumable_operations;
A műveletet megjelenítő kimenet

sql_text state_desc százalék_kész
ALTER TABLE TestConstraint (...)SZÜNETELTETT65.339
ALTER INDEX ALL ON TestConstraint RESUME;
A kényszer állapotának ellenőrzése

SELECT sql_text, state_desc, percent_complete
FROM sys.index_resumable_operations;
A műveletet megjelenítő kimenet

sql_text állapot_leírás százalék_kész
ALTER TABLE TestConstraint (...)FUTÁS90.238

A művelet befejezése után hajtsa végre a következő T-SQL utasítást a kényszer ellenőrzéséhez:

SELECT constraint_name, table_name, constraint_type 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='PRIMARY KEY';
GO

Az eredményhalmaz a következő:

constraint_name table_name korlátozás_típusa
PK_Constraint TestConstraint ELSŐDLEGES KULCS

Lásd még