
dr.dimitri
Mitglieder-
Gesamte Inhalte
1276 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Alle Inhalte von dr.dimitri
-
Eventuell ja. InnoDB unterstützt keine Volltextsuche mit MATCH. Sofern die Anwendung den verwendet wars das. Des weiteren kann es durchaus sein, dass die Anwendung diverse Dinge nachprogrammiert die myisam fehlen (Transaktionssicherheit etc.) und die dann mit der InnoDB nicht mehr oder nicht mehr richtig funktionieren. Im schlimmsten Fall würde es erst mal augenscheinlich richtig laufen, aber im Laufe der Zeit zu Datenfehlern kommen. Sofern der Hersteller dein Vorgehen nicht offiziell unterstützt, machst Du das alles auf eigene Gefahr und im Blindflug. Insbesondere Versionsupdates, Patches etc. könnten dann nicht mehr funktionieren bzw. beim Einspielen Schäden verursachen. Dim
-
Und wieso verwendest Du jetzt Outer Joins? Dim
-
Mich würde mal interessieren, wozu der OP lauter Outer Joins macht. Da in der WHERE Bedingung nicht auf NULL abgefragt wird, und auch im Ergebnis keine NULL Werte sein können, da ansonstend er DISTINCT nicht eindampfen kann (NULL immer <> NULL) vermute ich mal, dass ein (deutlich schnellerer) Inner Join das gleiche Ergebnis liefern würde. Ob ich Group By oder Distinct verwende ist egal - die Datenbank muss die Ergebnismenge immer sortieren. Des weiteren wäre noch eine Definition von "flotter machen" wünschenswert. Millionen von Datensätzen durchzunudel dauert eben seine Zeit. Entweder ich schränke die zu durchsuchenden Sätze ein oder ich gebe der DB mehr Ressourcen, damit sie die Arbeit schneller erledigen kann - nachdem ich das SQL optimiert habe. Dim
-
Datei (backup.log) in Oracle-DB als BLOB (via Python)
dr.dimitri antwortete auf FisiMona's Thema in Datenbanken
Hi, ich kenn zwar wiederum Python nicht, aber die Schritte, die dazu in Java nötig sind kann ich Dir aufzeigen, evtl. geht das analog auch so in Phython: 1. Voraussetzung: Vorhandener Datensatz mit einem BLOB Feld das einen gültigen Lob Locator besitzt (also EMPTY_BLOB falls nichts drinnen ist, nicht aber NULL!). 2. Select ... for update und sich den Lob Locator in ein eentsprechendes Objekt laden. In Java würde man das über ein ResultSet machen. 3. Sich über die Methoden des Blob Objektes einen Outputstream holen und dort den Inhalt der datei reinschreiben. 4. Commit Vielleicht ist hier auch was interessantes für Dich dabei. Dim -
MySQL Trigger gegen doppelten Primärschlüssel
dr.dimitri antwortete auf Nahemoth's Thema in Datenbanken
Ca. 60 Sekunden Google bringen diese Erweiterung zum Vorschein. Dim -
MySQL Trigger gegen doppelten Primärschlüssel
dr.dimitri antwortete auf Nahemoth's Thema in Datenbanken
Eine ganz einfache Lösung: Lösch den Trigger und liefere aus Deinem Programm das Passwort bereits als MD5 Hash so wie es sich gehört. Trigger sind eben nicht dazu da fachliche Logik in der Datenbank abzulegen. Dim -
Oracle: Spalten ohne Tabelle. Wie/Wieso geht das?
dr.dimitri antwortete auf ladida's Thema in Datenbanken
Doch das geht durchaus. Zum einen sind die von Dir erwähnten Tabellen keine wirklichen Tabellen, sondern dynamische Views, die je nach Berechtigung andere Inhalte haben. Schau mal in der all_views, dann findest Du dort auch deine fehlenden Tabellen, die ebenfalls keine Tabellen sind sondern Views auf die Du Select Rechte bekommen hast. Dim -
Weil bei meiner Variante ein Index auf ab_datum verwendet werden kann und bei Deiner nicht. Dim
-
Was bitte ist die MERGE Engine? Ich kenne den MERGE Befehl aber das ist keine Engine. Dim
-
Du kannst hier einfach Datumsarethmetik verwenden und das dann in eine Betweenabfrage stellen: SELECT TO_CHAR (AB_DATUM, 'DD.MM.') AB_DATUM FROM t WHERE ab_datum BETWEEN TRUNC(ab_datum,'MM')+13 AND TRUNC(add_months(ab_datum,1),'MM')-1 ORDER BY AB_DATUM; Dim
-
Mag sein, dass mysql das vielleicht (noch) erlaubt, jede andere vernünftige Datenbank wird beim Versuch aus einem Row Level Trigger auf Tabelle A in Tabelle A zu selektieren einen Fehler werfen. Damit ist dieser Vorschlag nicht umsetzbar (im übrigen sollte keine fachliche Logik in einem Trigger abgelegt werden, auch wenn diverse Forenmitglieder dies aufgrund von Bücherwissen befürworten). Eine solche Löschlogik lässt sich entweder durch eine entsprechend programmierte Zugriffsschicht lösen, die dann aber auch mit Sperren arbeiten muss, damit man in einem Multiusersystem keinen fachlich inkonsistenten Zustand erhält, oder aber man hat einen Aufräumjob, der die im Laufe des Tages angefallenen Leichen zu definierten Zeiträumen entfernt. Dim
-
Es gibt diverse Anbieter im Internet (z.B. 1&1) die die eingegebene Adresse validieren. Und dabei wird selbstverständlich die Strasse von der Hausnummer getrennt. Gleiches gilt auch wenn ein Drop Down Menü angegeben wird und man den Straßennamen auswählen kann. Ich hoffe nicht, dass das irgend jemand anders macht. Dim
-
Hmm dann hab ich erstmal keine Ahnung. Kannst Du rausfinden welcher Datensatz fehlt? Wenn Du Datensätze aus der csv Datei entfernst, wird dann immer einer zu wenig geladen? Sprich bei nur einem Satz + Header wird kein Satz geladen? Vielleicht hat aber auch Corto |sX| wieder eine Idee. Dim
-
Mit dem sqlloader wirst Du das nicht lösen können. Entweder Du verwendest eine externe Tabelle und machst dann dort dein SQL oder Du lädst es in eine Zwischentabelle und machst dann deine Prüfung. Alternativ legst Du einen FK Constraint auf die übergeordnete Tabelle (so wie es sein sollte) stellst errors auf eine sehr hohe Zahl damit der Load nicht abbricht und Oracle lehnt die überzähligen Daten von sich aus ab. Dim
-
Passen denn die Daten die er geladen hat von der Struktur her oder lädt er nur bis zur 3. Spalte? Sind es wirklich 1425 Datensätze? Dim
-
Das geht mittels SKIP. Dim
-
Es geht hier um Speicher- und Performanceoptimierung. Der SQLLoader schreibt ja direkt in die Tabellen (bzw. der Serverteil des SQLLoader). Für den Ladevorgang wird intern entsprechender Speicher allokiert der dann pro einzulesenden Block belegt wird. Den Speicher immer wieder neu zu allokieren würde natürlich zeit erfordern. Noch interessanter wird es bein Direct Load hier wird der Block direkt fertig formatiert ans Ende der Tabelle gehängt. Der Loader ist eben für Performance optimiert (wir laden hier Millionen von Datensätzen in Minuten) und dafür muss muss man eben auf der "Bequemlichkeitsseite" ein paar Einschränkungen machen. Dim PS: Wenn man weiß, dass die Daten nur z.B. 10 Byte lang sind, kann man durch diese Angabe den Ladevorgang natürlich auch schneller machen.
-
Weil es so in der Doku steht. Tabelle 8-6. Wenn Du keinen Wert angiebst wird eben der Defaultwert verwendet. Dim
-
Fast richtig. Es sind 255 Zeichen. Aber das könnte das Problem sein. Dim
-
Korrekt.
-
Klar geht das. Mit dem Schlüsselwort FILLER Dim
-
Welchen Zeichensatz verwendet die Datenbank? Je nach Zeichensatz und Zeichen kann ein Zeichen auch bis zu 4 Byte lang sein. Dann ist es noch wichtig, ob die Spalte mit VARCHAR2(1000 Byte) oder VARCHAR2(1000 CHAR) definiert wurde. Je nachdem sind es 1000 Byte oder eben 1000 Zeichen - unabhängig vom Zeichensatz. Dim
-
Das ist keine Replikation, sondern eine verteilte Transaktion. Im Prinzip sind das zwei offenen Connections, über beide Connections werden die gleichen Daten erzeugt (da hast schon mal Schwierigkeiten mit deinem PK egal ob AutoInc oder Guid) bzw. geändert und dann mithilfe eines Transaktionskoordinators gleichzeitig committet. Damit hast Du aber noch lange nicht das Problem gelöst, was passiert wenn eine DB ausfällt und wie später die Daten wieder auf die ausgefallene DB gelangen schließelich will man ja wieder einen gleichen Stand haben. Ich fürchte es fehlt hier noch mehr. Nämlich auf der einen Seite eine genaue Angabe was man haben will. Auf zwei Datenbanken arbeiten ist keine Beschreibung, denn Ausfallzeiten werdet ihr immer haben wenn eine DB weg ist. Die Frage ist nur handelt es sich um Sekunden(bruchteile) oder dürfen es auch mal ein paar Minuten sein. Von Deiner Seite her kannst Du solche "Anforderungen" auch nicht kommentieren, weil Du leider selbst (noch) nicht weißt wovon die Rede ist. Ich an Deiner Stelle würde mich mit der MSSQL eigenen Replikationstechnik beschäftigen. Idealerweise einen Kurs dazu besuche wenn Du dich eingelesan hast und das passt. Ja ich weiß kostet Geld aber wenn dem AG seine Daten keine 2Tsd Euro wert sind, muss man sich auch überlegen ob sich der Aufwand überhaupt lohnt. Dim
-
Hi, das was Du möchtest nennt sich entweder Clustering, Replikation oder Standby Datenbank. Je nachdem was Du implementierst darsft Du keine Auto Inc Schlüssel verwenden, da Du ansonsten doppelte Einträge generieren kannst. In einem Cluster arbeiten mehrere Instancen auf mehreren Servern auf einer physikalischen Datenbank (die natürlich auch per RAID gespiegelt werden kann/sollte). Hier darfst Du Autoinc Schlüssel verwenden. Bei einer Replikation kann entweder nur auf einer DB gearbeitet werden und die Daten werden transaktional repliziert oder die User arbeiten auf beiden Datenbanken und es muss eine Konfliktlösung implementiert werden falls beide gleichzeitig die gleichen Datensätze ändern. Falls auf beiden Servern gleichzeitig arbeiten möchtest darfst Du keinen AutoInc verwenden. Bei einer Standby Datenbank werden die mitprotokollierten Änderungen gesichert und der anderen DB im Fehlerfall zur Verfügung gestellt. Auch hier kannst Du AutoInc verwenden. In allen Fällen ist es keine kleine Denkaufgabe, sondern ein durchaus komplexes Thema mit vielen Fallstricken und Fehlerquellen wenn man keine Erfahrung mit der Materie im allgemeinen und der verwendeten DB im speziellen hat. Um so etwas mit einem externen Programm zu erledigen musst Du zusätzlich dafür sorgen, dass die Änderungen auch wieder irgendwie auf die ausgefallenen DB zurückkommen und dich auch um andere Dinge Locking etc. kümmern. Dim
-
Naja ist etwas mittelaterlich, aber wenn einfach die Infrastruktur nicht vorhanden ist, oder dies nicht gewünscht wird, ist diese Art der asynchronen Verarbeitung wohl der einzig gangbare Weg. Was noch zu Berücksichtigen wäre: Sind die Kunden disjunkt oder kann ein Aussendienstler auch Daten von anderen zur gleichen Zeit bearbeiten? Dann musst Du irgendwie darauf achten, dass es keine Lost Updates gibt. Entweder es wird ein Sperrkennzeichen am Datensatz gesetzt, dass ein Kunde exportiert wurde und er kann erst erneut exportiert werden wenn es zurückgesetzt wurde (z.B: einspielen der geänderten Daten oder manuell durch den Sachbearbeiter). Eine andere Möglichkeit wäre es eine Konfliktbehandlung einzubauen, die dem Einspielendem Rückmeldung gibt, dass er im Begriff ist einen Datensatz zu überspielen, der von einem anderen geändert wurde. Falls die Kundenmengen hingegen diskjunkt sind ist es wie gesagt einfacher, dann musst nur die üblichen Plausibilisierungen durchführen und ggf. auf Fehler reagieren. Einen einfachen "Error" werden die Sachbearbeiter vermutlich nicht einfach aktzeptieren Wie auch immer: Das sind Punkte, die Du vor dem Entwicklungsbeginn unbedingt klären und schriftlich in einem kleinen Pflichtenheft festhalten solltest. Dim