Schlagwort-Archive: windows

Windows Large Pages

Vor einiger Zeit hatte ich hier über Linux HugePages geschrieben. Die sind ja mittlerweile kein Geheimtipp mehr, und ab Oracle 12.2 lässt sich mit dem DBCA sogar eine Datenbank bei einem RAM > 4GB nur noch mit HugePages anlegen (oder es erscheint die Fehlermeldung „[DBT-11211]“).

Etwas anders scheint es nach meinem Eindruck um die Windows Large Pages bestellt zu sein. Da Oracle jedoch ab 4 GB SGA empfiehlt, auch unter Windows die größeren Speicherseiten zu nutzen, möchte ich hier eine kurze Einführung dazu schreiben.

Weiterlesen

OLEDB/ADO: „Der Accessor ist kein Parameteraccessor“

Beim Zugriff aus MS Access heraus auf eine Oracle-Datenbank (11.2) kam es zu der folgenden Fehlermeldung, deren Ursache und Beseitigung ich hier kurz beschreiben möchte, da bislang kaum ein kurz zusammengefasster Artikel dazu im Netz zu finden ist:

Laufzeitfehler (80040e4b): Der Accessor ist kein Parameteraccessor.

Bei der Untersuchung der View, auf die zugegriffen wurde, fiel mir folgender Code auf:

(NVL(b.marktwertfondswhg, 0) - NVL(b.einstandswertfondswhg, 0)) / NVL(k.fondsvermoegen, 0)

Mal abgesehen davon, daß hier eine Division durch Null möglich wäre (nein, die View stammt nicht von mir…), war dies die einzige Spalte, in der ein Quotient gebildet wurde. Es lag also der Verdacht nahe, daß es sich um ein Problem mit inkompatiblen Datentypen handeln könnte.

Und in der Tat sollte es sich herausstellen, daß ADO maximal 28 Dezimalstellen unterstützt, wohingegen Oracles NUMBER-Datentyp bis zu 35 Dezimalstellen bietet. Seit Version 10.2 des „Oracle Provider for OLE DB“ stellt dieser Fließkommazahlen nicht mehr als Zeichenkette sondern eben als Zahl bereit, was also ab dem Einsatz dieser Version zu dem Problem führen kann.

Abhilfe schafft der Einsatz der Rundungsfunktion ROUND(). Der problematische Code von oben funktioniert dann problemlos mit folgender Umstellung:

ROUND((NVL(b.marktwertfondswhg, 0) - NVL(b.einstandswertfondswhg, 0)) / NVL(k.fondsvermoegen, 0), 28 )
Desweiteren gibt es auch Beschreibungen von Szenarien mit der gleichen Fehlermeldung, wenn Datumsfelder mit Jahreszahlen < 100 übermittelt werden. Unter OLE ist das Minimum für Datumsangaben der 1.1.100 (siehe hier).

Weblinks

Wo ist der Oracle Home Selector?!

Entwickler und DBAs, die in mehreren Umgebungen mit verschiedenen Oracle-Releases unterwegs sind, kennen das Problem: Zu einer alten Version muß man sich mit einem alten Client verbinden, zu einer neueren eben mit einem neueren Client.

Beispielsweise habe ich es mit einer Umgebung zu tun, in der der Oracle Client 8.1.7.4 installiert ist. Dieser ist zwar von Oracle auch für 10g Server zertifiziert, trotzdem gibt es Einschränkungen im Umgang mit neueren Datentypen.

Bis einschließlich Oracle 9iR2 gab es für solche parallelen Installationen den „Oracle Home Selector„, mit dem der jeweils gewünschte Client bzw. das benötigte Oracle Home-Verzeichnis ausgewählt werden konnte. Dieser ist in 10g aber verschwunden.

Was ist passiert? Der handliche „Oracle Home Selector“ wurde in 10g in den trägen „Oracle Universal Installer“ (OUI) integriert. Der benötigte Dialog ist gut versteckt worden:

OUI starten –> Button „Installierte Produkte“ –> Reiter „Umgebung“ –> Umgebung abhaken –> „Anwenden“.  Dr****tool

Button "Installierte Produkte" unten links

Oracle_Home im Reiter "Umgebung" auswählen

Alternativ gibt es ein kleines, freies Tool namens „Oracle Locator Express„, das wesentlich flinker arbeitet.

INSERT INTO T02MIAD_PRODUKT (
ERST_DAT, ERST_USER_ID, AEND_DAT,
AEND_USER_ID, AEND_FLAG, LOE_DAT,
LOE_USER_ID, U_VERSION, PROD_NR,
QUELLE_KZ, BEZEICHNUNG, KURZBEZEICHNUNG,
PRODUKT_WAEHRUNG, FONDS_ART_KZ, FONDS_TYP_KZ,
FONDS_GATTUNG_KZ, BONI_REGEL, AUSGABEAUFSCHLAG_PROZ,
VERTRIEBSPROVISION_P_A, ERTRAGSTAG, EMITTENT_KZ,
REGIE_PROV_EMPF, ISIN, FIRMEN_KZ,
DEKA_FONDS_KZ, PROD_NR_ORIG)
VALUES ( , , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, );