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

Advertisements

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 ( , , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, );

„\Registry Backup“ – Bug in Windows 2000

Diesen Artikel vom 8.1.2002 habe ich von meiner alten Homepage extrahiert, da immer noch Nachfrage nach dem Inhalt besteht und ich denke, daß der Artikel hier nun besser aufgehoben ist.

Worum geht es?

Bei der (De-)Installation von Oracle-Produkten ab 8i kann es zur Korrumpierung der Registry von Windows 2000 kommen.
Dies äußert sich durch einen Registry-Eintrag, der sich nicht mehr löschen lässt und in der Regel den Namen „\Registry Backup“ trägt. Ein Säubern der Registry – z.B. für eine Neuinstallation – wird damit unmöglich.

Beschreibung des Problems

Bei mir fand sich dieser Bug in folgendem Teilbaum der Registry:

  \HKEY_LOCAL_MACHINE
  |--\SOFTWARE
  |----\ORACLE
  |------\ALL_HOMES
  |--------\ID1
  |----------\\Registry Backup

Sobald dieser Eintrag mit dem führenden „\“ vorhanden ist, läßt sich der gesamte Teilbaum nicht mehr löschen. Versucht man, den Eintrag „\Registry Backup“ einzeln zu löschen, erhält man die Fehlermeldung:

Der ausgewählte Schlüssel kann nicht gelöscht werden.
Auf den gewählten Schlüssel oder einen seiner Unterschlüssel kann nicht zugegriffen werden.

Bzw. in Englisch:

Registry Editor could not delete the key currently selected. The key, or one of its subkeys is not accessible.

Lösung des Problems

Die Lösung zu diesem Problem wird in der Knowledge Base von Microsoft beschrieben. Es handelt sich dabei um einen bekannten Bug, der durch das Service Pack 2 behoben werden kann: http://support.microsoft.com/support/kb/articles/q296/7/33.asp?id=Q296733&sd=GN&fr=0&ln=EN-US
Das Windows 2000 Service Pack 2 findet sich hier.

Nach der Installation des Service Packs kann der fehlerhafte Teilschlüssel gelöscht werden.