Zum Inhalt springen

dr.dimitri

Mitglieder
  • Gesamte Inhalte

    1276
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von dr.dimitri

  1. 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
  2. Und wieso verwendest Du jetzt Outer Joins? Dim
  3. 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
  4. 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
  5. Ca. 60 Sekunden Google bringen diese Erweiterung zum Vorschein. Dim
  6. 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
  7. 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
  8. Weil bei meiner Variante ein Index auf ab_datum verwendet werden kann und bei Deiner nicht. Dim
  9. dr.dimitri

    Sql-engines

    Was bitte ist die MERGE Engine? Ich kenne den MERGE Befehl aber das ist keine Engine. Dim
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. Das geht mittels SKIP. Dim
  17. 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.
  18. Weil es so in der Doku steht. Tabelle 8-6. Wenn Du keinen Wert angiebst wird eben der Defaultwert verwendet. Dim
  19. Fast richtig. Es sind 255 Zeichen. Aber das könnte das Problem sein. Dim
  20. Korrekt.
  21. Klar geht das. Mit dem Schlüsselwort FILLER Dim
  22. 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
  23. 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
  24. 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
  25. 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

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...