Na některých db (MSSQL,...) lze udělat i INSERT INTO prvniDb.table(...) SELECT FROM druhaDb.table(...). Odpadá tak nutnost dump/load.
Většina i free nástrojů umí do kopírovat v rámci jednoho výrobce a některé i do určité míry kopírovat mezi db různých výrobců.
Pokud máte dělat kopii dat mezi různými databázemi, v Javě je ideální možnost:
- otevřít JDBC spojení do db1
- otevřít JDBC spojení do db2
- db2.prapareStatement("Insert INTO....")
- db.open scrollable forward only cursor
- for i < columnCount
- db1.ResultSet.getObject(i)
- preparedStatement.setObject(i)
[předpokládá se úplně stejná struktura]
Velkou výhodou komba getObject/setObject je, že se vůbec nemusíte zalamovat s datovými typy - JDBC drivery udělají vše za vás!
A lze to i vylepšit - program jako argument dostane konfigurační stringy databází + název tabulky a přes metadata si zjistí názvy sloupců, vybuduje si SELECT i INSERT INTO a pak máte absolutní jistotu, že data budou v těch samých sloupcích.
Dá se to všemožně optimalizovat (bulk inserty, granularita,...), ale obvykle toho není třeba.
A takovýto low-level přístup je mnohem lepší v situaci, když musíte řešit zvláštnosti (přemapování dat, konverze codePage, B/CLOBy,...), které s běžnými nástroji nezvládnete. A je to lepší než dělat XML dump-->XSLT-->XML load, protože když už je vaše XSLT vyladěná do maxima, vždycky přijde někdo s požadavkem "a tyhle řádky začínající na xyz chceme zpracovat jinak":-) V kódu si s tím poradíte raz dva, v XSLT to ladíte hodinu.
Hodně štěstí!