Přeskoč navigaci

Firebird a MSSQL - migrace není legrace

Potřeboval jsem převést jednu databázi (Firebird) do druhé (MS SQL). Myslel jsem, že to bude lehčejší.

Lehký úvod do problematiky

Mám velmi rád Firebird což je relační databáze vycházející z open source verze Interbase, původem od Borlandu (nyní CodeGear), původním autorem je Jim Starkey - (nyní pracuje pro MySQL a snad dokáže aby se i z MySQL stala trochu slušná relační databáze).

Interbase (a Firebird) je rychlá, nenáročná, ale hlavně s unikátním řešením konkurenčního přístupu - zájemce odkazuji na internet nebo na knihu Pavla Císaře: InterBase/FireBird - Tvorba, administrace a programování databází (velmi dobře utracené peníze).

Kromě jiných věcí je na Firebirdu boží jeho verze Embedded Firebird (dále jen EF). V podstatě se jedná o toto: k těmto DB se přistupuje přes rozhraní, které je ukryté v DLL a odstiňuje vlastní komunikaci se serverem. Ale nějakého génia napadlo, že by se pro jednoduché věci mohl do té DLL schovat celý DB stroj, a že v případě potřeby (program naroste a tak) se prostě jen vymění DLL a bude se přistupovat na velkou DB. A tak se stalo. Vznikl EF, který umožňuje přístup jen jednomu programu a to až do odhlášení. Důsledkem je, že EF tudíž neřeší nijak moc přihlašování do DB. Defaultní heslo (i pro velký Firebird) je SYSDBA/MASTERKEY.

Proč pak to dělal potvůrka podivná?

Potřeboval jsem přesunout celkem dost záznamů z Firebirdu do MSSQL (jelikož na hostingu s ASP.NET většinou Firebird není - bohužel, a provozovat tam jeho embedded verzi jde jen za určitých podmínek). Navíc se jednalo jen o část tabulek DB (cca 1/5), zbytek mne nezajímal.

Originální databázi používal program, do kterého mám přístup, mohu zálohovat, obnovovat data atd., ale nemůžu přímo do DB (defaultní uživatel nešel použít). Takže jsem se musel nejdříve dostat do DB a to se ukázalo jako problém.

Mimochodem z morálního hlediska je to zajímavé: data jsou naše - sami jsme je tam vložili, a teď je potřebujeme ještě na něco jiného. Program sice umožňuje export, ale to není ono.

Jak ale do databáze?

Takže co s tím? Nejdříve jsem zkoušel kombinace gbak atd., ale nějak se mi nedařilo provést restore bez aplikování omezení z originální DB.

Dále jsem zkusil, připojit DB k Embedded Firebirdu a poučen, že kromě SYSDBA/MASTERKEY (což nešlo), by měl fungovat jakýkoliv user, který není v DB s prázdným heslem, jsem se jal laborovat. To bylo zajímavější, neb s jedním programem jsem se dovnitř dostal, ale z mne neznámého důvodu pouze s historickým DIALECT 1 (tj. s trochu omezeným SQL) a pokusy o přepnutí dialektu selhaly. Můj oblíbený IBExpert připojení nerozdýchal (ačkoliv jindy s Embedded Firebirdem nemá problém).

Tak uběhly asi dvě hodiny a já se nehnul z místa. Napadlo mne zda náhodou uživatel nenechal heslo v programu. Takže jako první jsem zkusil jen vyhledávání přes View Total Commanderu (hledal jsem "password" a byl jsem překvapivě úspěšný). Vynadal jsem si, že jsem jsem tím nezačal, ale databáze byla přístupná.

Migrace schema a dat

Původní úmysl, že použiji nějaký program, který provede převod celé DB za mne vzala po chvilce googlování za své (opačným směrem to samozřejmě jde mnohem snadněji - to jsem již dělal dříve a celkem to šlo).

Jelikož vím, že součástí MS SQL je nástroj Import and Export Data, který je celkem schopný, snažil jsem se o jeho využití (s jeho pomocí se dají celkem pěkně migrovat data mezi např. Excel a MS SQL nebo Accessem nebo naopak). Jako zdroj nebo cíl může sloužit jakýkoliv OLE DB (rozhraní pro přístup k datům - následník ODBC) nebo i ODBC ovladač. MS dodává OLE DB ovladače např. pro Excel, Access, MS SQL, Paradox nebo DBase. Jenže OLE DB driver pro Firebird je složitější sehnat (seznam OLE DB pro Firebird (Interbasi), každý je trošku omezený (tedy aspoň ve Free verzi). Ve zkratce: nebyl jsem úspěšný.

Dále jsem zkoušel ODBC driver pro Firefox, ten dokázal (přes uvedený program) převést strukturu DB (schema), ale ne data.

A pak jsem narazil na Database Workbench, perfektní nástroj, který v pohodě provedl konverzi schema (včetně cizích klíčů atd.). Bohužel přímá konverze dat pro MS SQL není povolena, ale program umožnil exportovat data v několika různých formátech (včetně sekvence INSERT příkazů s možností volby cílového DB stroje). Po sérii pokusů jsem skončil právě u sekvence INSERT příkazů pouštěných po dávkách a převod dat byl dokončen. Primitivně, ale úkol byl splněn.

Jaggni to|Linkuj

Komentáře k tomuto článku



Prosím o dodržovaní určitých pravidel (tj. žádné neslušné texty, reklamy a tak prostě podobně). Komentáře porušující tyto pravidla budou odstraněny.

Před vložením komentáře je nutno provést náhled, jedná se o ochranu proti spamu.

 

Vložení komentáře
  
 
 

 

© NetCode.cz, 2006-9 | Všechna práva vyhrazena
Provozováno na mém pikoCMS, vygenerováno: 23.5.2017 7:14:37

O mně

Informace o mé maličkosti a kontakt.

Lokální tagy

amd(1) amiga(1) apple(1) aspnet(2) audio(1) borland(5) C64(1) codegear(12) delphi(39) dotnet(9) dvd(1) electone(1) embarcadero(1) emulator(11) firebird(2) flash(1) freepascal(5) gamecube(3) gigabyte(2) google(3) hardware(48) holografie(1) homebrew(29) hry(12) ibm(14) iphone(7) jidlo(1) komponenty(1) konzole(15) latex(1) lenovo(17) migrace(1) modchip(3) moje(9) mplayer(3) mssql(1) multi-touch(3) native-api(1) navody(23) nintendo(53) Nintendo3DS(2) nintendo64(6) NintendoDS(15) onestation(2) opera(1) ot(1) palm(1) pascal(1) pdf(1) pic(2) pmd85(1) pocitace(1) print-server(2) programovani(21) programy(25) R400(1) recenze(6) retro(1) satelit(1) seamonkey(5) snes(3) svepomoci(1) technika(1) thinkpad(20) usb(1) video(3) vs(3) vykriky(12) web(7) webdesign(8) wii(83) wiimote(13) wiiware(1) wiki(2) windows(7) windows-mobile(1) wl500g(2) wtf(8) zivot(1) ZX-Spectrum(5)