Veritabanı Geliştirme ve Dağıtma Stratejileri (VB)

tarafından Scott Mitchell

Veri temelli bir uygulamayı ilk kez dağıtırken, geliştirme ortamındaki veritabanını üretim ortamına körü körüne kopyalayabilirsiniz. Ancak sonraki dağıtımlarda bir gizli kopyanın gerçekleştirilmesi, üretim veritabanına girilen verilerin üzerine yazılır. Bunun yerine, veritabanını dağıtmak için üretim veritabanına son dağıtımdan bu yana geliştirme veritabanında yapılan değişikliklerin uygulanması gerekir. Bu öğretici, bu zorlukları inceler ve son dağıtımdan bu yana veritabanında yapılan değişiklikleri kronik hale getirmek ve uygulamak için çeşitli stratejiler sunar.

Giriş

Önceki öğreticilerde açıklandığı gibi, bir ASP.NET uygulaması dağıtmak için ilgili içeriğin geliştirme ortamından üretim ortamına kopyalanması gerekir. Dağıtım tek seferlik bir olay değildir, bunun yerine yazılımın her yeni sürümü yayınlandığında ya da hatalar veya güvenlik sorunları tanımlanıp giderildiğinde gerçekleşen bir durumdur. ASP.NET sayfaları, görüntüleri, JavaScript dosyalarını ve diğer bu tür dosyaları üretim ortamına kopyalarken, bu dosyaların son dağıtımdan bu yana nasıl değiştirildiğiyle ilgilenmeniz gerekmez. Var olan içeriğin üzerine yazarak dosyayı üretim ortamına körü körüne kopyalayabilirsiniz. Ne yazık ki, bu basitlik veritabanını dağıtmayı kapsamaz.

Veri temelli bir uygulamayı ilk kez dağıtırken, geliştirme ortamındaki veritabanını üretim ortamına körü körüne kopyalayabilirsiniz. Ancak sonraki dağıtımlarda bir gizli kopyanın gerçekleştirilmesi, üretim veritabanına girilen verilerin üzerine yazılır. Bunun yerine, veritabanını dağıtmak için üretim veritabanına son dağıtımdan bu yana geliştirme veritabanında yapılan değişikliklerin uygulanması gerekir. Bu öğretici, bu zorlukları inceler ve son dağıtımdan bu yana veritabanında yapılan değişiklikleri kronik hale getirmek ve uygulamak için çeşitli stratejiler sunar.

Veritabanı Dağıtmanın Zorlukları

Veri temelli bir uygulama ilk kez dağıtılmadan önce, geliştirme ortamındaki veritabanı olmak üzere yalnızca bir veritabanı vardır. Bu nedenle, veri odaklı bir uygulamayı ilk kez dağıtırken geliştirme ortamındaki veritabanını üretim ortamına kör bir şekilde kopyalayabilirsiniz. Ancak uygulama dağıtıldıktan sonra veritabanının iki kopyası vardır: biri geliştirme aşamasında, diğeri üretimde.

Dağıtımlar arasında geliştirme ve üretim veritabanları eşitlenmemiş hale gelebilir. Üretim veritabanının şeması değişmeden kalsa da, yeni özellikler eklendikçe geliştirme veritabanının şeması değişebilir. Sütunları, tabloları, görünümleri veya saklı yordamları ekleyebilir veya kaldırabilirsiniz. Geliştirme veritabanına eklenen önemli veriler de olabilir. Birçok veri temelli uygulama, kullanıcı tarafından düzenlenemeyen sabit kodlanmış, uygulamaya özgü verilerle doldurulmuş arama tablolarını içerir. Örneğin, açık artırma web sitesinde açık artırmaya çıkarılan öğenin koşulunu açıklayan seçenekler içeren bir açılan liste olabilir: Yeni, Yeni Gibi, İyi ve Adil. Bu seçenekleri doğrudan açılan listede sabit kodlamak yerine, bunları bir veritabanı tablosuna yerleştirmek genellikle daha iyidir. Geliştirme sırasında tabloya Poor adlı yeni bir koşul eklenirse, uygulamayı dağıtırken üretim veritabanındaki arama tablosuna aynı kaydın eklenmesi gerekir.

