Firebird Backup & Restore Sorunlası...

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
snofru
Üye
Mesajlar: 204
Kayıt: 19 Ağu 2004 02:57
Konum: /local/usr/src
İletişim:

Firebird Backup & Restore Sorunlası...

Mesaj gönderen snofru »

S.a.
Arkadaşlar, projemde veritabanı yedeğini aldığımda yedekleme yapmak sorun olmuyor ancak yedeği geri yüklediğimde de herşey başarılı oluyor lâkin tüm tablolarımın Primary Key olayları felç oluyor. Yani ID lerin Generator bağları kopuyor, ID üretemiyor ve Primary Key, Unique hatsı alıyorum. ancak işin garip tarafı var, zaten benim pilot olduğum nokta da burası.
Senaryoyu yazıyorum;
Bir müşteri programı kullanmakta, sonra proje geliştirilmeye devam eder, işin Delphi ve Veritabanı kısmında değişiklikler yapılmakta. Neyse sonuçta müşteri yeni programa önceden aldığı yedekleri yükleyemez ( ki vertabanında ek tablolar vs olduğu için doğrudur bu hata ) Müşterinin vt si IbExpertte açılır, datalar extract edilir ve yeni vt ye import edilir (Insert Into) , ok sorun yok. bundan sonra hatalar başlar. ..

Boş Yeni VT ye Insert Into lu veri taşımada ID alanları da import ediliyor, bu problem olur mu?

Bilgiler:
:arrow: Boş veritabanı program içinden yada dış kuvvetlere yaratılıp çalıştırıldığında hiçbir sorun yaşanmamaktadır.
:arrow: Firebird 1.5.1 kullanılmaktadır.
:arrow: IBx 7.04 updatelidir

İlginize Teşekkür Ederim...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
verileri aktarırken triger ları disable edip sonra tekrar enable etmelisin
generatorlerin değerlerinide aktarmalısın.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
snofru
Üye
Mesajlar: 204
Kayıt: 19 Ağu 2004 02:57
Konum: /local/usr/src
İletişim:

Mesaj gönderen snofru »

Hocam, tesbitinizde çok haklı olabilirsiniz, deneyeceğim. Ancak 40 küsür tabloda triggerları tek tek iptal etmek :shock: bunun tümü için olan komutu yok mu acaba? Yada ID leri export/import ettirmesek de çözülür değil mi? Yüzlerce kayıtta ID leri silmek :shock: sanırım başım büyük belada :lol:
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

triggerları ibexpert ile teker teker inactive edebilirsiniz.
yada tum triggerların basına

Kod: Tümünü seç

  if (current_user='OZEL' ) then
    exit;
gibi bir kod ekleyerek
ve OZEL isimli tum haklara sahip bir user olusturarak halledebilirsiniz.
ÜŞENME,ERTELEME,VAZGEÇME
snofru
Üye
Mesajlar: 204
Kayıt: 19 Ağu 2004 02:57
Konum: /local/usr/src
İletişim:

Mesaj gönderen snofru »

Evet Aslan Amca dediğinde çok haklıymışsın, problemin kaynağı oymuş, şimdi ben bunun veritabanıma nasıl uygulayacağım? Triggerları tek tek inactive edemem, oluşan metadata da ID leri tek tek silemem... En başa bi kalıp hazırlayıp tüm triggerları (triggerlar oluşturulduktan sonra) InActive edip tüm kayıtlar Commit Work ten sonra Active etsem. ?? Yada daha çetin bir yol ve/ya Tool programı bilen var mı acaba?

Gökmen Abi, tabloya kayıt girerken geçiçi bi süre InActive sonra Active haline sokacak bi komut biliyor musun? Yada derdime derman olcak herhangi bi şey...

teşekkürler...
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

IbPump triggerları veri aktarırken disable yapabiliyor
ama nasıl yapıyor su an icin bilmiyorum.
Ama o yapıyorsa elbette bir yolu vardır.
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Kod: Tümünü seç

const
SQL_Trigger   = 'UPDATE RDB$TRIGGERS '+
                 'SET RDB$TRIGGER_INACTIVE = %d '+
                 'WHERE ( (RDB$RELATION_NAME = ''%s'') AND (RDB$FLAGS = 1) )';

