Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2022 (16.x) a novější verze
databáze SQL Azure SQL Database
Azure SQL Managed Instance
v Microsoft Fabric
Operace obnovení pro vytvoření a opětovné sestavení online indexu je již podporována pro SQL Server 2019, Azure SQL Database a Azure SQL Managed Instance. Operace s možností obnovení umožňují spuštění operací indexu, když je tabulka online (ONLINE=ON) a také:
Pozastavit a znovu spustit operaci vytvoření nebo znovu sestavení indexu několikrát tak, aby se vešly do časového okna údržby
Zotavení po selhání vytváření nebo opětovného sestavení indexu, jako jsou převzetí služeb při selhání databáze nebo nedostatek místa na disku.
Povolte zkrácení transakčních protokolů během operace vytvoření nebo opětovného sestavení indexu.
Při pozastavení operace indexu vyžadují původní i nově vytvořený index místo na disku a musí být aktualizovány během operací DML (Data Manipulat Language ).
Nová rozšíření pro SQL Server 2022, SQL Database a SQL Managed Instance umožňují obnovitelnou operaci příkazu DDL (Data Definition Language)ALTER TABLE ADD CONSTRAINT a přidání primárního nebo jedinečného klíče. Další informace o přidání primárního nebo jedinečného klíče naleznete v tématu ALTER TABLE table_constraint.
Poznámka:
Omezení tabulky s možností obnovení platí jenom pro omezení PRIMÁRNÍHO KLÍČE a JEDINEČNÉHO KLÍČE. Omezení pro obnovitelné přidávání tabulek nejsou podporována pro omezení cizího klíče.
Operace s možností obnovení
V předchozích verzích SQL Serveru bylo možné operaci spustit s volbou ONLINE=ON. Dokončení velké tabulky ale může trvat mnoho hodin a může spotřebovat velký počet prostředků. Existuje také možnost selhání nebo přerušení během takového spuštění. Zavedli jsme obnovitelné možnosti, aby ALTER TABLE ADD CONSTRAINT uživatelé mohli operaci pozastavit během časového období údržby nebo ji restartovat z místa, kde byla přerušena během selhání spuštění, aniž by operaci restartovali od začátku.
Podporované scénáře
Nová možnost obnovení pro ALTER TABLE ADD CONSTRAINT podporuje následující scénáře zákazníků:
Pozastavte nebo obnovte spuštěnou
ALTER TABLE ADD CONSTRAINToperaci, například pozastavením operace v době údržby a obnovením po dokončení okna údržby.Obnovení
ALTER TABLE ADD CONSTRAINToperace po přepnutí při selhání a poruchách systému.Provádění
ALTER TABLE ADD CONSTRAINToperace na velké tabulce i přes malou dostupnou velikost protokolu.
Poznámka:
Operace ALTER TABLE ADD CONSTRAINT, která se dá obnovit, vyžaduje, aby se příkaz ALTER spustil online (WITH ONLINE = ON).
Tato funkce je zvlášť užitečná pro velké tabulky.
Syntaxe T-SQL pro ALTER TABLE
Informace o syntaxi, která se používá k povolení obnovitelných operací s omezením tabulky, najdete v syntaxi a možnostech v příkazu ALTER TABLE (Transact-SQL).
Poznámky pro ALTER TABLE
Nová klauzule WITH <resumable_options byla přidána do aktuální syntaxe T-SQL v ALTER TABLE (Transact-SQL).
Možnost RESUMABLE je nová a byla přidána do stávající syntaxe ALTER TABLE (Transact-SQL).
MAX_DURATION= čas [MINUT] použitý sRESUMABLE = ON(vyžadujeONLINE = ON).MAX_DURATIONoznačuje čas (celočíselná hodnota zadaná v minutách), po který je vykonávána operace omezení pro obnovitelné online přidání, než je pozastavena. Pokud není zadáno, operace pokračuje až do dokončení.
Syntaxe T-SQL pro ALTER INDEX
Chcete-li pozastavit, obnovit nebo přerušit operaci obnovení omezení tabulky pro ALTER TABLE ADD CONSTRAINT, použijte syntaxi T-SQL ALTER INDEX (Transact-SQL).
Pro obnovitelná omezení se použije existující příkaz ALTER INDEX ALL.
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 } )
}
Poznámky pro ALTER INDEX
ALTER INDEX ALL ON <Table> PAUSE
- Pozastavení zastavitelné online operace přidání omezení tabulky, která se provádí
ALTER INDEX ALL ON <Table> RESUME [WITH (<resumable_index_options>,[...n])]
- Pokračujte v operaci přidání omezení tabulky, která je pozastavena ručně nebo kvůli selhání.
MAX_DURATION použito s RESUMABLE=ON
- Čas (celočíselná hodnota zadaná v minutách), během něhož se po obnovení provede operace doplnění omezení tabulky. Jakmile vyprší doba, je obnovitelná operace pozastavena, pokud je stále spuštěná.
WAIT_AT_LOW_PRIORITY používaná s RESUMABLE=ON a ONLINE = ON
- Obnovení operace přidání omezení tabulky online po pozastavení musí čekat na blokující operace v této tabulce.
WAIT_AT_LOW_PRIORITYoznačuje, že operace přidání omezení tabulky bude čekat na zámky s nízkou prioritou, což umožní dalším operacím pokračovat, zatímco operace pro obnovení čeká. Vynechání možnostiWAIT_AT_LOW_PRIORITYodpovídáWAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE). Další informace najdete v tématu WAIT_AT_LOW_PRIORITY.
ALTER INDEX ALL ON <Table> ABORT
- Přerušit běžící nebo pozastavenou operaci přidání omezení tabulky, která byla deklarována jako obnovitelná. Operace přerušení musí být explicitně provedena jako příkaz
ABORT, který ukončí obnovitelnou operaci omezování. Selhání nebo pozastavení operace omezení tabulky s možností obnovení neukončí její spuštění. Místo toho ponechá operaci v neurčitém pozastaveném stavu.
Další informace o možnostech PAUSE, RESUME a ABORT, které jsou k dispozici pro obnovitelné operace, naleznete v tématu ALTER INDEX (Transact-SQL).
Zobrazit stav obnovitelné operace
Pokud si chcete prohlédnout stav operace omezení tabulky, kterou lze obnovit, použijte zobrazení sys.index_resumable_operations.
Povolení
Vyžaduje oprávnění ALTER k tabulce.
Nevyžadují se žádná nová oprávnění pro možné obnovení ALTER TABLE ADD CONSTRAINT.
Examples
Tady je několik příkladů použití operací přidání omezení tabulky, které lze pozastavit a pokračovat v nich.
Příklad 1
Operace obnovení ALTER TABLE pro přidání primárního klíče clusterovaného ve sloupci (a) s MAX_DURATION 240 minut.
ALTER TABLE table1
ADD CONSTRAINT PK_Constrain PRIMARY KEY CLUSTERED (a)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);
Příklad 2
Obnovitelná operace ALTER TABLE pro přidání jedinečného omezení u dvou sloupců (a a b) trvající 240 minut MAX_DURATION.
ALTER TABLE table2
ADD CONSTRAINT PK_Constrain UNIQUE CLUSTERED (a,b)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);
Příklad 3
ALTER TABLE operace pro přidání primárního klíče jako clusterovaného, když je pozastavena a obnovena.
Následující tabulka ukazuje dvě relace (Session #1 a Session #2) spouštěné chronologicky pomocí následujících příkazů T-SQL.
Session #1 provede obnovitelnou ALTER TABLE ADD CONSTRAINT operaci vytvoření primárního klíče ve sloupci Col1.
Session #2 zkontroluje stav provádění pro běžící omezení. Po nějaké době pozastaví opakovatelný úkon.
Session #2 zkontroluje stav pozastaveného omezení.
Session #1 Nakonec obnoví pozastavené omezení a Session #2 znovu zkontroluje stav.
| Sezení č. 1 | Sezení č. 2 | ||||||
|---|---|---|---|---|---|---|---|
Proveďte příkaz s možností pokračování přidání omezení ALTER TABLE TestConstraint ADD CONSTRAINT PK_TestConstraint PRIMARY KEY (Col1) WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 30); |
|||||||
Kontrola stavu omezení SELECT sql_text, state_desc, percent_complete FROM sys.index_resumable_operations; |
|||||||
Výstup znázorňující operaci
|
|||||||
Pozastavení obnovitelného omezení 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. |
|||||||
Kontrola stavu omezení SELECT sql_text, state_desc, percent_complete FROM sys.index_resumable_operations; |
|||||||
Výstup znázorňující operaci
|
|||||||
ALTER INDEX ALL ON TestConstraint RESUME; |
|||||||
Kontrola stavu omezení SELECT sql_text, state_desc, percent_complete FROM sys.index_resumable_operations; |
|||||||
Výstup znázorňující operaci
|
Po dokončení operace spusťte následující příkaz T-SQL a zkontrolujte omezení:
SELECT constraint_name, table_name, constraint_type
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='PRIMARY KEY';
GO
Tady je sada výsledků:
| název omezení | název_tabulky | typ_omezení |
|---|---|---|
| PK_Constraint | TestConstraint | PRIMÁRNÍ KLÍČ |