Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri
Microsoft Fabric'te
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği SQL veritabanı
Çevrimiçi dizin oluşturma ve yeniden derleme için devam ettirilebilen işlem SQL Server 2019, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği için zaten desteklenmektedir. Devam ettirilebilen işlemler, tablo çevrimiçiONLINE=ON () olduğunda dizin işlemlerinin yürütülmesine olanak sağlar ve ayrıca:
Bakım penceresine sığacak şekilde dizin oluşturma veya yeniden oluşturma işlemini birkaç kez duraklatma ve yeniden başlatma
Veritabanı yük devretmeleri veya disk alanının bitmesi gibi dizin oluşturma veya yeniden oluşturma hatalarından kurtarma.
Dizin oluşturma veya yeniden oluşturma işlemi sırasında işlem günlüklerinin kesilmesini etkinleştirin.
Dizin işlemi duraklatıldığında, hem özgün dizin hem de yeni oluşturulan dizin disk alanı gerektirir ve Veri İşleme Dili (DML) işlemleri sırasında güncelleştirilmiş olması gerekir.
SQL Server 2022, SQL Veritabanı ve SQL Yönetilen Örneği için yeni uzantılar, Data Definition Language (DDL) komutu olan ALTER TABLE ADD CONSTRAINT için devam ettirilebilir bir işlem yapılmasına olanak tanır ve bir Birincil veya Benzersiz Anahtar eklemeyi sağlar. Birincil veya Benzersiz Anahtar ekleme hakkında daha fazla bilgi için bkz. ALTER TABLE table_constraint.
Uyarı
Devam ettirilebilen ekleme tablosu kısıtlamaları yalnızca BİRİnCİl ANAHTAR ve BENZERSİz ANAHTAR kısıtlamaları için geçerlidir. YABANCI ANAHTAR kısıtlamaları için sürdürülerek ekleme yapılabilen tablo kısıtlamaları desteklenmez.
Devam ettirilebilen işlemler
SQL Server'ın önceki sürümlerinde, ALTER TABLE ADD CONSTRAINT işlem seçeneğiyle ONLINE=ON yürütülebilir. Ancak, büyük bir tablonun tamamlanması birkaç saat sürebilir ve çok sayıda kaynak tüketebilir. Bu tür yürütme sırasında hata veya kesinti olasılığı da vardır. Kullanıcıların bir bakım penceresi sırasında işlemi duraklatması veya bir yürütme hatası sırasında kesintiye uğradığı yerden, işlemi baştan başlatmak zorunda kalmadan yeniden başlatabilmesi için ALTER TABLE ADD CONSTRAINT'a devam edebilir özellikler ekledik.
Desteklenen senaryolar
için ALTER TABLE ADD CONSTRAINT yeni devam ettirilebilir özellik aşağıdaki müşteri senaryolarını destekler:
Çalıştırılan
ALTER TABLE ADD CONSTRAINToperasyonunu, örneğin bir bakım penceresi için duraklatarak veya bakım penceresi tamamlandıktan sonra operasyonu sürdürebilirsiniz.Yük devretmeler ve sistem hatalarından sonra
ALTER TABLE ADD CONSTRAINTişlemi yeniden başlat.Küçük bir günlük boyutu mevcut olmasına rağmen büyük bir tabloda
ALTER TABLE ADD CONSTRAINTişlemi yürütülüyor.
Uyarı
ALTER TABLE ADD CONSTRAINT için devam ettirilebilir işlem, komutun ALTER çevrimiçi (WITH ONLINE = ON) yürütülmesini gerektirir.
Bu özellik özellikle büyük tablolar için kullanışlıdır.
ALTER TABLE için T-SQL Sözdizimi
Tablo kısıtlamasında devam ettirilebilir işlemleri etkinleştirmek için kullanılan söz dizimi hakkında bilgi için ALTER TABLE (Transact-SQL) içindeki söz dizimine ve seçeneklere bakın.
ALTER TABLE için açıklamalar
Geçerli T-SQL söz dizimine < komutunda WITH resumable_options yeni bir yan tümce eklendi.
RESUMABLE seçeneği yenidir ve var olan ALTER TABLE (Transact-SQL) söz dizimine eklenmiştir.
MAX_DURATION= ileRESUMABLE = ONkullanılan [DAKİkA] süresi (gerektirirONLINE = ON).MAX_DURATION, duraklatılmadan önce devam ettirilebilen çevrimiçi ekleme kısıtlama işleminin yürütüldüğünü gösterir (dakika cinsinden belirtilen tamsayı değeri). Belirtilmezse, işlem tamamlanmadan devam eder.
ALTER INDEX için T-SQL söz dizimi
ALTER TABLE ADD CONSTRAINT için yeniden başlatılabilir tablo kısıtlama işlemini duraklatmak, sürdürmek veya iptal etmek için T-SQL söz dizimi ALTER INDEX (Transact-SQL) kullanın.
Devam ettirilebilen kısıtlamalar için var olan ALTER INDEX ALL komutu kullanılır.
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 } )
}
ALTER INDEX için açıklamalar
ALTER INDEX ALL ON <Table> PAUSE
- Yürütülmekte olan bir çevrimiçi ve devam ettirilebilir bir tabloya kısıtlama ekleme işlemini duraklatma
ALTER INDEX ALL ON <Table> RESUME [WITH (<resumable_index_options>,[...n])]
- El ile veya hata nedeniyle duraklatılan tabloya kısıtlama ekleme işlemini sürdürebilirsiniz.
MAX_DURATION ile kullanılır RESUMABLE=ON
- Devam ettirilebilir tablo ekleme kısıtlama işleminin sürdürüldükten sonra yürütülme zamanı (dakika cinsinden belirtilen tamsayı değeri). Süre dolduğunda, devam ettirilebilir bir işlem hala çalışıyorsa, duraklatılır.
WAIT_AT_LOW_PRIORITY ile RESUMABLE=ON ve ONLINE = ON kullanılır
- Bir duraklamadan sonra çevrimiçi tabloya kısıtlama ekleme işleminin devam edebilmesi için, bu tabloda engelleme işlemlerini beklemelidir.
WAIT_AT_LOW_PRIORITY, tablo kısıtlaması ekleme işleminin düşük öncelikli kilitleri bekleyeceğini ve devam ettirilebilir işlem beklerken diğer işlemlerin devam etmelerine olanak tanıyacağını gösterir.WAIT_AT_LOW_PRIORITYseçeneğinin atlanması,WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE)eşdeğerdir. Daha fazla bilgi için bkz. WAIT_AT_LOW_PRIORITY.
ALTER INDEX ALL ON <Table> ABORT
- Devam ettirilebilir olarak bildirilen çalışan veya duraklatılmış bir tablo ekleme kısıtlama işlemini iptal edin. Durdurulabilir bir kısıtlama işlemini sonlandırmak için durdurma işleminin açıkça bir
ABORTkomut olarak yürütülmesi gerekir. Devam ettirilebilir bir tablo kısıtlama işlemi başarısız veya duraklatılırsa yürütme sonlandırılmaz. Bunun yerine, işlemi süresiz duraklatılmış durumda bırakır.
Devam ettirilebilen işlemler için kullanılabilen , PAUSEve RESUME seçenekleri hakkında ABORTdaha fazla bilgi için bkz. ALTER INDEX (Transact-SQL).
Devam ettirilebilen işlemin durumunu görüntüleme
Devam ettirilebilen tablo kısıtlama işleminin durumunu görüntülemek için görünüm sys.index_resumable_operations kullanın.
Permissions
Tabloda ALTER izin gerektirir.
Devam ettirilebilir ALTER TABLE ADD CONSTRAINT için yeni izin gerekmez.
Örnekler
Aşağıda, devam ettirilebilir tablo ekleme kısıtlama işlemlerini kullanmayla ilgili bazı örnekler verilmiştir.
Örnek 1
240 dakikalık ALTER TABLE ile (a) sütununda kümelenmiş bir birincil anahtar eklemek için devam ettirilebilen MAX_DURATION işlemi.
ALTER TABLE table1
ADD CONSTRAINT PK_Constrain PRIMARY KEY CLUSTERED (a)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);
Örnek 2
Devam ettirilebilir ALTER TABLE işlem ile 240 dakikalık süre içinde iki sütun (a ve b) üzerinde benzersiz bir kısıtlama MAX_DURATION ekleme.
ALTER TABLE table2
ADD CONSTRAINT PK_Constrain UNIQUE CLUSTERED (a,b)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);
Örnek 3
ALTER TABLE duraklatılmakta ve sürdürülmekte olan kümelenmiş birincil anahtar ekleme işlemi.
Aşağıdaki tabloda, aşağıdaki T-SQL deyimleri kullanılarak kronolojik olarak yürütülen iki oturum (Session #1 ve Session #2) gösterilmektedir.
Session #1, Col1 sütununda birincil anahtar oluşturarak sürdürülebilir bir ALTER TABLE ADD CONSTRAINT işlemi yürütür.
Session #2 çalıştırma kısıtlaması için yürütme durumunu denetler. Bir süre sonra tekrar kullanılabilir işlemi duraklatır.
Session #2 duraklatılmış kısıtlamanın durumunu denetler. Son olarak, Session #1 duraklatılan kısıtlamayı sürdürür ve Session #2 durumu yeniden denetler.
| Oturum #1 | Oturum #2 | ||||||
|---|---|---|---|---|---|---|---|
Devam ettirilebilir ekleme kısıtlamasını yürütme ALTER TABLE TestConstraint ADD CONSTRAINT PK_TestConstraint PRIMARY KEY (Col1) WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 30); |
|||||||
Kısıtlama durumunu denetleme SELECT sql_text, state_desc, percent_complete FROM sys.index_resumable_operations; |
|||||||
İşlemi gösteren çıkış
|
|||||||
Devam ettirilebilen kısıtlamayı duraklatma 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. |
|||||||
Kısıtlama durumunu denetleme SELECT sql_text, state_desc, percent_complete FROM sys.index_resumable_operations; |
|||||||
İşlemi gösteren çıkış
|
|||||||
ALTER INDEX ALL ON TestConstraint RESUME; |
|||||||
Kısıtlama durumunu denetleme SELECT sql_text, state_desc, percent_complete FROM sys.index_resumable_operations; |
|||||||
İşlemi gösteren çıkış
|
İşlem tamamlandıktan sonra kısıtlamayı denetlemek için aşağıdaki T-SQL deyimini yürütür:
SELECT constraint_name, table_name, constraint_type
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='PRIMARY KEY';
GO
Sonuç kümesi aşağıdadır:
| constraint_name | tablo_adı | kısıtlama_türü |
|---|---|---|
| PK_Kısıtlaması | TestConstraint | BİRİNCİL ANAHTAR |
Ayrıca bakınız
- Çevrimiçi Dizin İşlemleri için
Yönergeleri - İNDEKS OLUŞTUR (Transact-SQL)
- alter index (Transact-SQL)
- sys.index_resumable_operations
- DÜŞÜK ÖNCELİKTE BEKLE
- ALTER TABLE (Transact-SQL)
- ALTER TABLE index_option