...........
  QUE_ForTrigger.SQL.Clear;
  QUE_ForTrigger.SQL.Text := Format(SQL_Trigger,[1,Tbl_Name]);
  QUE_ForTrigger.ExecQuery;
  QUE_ForTrigger.Transaction.Commit;
  QUE_ForTrigger.Close;
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
snofru
Üye
Mesajlar: 204
Kayıt: 19 Ağu 2004 02:57
Konum: /local/usr/src
İletişim:

Mesaj gönderen snofru »

Hocam kod güzel ve faydalı, teşekkürler... Dün gece bu tip işler için bi tool yazmaya başladım, zamanla geliştirip önce FlameRobin sonra IBExpert e benzetmek düşüncesindeyim. Biraz eli ayağı düzelsin GPL lisansıyla foruma indirilebilecek linki verecem inşallah...

Hocam kodunuza ilaveten belki faydalananlar olur düşüncesiyle Veritabanındaki tüm tabloların listesini veren SQL cümlesini yazıyorum.

Kod: Tümünü seç

     SELECT RDB$RELATION_NAME
     FROM RDB$RELATIONS
     WHERE RDB$SYSTEM_FLAG = 0 AND RDB$VIEW_BLR IS NULL
Kolay gelsin..
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Marathon Yardımı olur belki. Benim kullandığım ilk tool. Open source tur ayrıca.

Kod: Tümünü seç

FieldsSQL_Req = 'SELECT R1.RDB$FIELD_NAME FROM RDB$RELATION_FIELDS R1 ' +
            'JOIN RDB$FIELDS R2 ON R1.RDB$FIELD_SOURCE = R2.RDB$FIELD_NAME ' +
            'WHERE R1.RDB$RELATION_NAME = :Table_Name ' +
            'AND R2.RDB$COMPUTED_SOURCE IS NULL ' +
            'ORDER BY R1.RDB$FIELD_POSITION'; 
Bu SQL cümlesi Verilen table ın field listesini döndürür, ama Computed alanlar hariç. (Bunu FIBPlus a da vermiştim)

Kod: Tümünü seç

FieldsSQL_All = 'Select RDB$FIELD_NAME from RDB$RELATION_FIELDS R ' +
    'where R.RDB$RELATION_NAME = :Table_Name ORDER BY R.RDB$FIELD_POSITION';
Buda Table ın tüm fieldları, computed fieldlar DAHİL.

Kod: Tümünü seç

SQL_Info_Text =
    'SELECT RDB$DESCRIPTION FROM RDB$RELATIONS ' +
    'WHERE (UPPER(RDB$RELATION_NAME) = UPPER(''%S''))';
Bu Table ın Description yani açıklamasını getirir. Sen burdan Fieldların vs lerinde açıklamalarını bulabilirsin :)

diğer bu mesajı okuyan arkadaşlarada önerim olucak. Gexpert open source bir IDE tool dur. hatta bence mükemmel ötesidir. ücretsiz ve opensource tur. Bu tool içinde "Code Librarian" diye bir bölüm var. Bu tip ufak tefek kod örneklerini buraya yazıp biriktirin elinizin altında bulunsunlar. yeri geldiğinde çok işe yarıyorlar. ve tabi bulduğunuz ufak tefek faydalı kod yada önerileri forumda Makale ve ipuçları bölümüne yazarsanız herkezle paylaşmış olursunuz.

Birde @snofru önerim benzetmeye çalışma, ama kesinlikle fikir al, ama kesinlikle ve kesinlikle daha iyisini yap :) Burayada bak ve incele IBExpertin aynısıdır, ama bence daha hızlı, ve özellikle query builder ı çok daha iyi. SP lerin parametrelerini daha iyi çözümlüyor. hataları var ama bu kısmı IBExpert ten daha iyi düşüncesindeyim


Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
snofru
Üye
Mesajlar: 204
Kayıt: 19 Ağu 2004 02:57
Konum: /local/usr/src
İletişim:

Mesaj gönderen snofru »

Hocam verdiğiniz kodlar için teşekkür ederim, zaten şuan kendi projem için pratik bi tool yazıyorum, bazı problemler için... Sonrasında zaten projeyi bi topic'e açar fikirlerinizi alır (belki katılımcı bile olabilir) ihtiyaçlara göre yapılması gerekenleri boş zamanlarımda yapmaya çalışırım.

Marathon un koldarını inceliyorum, GExpert e şimdi bakacam. Zamanla olabilecek bi düşünce bilmiyorum belki zamanım olmayacak hiç bakamayacam askıda kalacak. Hayırlısı...

Kolay Gelsin, Sevgiler...
Cevapla