Zum Inhalt springen

dr.dimitri

Mitglieder
  • Gesamte Inhalte

    1276
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von dr.dimitri

  1. Hi, Drive Backup gibt's für begrenzte Zeit kostenlos zum runterladen. Dim
  2. Naja die Begriffe UNDO und REDO deuten ja schon auf ein ganz bestimmtes Datenbanksystem hin... Eigentlich ist das gar nicht so schwer wenn man weiß was UNDO und REDO sind. UNDO: Hier werden Bevore Images abgelegt, um Lesekonsistenz und Wiederherstellbarkeit der Daten bei einem Rollback zu gewährleisten. Sprich wenn Du einen Update auf eine Zeile machst, dann kommt der ursprüngliche Wert ins UNDO, es wird vermerkt wo im UBDO er steht und der neue Wert überschreibt den alten in der eigentlichen Spalte . Im REDO werden alle Änderungen die an Daten vollzogen werden protokolliert. Dabei gibt es in der Datenbank Mechanismen, die sicherstellen, dass das auch wirklich funktioniert. Die genaue Funktionsweise des REDO Log würde hier den Rahmen sprengen. Wichtig ist aber noch, dass Änderungen die Du per Update durchführst nicht auch sofort auf die Platte geschrieben werden. Auch nach einem Commit ist es durchaus üblich, dass die eigentlichen Daten noch nicht auf die Platte geschrieben wurden. Umgekehrt übrigends genaus so. Es ist durchaus normal, dass uncomittete Daten bereits auf der Platte landen. Nur im REDO steht wirklich was Sache ist. Jetzt zum eigentlichen Problem: LSN | TA | PageID | Undo | Redo | PrevLSN 1 | T1 | BOT | | | 0 2 | T1 | P2 | A | B | 1 3 | T1 | P3 | C | D | 2 4 5 6 | T1 | commit | | | 3 Die Spalten LSN und TA ignorieren wir einfach keine Ahnung was das bedeutet aber ich geh mal davon aus, dass das bestimmt auch in deinen Unterlagen steht... Schauen wir also auf REDO und UNDO. Im UNDO steht was vorher in der Spalte stand, im REDO steht was per UPDATE hineingeschrieben wurde. Nachdem auch ein Commit im log steht wurde die Transaktion erfolgreich beendet. Die Datenbank würde also lediglich dafür sorgen, dass die Änderungen die im REDO stehen auch wie im normalen Ablauf persistiert werden. P2 würde nach dem Recovery von A nach B geändert werden und P3 bliebe unverändert, da hier die Änderung bereits vor dem Absturz persitiert wurde. Wenn man es genau nimmt, fährt Oracle - ich meine das unbekannte Datenbanksystem - die komplette Transaktion seit dem letzten Checkpoint noch einmal durch (auch Änderungen im UNDO werden übrigends über das REDO abgesichert) und macht anschließend, wie in diesem Fall einen COMMIT oder falls die Transaktion unvollständig war, einen ROLLBACK. Aber ich denke mal, dass übersteigt die Fragestellung. Dim
  3. Du musst überhaupt nichts implemetieren. Die Datumsfunktion (und noch viele, viele andere) sind bereits fix und fertig in der Datenbank dabei. Du musst sie einfach nur benutzen wie Du auch eine fertige C# Funktion benutzt. Schau einfach in der Doku nach wie die Datumsfunktion genau heißt und binde sie dann so in deinen INSERT ein wie ich es exemplarisch gemacht habe - fertig. Dim
  4. Deshalb solltest Du ja auch die Funktion der Datenbank hineinschreiben. Mein Beispiel würde die Serverzeit einfügen. Ja manche machen es sich eben gerne etwas schwerer. Dim
  5. Du kannst doch einfach den Datumsaufruf direkt in den Insert schreiben. Mal das oracle Äquivalent dazu: insert into tabelle (col1,col2,col3) values('Wert1','Wert2',sysdate) Dim
  6. Wieso? Du schreibst auch nur die Spaltennamen ins UPDATE Statement und lässt die Datenbank das ganze erledigen. Wenn Du Oracle 11 verwendest kannst Du auch virtuelle Spalten anlegen, die dann deine Berechnung en beinhalten. Dim
  7. Hi, die Prüfung auf Eindeutigkeit ist nicht ganz trivial, vor allem beim SQL Loader, der ja Blockweise arbeitet bzw. falls Du einen Direct Load machst (Direct=TRUE) noch eine weitere Komponente dazu kommt. Daher sind die Sätze die dir rausfliegen unterschiedlich. Gibt es neben dem PK noch einen weiteren Unique Constraint auf der Tabelle? Wird die Tabelle parallel geändert während Du Daten lädst? Verwendest Du einen Direct Load? Dim
  8. Was Du meinen? :confused: Dim
  9. Also wir lassen unsere Guid von der DB erzeugen Dim
  10. Weil Daten im allgemeinen eine recht lange Lebensdauer haben und sich die Kundennummer ändern kann. Z.B. wenn neue fachliche Anforderungen kommen, es eine Firmenfusion gibt etc. etc. In diesen Fällen kann sich die Kdnr ändern oder sie wird in ein neues Feld Kdnralt migriert und der Kunde bekommt eine neue Kdnr. Hast Du darauf jetzt deine RI abgebildet hast erstmal ein Problem und deutlich mehr Migrationsaufwand. Dahingegen ist das Vergeben eines rein technisches PKs vom Aufwand und von den Kosten her gesehen praktisch 0. Ein String benötigt mehr Speicherplatz als ein Integer. Je nach Zeichensatz ein, zwei oder auch mehr Byte pro Zeichen. Daher muss die DB mehr lesen um die gleiche Anzahl von Datensätzen in den Speicher zu laden - von daher hast Du theoretisch also recht. Wir verwenden für unsere PKs grundsätzlich 32-stellige GUIDs (ER-Modell hat ca. 120 Tabellen + diverse technische Zusatztabellen) und hatten diesbezüglich nie Performanceprobleme - die kamen zu 100% aus anderen Ecken. Bei dieser Anzahl von Tabellen hast ganz andere Probleme Dim
  11. Hi, eine Kundennummer ist ein fachlicher Wert und daher als PK denkbar ungeeignet. Des weiteren haben Kundennummern die ich so kenne meistens eine feste Länge wobei die führenden Stellen ggf. mit Nullen gefüllt sind also z.B. 00034566 Das wäre mit einem numerischen Wert nicht machbar. Ob Du einen numerischen oder einen varchar Wert verwendest hängt in aller erster Linie also von deinen fachlichen Anforderungen ab. Als PK würde ich auf jeden Fall einen rein technischen Schlüssel wählen, der evtl. auch mit der Kundennummer identisch sein kann oder diese als Bestandteil enthalten kann. Bei einem alphanumerischen Wert bist Du auf jeden Fall flexibler was den Inhalt betrifft. Dim
  12. Privat kann ich machen was ich will. Solange ich das nicht vertreibe (ob kommerziell oder kostenlos) darf ich Programme schreiben, die so ähnlich oder unähnlich sind wie es eben sind (solange ich dazu keine bereits vorhandenen Urheberrechte verletze). Da der OP bisher nicht behauptet hat, dass er so etwas vor hat oder hatte gehe ich mal davon aus, dass er einfach aus Spass an der Freude daran gearbeitet hat und sich nebenbei für den AG kostenlos weitergebildet hat. Meiner Meinung nach ist das was der AG hier betrieben hat Diebstahl. Kein AG hat das Recht irgendwelche Programme die ich in der Freizeit mache (mit den obigen Prämissen) einfach zu seinem uneingeschränkten Eigentum zu erklären, umzuverpacken und zu verkaufen. Er kann (versuchen) die Verbreitung verbieten aber nicht mir nichts dir nichts sein Etiket drauf kleben und so tun als ob das Urheberrecht nie existiert hat. Dim
  13. dr.dimitri

    PL/SQL Problem

    Das würde nichts bringen, denn da sind in etwa so viele Fehler drinnen wie das Programm Zeilen hat (ich hab überschlagsmäßig mal 10 technische Fehler gezählt) Eigentlich ist das eher als Pseudocode zu sehen, denn es hat den Anschein, als ob Du mehrere Programmiersprachen hier miteinander vermischt. Wenn ich das richtig interpretiere, dann hast Du wohl eine Tabelle, die eine Baumstruktur abbildet und die Du rekursiv durchlaufen möchtest. Dazu brauchst Du in Oracle dazu keinen PL/SQL Code sondern kannst das connect by Konstrukt verwenden. Dim [EDIT]Moment: Du verwendest kein Oracle / PL/SQL sondern PostgreSQL. Das erklärt das natürlich...[/EDIT]
  14. Und was hast Du dann rausgehandelt? Prozentuale Beteiligung am Gewinn? Eine deutliche Gehaltserhöhung? Eine angemessene Einmalbezahlung? Es gibt viele Möglichkeiten für seine (private) Arbeit entlohnt zu werden auch ohne ein eigenes Gewerbe zu eröffnen. Dim
  15. Ich würd mal sagen Unterschiede gibt es hunderte, aber für dich sind die Unterschiede eben so, wie Du sie in deinem Projekt erfahren hast. Und wenn es dann nur die unterschiedliche Syntax bei der Datumsbehandlung war - um so besser. Dim
  16. Welche Datenbank verwendest Du? [Edit]Ups grade gesehen. Informix[/edit]
  17. Hi, eine andere Möglichkeit wäre, dass Du danach einfach das ganze Schema neu kompilierst: exec dbms_utility.compile_schema('Dein_schema'); Dim
  18. Und wie startest Du die Instancen? Lass dir doch nicht alles aus der Nase ziehen. Dim
  19. Bist dir da sicher? Ich dachte immer ein Dienst ein Port. Allerdings bezweiflich ich, dass jemand weiß auf welchem Port eine Instance horcht (der ist nämlich nicht festgelegt) Der allseits bekannte Port 1521 ist der Port des Listeners und von dem kann natürlich nur jeweils einer gestartet werden wenn beide auf den gleichen port "lauschen". Allerdings ist auch nur ein Listener nötig um n Instancen zu versorgen. Wenn Du einfach mal eine cmd öffnest (sofern dein User in der ora_dba Gruppe ist) und folgendes eingiebst: set oracle_sid=deine_instance_n1 sqlplus / as sysdba startup exit Und das gleiche nochmal für die andere Instance. Was passiert da? Nach ein, zwei Minuten mal ein lsnrctl status Dim
  20. dr.dimitri

    Nested Loop

    Hmm die Frage ist irgendwie komplett sinnfrei. Ein Nested Loop ist eine Methode zwei Datenmengen abzugleichen, in dem ich beginne die kleinere Datenmenge von oben zu lesen und für jeden Datensatz nachsehe ob es dafür einen Treffer in der anderen Menge gibt. Nachteil ist, dass es bei größeren Datenbeständen vergleichsweise lange dauert bis ich alle Treffer ermittelt habe. Vorteil ist jedoch, dass ich die ersten Ergebnisse dafür auch sehr schnell habe, weil ich z.B. im Vergleich zum Hash Join oder einem Merge Join nicht vorher sortieren muss. Bei Anwendungen die dem Anwender eine Suchfunktion anbieten werden sich also vermehrt Nested Loops finden, damit sehr schnell ein Ergebnis präsentiert werden kann (und auf Seite 135 der Liste sieht eh niemand mehr nach). In welchem Zusammenhang das mit der Partitionierung von Tabellen zu sehen ist erschließt sich mir daher nicht ganz. Bei der Partitionierung wird eine Tabelle in mehrere pysikatisch Partitionen aufgeteilt, die logisch nach außen hin wie eine normale Tabelle fungieren. Geht die Aufgabe vielleicht noch weiter oder steht vorher noch etwas wichtiges das Du nicht gepostet hast? Dim
  21. Meiner Meinung nach der Fachinformatiker AE. Gute Entwickler sind immer gefragt. Damit hast nicht nur die Möglichkeit als "normaler" Webentwickler Fuß zu fassen, sondern auch als (sehr gesucht, da immer seltener) Cobol Entwickler, Datenbankexperte oder Architekt (wobe der Begriff zugegebenermaßen etwas schammig ist). Natürlich kommts auch auf deine persönlichen Präferenzen an. Wenn Du dich gerne mit der Administration, Einrichtung und der Planung von Infrastrukturen beschäftigst, dann wäre die Fachrichtung Systemintegration sicherlich besser geeignet. Last but not least: Such dir einen Ausbildungsbetrieb und keine mach nicht die Fortbildungsmaßnahme der Arge. Wenn's sein muss auch mit (temporärem?) Wohnortswechsel. Die Arge übernimmt dich nicht. Dim
  22. Meld dich mal wieder wenn Du "Offshore" bist und erzähl mal wie's dir so ergangen ist. Ist sicherlich auch für viele andere interessant - ich schließ mich da nicht aus Dim
  23. Das übliche gebrabbel von Leuten die meinen die Weisheit mit Löffeln gefressen zu haben und beleidigt sind wenn nicht alles nach ihrer Pfeife tanzt. Einfach ignorieren und viel Erfolg bei der Jobsuche :-) Dim
  24. Wenn man statt dessen einen LineNumberReader verwendet kann man mittels setLineNumber direkt zur gewünschten Zeile "vorspulen". Dim
  25. Die erste Möglichkeit wäre, dass Du UNION durch UNION ALL ersetzt, das ganze als Subselect schreibst und dann im übergeordneten SELECT per DISTINCT einmalig eindampfst. Momentan machst Du das nämlich 4 mal. 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...