İdeal olarak, veritabanını dağıtmak için veritabanını geliştirme aşamasından üretim ortamına kopyalamanız gerekir. Ancak uygulamayı dağıttıktan ve geliştirmeye devam ettikten sonra üretim veritabanının gerçek kullanıcılardan gelen gerçek verilerle doldurulduğunu unutmayın. Bu nedenle, veritabanını bir sonraki dağıtımda geliştirmeden üretime kopyalamanız durumunda üretim veritabanının üzerine yazar ve mevcut verilerini kaybedersiniz. Bunun net sonucu, veritabanının dağıtılması, son dağıtımdan bu yana geliştirme veritabanında yapılan değişikliklerin uygulanmasına neden olur.

Veritabanının dağıtılması şemadaki değişikliklerin ve büyük olasılıkla son dağıtımdan bu yana verilerin uygulanmasını içerdiğinden, değişikliklerin üretime uygulanabilmesi için değişikliklerin geçmişi tutulmalıdır (veya dağıtım zamanında belirlenmelidir). Veri modelinde değişiklikleri yönetmek ve uygulamak için çeşitli teknikler vardır.

Temeli Tanımlama

Uygulamanızın veritabanındaki değişiklikleri korumak için, değişikliklerin uygulandığı bir temel olan bir başlangıç durumuna sahip olmanız gerekir. Bir uçta başlangıç durumu tablo, görünüm veya saklı yordam içermeyen boş bir veritabanı olabilir. Bu tür bir temel, veritabanı tablolarının, görünümlerinin ve saklı yordamlarının yanı sıra ilk dağıtımdan sonra yapılan tüm değişikliklerin oluşturulmasını içermesi gerektiğinden büyük bir değişiklik günlüğüyle sonuçlanabilir. Spektrumun diğer ucunda, temeli başlangıçta üretim ortamına dağıtılan veritabanının sürümü olarak ayarlayabilirsiniz. Bu seçim, yalnızca ilk dağıtımdan sonra veritabanında yapılan değişiklikleri içerdiğinden çok daha küçük bir değişiklik günlüğüyle sonuçlandırılmasına neden olur. Benim tercih ederim yaklaşım bu. Ve elbette yol yaklaşımının daha ortasını seçebilir, temeli veritabanının ilk oluşturulmasıyla veritabanının ilk dağıtılma zamanları arasında bir nokta olarak tanımlayabilirsiniz.

Temel seçtikten sonra temel sürümü yeniden oluşturmak için yürütülebilecek bir SQL betiği oluşturmayı göz önünde bulundurun. Böyle bir betik, veritabanının temel sürümünü hızla yeniden oluşturmayı mümkün kılar. Bu işlevsellik özellikle proje üzerinde çalışan birden çok geliştiricinin veya test veya hazırlama gibi ek ortamların bulunduğu ve her birinin veritabanının kendi kopyasına ihtiyaç duyduğu daha büyük projelerde kullanışlıdır.

Temel sürümün SQL betiğini oluşturmak için kullanımınıza sunulan çeşitli araçlar vardır. SQL Server Management Studio (SSMS) içinden veritabanına sağ tıklayabilir, Görevler alt menüsüne gidebilir ve Betik Oluştur seçeneğini belirleyebilirsiniz. Bu, veritabanınızın nesnelerini oluşturmak için SQL komutlarını içeren bir dosya oluşturma talimatını verebileceğiniz Betik Sihirbazı'nı başlatır. Bir diğer seçenek de, yalnızca veritabanı şemasını değil, aynı zamanda veritabanı tablolarındaki verileri de oluşturmak için SQL komutlarını oluşturabilen Veritabanı Yayımlama Sihirbazı'dır. Veritabanı Yayımlama Sihirbazı, Veritabanı Dağıtma öğreticisinde ayrıntılı olarak incelendi. Hangi aracı kullanırsanız kullanın, sonunda ihtiyaç olması halinde veritabanınızın temel sürümünü yeniden oluşturmak için kullanabileceğiniz bir betik dosyanız olmalıdır.

Prose'de Veritabanı Değişikliklerini Belgeleme

