En iyi yanıtlayıcılar
database birleştirme

Soru
-
Merhaba arkadaşlar,
Ufak bir sorunum bulunmakta.Yardımlarınız için şimdiden teşekkür ederim.
5 adet veritabanım var.Bunları tek bir veritabanında nasıl birleştirebilirim veri kaybı olmadan.İlişkisel veritabanı kullanıldığı için ID ler birbirini tutması lazım.
Yardımlarınızı bekliyorum.
Software Developer & Database Administrator
Yanıtlar
-
Yusuf,
Anladigim kadariyla isin basindan GUID yerine int ID kullanmissin dosyalarinda.
Ben bu isi kendi kodumla soyle yapmistim:
-Ana Database tablolarini olustur.
-Tum tablolarin bir adet GUID (rowguid) eklenmis temp versiyonunu olustur (create table #Tablo1 (rowID uniquidentifier default newID(), ...) ). Master tablodaki RowId degerlerini gerekli yerlerde foreign IDler olarak ata. Bu islemi tamamladiginda tum tablolar GUID anahtarlar ile baglantili olacak. Eski IDENTITY kolonlari istedigin gibi degistirebilir durumdasin demektir.
-select rowID, row_number over (order by ...) ile IDENTITY kolonlarinin yeni degerlerini al (master tablolar icin) ve update et (temp dosyalardaki masterlari guncelliyoruz).
-RowID'leri kullanarak yeni identity degerleri ata.
-Temp dosyalardan asil dosyalara insert et.
Ikinci bir yontem:
-Yine ortak DB'de tablolarini olustur.
-Ilk db'den doldur.
-Sonrakilerden doldururken, hedef tablonun max IDsini al. O db'den gelenlerde ID degerine o max degeri ekleyerek doldur (master tablo ve o ID'yi foreign key olarak kullananlarda max ekleyeceksin)
Ucuncu bir yontem:
-Yine ortak DB'de tablolarini olustur.
-Kaynak dblerden doldururken her kaynak icin farkli bir deger ekleyerek ID ver. Ornegin ilk herhangi bir tablodaki maximum IDENTITY degeri 1000000 ise, 1. Db'den gelenlerin ID'leri oldugu gib al, 2.den gelenlere 1000000, 3.den gelenlere 2000000 ... ekle.
- Yanıt Olarak Öneren Ali Rıza İnceoğlu 4 Temmuz 2013 Perşembe 09:30
- Yanıt Olarak İşaretleyen Ali Rıza İnceoğlu 8 Temmuz 2013 Pazartesi 06:04
Tüm Yanıtlar
-
Merhaba,
SSMS üzerinde veritabanını sağ tuşla seçip Tasks > Generate Scripts ekranından veri tabanınızın nesnelerine ait scriptleri alabilir, ardından diğer veri tabanında çalıştırarak oluşturabilirsiniz.
Verileri aktarmak için INSERT ... SELECT komutlarını kendiniz yazabilir veya yine SSMS üzerinde veritabanını sağ tuşla seçip Tasks > Export Wizard aracını kullanarak bu işlemi arayüz desteğiyle adım adım yapabilirsiniz.
iyi çalışmalar
-
Merhaba,
SSMS üzerinde veritabanını sağ tuşla seçip Tasks > Generate Scripts ekranından veri tabanınızın nesnelerine ait scriptleri alabilir, ardından diğer veri tabanında çalıştırarak oluşturabilirsiniz.
Verileri aktarmak için INSERT ... SELECT komutlarını kendiniz yazabilir veya yine SSMS üzerinde veritabanını sağ tuşla seçip Tasks > Export Wizard aracını kullanarak bu işlemi arayüz desteğiyle adım adım yapabilirsiniz.
iyi çalışmalar
Merhaba,
5 adet veritabanı bulunduğundan aynı kayıtlar üst üste ekleniyor.sorgu ile yapmaya kalkışsam bilgisayar çöker her bir tabloda yaklaşık 90.000 üstü kayıt var.hadi kayıt sayısını da geçelim 300 üstü tablo var :)
Değerli bilginiz için teşekkürler dostum.
farklı bir yol bulmam lazım.bilgisi olan arkadaşlar yardımlarınızı bekliyorum
Software Developer & Database Administrator
-
Bunun icin bazi tool lar onlari kullanmani oneririm. Database leri compare edip merge etmeni sagliyorlar. RedGate basarili bir program bu konuda.
http://www.red-gate.com/products/sql-development/sql-data-compare/
-
Yusuf,
Anladigim kadariyla isin basindan GUID yerine int ID kullanmissin dosyalarinda.
Ben bu isi kendi kodumla soyle yapmistim:
-Ana Database tablolarini olustur.
-Tum tablolarin bir adet GUID (rowguid) eklenmis temp versiyonunu olustur (create table #Tablo1 (rowID uniquidentifier default newID(), ...) ). Master tablodaki RowId degerlerini gerekli yerlerde foreign IDler olarak ata. Bu islemi tamamladiginda tum tablolar GUID anahtarlar ile baglantili olacak. Eski IDENTITY kolonlari istedigin gibi degistirebilir durumdasin demektir.
-select rowID, row_number over (order by ...) ile IDENTITY kolonlarinin yeni degerlerini al (master tablolar icin) ve update et (temp dosyalardaki masterlari guncelliyoruz).
-RowID'leri kullanarak yeni identity degerleri ata.
-Temp dosyalardan asil dosyalara insert et.
Ikinci bir yontem:
-Yine ortak DB'de tablolarini olustur.
-Ilk db'den doldur.
-Sonrakilerden doldururken, hedef tablonun max IDsini al. O db'den gelenlerde ID degerine o max degeri ekleyerek doldur (master tablo ve o ID'yi foreign key olarak kullananlarda max ekleyeceksin)
Ucuncu bir yontem:
-Yine ortak DB'de tablolarini olustur.
-Kaynak dblerden doldururken her kaynak icin farkli bir deger ekleyerek ID ver. Ornegin ilk herhangi bir tablodaki maximum IDENTITY degeri 1000000 ise, 1. Db'den gelenlerin ID'leri oldugu gib al, 2.den gelenlere 1000000, 3.den gelenlere 2000000 ... ekle.
- Yanıt Olarak Öneren Ali Rıza İnceoğlu 4 Temmuz 2013 Perşembe 09:30
- Yanıt Olarak İşaretleyen Ali Rıza İnceoğlu 8 Temmuz 2013 Pazartesi 06:04
-
-