Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2022 (16.x) i nowsze wersje bazy danych
SQL Sql Azure SQL
Database w
usłudze Microsoft Fabric
Operacja wznawiania tworzenia i ponownego kompilowania indeksu online jest już obsługiwana dla programów SQL Server 2019, Azure SQL Database i Azure SQL Managed Instance. Operacje z możliwością wznowienia umożliwiają wykonywanie operacji indeksu, gdy tabela jest w trybie online (ONLINE=ON), a także:
Wstrzymywanie i ponowne uruchamianie operacji tworzenia lub ponownego kompilowania indeksu wielokrotnie w celu dopasowania okna obsługi
Odzyskiwanie po awariach tworzenia lub ponownego kompilowania indeksu, takich jak tryb failover bazy danych lub brak miejsca na dysku.
Włącz obcinanie dzienników transakcji podczas tworzenia indeksu lub operacji ponownego kompilowania.
Po wstrzymaniu operacji indeksowania zarówno oryginalny indeks, jak i nowo utworzony wymagają miejsca na dysku i muszą zostać zaktualizowane podczas operacji języka DML (Data Manipulation Language).
Nowe rozszerzenia dla SQL Server 2022, SQL Database i SQL Managed Instance umożliwiają wznawianie operacji polecenia Data Definition Language (DDL)ALTER TABLE ADD CONSTRAINT oraz dodanie klucza podstawowego lub unikatowego. Aby uzyskać więcej informacji na temat dodawania klucza podstawowego lub unikatowego, zobacz ALTER TABLE table_constraint.
Uwaga / Notatka
Wznawiane ograniczenia tabeli mają zastosowanie tylko do ograniczeń KLUCZ PODSTAWOWY i UNIKATOWY KLUCZ. Wznawiane dodawanie ograniczeń tabeli nie jest obsługiwane w przypadku ograniczeń klucza obcego.
Operacje wznawiane
W poprzednich wersjach programu SQL Server operację ALTER TABLE ADD CONSTRAINT można wykonać z opcją ONLINE=ON. Jednak wykonanie dużej tabeli może potrwać wiele godzin i może zużywać dużą liczbę zasobów. Istnieje także możliwość wystąpienia awarii lub przerw w działaniu podczas wykonywania takiej operacji. Wprowadziliśmy możliwość wznawiania ALTER TABLE ADD CONSTRAINT dla użytkowników, aby mogli wstrzymać operację podczas okna obsługi lub ponownie ją uruchomić z miejsca, w którym została przerwana w przypadku awarii, zamiast rozpoczynać operację od początku.
Obsługiwane scenariusze
Nowa możliwość wznowienia dla ALTER TABLE ADD CONSTRAINT obsługuje następujące scenariusze klientów:
Wstrzymywanie lub wznawianie operacji
ALTER TABLE ADD CONSTRAINT, na przykład wstrzymywanie jej na czas okna serwisowego i wznawianie operacji po zakończeniu okna serwisowego.Wznów
ALTER TABLE ADD CONSTRAINToperację po awarii i przełączeniu w tryb awaryjny systemu.ALTER TABLE ADD CONSTRAINTWykonywanie operacji na dużej tabeli pomimo małego dostępnego rozmiaru dziennika.
Uwaga / Notatka
Wznawiana operacja dla ALTER TABLE ADD CONSTRAINT wymaga wykonania polecenia ALTER w trybie online (WITH ONLINE = ON).
Ta funkcja jest szczególnie przydatna w przypadku dużych tabel.
Składnia języka T-SQL dla polecenia ALTER TABLE
Aby uzyskać informacje na temat składni używanej do włączania operacji z możliwością wznowienia w ograniczeniu tabeli, zapoznaj się ze składnią i opcjami w ALTER TABLE (Transact-SQL).
Uwagi dotyczące ALTER TABLE
Nowa klauzula WITH <resumable_options została dodana do bieżącej składni języka T-SQL w pliku ALTER TABLE (Transact-SQL).
Opcja RESUMABLE jest nowa i została dodana do istniejącej składni ALTER TABLE (Transact-SQL).
MAX_DURATION= czas [MINUTY] używany zRESUMABLE = ON(wymagaONLINE = ON).MAX_DURATIONwskazuje czas (wartość całkowita określona w minutach), przez który jest wykonywana operacja dodawania ograniczenia online przed jego wstrzymaniem. Jeśli nie zostanie określony, operacja będzie kontynuowana do momentu ukończenia.
Składnia języka T-SQL dla ALTER INDEX
pl-PL: Aby wstrzymać, wznowić lub przerwać operację ograniczenia tabeli z możliwością wznowienia dla ALTER TABLE ADD CONSTRAINT, użyj składni T-SQL ALTER INDEX (Transact-SQL).
W przypadku wznawianych ograniczeń jest używane istniejące polecenie 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 } )
}
Uwagi dotyczące ALTER INDEX
ALTER INDEX ALL ON <Table> PAUSE
- Wstrzymanie operacji dodawania ograniczenia do tabeli, która jest możliwa do wznowienia i jest wykonywana online.
ALTER INDEX ALL ON <Table> RESUME [WITH (<resumable_index_options>,[...n])]
- Wznów operację ograniczania dodawania tabeli, która jest wstrzymana ręcznie lub z powodu awarii.
MAX_DURATION używane z RESUMABLE=ON
- Czas (wartość całkowita określona w minutach), w którym operacja dodawania ograniczenia tabeli jest wykonywana po wznowieniu. Po wygaśnięciu czasu można wstrzymać operację wznawianą, jeśli nadal jest uruchomiona.
WAIT_AT_LOW_PRIORITY używane z RESUMABLE=ON i ONLINE = ON
- Wznawianie operacji ograniczania dodawania tabeli w trybie online po wstrzymaniu musi czekać na operacje blokowania w tej tabeli.
WAIT_AT_LOW_PRIORITYwskazuje, że operacja ograniczania dodawania tabeli będzie czekać na blokady o niskim priorytcie, co umożliwi kontynuowanie innych operacji podczas oczekiwania na wznowienie operacji. Pominięcie opcjiWAIT_AT_LOW_PRIORITYjest równoważneWAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE). Aby uzyskać więcej informacji, zobacz WAIT_AT_LOW_PRIORITY.
ALTER INDEX ALL ON <Table> ABORT
- Przerwanie uruchomionej lub wstrzymanej operacji dodawania ograniczenia tabeli, która została zadeklarowana jako wznawialna. Operacja przerwania musi zostać wykonana jawnie jako polecenie
ABORT, aby zakończyć operację ograniczenia, którą można wznowić. Niepowodzenie lub wstrzymanie operacji dotyczącej ograniczenia tabeli z możliwością wznowienia nie przerywa jej wykonywania. Zamiast tego pozostawia operację w stanie nieokreślonego wstrzymania.
Aby uzyskać więcej informacji na temat opcji PAUSE, RESUME i ABORT dostępnych dla operacji wznawianych, zobacz ALTER INDEX (Transact-SQL).
Wyświetlanie stanu operacji możliwej do wznowienia
Aby wyświetlić stan operacji ograniczenia tabeli możliwej do wznowienia, użyj sys.index_resumable_operations widoku.
Permissions
Wymaga uprawnienia ALTER do tabeli.
Nie są wymagane żadne nowe uprawnienia do wznowienia ALTER TABLE ADD CONSTRAINT .
Przykłady
Poniżej przedstawiono kilka przykładów użycia operacji dodawania ograniczeń tabeli z możliwością wznowień.
Przykład 1
Wznawiana operacja ALTER TABLE dodawania klucza podstawowego klastrowanego w kolumnie (a) z 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);
Przykład 2
Wznawiana ALTER TABLE operacja dodawania unikatowego ograniczenia dla dwóch kolumn (a i b) z MAX_DURATION 240 minutami.
ALTER TABLE table2
ADD CONSTRAINT PK_Constrain UNIQUE CLUSTERED (a,b)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);
Przykład 3
ALTER TABLE operacja dodawania klastrowanego klucza podstawowego jest wstrzymana i wznawiana.
W poniższej tabeli przedstawiono dwie sesje (Session #1 i Session #2) wykonywane chronologicznie przy użyciu następujących instrukcji języka T-SQL.
Session #1 wykonuje wznawianą operację ALTER TABLE ADD CONSTRAINT, tworząc klucz podstawowy w kolumnie Col1.
Session #2 sprawdza stan wykonywania dla uruchomionego ograniczenia. Po pewnym czasie wstrzymuje operację wielokrotnego użytku.
Session #2 Sprawdza stan wstrzymanego ograniczenia.
Session #1 Na koniec wznawia wstrzymane ograniczenie i Session #2 ponownie sprawdza stan.
| Sesja nr 1 | Sesja 2 | ||||||
|---|---|---|---|---|---|---|---|
Wykonaj wznawiane ograniczenie dodawania ALTER TABLE TestConstraint ADD CONSTRAINT PK_TestConstraint PRIMARY KEY (Col1) WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 30); |
|||||||
Sprawdzanie stanu ograniczenia SELECT sql_text, state_desc, percent_complete FROM sys.index_resumable_operations; |
|||||||
Dane wyjściowe przedstawiające operację
|
|||||||
Wstrzymaj wznawiane ograniczenie 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. |
|||||||
Sprawdzanie stanu ograniczenia SELECT sql_text, state_desc, percent_complete FROM sys.index_resumable_operations; |
|||||||
Dane wyjściowe przedstawiające operację
|
|||||||
ALTER INDEX ALL ON TestConstraint RESUME; |
|||||||
Sprawdzanie stanu ograniczenia SELECT sql_text, state_desc, percent_complete FROM sys.index_resumable_operations; |
|||||||
Dane wyjściowe przedstawiające operację
|
Po zakończeniu operacji wykonaj następującą instrukcję języka T-SQL, aby sprawdzić ograniczenie:
SELECT constraint_name, table_name, constraint_type
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='PRIMARY KEY';
GO
Oto zestaw wyników:
| constraint_name | nazwa_tabeli | typ ograniczenia |
|---|---|---|
| PK_Constraint | TestConstraint | KLUCZ PODSTAWOWY |