

Veritabanlarından Veri Çekip Bir Başka Veritabanına Yazma
-
Merhaba mürit ve mürideler,
Şöyle bir sorunum var. Benim bir adet MSSQL Server'im mevcut. ve bu MSSQL deki verileri Mysql'e atmam gerekiyor. Tablo isimleri aynı . Column isimleri aynı.. herşey aynı ..
MSSQL deki dataları komple alıp MYSQL deki veritabanına atmam gerekiyor şu programı kullandım EasyFrom.ESF.Database.Migration.Toolkit.Pro.v8.2.07 fakat bunda verilerimin sadece %10-15 i falan geliyor diğerleri hep eksik.
Bende düşündüm Oturup kendi toolumu yazayım dedim.. VT Ye bağlanıp o VT de bulunan verileri Transaction ile ekleyeyim dedim.. Fakat şöyle bir sorunum var..
Örneğin Kullanıcılar Tablosunda KullanıcıID Auto Increment Haliyle sildiğim datalar arada boşluk yaratıyor Yani ID ler 1-2-3-50-51-66 gibi falan yani.. Ben şimdi bunu Mysql'e insert ettiğimde Auto increment alanlara veri yazamıyorum haliyle. Ve bütün ilişkilerim ölüyor..
Bunun önüne nasıl geçebilirim ? Yardımcı olacak biri var mıdır ?
Esenle kalın
-
Auto Increment kısımlar zaten Auto Increment'dir o kısımları neden alıyorsun ?
-
0x656e bunu yazdı
Auto Increment kısımlar zaten Auto Increment'dir o kısımları neden alıyorsun ?
ID işte hocam onlar ilişkili alanlar yani
-
Şimdi orada constrait tanımlanmışsa ona göre davranman lazım. Foreign Key seni etkilememeli. İlişkili kaç tablo var?
Kısaca şöyle anlatayım:
İlk tablodaki ilişki kuran id gibi foreign anahtarları yeniden oluşturacaksın. Bu da şu şekilde olur (tablo1 ve tablo2)
ilk sorgu := insert into tablo1 x, y, z values (A, B, C)
ikinci sorgu := insert into tablo2 t, w, k values (last_insert_id(), W, K)
gerekirse üçüncü tablonun sorgusu şu şekilde olmalı:
üçüncü sorgu := insert into tablo3 g, h, j values (select Max(A) from tablo1, H, J).
Lafın kısası ya kısıtlamaları kaldırıp sonra alter ile ekleyeceksin ya da yukarıdaki yöntemi uygulayacaksın. Dikkat etmen gereken nokta her anlamlı veriyi tek seferde girmen, tüm tabloyu değil.
YeniHarman tarafından 25/Mar/17 20:42 tarihinde düzenlenmiştir -
YeniHarman , Abi düşündüm onların alayını evet iyi LastInsert ID dersem de bütün ilişkileri sanki yeni eklenmiş gibi ekleyebilirim..
Fakat şöyle ki. Ilişkiler çok karmaşık.. Yaklaşık 270 adet Tablo var ve 1 tablo 20-30 tane tablo ile ilişkili olabiliyor..
Yani KullanıcıID , KitapID var , Yazar ID Var (Bir Kitabı birden çok yazarı bir yazarın birden cok kitabı var). diyelim
Bu bile en basitinden.. Gidip ilk önce Kullanıcı eklicen
Bunu bir değişkene atıcaksın.
Yazar'ları ekleyeceksin.
Kitapları ekleyeceksin..
Peki ya çok'a çok ilişkilerde nasıl olacak ?
:'((((((((((((((((((((((((((((((((((
Bunlar bile başlı başına bir mantık yada program yazmak gibi.. 1 tane sorguyu yanlış yazsam bütün ilişkiler alt üst.
Ama son dediğin biraz daha mantıklı gibi.. Verileri ekledikten sonra O alanları gidip güncellemek daha mantıklı.. Tek bir VT Olsa datayı dışarıya alıp tablo alanlarını veya sorguları güncelleyip bütün sorguları tekrardan yazabilirim. Ama birçok database var yaklaşık 50 Database ve 270-280 tablo var.
Çok'a Çok ilişkilerin bile kendi içerisinde ilişkileri mevcut.. -
O zaman mevcut sistemi taklit edeceksin. Yapacak bir şey yok:) Örneğin sisteme önce kitap kategorileri, alt kategorileri, yazar, sonra yazarın kitabı(ları), daha sonra satın alanların listesi... gibi girilir. Aynı yoldan yürümen lazım.
-
Abi öyle olduğunu varsayalım..
Her tabloda 10k veri olduğunu düşün.. (Normalde bazı tablolarda 800k data var)
10.000x250 = 2.500.000 Query eder.. Bide Burda Select sorgusu olacak ... Çünkü 1 VT den alıp digerine ekleyeceğim
Ettimi 5 Milyon Query ..
Transaction Kurtarmaz bunu.. Çünkü LastInsertID alıyoruz sürekli.. Eş zamanlı çalışması lazım Querylerin.
Yani Kod'la olacak bir iş değilim sanırım bu..
Benim bir şekilde MSSQL de aldığım Veritabanı cıktısını komple MySQL Sorgusuna çevirmem lazım.
Regex Script'leri falan aradım da gene yemedi.. Başka yollar lazım yani abi Query'ler ile zaman sorunu cıkacak çünkü
-
MhmdAlmz bunu yazdı
Merhaba mürit ve mürideler,
Şöyle bir sorunum var. Benim bir adet MSSQL Server'im mevcut. ve bu MSSQL deki verileri Mysql'e atmam gerekiyor. Tablo isimleri aynı . Column isimleri aynı.. herşey aynı ..
MSSQL deki dataları komple alıp MYSQL deki veritabanına atmam gerekiyor şu programı kullandım EasyFrom.ESF.Database.Migration.Toolkit.Pro.v8.2.07 fakat bunda verilerimin sadece %10-15 i falan geliyor diğerleri hep eksik.
Bende düşündüm Oturup kendi toolumu yazayım dedim.. VT Ye bağlanıp o VT de bulunan verileri Transaction ile ekleyeyim dedim.. Fakat şöyle bir sorunum var..
Örneğin Kullanıcılar Tablosunda KullanıcıID Auto Increment Haliyle sildiğim datalar arada boşluk yaratıyor Yani ID ler 1-2-3-50-51-66 gibi falan yani.. Ben şimdi bunu Mysql'e insert ettiğimde Auto increment alanlara veri yazamıyorum haliyle. Ve bütün ilişkilerim ölüyor..
Bunun önüne nasıl geçebilirim ? Yardımcı olacak biri var mıdır ?
Esenle kalın
Cross sql replication dusunuyosun galiba link bunu dene direk 2 farkli sql i farkli platformlarda olsa bile replication islemi yapar
edit:link güncelleme
trooper tarafından 25/Mar/17 22:23 tarihinde düzenlenmiştir -
Bi çözüm buldum ama şöyle bir sıkıntım var MSSQL de VT alanında bulunan time(7) alanında bir hata alıyorum..
Yani MSSQL de time(7) olan alan MYSQL de time(6) olması gerekiyor
DROP TABLE IF EXISTS `expressions`; CREATE TABLE `expressions` ( `idx` bigint NOT NULL , `date` datetime NULL , `code` varchar(80) NULL , `dropid` varchar(80) NULL , `queue` varchar(80) NULL , `expression` varchar(80) NULL , `userid` bigint NULL , `number` varchar(80) NULL , `status` varchar(45) NULL , `duration` time(7) NULL , `sec` time(7) NULL , `recording` varchar(255) NULL , `isdownload` tinyint NULL , `type` varchar(30) NULL , `insert` tinyint NULL , `update` tinyint NULL , `IsActive` tinyint NULL , PRIMARY KEY (`idx`) )
ERROR MESSAGE : [Err] 1426 - Too big precision 7 specified for 'duration'. Maximum is 6.
duration time(6) olması gerekiyor normalde. ama 7 olduğundan hata alıyoruz
Bunu da çözer isem sorunum çözülecek.
Şunu çözdükten sonra burda paylaşırımEDİT ; Tropper, hocam link bozuk
MhmdAlmz tarafından 25/Mar/17 22:13 tarihinde düzenlenmiştir -
Edit: Hocam söylemiş olduğum yazılım ücretsiz ve açık kaynak
Bu ürün ile cross platform replication yaparsın.
trooper tarafından 25/Mar/17 22:22 tarihinde düzenlenmiştir -
trooper bunu yazdı
Edit: Hocam söylemiş olduğum yazılım ücretsiz ve açık kaynak
Bu ürün ile cross platform replication yaparsın.
Deneyeyim hocam onu da bir şunu çözemez isem