Geliştirme aşamasında veri modelinde yapılan değişikliklerin günlüğünü tutmanın en basit yolu, değişiklikleri prose biçiminde kaydetmektir. Örneğin, zaten dağıtılmış bir uygulamanın geliştirilmesi sırasında tabloya Employees yeni bir sütun ekler, tablodan Orders bir sütun kaldırır ve yeni bir tablo ()ProductCategories eklerseniz, aşağıdaki geçmişe sahip bir metin dosyası veya Microsoft Word belgesi tutarsınız:

Tarihi Değiştir Ayrıntıları Değiştir
2009-02-03: Tabloya Employees sütun DepartmentID (int, NOT NULL) eklendi. öğesine bir yabancı anahtar kısıtlaması Departments.DepartmentIDEmployees.DepartmentIDeklendi.
2009-02-05: Tablodan Orders sütun TotalWeight kaldırıldı. İlişkili OrderDetails kayıtlarda zaten yakalanan veriler.
2009-02-12: Tablo oluşturuldu ProductCategories . Üç sütun vardır: (, , ), (, ) ve Active (bit, NOT NULL). NOT NULLnvarchar(50)CategoryNameNOT NULLIDENTITYintProductCategoryID öğesine birincil anahtar kısıtlaması ve için ProductCategoryIDvarsayılan değer olarak 1 Activeeklendi.

Bu yaklaşımın bir dizi dezavantajı vardır. Başlangıç olarak, otomasyon için umut yoktur. Bu değişikliklerin bir veritabanına uygulanması gerektiğinde (örneğin, uygulama dağıtıldığında), geliştiricinin her değişikliği teker teker el ile uygulaması gerekir. Ayrıca, değişiklik günlüğünü kullanarak veritabanının belirli bir sürümünü temelden yeniden oluşturmanız gerekirse, günlüğün boyutu arttıkça bunu yapmak daha fazla zaman alır. Bu yöntemin bir diğer dezavantajı, her değişiklik günlüğü girdisinin netlik ve ayrıntı düzeyinin değişikliği kaydeden kişiye bırakılmasıdır. Birden çok geliştiricisi olan bir ekipte bazıları diğerlerinden daha ayrıntılı, daha okunabilir veya daha kesin girdiler yapabilir. Ayrıca yazım hataları ve insanla ilgili diğer veri girişi hataları da mümkündür.

Veritabanı değişikliklerini prose olarak belgelemenin birincil avantajı basitliktir. Veritabanı nesnelerini oluşturmak ve değiştirmek için SQL söz dizimi hakkında bilgi sahibi olmanız gerekmez. Bunun yerine, değişiklikleri prose olarak kaydedebilir ve SQL Server Management Studio grafik kullanıcı arabirimi aracılığıyla uygulayabilirsiniz.

Değişiklik günlüğünüzün düzenli olarak tutulması kuşkusuz çok karmaşık değildir ve kapsamı büyük olan, veri modelinde sık sık değişiklik yapılan veya birden çok geliştirici içeren projeler gibi bazı projelerle iyi çalışmaz. Ancak bu yaklaşımın, veri modelinde yalnızca ara sıra değişiklikler içeren ve tek başına geliştiricinin veritabanı nesneleri oluşturmak ve değiştirmek için SQL söz diziminde güçlü bir arka plana sahip olmadığı küçük, tek kişilik projelerde oldukça iyi çalıştığını gördüm.

Not

Değişiklik günlüğündeki bilgiler teknik olarak yalnızca dağıtım zamanına kadar gerekli olsa da değişikliklerin geçmişini tutmanızı öneririz. Ancak, her geçen gün büyüyen tek bir değişiklik günlüğü dosyası tutmak yerine, her veritabanı sürümü için farklı bir değişiklik günlüğü dosyasına sahip olmayı göz önünde bulundurun. Genellikle her dağıtıldığında veritabanının sürümünü oluşturmak istersiniz. Değişiklik günlüklerinin günlüğünü tutarak, temelden başlayarak, sürüm 1'den başlayıp yeniden oluşturmanız gereken sürüme ulaşana kadar devam eden değişiklik günlüğü betiklerini yürüterek herhangi bir veritabanı sürümünü yeniden oluşturabilirsiniz.

