İçerdiği veritabanlarının temel amacı, etrafındaki çok fazla iskele kurmadan veritabanınızı yeni bir sunucuya taşımayı kolaylaştırmaktır. Bunu göz önünde bulundurarak, bu geçişi zorlaştıracak birkaç olası sorunu ele alacağım - ve çoğu, içerilen veritabanlarının sadece kısmen SQL Server 2012'de barındırılması (çevreleme zorunlu değildir) etrafında dönüyor.
Bağlantı dizeleri
Bir içeriyordu veritabanına bağlantı dizeleri gerekir bağlantı dizesinde açıkça veritabanı belirtin. Bir bağlantı kurmak için artık oturum açmanın varsayılan veritabanına güvenemezsiniz; bir veritabanı belirtmezseniz, SQL Server içerdiği tüm veritabanlarını adım adım izlemeyecek ve kimlik bilgilerinizin uyuşabileceği herhangi bir veritabanı bulmaya çalışmayacaktır.
Cross-db sorguları
Aynı kullanıcıyı aynı sunucuda bulunan iki farklı veritabanında aynı parola ile oluştursanız bile, uygulamanız veritabanı arası sorgulama yapamaz. Kullanıcı adları ve şifreler aynı olabilir, ancak aynı kullanıcı değildirler . Bunun nedeni? Barındırılan bir sunucuda veritabanları içeriyorsanız, aynı barındırılan sunucuyu kullanan başkasıyla aynı kullanıcıyı kullanması engellenmemelidir. Tam kapsama olasılıkla (geldiğinde SQL Server 2012'den sonra sürümünde asla), veritabanı çapraz sorguları yine de kesinlikle yasaktır. Son derece, çok, kesinlikle içerdiği veritabanı kullanıcıları ile aynı adda sunucu düzeyinde girişler oluşturmamanızı ve içerilen veritabanları arasında aynı içerilen kullanıcı adını oluşturmaktan kaçınmaya çalışmanızı öneririm. Birden çok içerilen veritabanına çarpan sorguları çalıştırmanız gerekirse, uygun ayrıcalıklara sahip bir sunucu düzeyinde giriş yapın (bunun olduğunu düşünebilirsiniz sysadmin
, ancak salt okunur sorgular için, bu CONNECT ANY DATABASE
ve SELECT ALL USER SECURABLES
).
Eş anlamlı
Çoğu 3- ve 4 parçalı adın tanımlanması kolaydır ve bir DMV'de görünür. Ancak, 3- veya 4 parçalı bir adı işaret eden bir eşanlamlı oluşturursanız, bunlar DMV'de görünmez. Bu nedenle, eş anlamlı terimlerden yararlanırsanız, bazı dış bağımlılıkları kaçırmanız mümkündür ve bu, veritabanını farklı bir sunucuya geçirdiğiniz noktada sorunlara neden olabilir. Bu konuda şikayette bulundum, ancak "tasarım tarafından" olarak kapatılmıştı ve yeni geri bildirim sistemine geçişi sürdüremedi . DMV'nin dinamik SQL ile oluşturulan 3- ve 4 parçalı isimleri de özleyeceğini unutmayın.
Şifre politikası
Parola ilkesi bulunmayan bir sistemde içerdiği bir veritabanı kullanıcısı oluşturduysanız, aynı kullanıcıyı, parola ilkesi olan farklı bir sistemde oluşturmayı zor bulabilirsiniz. Bunun nedeni, CREATE USER
sözdiziminin parola ilkesini atlayarak desteklememesidir. Bu sorun hakkında bir hata yaptım ve açık kalmaya devam etti (ve Connect emekli olunca bu hamleye dayanamadı). Ve bana bir şifre politikası uygulanmış bir sistemde, politikayı kolayca atlayan sunucu düzeyinde bir giriş oluşturabileceğiniz, ancak bunu yapan bir veritabanı kullanıcısı yaratamayacağınız için garip görünüyor. güvenlik riski az.
karşılaştırma
Artık tempdb'nin harmanlamasına güvenemeyeceğimiz için, şu anda açık harmanlama kullanan veya bunun yerine DATABASE_DEFAULT
kullanmak için herhangi bir kodu değiştirmeniz gerekebilir CATALOG_DEFAULT
. Bazı olası sorunlar için bu BOL makalesine bakın .
IntelliSense
Bir içerilen veritabanına içerilen bir kullanıcı olarak bağlanırsanız, SSMS IntelliSense’i tam olarak desteklemeyecektir. Sözdizimi hataları için temel vurguyu elde edersiniz, ancak otomatik tamamlama listeleri veya araç ipuçları ve tüm eğlenceli şeyler yoktur. Bu konuda bir hata yaptım ve açık kalmaya devam etti - ve bir tanesi daha hamleye dayanamadı.
SQL Server Veri Araçları
SSDT'yi veritabanı geliştirme için kullanmayı planlıyorsanız, şu anda içerilen veritabanları için tam destek yoktur. Gerçekten de, SSDT şu anda ne içeriğin ne olduğunu ve onu neyin kırabileceğini bilmediği için, projeyi bozmanın bir engel ya da sözdizimi kullanırsanız başarısız olacağı anlamına geliyor.
ALTER VERİTABANI
Bir çalıştırırken ALTER DATABASE
bir alan veritabanının kapsamında gelen komutu, rRather daha ALTER DATABASE foo
kullanmak gerekecektir ALTER DATABASE CURRENT
- bu veritabanı hareket edilirse, vb değiştirildi bu komutlar, dış bağlam veya referans hakkında hiçbir şey bilmek gerekmez öyle mi .
Birkaç diğerleri
Muhtemelen hala kullanmamanız gereken, ancak yine de, desteklenmeyen veya kullanımdan kaldırılan ve içerilen veritabanlarında kullanılmaması gerekenler listesinde belirtilmesi gerekenler:
- numaralı prosedürler
- geçici prosedürler
- ilişkili nesnelerde harmanlama değişiklikleri
- veri yakalamayı değiştir
- izlemeyi değiştir
- kopya
Bunların hepsinin, içerilen veritabanlarını kullanmanın dezavantajları olması gerekmediği , sadece bilmeniz gereken konular olduğu ve bunların tümü resmi belgelerde açıkça açıklanmadığı belirtiliyor.
Ayrıca, içerilen bir veritabanının taşınacağından veya bir kullanılabilirlik grubunun bir parçası olduğundan veya yansıtıldığından emin olmanız gerekir, tüm potansiyel hedef sunucuların 1 olarak ayarlanmış sp_configure
seçeneğine sahip olduğundan emin olun contained database authentication
.
Sen bulabilirsiniz bu blog yazısı kullanışlı, hem de bu bir onlar RTM-tarih öncesi rağmen.