Delphi Can
veritabanı güncelleme - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Veri Tabanı (https://www.delphican.com/forumdisplay.php?fid=4)
+--- Forum: MySQL (https://www.delphican.com/forumdisplay.php?fid=14)
+--- Konu Başlığı: veritabanı güncelleme (/showthread.php?tid=6910)

Sayfalar: 1 2


veritabanı güncelleme - cvheneburi - 06-09-2022

Merhabalar, hazırladığım bir projede yeni sürümde veritabanı tablolarında bazı eklemeler (tablo, tabloya alan veya triger) yapmam gerekiyor.  kullanıcı yeni sürüm  uygulamayı çalıştırdığı zaman programın veritabanı güncelemesini kontrol etmesini varsa eklemeler yapmasını istiyorum bunun için nasıl bir yol izlemeliyim.


veritabanı güncelleme - frmman - 06-09-2022

Databasede ve uygulama içerisinde db versiyon numaralarını tutarsınız. Uygulama çalıştığında, db deki versiyon no ile kendi içindekini karşılaştırır. Farklı olması durumunda hazırladığınız db update scriptini çalıştırabilirsiniz.

Çoklu kullanıcılı bir sistemde ise, versiyon numarasını sürekli artan şekilde ayarlamak işleri kolaylaştırabilir. DB ye ilk bağlanan ve günceleme almış client uygulama, db yi update eder. Güncelleme almayan diğer client uygulama çalıştığında, db versiyon no kendinden büyükse uygulamanın güncellenmesi gerektiği mesajı üretilir veya kendisini otomatik olarak update eder.

Birden fazla client makina canlıda çalışırken db güncellemesi yapmak isterseniz biraz daha dikkatli şekilde, dbde yapılacak değişiklikleri planlamanız gerekecek. Update stratejinizi, eski ve yeni uygulamaların kırılmadan birlikte çalışabilecekleri adımlara bölmeniz gerekebilir. Genelde kullanılan bir field, sp, tablo gibi bir nesnenin ismi değişmediği veya silinmediği sürece problem çıkma ihtimali düşük olur. Db ye yapılan eklemeler uygulamalar açısından genelde problem çıkartmazlar, fakat db de veri bütünlüğü/tutarlılığı sizin için önemliyse, eski uyulama ve yeni uygulama birlikte db ye veri girişi yapıyorsa bir strateji geliştirmeniz veya güncelleme zamanını sistemin kullanılmadığı bir zamana ayarlamanız gerekebilir.


veritabanı güncelleme - mcuyan - 06-09-2022

Bunu hiç tavsiye etmem.. MEsela o an kullanılan bir tabloda işlem yaparsanız LockConflict hatası alıp, DB yi kilitleyebilirsiniz. FireBird de çok başıma geldi. Çünki kullanıcının db yi ne zaman kullandığı ve update'i ne zaman yaptığını bilemiyorsunuz.

Veya u tür DB field update'i yaptığınız zaman DB'yi kullanıma kapatmanız gerekir.. Çok bilinmeyenli denklem gibi olay Smile


veritabanı güncelleme - AtillaSEVENCAN - 06-09-2022

mcuyan hocama katılıyorum db üzerinde update yapacagınız zaman db yi kullanıma kapatmak en mantıklısı bencede


veritabanı güncelleme - cvheneburi - 06-09-2022

cevaplarınız için teşekkür ederim. verdiğiniz cevaplardan yola çıkarak sanırım manuel olarak update yapmak en mantıklı gibi duruyor


veritabanı güncelleme - m_ekici - 07-09-2022

Merhaba
MsSql kullanıyorum. Internet üzerinde versiyon tablom var.
programa her eklediğim alan veya tablo quersini buraya ekliyorum. (Alan/Tablo silme veya tip değişikliğini mümkün olduğunca yapmıyorum)
Program içerisinden Sadece okuma yetkisi olan bir kullanıcı ile bağlanarak versiyon güncelleme işlemi yaptırıyorum.

01.01.2022 D ALTER TABLE CARI_XX_TABLO ADD YENI ALAN INT
01.02.2022 G CREATE TABLE YENI_TABLO .....
01.03.2022 D ALTER TABLE CARI_XX_TABLO ADD YENI ALAN2 INT
01.03.2022 G ALTER TABLE GENEL_TABLO ADD YENI ALAN1 INT
01.04.2022 D ALTER TABLE CARI_XX_TABLO ADD YENI ALAN3 INT

her versiyon değişikliğinde buradaki komutlar sırayla çalışıyor. (XX Dönem tablosu, her dönem için ayrı ayrı çalıştırıyorum)
Daha önceden eklenen tablo ve alanlarda bu komutlar hata verdiği için çalışmıyor.
Şu ana kadar herhangi bir hata ile karşılaşmadım.


veritabanı güncelleme - frmman - 07-09-2022

İdeali ve garantili yol dbyi diğer kullanıcılara kapatıp yapmak.

@cvheneburi nin sistemi ne kadar kritik ve sürekli canlı kalması gerekiyor bilemiyoruz, fakat bazı durumlarda "arabanın motoru çalışırken supap kapağını değiştirmek zorunda kalabilirsiniz." Shy

Firebird özelinde çok fazla tecrübem yok ama konu MySQL başlığı altına açıldığı için yukarıdaki cevabı yazdım.

Canlıda yapılabilecek değişiklikler sınırlı olabilir, kritik ve uzun zaman alacak güncellemeler için sistemin kullanıma kapalı olduğu ve kullanımın az olduğu resmi tatil gibi bir gün seçilir ve genelde gece yarısından sonra işlem yapılır. (Öncesinde demo db de denemeler yapmak ve birde felaket durum senaryosu hazırlamak faydalı olur.)  Tercih edilecek yol işin önemine, db ye  ve içindeki veri miktarına varsa diğer parametrelere göre değişir.  İçinde 10.000 kayıt olan bir tablonun alter edilmesi ve indexlerinin yeniden oluşturulması 1 saniyeden az sürebilir, fakat 100 milyonlarca  satır olan bir tabloda durumlar farklı olabilir.

Sihirli genel bir cevap aramak yerine problemin detayına göre en uygun çözüme kafa yormak daha doğru olur kanaatindeyim.


Cvp: veritabanı güncelleme - vedat35 - 07-09-2022

(06-09-2022, Saat: 03:22)cvheneburi Adlı Kullanıcıdan Alıntı: Merhabalar, hazırladığım bir projede yeni sürümde veritabanı tablolarında bazı eklemeler (tablo, tabloya alan veya triger) yapmam gerekiyor.  kullanıcı yeni sürüm  uygulamayı çalıştırdığı zaman programın veritabanı güncelemesini kontrol etmesini varsa eklemeler yapmasını istiyorum bunun için nasıl bir yol izlemeliyim.

eski ve yeni db yi verdiğinizde 2 si arasındaki farklılıklar için view report trigger tablo alanları vs farklılıkları sql query ye döken veya doğrudan değişiklikleri yeni db de gerçekleştiren toolar mevcuttur.

navicat da böyle bir özellik vardı yanlış hatırlamıyorsam, yapmanız gereken ilgili toolun tespit ettiği değişikliklerin sql query sini alıp,
db versiyonu farklı ise, güncellenmiş exe içinde yer alan daha önce bu tool ile kaydettiğiniz query yi execute etmek.


Cvp: veritabanı güncelleme - adelphiforumz - 08-09-2022

Aşağıdaki linki incelemenizi tavsiye ederim.
Bu firmanın farklı tek başına alabileceğiniz paketleri de mevcut.

https://www.red-gate.com/products/sql-development/sql-toolbelt-essentials/


veritabanı güncelleme - berk06 - 08-09-2022

TMS Software'in böyle bir ürünü var.

https://www.tmssoftware.com/site/tmsecho.asp

Veritabanlarını birbirine senkronize ediyor. İstediğinizi tam karşılar mı emin değilim fakat yararlanılabilir.