SQL Değişiklik Deyimlerini Kaydetme

Değişiklik günlüğünü prose olarak tutmanın birincil dezavantajı otomasyon eksikliğidir. İdeal olarak, dağıtım zamanında üretim veritabanında veritabanı değişikliklerini uygulamak, yönergelerin listesini el ile gerçekleştirmek yerine bir komut dosyasını yürütmek için bir düğmeye tıklamak kadar kolay olabilir. Bu tür otomasyon, veri modelini değiştirmek için kullanılan SQL komutlarını içeren bir değişiklik günlüğü tutarak mümkündür.

SQL söz dizimi, çeşitli veritabanı nesneleri oluşturmak ve değiştirmek için bir dizi deyim içerir. Örneğin CREATE TABLE deyimi yürütülürken, belirtilen sütunlar ve kısıtlamalarla yeni bir tablo oluşturur. ALTER TABLE deyimi, varolan bir tabloyu değiştirir, sütunlarını veya kısıtlamalarını ekler, kaldırır veya değiştirir. Dizinleri, görünümleri, kullanıcı tanımlı işlevleri, saklı yordamları, tetikleyicileri ve diğer veritabanı nesnelerini oluşturmak, değiştirmek ve bırakmak için deyimler de vardır.

Önceden dağıtılmış bir uygulamanın geliştirilmesi sırasında tabloya yeni bir sütun eklediğiniz, tablodan bir sütunu Employees kaldırdığınız ve yeni bir Orders tablo (ProductCategories) eklediğiniz önceki örneğimize dönülen görüntü. Bu tür eylemler, aşağıdaki SQL komutlarını içeren bir değişiklik günlüğü dosyasıyla sonuçlanır:

-- Add the DepartmentID column 

ALTER TABLE [Employees] ADD [DepartmentID] 
int NOT NULL 

-- Add a foreign key constraint between Departments.DepartmentID and Employees.DepartmentID
ALTER TABLE [Employees] ADD 
CONSTRAINT [FK_Departments_DepartmentID]
      FOREIGN 
KEY ([DepartmentID]) 
      REFERENCES 
[Departments] ([DepartmentID]) 

-- Remove TotalWeight column from Orders
ALTER TABLE [Orders] DROP COLUMN 
[TotalWeight] 

-- Create the ProductCategories table

CREATE TABLE [ProductCategories]
(
      [ProductCategoryID] 
int IDENTITY(1,1) NOT NULL,
      [CategoryName] 
nvarchar(50) NOT NULL,
      [Active] 
bit NOT NULL CONSTRAINT [DF_ProductCategories_Active]  DEFAULT 
((1)),
      CONSTRAINT 
[PK_ProductCategories] PRIMARY KEY CLUSTERED ( [ProductCategoryID])
)

Bu değişiklikleri dağıtım zamanında üretim veritabanına göndermek tek tıklamayla çalıştırılabilir: SQL Server Management Studio açın, üretim veritabanınıza bağlanın, Yeni Sorgu penceresi açın, değişiklik günlüğünün içeriğini yapıştırın ve betiği çalıştırmak için Yürüt'e tıklayın.

Veri Modellerini Eşitlemek için Karşılaştırma Aracı Kullanma

Sürümdeki veritabanı değişikliklerini belgeleme kolaydır, ancak değişikliklerin uygulanması için geliştiricinin üretim veritabanındaki her değişikliği birer birer yapması gerekir; değişiklik SQL komutlarının belgelenmesi, bu değişikliklerin üretim veritabanında bir düğmeye tıklamak kadar kolay ve hızlı bir şekilde uygulanmasını sağlar, ancak veritabanı nesnelerini oluşturmak ve değiştirmek için SQL deyimlerini ve söz dizimlerini öğrenmeyi ve mastering'i gerektirir. Veritabanı karşılaştırma araçları her iki yaklaşımdan da en iyisini alır ve en kötüleri atar.

