Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Warum wurde der Long-Datentyp in Oracle durch LOB ersetzt?

LOBs sind eigentlich vier unterschiedliche Datentypen:CLOB für LONG und BLOB für LONG RAW, plus BFILE und XMLType. Oracle hat diese Typen bereits in den 1990er Jahren eingeführt, weil LONG (und LONG RAW) Teh Suck! und furchtbar schwer damit zu arbeiten. Es gibt keinen Grund, LONG anstelle von LOB zu verwenden, wenn die Datenbankversion 8.0 oder höher ist.

Warum haben wir also immer noch LONGs?

LONG und CLOB sind primitive Datentypen. Obwohl es theoretisch wahr ist, dass Oracle LONG hätte ändern können, um "die zusätzlichen speziellen Funktionen" von CLOB zu haben, hätte dies in der Praxis katastrophale Auswirkungen auf das Upgrade von Datenbanken auf 8.0 (die Version, die LOBs eingeführt hat) gehabt.

Von katastrophal zu sprechen, ist vielleicht übertrieben, aber Tatsache ist, dass das Nachrüsten von Funktionen im CLOB-Stil in LONGs Ändern von Datentypen bedeutet . Das Upgrade hätte also eine automatische Datenkonvertierung beinhalten müssen. Außerdem gibt es wahrscheinlich alle möglichen Low-Level-Routinen, deren Verhalten hätte geändert werden müssen. Es ist nur ein massiver Vektor für Datenkorruption. Es ist viel einfacher (und daher sicherer), einen neuen Datentyp einzuführen und die Migration von einzelnen Sites durchführen zu lassen.

Oracle hat LONG seit 8.0 abgelehnt und Mechanismen zum Konvertieren von LONGs in CLOBs bereitgestellt, sodass in einer idealen Welt jeder weitergezogen wäre und Oracle die LONG-Datentypen aus der Datenbank löschen könnte. Im wirklichen Leben verwenden jedoch viele Geschäfte immer noch LONGs und zu viele würden kaputt gehen.

Oracle muss sie also behalten. Das Ausmaß des Problems lässt sich aus der Tatsache ableiten, dass Oracle immer noch selbst LONG im Data Dictionary verwendet (zB USER_/ALL_/DBA_VIEWS).