Çoklu hesap işleminde ALTER DATABASE ifadesine izin verilmiyor


13

Buradan AdventureWorks tabanlı Bellek içi örneğini indirdim ve ekteki dokümanda açıklanan tüm adımları takip ettim . Ancak, komut dosyasını SQL Server Management Studio'da çalıştırmayı denediğimde hata iletisini alıyorum:

Çoklu hesap işleminde ALTER DATABASE ifadesine izin verilmiyor

Hata, 9 satırını gösterir:

IF NOT EXISTS (SELECT * FROM sys.data_spaces WHERE type='FX')
    ALTER DATABASE CURRENT ADD FILEGROUP [AdventureWorks2012_mod] 
    CONTAINS MEMORY_OPTIMIZED_DATA
GO

Bu (az ya da çok) resmi Microsoft belgeleri olduğundan, yanlış yaptığım bir şey olduğunu varsayıyorum, ancak ne olduğunu anlayamıyorum.

Yanıtlar:


13

Hayır, yanlış bir şey yapmıyorsun. Ben de aynı şeyi aldım. Ben örnek birden çok komut dosyalarına bölerek ve komut dosyasının her bölümünü sırayla tek bir büyük komut dosyası yerine kendi sorgu penceresinde çalıştırarak çözdüm. Bu benim durumumda çalıştı çünkü bu örnekleri her zaman izole bir VM'de (bir üretim sunucusunda değil!) Çalıştırıyorum ve burada tek olduğumdan işlem işleme gerekmiyor.

Komut dosyasına bugün daha yakından baktığımızda, açıkça tanımlanmış bir işlem yönetimi yoktur, ancak komut dosyasını zaten etkin bir işlemi olan bir sorgu penceresine yapıştırdınız veya otomatik olarak BEGIN TRANSACTION; / COMMIT TRANSACTION;ifadeler ekleyen yeni bir sorgu penceresi oluşturdunuz .

Ayrıca bu blog yazısında birkaç potansiyel potansiyel yakaladım .


1
"Belki de betiği zaten aktif bir işlemi olan bir sorgu penceresine yapıştırdınız." Bu sorun olmuş gibi görünüyor, çünkü tüm sorguyu yeni bir pencerede çalıştırdığımda işe yaradı.
Petter Brodin

9

@AaronBertrand'a katılıyorum, yanlış bir şey yapmıyorsunuz. Bu, içinde bir hata bulunan bir Microsoft betiği ilk kez görmezdim. Gerçekçi olarak yayınladıkları kadar komut dosyası ile hiç görmemek beni şaşırttı.

Özellikle sorun, ALTER DATABASEbir işlemde hiç izin verilmemesidir. BOL başvurusunu burada görebilirsiniz: İşlemlerde İzin Verilen Transact-SQL Deyimleri

Aslında bu kadar basit bir komut dosyası bile aynı hatayla başarısız olur.

BEGIN TRANSACTION
ALTER DATABASE AdventureWorks2012 SET READ_WRITE
COMMIT

Aaron'un dediği gibi, işlem işlemeyi (veya en azından ALTER DATABASEişlemden ifadeyi) kaldırın ve iyi olmalısınız.


-2

İşlemleri ayırmak için "Git" i kullanın. Bu sorunu çözecektir. (Tek tek çalıştırmak daha kolaydır.) Ayrıca İzolasyon seviyesini de değiştirebilir (Test edilmedi)

SET TRANSACTION ISOLATION LEVEL SERIALISABLE

Begin tran

---Statements goes here

commit tran

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

ALTER DATABASEBir işlem içinde gerçekleştirilemeyen başkaları önceden tanımladığında, göndermeden önce kodunuzu test etmek isteyebilirsiniz . Yalıtım seviyesini ayarlamanın bunun SERIALIZABLEüzerinde bir etkisi yoktur.
Max Vernon

"GO" bir SQL ifadesi değil. SSMS'ye, önceki ifadeleri SQL Server'a toplu olarak göndermek için bir talimattır. Cesur hissediyorsanız bunu değiştirebilirsiniz: Araçlar -> Seçenekler -> Sorgu Yürütme -> SQL Server. Birçok toplu işlem tek bir işlemle gönderilebilir.
Michael Green
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.