Veritabanı karşılaştırma aracı iki veritabanının şemasını veya verilerini karşılaştırır ve veritabanlarının nasıl farklılık gösterdiğini gösteren bir özet raporu görüntüler. Ardından, bir düğmeye tıklayarak bir veya daha fazla veritabanı nesnesini eşitlemek için SQL komutlarını oluşturabilirsiniz. Özetle, dağıtım zamanında geliştirme ve üretim veritabanlarını karşılaştırmak için bir veritabanı karşılaştırma aracı kullanabilir ve yürütülürken, geliştirme veritabanının şemasını yansıtması için değişiklikleri üretim veritabanı şemasına uygulayacak SQL komutlarını içeren bir dosya oluşturabilirsiniz.

Birçok farklı satıcı tarafından sunulan çeşitli üçüncü taraf veritabanı karşılaştırma araçları vardır. Bu tür örneklerden biri, Red Gate Software tarafından kullanılan SQL Compare'tır. Geliştirme ve üretim veritabanları şemalarını karşılaştırmak ve eşitlemek için SQL Compare'ı kullanma sürecini inceleyelim.

Not

Bu yazının yazıldığı sırada SQL Compare'ın geçerli sürümü 7.1 sürümüdür ve Standard Edition 395 ABD doları tutarındadır. 14 günlük ücretsiz deneme sürümünü indirerek takip edebilirsiniz.

SQL Karşılaştırma başlatıldığında, kaydedilen SQL Karşılaştırma projelerini gösteren Karşılaştırma Projeleri iletişim kutusu açılır. Yeni bir proje oluşturma. Bu işlem, karşılaştıracak veritabanları hakkında bilgi isteyen Proje Yapılandırma sihirbazını başlatır (bkz. Şekil 1). Geliştirme ve üretim ortamı veritabanlarının bilgilerini girin.

Geliştirme ve Üretim Veritabanlarını Karşılaştırma

