Oracle SQL-Schema in MySQL "konvertieren"

CHaoSlayeR

Erfahrenes Mitglied
Hi leutz,

habe ein größeres Problem, und zwar habe ich hier ein SQL-Schema vorliegen, nach dem ich in einer Applikation Import- und Export-Funktionalitäten implementieren muss. Mein Hauptproblem ist, dass ich kein Oracle-Server habe und auch kein Zugang zu einem anderen habe. Somit fällt Software aus, die Datenbank-Export oder -Import vornimmt.

Ich brauche daher eigentlich ein Tool, welches mir aus dem Oracle-Script ein MySQL-Script macht. Wenn das Schema nicht so groß wäre (18340 Zeilen), würd ich das ja per Hand übersetzen.

Gibt es ein solches Tool? Wenn ja, welches und gibt es auch ein frei verfügbares?

Brauche das wirklich dringend!

Schonmal danke für jeden Hinweis...
 
Hallo!

Ich brauche daher eigentlich ein Tool, welches mir aus dem Oracle-Script ein MySQL-Script macht. Wenn das Schema nicht so groß wäre (18340 Zeilen), würd ich das ja per Hand übersetzen.

Schreib dir doch flott selbst ne Überführungsroutine... ;-)
Ich meine in gewisser Weise ähneln sich die SQL Statements von Oracle denen von MySQL sehr stark...(die Hersteller haben sich an einigen Stellen eben mal an den SQL Standard gehalten ;-) )
Ich meine reicht es nicht, wenn du Oracle Datentypen auf MySQL abbildest und die Oracle spezifischen Spalten und Tabellen wie (sysdate, dual, etc) in entsprechende Funktionsaufrufe auf MySQL Seite umsetzt?
Woraus bestehen die DDL Statements des Schema Skripts?
create table Statements
comment on Statements
alter table add constraint Statements
alter table add column Statements
create (unique) index on ... Statements

...für Oraclespezifika wie Tablespaces muss man sich was überlegen. (Oder einfach weglassen).

Gruß Tom
 
Hallo Thomas,

danke erstmal für Deine Antwort. Das Problem ist, das das Oracle Script nicht sauber selbst geschrieben wurde sondern nur ein Script ist, welches mittels Reverse Engineering erstellt wurde. Dadurch ist da aller möglicher Unsinn drin, den man in den meisten Fällen gar nicht braucht:

z.B.

Code:
ORGANIZATION        HEAP
NOMONITORING
PARALLEL
(
  DEGREE            1
  INSTANCES         1
)
NOCACHE
PCTUSED             40
PCTFREE             10
INITRANS            1
MAXTRANS            255
STORAGE
(
  INITIAL           65536
  MINEXTENTS        1
  MAXEXTENTS        unlimited
  PCTINCREASE       0
  FREELISTS         1
  FREELIST GROUPS   1
  BUFFER_POOL       default
)
LOGGING
TABLESPACE          users
nach einem create table oder ein trigger wie folgender:
Code:
CREATE OR REPLACE TRIGGER log_event_registration_stat
AFTER INSERT OR UPDATE ON SMP_VDE_EVENT_TARGET_INFO
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
declare 
        -- default record type = 3 indicates an event registration or deregistration record
        record_type     number default 3;
        owner           varchar2(32);     
        local_date      date;

    begin

        if (:NEW.AGENT_STATUS = 205 or :NEW.AGENT_STATUS = 208)
        then

            select OWNER
              into owner
              from SMP_VDE_EVENT e
              where e.ID = :NEW.EVENT_ID;

            --
            -- Go through updown tests (ignore implicit node updown tests)
            --
            for details IN 
              (
                select *
                from SMP_VDE_EVENT_TARGET_DETAILS
                where EVENT_ID = :NEW.EVENT_ID
                and TARGET_NAME = :NEW.TARGET_NAME
                and TARGET_TYPE = :NEW.TARGET_TYPE
                and NODE_NAME = :NEW.NODE_NAME
                and FILENAME like '%updown%'
                and FILENAME != 'dgupdown'
                and not (COMPANY = 'oracle' and ORGANIZATION = 'host' 
                         and PRODUCT = 'fault' 
                         and TARGET_TYPE != 'oracle_sysman_node')
              ) 
            loop
                -- compute target local date from GMT date in occur_date + timezone offset
                --
                local_date := :NEW.TIMESTAMP + (:NEW.TIMEZONE / 86400000);
           
                insert into SMP_VDE_EVENT_ARCHIVE 
                   (OWNER, EVENT_ID, EVENT_TEST_ID, TARGET_NAME, 
                    TARGET_TYPE, NODE, OCCUR_DATE, TIMEZONE, LOCAL_DATE,
                    SEVERITY, REGISTRATION_STATUS, RECORD_TYPE, 
                    TEST_NAME, COMPANY, ORGANIZATION, PRODUCT, FILENAME,
                    MSG_OUTPUT)
                values 
                   (owner, :NEW.EVENT_ID, details.EVENT_TEST_ID,
                    :NEW.TARGET_NAME, :NEW.TARGET_TYPE, :NEW.NODE_NAME, 
                    :NEW.TIMESTAMP, :NEW.TIMEZONE, local_date,
                    details.SEVERITY, :NEW.AGENT_STATUS, record_type,
                    details.TEST_NAME, details.COMPANY, details.ORGANIZATION, 
                    details.PRODUCT, details.FILENAME, details.MESSAGE);

            end loop;

        end if;

    exception
    when others then
        record_type := 3;

    end;

/


Mit ein paar "create table", constraints und indexes hab ich ja gar kein problem. Das mach ich ja derweil schon nebenbei, allerdings für komplexere Dinge wie die Trigger, die Views und das entfernen von unnötigem Kram fehlt mir das "Insider-Wissen" für Oracle und MySQL, um es entsprechend umsetzen zu können. Dadurch fehlt mir auch die Grundlage mir "mal schnell eben" ein kleines Programm schreiben zu können, welches mir die manuelle Arbeit abnimmt...


Gruß, C]-[aoZ
 
Zurück