Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2022 (16.x) e versões
posteriores Azure SQL Database
AzureSQL Managed Instance
SQL database in Microsoft Fabric
A operação retomável para criação e reconstrução de índices online já é suportada para SQL Server 2019, Azure SQL Database e Azure SQL Managed Instance. As operações retomáveis permitem executar operações de índice enquanto a tabela está online (ONLINE=ON) e também:
Pause e reinicie várias vezes uma operação de criação ou reconstrução de índice para se adequar a uma janela de manutenção.
Recuperar de falhas na criação ou reconstrução de índices, como failovers de base de dados ou falta de espaço em disco.
Permitir o truncamento dos registos de transações durante uma operação de criação ou reconstrução de índice.
Quando uma operação de índice é pausada, tanto o índice original como o recém-criado requerem espaço em disco e precisam de ser atualizados durante operações de Linguagem de Manipulação de Dados (DML ).
As novas extensões para SQL Server 2022, SQL Database e SQL Managed Instance permitem retomar a operação do comando Data Definition Language (DDL), como ALTER TABLE ADD CONSTRAINT, e adicionar uma Chave Primária ou Única. Para mais informações sobre a adição de uma Chave Primária ou Única, consulte ALTER TABLE table_constraint.
Observação
As restrições da tabela de adição retomáveis aplicam-se apenas às restrições de CHAVE PRIMÁRIA e CHAVE ÚNICA. As restrições de adição retomável de tabela não são suportadas para as restrições de chave estrangeira.
Operações retomáveis
Em versões anteriores do SQL Server, a ALTER TABLE ADD CONSTRAINT operação podia ser executada com a ONLINE=ON opção. No entanto, a operação pode demorar muitas horas para ser concluída para uma tabela grande e pode consumir uma grande quantidade de recursos. Existe também a possibilidade de falhas ou interrupções durante essa execução. Introduzimos capacidades retomáveis para ALTER TABLE ADD CONSTRAINT que os utilizadores possam pausar a operação durante uma janela de manutenção, ou reiniciá-la a partir do local onde foi interrompida durante uma falha de execução, sem reiniciar a operação desde o início.
Cenários suportados
A nova capacidade retomável para ALTER TABLE ADD CONSTRAINT suporta os seguintes cenários para os clientes:
Pause ou retome a execução
ALTER TABLE ADD CONSTRAINTda operação, como pausar durante uma janela de manutenção, e retomar a operação assim que a janela de manutenção estiver concluída.Retomar
ALTER TABLE ADD CONSTRAINTa operação após failovers e falhas do sistema.Executar a operação
ALTER TABLE ADD CONSTRAINTnuma tabela grande, apesar do pequeno tamanho de log disponível.
Observação
A operação retomável para ALTER TABLE ADD CONSTRAINT exige que o ALTER comando seja executado online (WITH ONLINE = ON).
Esta funcionalidade é especialmente útil para tabelas grandes.
Sintaxe T-SQL para ALTER TABLE
Para informações sobre a sintaxe usada para permitir operações retomáveis numa restrição de tabela, consulte a sintaxe e as opções em ALTER TABLE (Transact-SQL).
Observações para ALTER TABLE
Uma nova cláusula WITH <resumable_options foi adicionada à sintaxe atual do T-SQL em ALTER TABLE (Transact-SQL).
A opção RESUMABLE é nova e foi adicionada à sintaxe existente ALTER TABLE (Transact-SQL).
MAX_DURATION= tempo [MINUTOS] usado comRESUMABLE = ON(requerONLINE = ON).MAX_DURATIONindica o tempo (um valor inteiro especificado em minutos) em que uma operação de restrição de adição online retomável é executada antes de ser pausada. Se não for especificado, a operação continua até a conclusão.
Sintaxe T-SQL para ALTER INDEX
Para pausar, retomar ou abortar a operação de restrição de tabela retomável para ALTER TABLE ADD CONSTRAINT, use a sintaxe T-SQL ALTER INDEX (Transact-SQL).
Para restrições retomáveis é utilizado o comando ALTER INDEX ALL existente.
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 } )
}
Observações para o ALTER INDEX
ALTER INDEX ALL ON <Table> PAUSE
- Pausar uma operação de adicionar restrição à tabela, que é retomável e online, que está a ser executada
ALTER INDEX ALL ON <Table> RESUME [WITH (<resumable_index_options>,[...n])]
- Retomar uma operação de adição de restrições de tabela que foi pausada manualmente ou devido a uma falha.
MAX_DURATION Usado com RESUMABLE=ON
- O tempo (um valor inteiro especificado em minutos) em que a operação de restrição de adição resumível à tabela é executada uma vez retomada. Quando o tempo limite termina, a operação retomável é pausada se ainda estiver em execução.
WAIT_AT_LOW_PRIORITY usado com RESUMABLE=ON e ONLINE = ON
- Retomar uma operação online para adicionar uma restrição à tabela após uma pausa deve esperar por operações que bloqueiam essa tabela.
WAIT_AT_LOW_PRIORITYindica que a operação de adicionar restrições à tabela esperará por bloqueios de baixa prioridade, permitindo que outras operações prossigam enquanto a operação que pode ser retomada está à espera. Omitir a opçãoWAIT_AT_LOW_PRIORITYé equivalente aWAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE). Para mais informações, consulte WAIT_AT_LOW_PRIORITY.
ALTER INDEX ALL ON <Table> ABORT
- Abortar uma operação de adição de restrição de tabela em execução ou pausada que foi declarada como retomável. A operação de abortar deve ser executada explicitamente como um
ABORTcomando para terminar uma operação de restrição retomável. A falha ou a pausa de uma operação de restrição de tabela retomável não termina a sua execução. Pelo contrário, deixa a operação num estado pausado indefinido.
Para mais informações sobre PAUSE, RESUME, e ABORT opções disponíveis para operações retomáveis, veja ALTER INDEX (Transact-SQL).
Ver o estado da operação retomável
Para visualizar o estado da operação de restrição de tabela retomável, use a visualização sys.index_resumable_operations.
Permissions
É necessária a permissão ALTER na tabela.
Não são necessárias novas permissões para o retomável ALTER TABLE ADD CONSTRAINT .
Examples
Aqui estão alguns exemplos de como usar operações de restrição de tabela de adição retomáveis.
Exemplo 1
Operação ALTER TABLE retomável para adicionar uma chave primária agrupada na coluna (a) com MAX_DURATION de 240 minutos.
ALTER TABLE table1
ADD CONSTRAINT PK_Constrain PRIMARY KEY CLUSTERED (a)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);
Exemplo 2
Operação ALTER TABLE retomável para adicionar uma restrição única em duas colunas (a e b) que dura MAX_DURATION 240 minutos.
ALTER TABLE table2
ADD CONSTRAINT PK_Constrain UNIQUE CLUSTERED (a,b)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);
Exemplo 3
ALTER TABLE A operação para adicionar uma chave primária clusterizada foi pausada e retomada.
A tabela abaixo mostra duas sessões (Session #1 e Session #2) a serem executadas cronologicamente usando as seguintes instruções T-SQL.
Session #1 executa uma operação retomável ALTER TABLE ADD CONSTRAINT criando uma chave primária na coluna Col1.
Session #2 verifica o estado de execução da restrição de execução. Após algum tempo, a operação reutilizável é pausada.
Session #2 verifica o estado da restrição pausada. Finalmente, Session #1 retoma a restrição pausada e Session #2 verifica novamente o estado.
| Sessão #1 | Sessão #2 | ||||||
|---|---|---|---|---|---|---|---|
Executar restrição de adição retomável ALTER TABLE TestConstraint ADD CONSTRAINT PK_TestConstraint PRIMARY KEY (Col1) WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 30); |
|||||||
Verifique o estado da restrição SELECT sql_text, state_desc, percent_complete FROM sys.index_resumable_operations; |
|||||||
Saída que mostra a operação
|
|||||||
Pausar a restrição retomável 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. |
|||||||
Verifique o estado da restrição SELECT sql_text, state_desc, percent_complete FROM sys.index_resumable_operations; |
|||||||
Saída que mostra a operação
|
|||||||
ALTER INDEX ALL ON TestConstraint RESUME; |
|||||||
Verifique o estado da restrição SELECT sql_text, state_desc, percent_complete FROM sys.index_resumable_operations; |
|||||||
Saída que mostra a operação
|
Uma vez concluída a operação, execute a seguinte instrução T-SQL para verificar a restrição:
SELECT constraint_name, table_name, constraint_type
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='PRIMARY KEY';
GO
Aqui está o conjunto de resultados:
| constraint_name | nome_da_tabela | tipo_de_restrição |
|---|---|---|
| Restrição_PK | TestConstraint | CHAVE PRIMÁRIA |