Şekil 1: Geliştirme ve Üretim Veritabanlarını Karşılaştırma (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Not

Geliştirme ortamı veritabanınız web sitenizin klasöründeki App_Data bir SQL Express Edition veritabanı dosyasıysa, Şekil 1'de gösterilen iletişim kutusundan seçmek için veritabanını SQL Server Express veritabanı sunucusuna kaydetmeniz gerekir. Bunu yapmanın en kolay yolu SQL Server Management Studio (SSMS) açmak, SQL Server Express veritabanı sunucusuna bağlanmak ve veritabanını eklemektir. Bilgisayarınızda SSMS yüklü değilse ücretsiz SQL Server Management Studio indirip yükleyebilirsiniz.

Karşılaştırılacak veritabanlarını seçmeye ek olarak, Seçenekler sekmesinden çeşitli karşılaştırma ayarları da belirtebilirsiniz. Açmak isteyebileceğiniz seçeneklerden biri "Kısıtlamayı ve dizin adlarını yoksay"dır. Önceki öğreticide uygulama hizmetleri veritabanı nesnelerini geliştirme ve üretim veritabanlarına eklediğimizi hatırlayın. Bu nesneleri üretim veritabanında oluşturmak için aracı kullandıysanız aspnet_regsql.exe birincil anahtarın ve benzersiz kısıtlama adlarının geliştirme ve üretim veritabanları arasında farklılık gösterdiğini fark edebilirsiniz. Sonuç olarak, SQL Compare tüm uygulama hizmetleri tablolarını farklı olarak işaretler. "Kısıtlama ve dizin adlarını yoksay" seçeneğini işaretsiz bırakabilir ve kısıtlama adlarını eşitleyebilir veya SQL Compare'a bu farkları yoksaymasını bildirebilirsiniz.

Karşılaştıracak veritabanlarını seçtikten (ve karşılaştırma seçeneklerini gözden geçirdikten sonra), karşılaştırmayı başlatmak için Şimdi Karşılaştır düğmesine tıklayın. Sonraki birkaç saniye içinde, SQL Compare iki veritabanının şemalarını inceler ve bunların nasıl farklılık gösterdiğine ilişkin bir rapor oluşturur. Bu tür tutarsızlıkların SQL Karşılaştırma arabiriminde nasıl not alındığını göstermek için geliştirme veritabanında bilerek bazı değişiklikler yaptım. Şekil 2'de gösterildiği gibi, tabloya Authors bir BirthDate sütun ekledim, tablodan ISBN sütunu Books kaldırdım ve siteyi ziyaret eden kullanıcıların gözden geçirilmiş kitapları derecelendirmesini sağlamak için yeni bir tablo Ratingsekledim.

Not

Bu öğreticide yapılan veri modeli değişiklikleri, veritabanı karşılaştırma aracı kullanılarak gösterilmiştir. Gelecekteki öğreticilerde bu değişiklikleri veritabanında bulamazsınız.

SQL Karşılaştırma Listeler Geliştirme ve Üretim Veritabanları Arasındaki Farkları Karşılaştırma

Şekil 2: SQL Karşılaştırma Listeler Geliştirme ve Üretim Veritabanları Arasındaki Farklar (Tam boyutlu görüntüyü görüntülemek için tıklayın)

SQL Compare, veritabanı nesnelerini gruplara ayırarak her iki veritabanında da hangi nesnelerin var olduğunu ancak farklı olduğunu, hangi nesnelerin bir veritabanında var olduğunu, diğerinde olmadığını ve hangi nesnelerin aynı olduğunu hızlı bir şekilde gösterir. Gördüğünüz gibi, her iki veritabanında da bulunan ancak farklı olan iki nesne vardır: Authors sütunu eklenmiş olan tablo ve Books biri kaldırılmış olan tablo. Yalnızca geliştirme veritabanında var olan bir nesne vardır, yani yeni oluşturulan Ratings tablodur. Her iki veritabanında da aynı olan 117 nesne vardır.

Veritabanı nesnesi seçildiğinde, bu nesnelerin nasıl farklılık gösterdiğini gösteren SQL Farkları penceresi görüntülenir. Şekil 2'de en altta görüntülenen SQL Farkları penceresi, geliştirme veritabanındaki tabloda üretim veritabanındaki BirthDate tabloda bulunmayan Authors sütunun bulunduğunu Authors vurgular.

Farklılıkları gözden geçirdikten ve hangi nesneleri eşitlemek istediğinizi seçtikten sonra, sonraki adım üretim veritabanının şemasını geliştirme veritabanıyla eşleşecek şekilde güncelleştirmek için gereken SQL komutlarını oluşturmaktır. Bu, Eşitleme Sihirbazı aracılığıyla gerçekleştirilir. Eşitleme Sihirbazı, hangi nesnelerin eşitleneceğini onaylar ve eylem planını özetler (bkz. Şekil 3). Veritabanlarını hemen eşitleyebilir veya boş zamanlarınızda çalıştırabileceğiniz SQL komutlarıyla bir betik oluşturabilirsiniz.

Veritabanı Şemalarınızı Eşitlemek için Eşitleme Sihirbazı'nı Kullanma

Şekil 3: Eşitleme Sihirbazı'nı Kullanarak Veritabanlarınızın Şemalarını Eşitleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Red Gate Software'in SQL Compare gibi veritabanı karşılaştırma araçları, geliştirme veritabanı şemasındaki değişikliklerin üretim veritabanına uygulanmasını nokta ve tıklama kadar kolay hale getirir.

Not

SQL Compare, iki veritabanı şemasını karşılaştırır ve eşitler. Ne yazık ki, iki veritabanı tablosu içindeki verileri karşılaştırmaz ve eşitlemez. Red Gate Software, iki veritabanı arasındaki verileri karşılaştıran ve eşitleyen SQL Data Compare adlı bir ürün sunar, ancak SQL Compare'tan ayrı bir üründür ve 395 ABD doları daha maliyetlidir.

Dağıtım Sırasında Uygulamayı Çevrimdışı Duruma Getirme

Bu öğreticilerde gördüğümüz gibi dağıtım, birden çok adım içeren bir işlemdir: ASP.NET sayfalarını, ana sayfaları, CSS dosyalarını, JavaScript dosyalarını, görüntüleri ve diğer gerekli içeriği geliştirme ortamından üretim ortamına kopyalama; gerekirse üretim ortamına özgü yapılandırma bilgilerini kopyalama; ve son dağıtımdan bu yana veri modeline değişiklikleri uygulama. Dosya sayısına ve veritabanınızın karmaşıklık düzeyine bağlı olarak, bu adımların tamamlanması birkaç saniye ile birkaç dakika arasında sürebilir. Bu pencere sırasında web uygulaması akışın içindedir ve siteyi ziyaret eden kullanıcılar hata veya beklenmeyen davranışlar yaşayabilir.

Bir web sitesini dağıtırken, dağıtım tamamlanana kadar web uygulamasını "çevrimdışı" duruma getirmek en iyisidir. Uygulamayı çevrimdışı duruma getirmek (ve dağıtım işlemi tamamlandıktan sonra geri getirmek), bir dosyayı karşıya yüklemek ve sonra silmek kadar kolaydır. ASP.NET 2.0'dan başlayarak, uygulamanın kök dizininde adlı app_offline.htm bir dosyanın varlığı tüm web sitesini "çevrimdışı" alır. Bu sitedeki bir ASP.NET sayfasına yapılan tüm istekler dosyanın içeriğiyle app_offline.htm otomatik olarak yanıtlanır. Bu dosya kaldırıldıktan sonra uygulama yeniden çevrimiçi olur.

Bir uygulamayı dağıtım sırasında çevrimdışı duruma getirmek, dağıtım işlemine başlamadan önce bir app_offline.htm dosyayı üretim ortamının kök dizinine yüklemek ve dağıtım tamamlandıktan sonra silip (veya başka bir şeye yeniden adlandırmak) kadar kolaydır. Bu teknik hakkında daha fazla bilgi için John Peterson'ın ASP.NET Uygulamasını Çevrimdışına Alma makalesine bakın.

Özet

Veri temelli bir uygulama merkezini dağıtmanın temel zorluğu, veritabanını dağıtma konusundadır. Veritabanının biri geliştirme ortamında, diğeri üretim ortamında olmak üzere iki sürümü olduğundan, geliştirmede yeni özellikler eklendikçe bu iki veritabanı şeması eşitlenmemiş hale gelebilir. Dahası, üretim veritabanı gerçek kullanıcılardan gelen gerçek verilerle doldurulduğundan, uygulamayı oluşturan dosyaları (ASP.NET sayfaları, görüntü dosyaları vb.) dağıtırken yaptığınız gibi değiştirilmiş geliştirme veritabanıyla üretim veritabanının üzerine yazamazsınız. Bunun yerine, bir veritabanını dağıtmak için son dağıtımdan bu yana üretim veritabanında geliştirme veritabanında yapılan kesin değişiklik kümesinin uygulanması gerekir.

Bu öğreticide veritabanı değişikliklerinin günlüğünü tutmak ve uygulamak için üç teknik incelenmişti. En basit yaklaşım, değişiklikleri prose olarak kaydetmektir. Bu taktik, üretim veritabanında bu değişiklikleri uygulamayı el ile gerçekleştirilen bir işlem haline getirse de, veritabanı nesnelerini oluşturmak ve değiştirmek için SQL komutlarının bilinmesini gerektirmez. Daha gelişmiş bir yaklaşım ve birden çok geliştiriciye sahip daha büyük projelerde veya projelerde çok daha uygun olan bir yaklaşım, değişiklikleri bir dizi SQL komutu olarak kaydetmektir. Bu, bu değişikliklerin hedef veritabanında dağıtılma işlemini büyük ölçüde yoğunlaştırıyor. Her iki yaklaşımın da en iyisi Red Gate Software'in SQL Karşılaştırması gibi bir veritabanı karşılaştırma aracı kullanılarak gerçekleştirilebilir.

Bu öğreticide veri temelli bir uygulama dağıtmaya odaklanılmıştır. Sonraki öğretici kümesi, üretim ortamındaki hatalara nasıl yanıt ver yapılacağını ele alır. Sarı Ölüm Ekranı yerine kolay bir hata sayfasının nasıl görüntüleneceğine bakacağız. Ayrıca hatanın ayrıntılarını günlüğe kaydetmeyi ve bu tür hatalar oluştuğunda sizi nasıl uyaracağımızı göreceğiz.

Mutlu Programlama!