Devs on Tape - Caro und Martin Bach heute u.A. über CI/CD in der Oracle Datenbank
Shownotes
Könnt ihr euch vorstellen, dass die Verlagerung der Logik direkt in die Datenbank eure Entwicklungsprozesse revolutionieren kann? Heute haben wir das Vergnügen, Martin wieder bei uns willkommen zu heißen, um über die Vorteile von SmartDB und Continuous Integration/Continuous Deployment (CI/CD) zu sprechen. Martin bringt uns seine wertvollen Erfahrungen aus der Zeit mit Oracle Forms und PLSQL näher und erklärt, wie dieser innovative Ansatz nicht nur technische, sondern auch kulturelle Aspekte der Softwareentwicklung positiv beeinflusst. Wir tauchen tief in die historischen Perspektiven ein und diskutieren, wie SmartDB die Effizienz und Nähe der Datenverarbeitung zur Datenquelle verbessert.
Linkliste der erwähnten Bücher und Quellen:
- Emily Freeman (DevOps for Dummies): hier
- Cary Millsap & Jeff Holt (Optimizing Oracle Performance): hier
- Nicole Forsgren & Jez Humble & Gene Kim (Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations): hier
- Samuel Nitsche & Jacek Gebal & Connor McDonald (Testing with utPLSQL): hier
- Tech Brief (Implementing DevOps principles with Oracle Database): hier
- Liquibase: hier
Martin auf LinkedIn: hier - X: hier
Kai Donato - kai.donato@hyand.com - X: @_KaiDonato
Carolin Krützmann - carolin.kruetzmann@apex-in-hamburg.com - X: @CaroHagi
Transkript anzeigen
00:00:14: Caro: Ja, hallo, und herzlich willkommen bei
00:00:16: Caro: einer neuen Folge DevSound Tape.
00:00:18: Caro: Ich freue mich sehr, dass wir unseren Gast
00:00:20: Caro: jetzt das zweite Mal begrüßen können und
00:00:22: Caro: auch deutlich früher, als vielleicht der
00:00:24: Caro: eine oder andere gedacht hat.
00:00:26: Caro: Ja, hallo, martin, erst mal.
00:00:28: Martin: Ja, hi, danke, schon wieder bei euch zu
00:00:31: Martin: Gast sein da.
00:00:32: Caro: Ja, ich weiß gar nicht, glaube ich zwei
00:00:34: Caro: Wochen her gefühlt, oder drei.
00:00:36: Martin: Gefühlt war es gestern.
00:00:38: Caro: Ja, gut, okay, ja, das stimmt Ja, aber ich
00:00:42: Caro: freue mich sehr, dass wir uns heute über
00:00:44: Caro: eins sche, uns heute über ein gemeinsames
00:00:46: Caro: Lieblingsthema unterhalten können,
00:00:48: Caro: zumindest einen Teil davon.
00:00:50: Caro: Mit CICD habe ich selber noch nicht so viel
00:00:51: Caro: gemacht, aber da werden wir dann ja
00:00:53: Caro: einsteigen.
00:00:53: Caro: Du wirst ja auch noch einiges erklären,
00:00:56: Caro: denke ich.
00:01:00: Caro: Wer Martin jetzt so im Detail ist, sag ich
00:01:02: Caro: mal, dann könnt ihr euch gerne die letzte
00:01:04: Caro: Folge anhören von ihm.
00:01:05: Caro: Da geht es auch um JavaScript, weil du bist
00:01:07: Caro: ja Product Manager für JavaScript in der
00:01:09: Caro: Datenbank bei Oracle, und da sprechen wir.
00:01:12: Caro: In der letzten Folge haben wir mit dir ganz,
00:01:14: Caro: ganz viel über das JavaScript gesprochen,
00:01:16: Caro: wie man das so umsetzen kann, wie das ist,
00:01:18: Caro: wie es gelaufen ist, wie deine
00:01:19: Caro: Vergangenheit war, wie du dahin gekommen
00:01:21: Caro: bist, wo du jetzt bist, und über dich
00:01:23: Caro: persönlich war, wie du da hingekommen bist,
00:01:25: Caro: wo du jetzt bist, und über dich persönlich.
00:01:27: Caro: Und heute genau sprechen wir noch über eine
00:01:34: Caro: andere Facette, nämlich SmartDB und CICD
00:01:37: Caro: Top.
00:01:37: Caro: Sehr gut, ach, sehr schön.
00:01:40: Caro: Okay, ich bin gespannt, wo uns das hinführt,
00:01:43: Caro: und zwar okay, fangen wir an SmartDB.
00:02:17: Martin: Also SmartDB ist ja der Ansatz, dass wir
00:02:18: Martin: die Logik in die Datenbank packen.
00:02:19: Martin: Es gibt ja immer diese einmal so ein
00:02:20: Martin: bisschen ausführen noch, was für dich ja in
00:02:21: Martin: dem Sinne auch SmartDB heißt und was für
00:02:22: Martin: dich die Vorteile sind.
00:02:23: Martin: Das ist tatsächlich heutzutage fast weniger
00:02:24: Martin: eine technische Frage als eine kulturelle
00:02:25: Martin: Frage.
00:02:25: Martin: Also von der Frage her wie ist die
00:02:27: Martin: Organisationskultur geschaffen, wie will
00:02:29: Martin: man entwickeln?
00:02:31: Martin: Als ich angefangen habe, mit Datenbanken zu
00:02:33: Martin: entwickeln, was ja jetzt auch schon ein
00:02:34: Martin: bisschen länger her ist, in meinem ersten
00:02:37: Martin: Job zum Beispiel, hatten wir eine Anwendung,
00:02:39: Martin: die war Forms-basiert, also Forms-Frontend,
00:02:42: Martin: und alles, was an Logik war, war in PLSQL
00:02:46: Martin: in der Datenbank selber gespeichert.
00:02:48: Martin: Und ich, frisch von der Universität
00:02:50: Martin: gekommen, dachte mir hey, so habe ich das
00:02:52: Martin: gehört, so soll das sein, und das hat
00:02:55: Martin: tatsächlich super funktioniert.
00:02:57: Martin: Aber die hatten halt auch eine ganze Herde
00:02:59: Martin: von sehr guten PLSQL-Entwicklern, und von
00:03:03: Martin: daher hat das wirklich super funktioniert.
00:03:05: Martin: Und das damals war das Deployment-Modell,
00:03:07: Martin: eben dass man Forms-Client hat, entweder
00:03:09: Martin: auf seiner eigenen Workstation, oder damals
00:03:12: Martin: gab es noch so Remote-Desktop Lösungen von
00:03:14: Martin: Citrix zum Beispiel.
00:03:16: Martin: Die gibt es, glaube ich, heute auch noch,
00:03:18: Martin: wo man einfach so eine Citrix-Umgebung
00:03:20: Martin: aufgebaut hat, und die User verbinden sich
00:03:22: Martin: dagegen, und dann haben die dann das
00:03:24: Martin: Forms-Interface und arbeiten interaktiv mit
00:03:27: Martin: der Datenbank.
00:03:28: Martin: Aber wenn es um irgendwelches Verarbeiten
00:03:30: Martin: von Daten ging, dann hat man ganz einfach
00:03:32: Martin: einen Prozess auf dem Datenbank-Server
00:03:33: Martin: angestoßen und dann froh die Forms-Maske so
00:03:36: Martin: ein bisschen ein, bis das dann fertig war.
00:03:39: Martin: Aber das hat tatsächlich top funktioniert,
00:03:43: Martin: weil eben die Verarbeitung der Daten dort
00:03:46: Martin: stattfand, wo die Daten auch waren.
00:03:49: Martin: Und das waren damals schon richtig große
00:03:50: Martin: Kisten, so Sun V490 oder E10K, also so
00:03:57: Martin: Anfang der 2000er, das, was man als richtig
00:04:00: Martin: große Kiste bezeichnet hat, mit ganz viel
00:04:02: Martin: Arbeitsspeicher und vielen Prozessoren.
00:04:03: Martin: Das war toll, und das hat tatsächlich
00:04:08: Martin: wirklich viel besser funktioniert als
00:04:09: Martin: andere Ansätze, wo man dann halt die ganzen
00:04:11: Martin: Datensätze immer einzeln, stück für Stück
00:04:13: Martin: in die Richtung Datenbank geschoben hat,
00:04:15: Martin: was getan hat und wieder zurückbekommen hat.
00:04:17: Martin: Und ich mag diesen Ansatz einfach, weil es
00:04:20: Martin: ist einfach sehr viel effizienter, als das
00:04:24: Martin: einfach mit ganz, ganz vielen REST-Calls
00:04:26: Martin: heutzutage zu machen.
00:04:29: Martin: Und damals war es eine ganz andere Frage.
00:04:31: Martin: Ich glaube, heute ist es sogar tatsächlich
00:04:33: Martin: eine Frage was kostet mich das?
00:04:34: Martin: Weil Netzwerk Egress und Ingress kostet ja
00:04:38: Martin: je nachdem.
00:04:38: Martin: Wenn man es in der Cloud haustet, seine
00:04:40: Martin: Datenbank, seine Anwendung, dann ist es
00:04:42: Martin: tatsächlich auch eine Kostenfrage.
00:04:46: Martin: Und was halt auch gerne unterschätzt wird,
00:04:47: Martin: ist eben die Fähigkeit von modernen
00:04:48: Martin: Datenbanken, zugriffe zu protokollieren.
00:04:51: Martin: Also, ich habe auch Fine-Grade Access
00:04:53: Martin: Control in Oracle, ich habe Virtual Private
00:04:54: Martin: Database, ich kann über Auditing kann ich
00:04:58: Martin: protokollieren, wer auf welche Daten
00:04:59: Martin: zugegriffen hat, und all sowas.
00:05:01: Martin: Und das ist halt smart, das finde ich halt
00:05:04: Martin: wirklich gut.
00:05:06: Martin: Aber es ist eben wie du sagtest, man
00:05:09: Martin: braucht Entwickler, die sich mit dem Thema
00:05:12: Martin: auskennen, und deswegen wieder jetzt um die
00:05:15: Martin: Brücke zu schlagen.
00:05:16: Martin: Zum ersten Punkt ist es so eine kulturelle
00:05:17: Martin: Frage, wie viele Entwickler, die wirklich
00:05:21: Martin: gut sind in PS Sequel, gibt es?
00:05:23: Martin: Und ganz wichtig ist die Frage wenn ich das
00:05:27: Martin: jetzt so machen will, wird das dann nicht
00:05:29: Martin: zu meinem Bottleneck, das heißt, die PS
00:05:31: Martin: Sequel Entwickler, die sind halt nicht so
00:05:33: Martin: viel in der Anzahl, und die müssen jetzt
00:05:35: Martin: tausend verschiedene Sachen gleichzeitig
00:05:36: Martin: machen, sondern gibt es ja immer die engen
00:05:38: Martin: Deadlines.
00:05:39: Martin: Und ja, dann kann ich halt schon gut
00:05:41: Martin: verstehen, dass man dann auch sagt, hier
00:05:43: Martin: bei den Content Leuten, dann kann ich halt
00:05:44: Martin: schon gut verstehen, dass man dann auch
00:05:45: Martin: sagt hier bei den Content-Leuten, das
00:05:46: Martin: dauert mir alles zu lange, bis das gemacht
00:05:49: Martin: ist, dann schreibe ich das eben selber, und
00:05:51: Martin: ich glaube, das ist so das große
00:05:51: Martin: Spannungsfeld heutzutage im Bereich
00:05:52: Martin: Enterprise-Computer.
00:05:53: Martin: Also, wenn es jetzt um Microservices geht,
00:05:55: Martin: ist das nochmal eine ganz andere Geschichte,
00:05:58: Martin: aber das ist so.
00:05:59: Caro: SmartDB, wie ich es sehe, Ich greife jetzt
00:06:03: Caro: nochmal ein bisschen.
00:06:06: Caro: Also ich würde gerne nochmal tiefer in das
00:06:07: Caro: SmartDB-Thema reingehen, weil das ja auch
00:06:07: Caro: von der Entwicklungsseite her auch noch im
00:06:10: Caro: Detail, sag ich mal, ganz interessant sein
00:06:12: Caro: könnte.
00:06:13: Caro: Von dem, was du eben beschrieben hast.
00:06:16: Caro: Wenn wir die Logik in der Datenbank haben,
00:06:18: Caro: hast du ja schon erzählt von den
00:06:19: Caro: Entwicklern, die das Bordelneck dann
00:06:21: Caro: vielleicht sind, also von den
00:06:22: Caro: Datenbankentwicklern, weil die ja einfach
00:06:24: Caro: auch von der Menge her, wenn man ganz
00:06:25: Caro: realistisch ist, einfach deutlich geringer
00:06:27: Caro: ist und jetzt gerade auch im Sinne, ich sag
00:06:30: Caro: mal, des demografischen Wandels vielleicht
00:06:32: Caro: auch in den nächsten Jahrzehnten nicht mehr
00:06:35: Caro: so viele nachkommen viele Unternehmen, ob
00:06:41: Caro: die ich sag mal allgemein, neben dem, dass
00:06:45: Caro: sie von Oracle vielleicht allgemein weg
00:06:47: Caro: wollen, warum auch immer, lizenzkosten, was
00:06:49: Caro: weiß ich aber auch eben, dass vielleicht
00:06:51: Caro: nicht mehr so viele Entwickler nachkommen,
00:06:53: Caro: dass dann die Unternehmen vielleicht den
00:06:57: Caro: Vorteil darin sehen, die Logik in der
00:06:59: Caro: Applikationsebene, also in einer anderen
00:07:02: Caro: Sprache zu haben, abgelöst von einer
00:07:03: Caro: Datenbank, dass sie dann die Datenbank
00:07:05: Caro: potenziell austauschen könnten.
00:07:12: Martin: Wie siehst du das?
00:07:13: Martin: Hast du da irgendwie eine Sicht zu oder
00:07:15: Martin: eine Meinung?
00:07:15: Martin: Ja, ich glaube, da gibt es zwei Dinge, die
00:07:17: Martin: mir jetzt so spontan einfallen.
00:07:21: Martin: Zum Ersten ich habe jetzt jede Menge
00:07:23: Martin: PLC-Goal erwähnt, und das ist ja auch schon
00:07:24: Martin: der Dinge bis 19c, und mit 21c kam ja dann
00:07:25: Martin: auch jetzt mein Lieblingsthema.
00:07:26: Martin: Bin da auch komplett vor eingenommen.
00:07:30: Martin: Nein, was ich sagen wollte ist das ist
00:07:32: Martin: erkannt worden, klar.
00:07:33: Martin: Also PS-Sequel-Entwickler sind halt nicht
00:07:36: Martin: so wahnsinnig zahlreich, verglichen mit
00:07:38: Martin: Entwicklern von anderen Sprachen, und das
00:07:40: Martin: ist eben der Grund, warum man bei Oracle
00:07:42: Martin: wohl zum Schluss gekommen ist.
00:07:44: Martin: Wir müssen einfach mehr Sprachen anbieten,
00:07:48: Martin: um die Leute da abzuholen, wo sie sind.
00:07:51: Martin: Und JavaScript ist ein guter Anfang, finde
00:07:53: Martin: ich, weil JavaScript-Entwickler gibt es
00:07:55: Martin: sehr viele, javascript ist unfassbar
00:07:57: Martin: populär, dann zu sagen hey, anstatt euren
00:08:04: Martin: Code jetzt in React-Server-Komponenten zu
00:08:07: Martin: schreiben oder in Angular oder in Vue oder
00:08:10: Martin: was auch immer, wo ihr dann potenziell
00:08:12: Martin: viele Roundtrips.
00:08:13: Martin: Also meiner Meinung nach sollte man
00:08:15: Martin: tatsächlich drüber nachdenken, die Logik in
00:08:28: Martin: die Datenbank zu packen.
00:08:29: Martin: Und wenn man das in anderen Sprachen machen
00:08:31: Martin: kann als nur PS, sql oder wie ich meine,
00:08:33: Martin: das ist das selbe Problem, was andere
00:08:35: Martin: Datenbankhersteller haben mit ihrer
00:08:37: Martin: prozeduralen Erweiterung von SQL, gibt es
00:08:40: Martin: halt weniger Leute am Markt, die das können.
00:08:58: Martin: Und das ist das Erste.
00:08:58: Martin: Und das zweite Thema ist eben will ich
00:08:59: Martin: meinen Code aus der Datenbank rausziehen,
00:09:00: Martin: um möglichst neutral zu sein, um dann
00:09:01: Martin: notwendiger und notfalls auch die Datenbank
00:09:02: Martin: ersetzen zu können.
00:09:02: Martin: Jetzt, nur im Enterprise-Bereich Basierend
00:09:03: Martin: auf meiner Erfahrung ist das sehr viel
00:09:04: Martin: komplizierter, als man sich das vorstellt,
00:09:08: Martin: und Systeme, die plattformneutral
00:09:10: Martin: geschrieben worden sind, gibt es
00:09:12: Martin: tatsächlich Ein guter Freund von mir, der
00:09:15: Martin: hat dann gesagt it runs equally bad on any
00:09:18: Martin: platform.
00:09:20: Martin: Ja, da gibt es wenigstens keinen klaren
00:09:22: Martin: Sieger.
00:09:23: Martin: Aber wenn man plattformneutral entwickelt,
00:09:26: Martin: dann verfängt man meiner Meinung nach das
00:09:28: Martin: Potenzial der Lösung, auf der man gerade
00:09:30: Martin: ist.
00:09:30: Martin: Und das ist egal, auf welcher Datenbank man
00:09:32: Martin: ist.
00:09:32: Martin: Jede Datenbank hat ihre Stärken, genau wie
00:09:35: Martin: jede Programmiersprache ihre Stärken hat.
00:09:37: Martin: Und wenn man versucht, in JavaScript so zu
00:09:39: Martin: programmieren wie in COBOL jetzt nur um
00:09:41: Martin: zwei extreme Beispiele zu finden, dann wird
00:09:44: Martin: das so nicht funktionieren.
00:09:45: Martin: Man muss tatsächlich diese Lösung, für die
00:09:48: Martin: man sich entschieden hat, hoffentlich nach
00:09:51: Martin: reichlich guter Auswahl, damit es auch
00:09:55: Martin: funktioniert, sollte man tatsächlich aber
00:09:57: Martin: auch die Stärken und Schwächen kennen und
00:09:59: Martin: auf die Stärken hin optimieren.
00:10:01: Martin: Und die Schwächen auch wenn das jetzt
00:10:06: Martin: vielleicht einfacher ist, wenn man den Code
00:10:07: Martin: 1 zu 1 portiert, die sollte man tun, nicht
00:10:08: Martin: vermeiden.
00:10:09: Martin: Und da gibt es jede Menge Beispiele.
00:10:10: Martin: Da gibt es zum Beispiel was, wo eine
00:10:12: Martin: Anwendung auf Oracle montiert worden ist,
00:10:14: Martin: und die hatte ich mal supported vor vielen
00:10:15: Martin: Jahren, und das war einfach eine super
00:10:18: Martin: einfache Datenbank, von der das kam, und
00:10:19: Martin: das war alles dynamische SQL, und das ist
00:10:23: Martin: halt.
00:10:23: Martin: Für Oracle ist das nicht so ideal.
00:10:25: Martin: Was wir gemacht haben, ist, wir haben das
00:10:27: Martin: dynamische Sequel ganz einfach
00:10:30: Martin: umgeschrieben, weil es gab überhaupt gar
00:10:32: Martin: keinen Grund, das komplett dynamisch Sequel
00:10:33: Martin: zu machen, wie gesagt nutze die Stärken
00:10:36: Martin: deines Systems.
00:10:36: Martin: Wir haben dann ganz einfach den Code
00:10:38: Martin: umgeschrieben von Execute Immediate, was da
00:10:41: Martin: zigtausend Mal im Code war, auf richtige
00:10:45: Martin: Cursor, und auf einmal.
00:10:47: Martin: Ja, wie bei so vielen Dingen im Leben,
00:10:49: Martin: sobald man es richtig macht, funktioniert
00:10:51: Martin: das auch.
00:10:52: Martin: Aber das sind halt diese
00:10:54: Martin: Portierungsgeschichten, wo es halt
00:10:56: Martin: schwierig ist, abstrakt zu schreiben.
00:10:59: Martin: Das bringt meiner Meinung nach relativ
00:11:00: Martin: wenig.
00:11:02: Caro: Ja, und man verliert dann vielleicht auch
00:11:05: Caro: den Vorteil seiner Technologie, die man ja
00:11:08: Caro: auch hat, bezahlt, nutzen möchte, wie auch
00:11:11: Caro: immer administriert, dass man die nutzen
00:11:14: Caro: kann.
00:11:15: Caro: Das gilt ja eigentlich für alle Sprachen.
00:11:18: Caro: Also, kenne die Technologien, die du
00:11:19: Caro: benutzt, und nutze deren Vorteile.
00:11:23: Martin: Ja, du bezahlst ja auch dafür.
00:11:24: Martin: von daher, Warum sollte ich eine
00:11:28: Martin: Enterprise-Datenbank so verwenden wie
00:11:30: Martin: SQLite, Ohne auf SQLite herumhacken zu
00:11:34: Martin: wollen?
00:11:34: Martin: aber es ist halt ein komplett anderer
00:11:35: Martin: Ansatz Und die Schnittmenge zwischen den
00:11:39: Martin: Features von den beiden.
00:11:40: Martin: wenn man sich aus die beschränkt, dann hat
00:11:45: Martin: man wirklich wahrscheinlich zu viel Geld
00:11:46: Martin: ausgegeben.
00:11:49: Caro: Ja, das stimmt, Und SmartDB ist ja auch ich
00:11:54: Caro: sage mal, im Entwicklungs-, also im
00:11:55: Caro: Datenbankentwicklungskontext ist das ja
00:11:58: Caro: auch viel hat das ja auch viel mit dem
00:12:01: Caro: Aufbau von Code zu tun.
00:12:02: Caro: Und ich weiß noch vor einigen Jahren also
00:12:04: Caro: Diskussion kommt ja immer wieder wie so
00:12:05: Caro: viele technische Themen immer wieder kommen.
00:12:08: Caro: Und vor einigen Jahren weiß ich noch, da
00:12:09: Caro: war so Steven Feuerstein ganz weit vorne
00:12:12: Caro: mit seiner Struktur, mit diesen TAPIs, das
00:12:15: Caro: sind Table APIs und XAPIs, und dann kam
00:12:19: Caro: Philipp Salvesberg noch mit seiner Pink-TV
00:12:22: Caro: um die Ecke.
00:12:24: Caro: Hast du dich da viel eingearbeitet oder
00:12:27: Caro: beziehungsweise auch viel mit diesen
00:12:30: Caro: Ansätzen beschäftigt und irgendwie eine
00:12:32: Caro: Idee, wo du da diese Abstraktion von Code
00:12:34: Caro: oder die Strukturierung von Code, sagen wir
00:12:36: Caro: es mal runtergedampft für dich umsetzen
00:12:39: Caro: würdest oder empfehlen würdest?
00:12:41: Martin: Ich muss jetzt ganz ehrlich sagen, dass
00:12:44: Martin: diese Sachen, die du angesprochen hast, vor
00:12:46: Martin: allem das, was die Table-API ist und so ich
00:12:48: Martin: glaube, das davon habe ich zum ersten Mal
00:12:50: Martin: von Tom Kite gehört, so Anfang 2000.
00:12:52: Martin: Und das Thema ist ja dann kontinuierlich
00:12:54: Martin: weiterentwickelt worden.
00:12:56: Martin: Und wie so alles in der IT hat jede
00:13:00: Martin: Technologie und jeder Ansatz so seine
00:13:03: Martin: Lebenszeit und Lebenserwartung.
00:13:06: Martin: Und wie ich eben sagte, wenn du jetzt so
00:13:09: Martin: ein gewisses Modell aufoktroyierst oder
00:13:13: Martin: sowas machen willst bei jüngeren
00:13:14: Martin: Entwicklern, die mit der Technologie nicht
00:13:16: Martin: so vertraut sind, dann ist die Frage, ob
00:13:19: Martin: das Akzeptanz findet, und natürlich ist der
00:13:22: Martin: Ansatz richtig.
00:13:23: Martin: Aber es ist die Frage meiner Meinung nach,
00:13:26: Martin: ob man damit die heutigen Entwickler
00:13:28: Martin: abholen kann, dass die sagen hey, wir
00:13:31: Martin: schreiben jetzt Table APIs und alles und
00:13:32: Martin: machen sonst nichts.
00:13:34: Martin: Das große Risiko ist eben, was ich so sehe,
00:13:37: Martin: diese Graben wieder zwischen Entwicklern
00:13:39: Martin: und den DBAs oder den Datenbankentwicklern,
00:13:42: Martin: dass man den weiter aufreißt, anstatt ihn
00:13:44: Martin: zuzuschütten.
00:13:44: Martin: Und das ist, glaube ich, das, was wir tun
00:13:46: Martin: sollten, wenn wir dann sagen hey, table API
00:13:48: Martin: ist das Einzige, und dann sagt ein
00:13:50: Martin: Entwickler, ich brauche jetzt eine neue
00:13:51: Martin: Tabelle, und dann kommt er wieder zurück,
00:13:53: Martin: was ich anfangs sagte Ja, dafür gibt es
00:13:55: Martin: jetzt noch kein Table API, das kann ich
00:13:56: Martin: dann nächste Woche schreiben.
00:13:59: Martin: Dann ja, das ist ein bisschen schade, weil
00:14:01: Martin: ich bräuchte es eigentlich jetzt quasi
00:14:03: Martin: jetzt.
00:14:04: Martin: Und dann?
00:14:05: Martin: ist man wieder in der Situation, wo man
00:14:08: Martin: sagt ja, die blöde DB will ich gar nicht
00:14:09: Martin: benutzen, ich schreibe das alles für
00:14:10: Martin: Frontend, und dann gehe ich, weil man muss
00:14:12: Martin: ja das.
00:14:14: Martin: Ich verstehe beide Seiten.
00:14:15: Martin: Also, die eine Seite ist ich möchte jetzt
00:14:16: Martin: einen klar strukturierten Datenzugriff
00:14:18: Martin: haben, table API.
00:14:20: Martin: Auf der anderen Seite verstehe ich den
00:14:21: Martin: Entwickler, der sagt ja, ich möchte mal,
00:14:24: Martin: gerne mal was machen, und da sprechen wir
00:14:28: Martin: bestimmt später noch drüber.
00:14:29: Martin: Da kommt eben dieser Ansatz, der in der
00:14:32: Martin: Literatur auch zu DevOps zum Tragen kommt.
00:14:35: Martin: Und da ist ein hervorragendes Buch, was ich
00:14:37: Martin: gerade lese, von Emily Freeman, und Emily
00:14:40: Martin: Freeman, die sagt eben DevOps ist kein
00:14:41: Martin: technologisches Problem, das ist weitgehend
00:14:44: Martin: gelöst.
00:14:44: Martin: Es ist ein Leute-Problem Mehr Kommunikation,
00:14:49: Martin: besser das Team motivieren und vor allem
00:14:52: Martin: Silos abbauen.
00:14:54: Martin: Und das ist also so ein Grund, wo ich denke,
00:14:56: Martin: dass das sollte man tatsächlich tun.
00:14:58: Martin: Also, ich habe überhaupt gar nichts gegen
00:15:00: Martin: SmartDB, mtb oder Table APIs.
00:15:03: Martin: Ich frage mich nur, inwiefern man die
00:15:06: Martin: Entwickler damit abholt.
00:15:08: Martin: Wie viele Leute kann man damit heute für
00:15:10: Martin: Datenbanktechnologie begeistern?
00:15:13: Martin: Und ich fürchte halt, dass Datenbanken eher
00:15:16: Martin: als solches, das wird weniger gelesen an
00:15:18: Martin: der Hochschule.
00:15:20: Martin: Du hast damit weniger Berührungspunkt, und
00:15:23: Martin: viele Frameworks, die abstrahieren die
00:15:25: Martin: Datenbank ja komplett.
00:15:26: Martin: Wenn man zum Beispiel an Django denkt, da
00:15:28: Martin: hast du überhaupt gar keinen
00:15:29: Martin: Berührungspunkt mehr mit der Datenbank.
00:15:31: Martin: Du definierst dir dann sozusagen dein API
00:15:33: Martin: in Python, und das Framework macht dann die
00:15:36: Martin: Schemamigration mit der jeweiligen
00:15:39: Martin: Datenbank harmoniert.
00:15:40: Martin: Aber so läuft das dann halt, und da könnte
00:15:46: Martin: ich zum Beispiel jetzt dem
00:15:46: Martin: Django-Entwickler, dem könnte ich jetzt,
00:15:47: Martin: glaube ich nicht, ich wüsste noch nicht mal
00:15:50: Martin: technisch, wie ich so ein Table-API dann
00:15:52: Martin: nutzen sollte.
00:15:53: Martin: Also von daher ja, es ist definitiv ein
00:15:56: Martin: komplexes Thema, und ich denke, um es jetzt
00:15:59: Martin: abschließend nochmal zu sagen, ohne zu viel
00:16:01: Martin: zu fassen, es kommt immer darauf an.
00:16:04: Martin: Wenn man das im Team natürlich so geregelt
00:16:07: Martin: hat und die Leute damit alle einverstanden
00:16:09: Martin: sind und das auch umsetzen können, dann ist
00:16:11: Martin: das eine super Sache.
00:16:12: Martin: Aber wenn man halt mit neuen Serventen zu
00:16:16: Martin: tun hat, die vielleicht noch weniger
00:16:18: Martin: Berufserfahrung haben, weniger
00:16:20: Martin: Datenbankerfahrung, dann könnte es ein
00:16:22: Martin: bisschen schwieriger werden.
00:16:25: Caro: Ja, ich denke auch, wir haben da auch auf
00:16:26: Caro: jeden Fall mehrere Seiten.
00:16:27: Caro: Wir haben ja einmal die.
00:16:28: Caro: Also ich bin ja primär im Apex-Umfeld tätig.
00:16:30: Caro: Das ist ja genauso wie bei Forms auch
00:16:32: Caro: einfach schon sehr nah an der Datenbank
00:16:34: Caro: dran.
00:16:35: Caro: Und dieses Thema TAPI, xapi und so, das
00:16:38: Caro: begleitet mich auch schon eine ganze Weile,
00:16:39: Caro: weil ich natürlich auch mal versuche zu
00:16:41: Caro: eruieren lohnt sich das, das jetzt
00:16:43: Caro: einzubinden?
00:16:44: Caro: Auf der anderen Seite gibt es ja auch zum
00:16:45: Caro: Beispiel in Java, da weiß ich es zumindest
00:16:49: Caro: aus erster Hand, dass man dort auch einen
00:16:53: Caro: sehr standardisierten Entwicklungsprozess
00:16:55: Caro: hat, sage ich mal.
00:16:55: Caro: Also, wenn man mit der Datenbank
00:16:57: Caro: kommunizieren möchte, dann setzt man da
00:16:59: Caro: seine Modelle auf, seine Klassen, seine
00:17:01: Caro: Services etc.
00:17:02: Caro: Also, es gibt ja immer dieses gleiche
00:17:04: Caro: Verfahren.
00:17:05: Caro: Und bei diesen SmartDB oder bei diesen
00:17:08: Caro: Ansätzen denke ich mir auch oft, das könnte
00:17:10: Caro: so etwas Ähnliches sein, aber in der
00:17:11: Caro: Datenbankentwicklung hat man wahrscheinlich
00:17:13: Caro: einfach nicht, wie du schon sagtest.
00:17:15: Caro: Also, wo sind wir, wo kommen wir her?
00:17:17: Caro: Kommen wir aus einer Datenbank getriebenen
00:17:18: Caro: Anwendung wie zum Beispiel Apex, die
00:17:20: Caro: sowieso schon dabei ist, in der Datenbank
00:17:22: Caro: ausgeführt zu werden, oder kommen wir von
00:17:26: Caro: einem Framework wie zum Beispiel einem
00:17:28: Caro: Java-Framework oder einer React-Anwendung
00:17:30: Caro: oder wie auch immer oder einem
00:17:31: Caro: Python-Programm und müssen dann da auf
00:17:34: Caro: unsere Daten zugreifen?
00:17:35: Caro: dass das dann nicht funktioniert, unbedingt,
00:17:37: Caro: dass man dann diese standardisierten
00:17:40: Caro: Prozesse wie diese Table APIs, diese
00:17:43: Caro: Transaction APIs etc.
00:17:44: Caro: Dass man die dann alle gleich formatiert,
00:17:47: Caro: gleichbleibend aufsetzt, dass das einfach
00:17:49: Caro: nicht realistisch ist, das irgendwie
00:17:51: Caro: übereinzubringen.
00:17:52: Martin: Ja, das sehe ich auch so Genau.
00:17:55: Caro: Ja, also ich genau, ich habe gesagt, table
00:17:57: Caro: APIs sind so ein spannendes Thema, weil es
00:18:00: Caro: immer wieder eine Diskussion ist, gerade
00:18:02: Caro: eben auch im Datenbankentwicklungsbereich.
00:18:04: Caro: Wir betrachten jetzt natürlich ein bisschen
00:18:05: Caro: mehr Genau.
00:18:07: Caro: Okay, also, wir haben jetzt die
00:18:09: Caro: SmartDB-Komponenten, sage ich, mal
00:18:12: Caro: besprochen.
00:18:13: Caro: Du hattest, als wir das kurz angeschnitten
00:18:15: Caro: haben, das letzte Thema, das Thema in
00:18:17: Caro: unserer letzten Session hattest du auch
00:18:19: Caro: direkt die Instrumentation.
00:18:22: Caro: Das ist mal sehr schwierig für mich, das
00:18:24: Caro: Wort in Deutsch, die Instrumentation, sagt
00:18:26: Caro: man das so auf Englisch?
00:18:27: Caro: die Instrumentation hast du in den Raum
00:18:29: Caro: geworfen.
00:18:30: Caro: Kannst du einmal erklären, was genau du
00:18:32: Caro: damit meintest?
00:18:33: Martin: Ja, das ist natürlich auch ein ganz
00:18:35: Martin: wichtiges Thema in der Datenbankentwicklung,
00:18:37: Martin: und das ist, was, was ich relativ wenig
00:18:40: Martin: sehe über die letzten 20 Jahre, die ich das
00:18:44: Martin: schon mache, ist den Code instrumentieren.
00:18:47: Martin: Das ist Cary Millsap.
00:18:49: Martin: Beim ersten Mal ist es mir aufgefallen, als
00:18:51: Martin: ich Cary Millsaps Buch gelesen habe, also
00:18:53: Martin: sein erstes Buch, und dort hat er eben drin
00:18:56: Martin: geschrieben, dass Instrumentierung
00:18:59: Martin: essentiell ist, um Anwendungen zu schreiben.
00:19:02: Martin: Und zwar gab es da ein super Beispiel.
00:19:04: Martin: Unter anderem hat er gesagt da gibt es so
00:19:06: Martin: einen Prozess, hat er festgestellt, bei
00:19:08: Martin: einem Kunden, wo er gewesen ist.
00:19:10: Martin: Dieser Prozess dauerte eben 20 Stunden, und
00:19:12: Martin: das ist natürlich sehr lange.
00:19:14: Martin: Und dann hat er sich ja gefragt lohnt es
00:19:15: Martin: sich, diesen Prozess zu optimieren,
00:19:17: Martin: irgendwie mal zu schauen, was die da machen?
00:19:20: Martin: Aber in dem Kontext hat er dann gleich
00:19:21: Martin: weiter ausgeführt Tuning von solchen
00:19:32: Martin: Prozessen lohnt sich dann tatsächlich nur,
00:19:34: Martin: wenn das was ist, was auch Wert für
00:19:35: Martin: Business Value hat er das genannt.
00:19:36: Martin: Weißt du, wenn das so eine ich migriere
00:19:37: Martin: jetzt eine Tabelle zu einer anderen
00:19:38: Martin: Tabellenstruktur und mache das einmal und
00:19:39: Martin: dann wieder dann lohnt sich das nicht, da
00:19:40: Martin: groß Zeit in zu investieren, diese 20
00:19:41: Martin: Stunden auf zwei Stunden zu reduzieren.
00:19:44: Martin: Aber wenn es jetzt irgendwie ist, welche
00:19:45: Martin: Bestellungen zu validieren, oder sage ich
00:19:52: Martin: jetzt mal so, so diese typische Validierung
00:19:53: Martin: von Warenkörben oder
00:19:53: Martin: Kreditkartenvalidierung.
00:19:54: Martin: Also, wenn das fünf Minuten dauert statt
00:19:55: Martin: zwei Sekunden, dann ist definitiv ein
00:19:59: Martin: wertvoller Prozess, weil direkt da Umsatz
00:20:03: Martin: dran gekoppelt ist.
00:20:05: Martin: Also Sachen, die für den eigentlich
00:20:07: Martin: originären Geschäftszweck wichtig sind, die
00:20:09: Martin: sind wichtiger zu tunen als solche Sachen,
00:20:12: Martin: die man einmal macht.
00:20:13: Martin: Aber jetzt kommt der Punkt, um den Bogen zu
00:20:16: Martin: schlagen.
00:20:16: Martin: Wie weiß ich denn, was ich wann mache?
00:20:19: Martin: Wie weiß ich denn, was für Fragen zu einem
00:20:21: Martin: bestimmten Business-Prozess gehören, und da
00:20:23: Martin: man heute nicht mehr diese Formsarchitektur
00:20:24: Martin: im klassischen Sinne hat, was für Fragen zu
00:20:26: Martin: einem bestimmten Business-Prozess gehören?
00:20:28: Martin: Und da man heute nicht mehr diese
00:20:28: Martin: Forms-Architektur im klassischen Sinne hat,
00:20:29: Martin: wie früher, ist es eben schwer zu sagen,
00:20:32: Martin: eine Session ist einem Endnutzer zuzuordnen.
00:20:36: Martin: Früher war das halt viel einfacher.
00:20:37: Martin: Du hast ja dann geguckt, was diese Session
00:20:38: Martin: macht, und da gibt es ja auch dynamische
00:20:40: Martin: Performance-Videos in der Datenbank.
00:20:42: Martin: Da sieht man das alles.
00:20:46: Martin: Aber heute ist es ja so du hast einen
00:20:46: Martin: Connection-Pool, da sind dann was weiß ich
00:20:47: Martin: wie viele 42 Sessions drin, und dann für
00:20:48: Martin: eine Abfrage kriegst du mal eine Session 1,
00:20:50: Martin: und für die nächste Abfrage kriegst du
00:20:52: Martin: Session 3, und wenn du fertig bist, gibst
00:20:54: Martin: du die immer zurück in den Pool.
00:20:56: Martin: Von daher ist es über Tracing fast
00:20:58: Martin: unmöglich rauszukriegen, was so Session
00:21:00: Martin: macht.
00:21:01: Martin: Und deswegen ist eben die Instrumentierung
00:21:03: Martin: super wichtig, dass man bei den Sachen, die
00:21:05: Martin: kritisch für den Erfolg des Unternehmens
00:21:06: Martin: sind, dass man eben da Instrumentierung
00:21:09: Martin: reinwirft und sagt ich bin jetzt hier in
00:21:11: Martin: Module Action zum Beispiel, ich bin jetzt
00:21:12: Martin: in dem Modul Stellung abschließen, und dann
00:21:14: Martin: Action ist, was weiß ich, fraud Detection,
00:21:17: Martin: action ist dann Warenkorb Prüfen, action
00:21:19: Martin: ist dann so und so, und es ist dann sehr
00:21:23: Martin: gut möglich, dann in AWR, also im Automatic
00:21:26: Martin: Workload Repository, nachzuschauen was sind
00:21:29: Martin: denn die Top 7 oder Top 10 Statements für
00:21:34: Martin: die Kombination aus Module und Action, und
00:21:35: Martin: dann kann man eben hervorragend
00:21:37: Martin: nachvollziehen, was eine Datenbank gemacht
00:21:47: Martin: hat im Lauf der Zeit.
00:21:50: Martin: Aber das, was wirklich schade ist, dass man
00:21:52: Martin: das so wenig sieht, ja, und dann gibt es ja
00:21:54: Martin: die.
00:21:54: Martin: Virtual Connections bei den Wahlen, und
00:21:55: Martin: dann musst du eben gucken ja, das war an
00:21:59: Martin: Donnerstag zwischen 15.30 und 16 Uhr, so ja,
00:22:03: Martin: okay, dann schauen wir mal, Und vielleicht
00:22:04: Martin: finden wir ja wohl nach wie vor.
00:22:08: Caro: Ja, oder meine Abfrage oder meine
00:22:10: Caro: Applikation ist gerade langsam, und dann ja,
00:22:12: Caro: okay, gucke ich mir mal alle SQLs an, die
00:22:14: Caro: aktuell laufen.
00:22:15: Martin: Genau Ich finde ja das eine Genau.
00:22:19: Caro: Gut.
00:22:20: Caro: also, das heißt, dass wir zumindest quasi
00:22:22: Caro: einen Einstiegspunkt schaffen.
00:22:24: Caro: Ich denke mal, wir reden da vor allen
00:22:26: Caro: Dingen ja von Technologien.
00:22:27: Caro: ich sage jetzt mal, abseits von Apex und
00:22:28: Caro: Forms, wie du es eben schon auch so Forms
00:22:30: Caro: hast du jetzt explizit gesagt, und Apex
00:22:32: Caro: macht das ja auch schon automat User, und
00:22:34: Caro: dass wir dann aber ich habe zum Beispiel
00:22:37: Caro: auch schon Anwendungen gesehen, wo also
00:22:46: Caro: Anwendungen möchte ich es eigentlich gar
00:22:47: Caro: nicht nennen Excel-Dateien, wo Anwendungen
00:22:50: Caro: gebaut wurden, oder so etwas, wie
00:22:52: Caro: Anwendungen gebaut wurden, und dass die
00:22:54: Caro: dann quasi sagt, ich bin jetzt Excel XYZ,
00:22:57: Caro: und ich bin für den Prozess jetzt zuständig,
00:22:59: Caro: oder ich mache jetzt gerade den Prozess,
00:23:01: Caro: und dann mache ich den Prozess, damit man
00:23:03: Caro: dann auch nachvollziehen kann, besser, dass
00:23:06: Caro: die Abfragen aus diesem Prozess kommen und
00:23:09: Caro: vielleicht auch aus dem Tool im Endeffekt,
00:23:11: Caro: was ja auch gar nicht mal so schlecht wird
00:23:13: Caro: zu wissen drin, wenn man den Service Name
00:23:23: Caro: kann man ja auch, man kann ja beliebig
00:23:23: Caro: viele Services, service Namen, wie auch
00:23:25: Caro: immer definieren, und dann könnte man den
00:23:27: Caro: Applikationen entsprechend diese Service
00:23:29: Caro: Namen zur Verfügung stellen, dass man dann
00:23:31: Caro: auch schon anhand des Service Namen sehen
00:23:32: Caro: könnte, von wo die quasi gerade zugreifen,
00:23:35: Caro: damit man das auch schon einschränken kann.
00:23:38: Caro: Siehst du das auch als Good Practice, oder
00:23:40: Caro: würdest du da vielleicht sogar noch was
00:23:41: Caro: anderes empfehlen?
00:23:47: Martin: Das haben wir viel gemacht, als ich noch
00:23:48: Martin: bei AnkiTech war.
00:23:48: Martin: Da hatten wir so ein Tool beschrieben, apex
00:23:50: Martin: übrigens, zur Datenbankkonsolidierung, also
00:23:53: Martin: was wir dann gemacht hatten.
00:23:55: Martin: Wir hatten so ein Extrakt vom Automatic
00:23:58: Martin: Workflow Repository von den Datenbanken,
00:24:00: Martin: die wir konsolidieren wollten, angefragt.
00:24:03: Martin: Das war dann so eine CSV-Datei.
00:24:04: Martin: Die haben wir dann in Apex über Data
00:24:06: Martin: Loading hochgeladen, und dann wussten wir
00:24:08: Martin: halt, jetzt haben wir 42 Datenbanken, die
00:24:10: Martin: sollen konsolidiert werden, und dann konnte
00:24:12: Martin: man sehen, was dann die Anforderung der
00:24:14: Martin: Datenbank gewesen ist.
00:24:16: Martin: Also, wir haben dann geguckt, was ist der
00:24:18: Martin: totale, also der gesamte CPU-Bedarf, wie
00:24:20: Martin: groß ist die SGA, die PGA und die
00:24:23: Martin: verschiedenen Speicherkomponenten, und wie
00:24:24: Martin: groß ist die Datenbank selber, und wie
00:24:26: Martin: wächst die?
00:24:26: Martin: und noch eine.
00:24:27: Martin: Menge anderes.
00:24:28: Martin: Und dann konnte man das so in Apex kann man
00:24:30: Martin: das ja wunderbar visualisieren über solche
00:24:33: Martin: Charts.
00:24:33: Martin: Und dann konnte man sagen okay, dafür
00:24:35: Martin: braucht man jetzt einen Quarter Rack, einen
00:24:37: Martin: Half Rack und so weiter.
00:24:42: Martin: Und da war es dann ganz essentiell auf so
00:24:43: Martin: einer konsolidierten Plattform, dass man
00:24:44: Martin: Services hatte für die verschiedenen
00:24:45: Martin: Anwendungen, die da drauf gelaufen sind,
00:24:48: Martin: und im Extremfall wurden tatsächlich auch
00:24:50: Martin: mehrere Datenbanken in eine konsolidiert.
00:24:53: Martin: Da ist es natürlich dann noch viel
00:24:54: Martin: wichtiger, dass man dann nicht einfach so
00:24:55: Martin: einen generischen Service-Namen nutzt, so
00:24:57: Martin: einen Anwendungs Service, sondern hat
00:24:59: Martin: Anwendung 1, anwendung 2, anwendung 3.
00:25:02: Martin: Und das ist schon mal natürlich.
00:25:03: Martin: In konsolidierten Umgebungen ist das schon
00:25:05: Martin: mal sehr viel wert, dass man weiß okay, das
00:25:08: Martin: ist jetzt hier Anwendung eins, da gab es
00:25:09: Martin: eine Regression, da hat einer was getestet,
00:25:11: Martin: oder es ist nicht aufgefallen.
00:25:13: Martin: Jetzt haben wir ein Performance-Problem,
00:25:15: Martin: und dann kann man das dann eingrenzen.
00:25:17: Martin: Das ist schon mal super gut.
00:25:19: Caro: Okay, sehr gut.
00:25:20: Caro: Also dann haben wir schon mal die ersten
00:25:22: Caro: Hinweise, worum ihr euch kümmern könntet,
00:25:24: Caro: wenn ihr diese Folge gehört habt und
00:25:27: Caro: mehrere Technologien im Einsatz habt
00:25:29: Caro: abseits von Forms und Apex, no-transcript,
00:26:07: Caro: manchmal leider in PLSQL, irgendwie nicht
00:26:09: Caro: so selbstverständlich, wie man das
00:26:11: Caro: vielleicht denken würde.
00:26:13: Caro: Aber wir gehen jetzt mal davon aus.
00:26:14: Caro: Wir sagen einfach, das muss sein,
00:26:16: Caro: versionierung muss sein, und idealerweise
00:26:19: Caro: einfach, weil es ja modern und im
00:26:21: Caro: momentanen State of the Art ist, auch mit
00:26:23: Caro: Apex.
00:26:23: Caro: Ach Quatsch mit Apex, natürlich mit Apex,
00:26:25: Caro: aber ich meine natürlich mit Git.
00:26:28: Caro: Nein, nein, die Frage kommt gleich noch
00:26:30: Caro: Genau also, dass wir Versionierung
00:26:32: Caro: betreiben mit Git, und dort würde ich dich
00:26:35: Caro: gerne fragen wie würdest du das angehen
00:26:38: Caro: gehen?
00:26:39: Caro: Also, wir haben ja meistens die Frage
00:26:41: Caro: entweder grüne Wiese Projekt, also wir
00:26:42: Caro: starten was komplett Neues, oder wir haben
00:26:44: Caro: die Frage wir haben schon super viel
00:26:46: Caro: Datenbankcode und möchten den jetzt
00:26:48: Caro: anfangen zu versionieren.
00:26:49: Caro: Hast du da irgendwie?
00:26:50: Caro: oder sagst du vielleicht sogar, git ist gar
00:26:52: Caro: nicht dein Tool, das Tool deiner Wahl,
00:26:54: Caro: sondern du hättest gerne eigentlich was
00:26:55: Caro: anderes?
00:26:57: Martin: Ja, also Git auf jeden Fall, weil ich
00:26:59: Martin: glaube, es gibt im Moment kein anderes
00:27:01: Martin: Versionskontrollwerkzeug, was ähnlich
00:27:03: Martin: populär ist, und jeder, wie du genau sagst,
00:27:06: Martin: jeder Entwickler, der irgendwie in Java
00:27:08: Martin: oder JavaScript oder anders unterwegs ist,
00:27:12: Martin: der benutzt das, und ganz früh wird das
00:27:16: Martin: auch schon den Entwicklern nahegelegt.
00:27:18: Martin: Also ich erinnere mich dann zum Beispiel
00:27:19: Martin: mein erstes JDBC-Projekt habe ich auf
00:27:22: Martin: Tomcat laufen lassen, und das ist schon
00:27:25: Martin: wirklich wirklich lange her, also so 2002
00:27:28: Martin: oder sowas.
00:27:30: Martin: Das fing dann halt an, so als erstes machst
00:27:31: Martin: du dir mal ein Versionskontroll.
00:27:33: Martin: Also erst mal das war damals der Berlin,
00:27:35: Martin: glaube ich machst du dir erst mal so ein
00:27:37: Martin: Repository, ist aber egal, die Technologie
00:27:38: Martin: ist schlussendlich fast schon zweitrangig,
00:27:41: Martin: solange man Versionskontrollwerkzeuge
00:27:43: Martin: einsetzt.
00:27:44: Martin: Und das war dann eben so.
00:27:44: Martin: Bevor du eine Zeile Code schreibst, mach
00:27:46: Martin: jetzt mal erst mal dieses Repository auf.
00:27:51: Martin: Und dann kannst du anfangen, code zu
00:27:53: Martin: schreiben.
00:27:53: Martin: Ja, und das ist halt irgendwie Standard
00:27:56: Martin: überall, außer in der Welt der Datenbanken,
00:28:01: Martin: und ich glaube, das ist nicht
00:28:01: Martin: Oracle-spezifisch, ich glaube, das ist über
00:28:02: Martin: alle Datenbanken, wo man so Code schreibt,
00:28:04: Martin: genau dasselbe.
00:28:06: Martin: Es wird einfach nicht den Entwicklern
00:28:08: Martin: gleich als erstes nahegelegt, ein
00:28:10: Martin: Repository zu erzeugen, und da denke ich,
00:28:13: Martin: ich habe es mir so ein bisschen zu meiner
00:28:15: Martin: Aufgabe gemacht, das den Entwicklern ein
00:28:17: Martin: bisschen näher zu bringen.
00:28:18: Martin: Ich bin schon, ich tue die Doa, und andere
00:28:21: Martin: können vor ganzem schon, und einer meiner
00:28:23: Martin: populären Vorträge ist eben ah, was kann
00:28:26: Martin: ich denn als Git?
00:28:27: Martin: wie kann ich denn Git nutzen, wenn ich für
00:28:29: Martin: die Datenbank entwickle?
00:28:30: Martin: Ich glaube, ich habe den schon fünf, sechs,
00:28:31: Martin: sieben Mal gegeben oder sogar in
00:28:32: Martin: verschiedenen Orten, und es ist halt
00:28:34: Martin: tatsächlich immer noch Bedarf daran, den
00:28:37: Martin: Leuten zu sagen ja, wie erzeuge ich ein
00:28:39: Martin: Repository?
00:28:44: Martin: Was sind die Files?
00:28:44: Martin: was ist denn überhaupt?
00:28:45: Martin: brauche ich denn jetzt irgendwas so wie
00:28:46: Martin: GitHub oder GitLab oder so ein zentrales
00:28:47: Martin: Repository?
00:28:48: Martin: und wie ist dann der Workflow?
00:28:49: Martin: wie kann ich irgendwas da hochladen?
00:28:51: Martin: wie kann ich ein Merge-Request aufsetzen?
00:28:54: Martin: wie funktioniert das überhaupt?
00:28:56: Martin: Und ich glaube, das ist tatsächlich wichtig,
00:28:58: Martin: dass man sich als Datenbankentwickler oder
00:29:01: Martin: sogar auch als DBA mit dem Thema
00:29:03: Martin: auseinandersetzen, weil automatisiert wird
00:29:05: Martin: mehr und mehr.
00:29:06: Martin: Und ob ich jetzt Ansiberscript in Git
00:29:10: Martin: ablege als DBA, die ich benutze, um meine
00:29:13: Martin: Umgebung hochzulegen, terraform, genau das
00:29:15: Martin: Gleiche, wenn ich jetzt irgendwie
00:29:16: Martin: Infrastructure as a Code mache, oder ob ich
00:29:21: Martin: PS, sql oder JavaScript ablege in der
00:29:23: Martin: Datenbank, ich bin der Meinung, es gehört,
00:29:25: Martin: diese Sachen gehören alle versioniert, und
00:29:29: Martin: ja, das sollte man durchaus machen, wobei
00:29:31: Martin: es aber tatsächlich auch wiederum nicht
00:29:34: Martin: unbedingt immer ein technisches Problem ist,
00:29:35: Martin: das anzugehen.
00:29:37: Martin: Ich hatte mal auf der POUG vor zwei Jahren
00:29:40: Martin: mit jemandem gesprochen, und der hat gesagt,
00:29:41: Martin: wir haben da so einen DBA, der weigert sich
00:29:44: Martin: standhaft, so eine Sache in das Gipfel zu
00:29:47: Martin: machen, weil er hat Angst, dass er dann
00:29:49: Martin: überflüssig wird.
00:29:50: Martin: Dann behält er das lieber auf seinem
00:29:52: Martin: eigenen Laptop und nicht mal irgendwie auf
00:29:53: Martin: so einem Fileserver, sondern direkt auf
00:29:57: Martin: seinem eigenen Laptop.
00:29:58: Martin: und das ist so gefährlich, weil, wenn der
00:30:03: Martin: mal krank wird für zwei Wochen, dann er ist
00:30:06: Martin: der Einzige, der weiß, wie diese Skripte
00:30:07: Martin: laufen.
00:30:08: Martin: Vielleicht sind die super wichtig für die
00:30:10: Martin: Anwendung.
00:30:11: Martin: und wenn dann irgendwie mal ein
00:30:12: Martin: Performance-Problem ist, wieso diese
00:30:14: Martin: magische Lösung wie ich die Statistiken
00:30:16: Martin: wieder gerade rücke, oder sowas, dass dann
00:30:19: Martin: diese Sachen nicht allen zur Verfügung
00:30:21: Martin: stehen?
00:30:21: Martin: ich finde das wild, und dass dann diese
00:30:23: Martin: Sachen nicht allen zur Verfügung stehen.
00:30:24: Martin: Ich finde das wild.
00:30:25: Martin: Und wenn der mal zwei Wochen weg ist, dann
00:30:26: Martin: passiert irgendwas um Gottes Willen.
00:30:29: Martin: Also tatsächlich, es ist spannend, mit
00:30:30: Martin: Menschen zu arbeiten, manchmal Das stimmt
00:30:33: Martin: ja.
00:30:33: Caro: Ja, das ist ja auch viel.
00:30:35: Caro: Also, so extrem hatte ich es noch nicht.
00:30:38: Caro: Aber ich habe auch schon mehrfach in
00:30:40: Caro: Projekten Git eingeführt, und oft ist dann
00:30:43: Caro: gerade wenn man von keiner Versionierung
00:30:45: Caro: kommt, sage ich mal, ist dann dieses Gefühl
00:30:47: Caro: auch da, dass alles auf einmal so viel
00:30:48: Caro: komplizierter wird, dass sie nicht mehr so
00:31:03: Caro: frei sind und unabhängig wie vorher,
00:31:04: Caro: sondern dass dann ihnen irgendwie was
00:31:05: Caro: beschnitten wird, indem sie dann diesen
00:31:08: Caro: Schritt noch einführen.
00:31:09: Caro: Das finde ich auch ein bisschen.
00:31:11: Caro: Also es ist immer sehr, ja doch einfach
00:31:13: Caro: sehr schwierig.
00:31:14: Caro: Aber ich glaube, das ist einfach mit jeder
00:31:15: Caro: kulturellen Änderung einfach so, dass
00:31:18: Caro: manche Leute sich damit einfach ja, ich
00:31:21: Caro: will nicht sagen, schwerer tun, aber dass
00:31:22: Caro: es einfach ein bisschen braucht, vielleicht
00:31:24: Caro: damit das dann verinnerlicht werden kann,
00:31:26: Caro: dass es Sinn macht, diese Skripts in einem
00:31:30: Caro: Repository abzulegen.
00:31:32: Caro: Dann hat man ja auch den Truck Factor mit
00:31:34: Caro: dem Kollegen.
00:31:35: Caro: Also, wenn er von wie viel kostet es dann
00:31:37: Caro: das Unternehmen, wenn er von einem Bus oder
00:31:38: Caro: von einem Truck erfasst wird, was man
00:31:41: Caro: natürlich immer nicht hofft.
00:31:42: Caro: Aber genau so heißt ja der makabere Faktor,
00:31:45: Caro: der dann in dem Zuge immer im Raum steht.
00:31:49: Caro: Bei Git das höre ich immer ganz oft von
00:31:51: Caro: Datenmangelentwicklern, da werde ich
00:31:53: Caro: bestimmt gleich auch nochmal bei dem
00:31:54: Caro: Deployment mit drauf eingehen.
00:31:56: Caro: Aber bei Git spricht man also anders.
00:31:58: Caro: Bei Git arbeitet man ja immer unabhängig
00:32:00: Caro: auf seiner eigenen Maschine, und es ist ja
00:32:02: Caro: nicht so wie bei SVN, dass es zumindest
00:32:04: Caro: standardmäßig diese Funktion gibt.
00:32:06: Caro: Jemand blockiert oder lockt eine Ressource,
00:32:09: Caro: und ein anderer kann nicht daran arbeiten.
00:32:12: Caro: Hast du da irgendwie eine Meinung zu diesem
00:32:14: Caro: Argument?
00:32:15: Caro: sag ich mal Also, das ist dann oft ein
00:32:16: Caro: Argument von Primär-Datenbank-Leuten, die
00:32:19: Caro: dann sagen ich kann ja nur, eine Person
00:32:21: Caro: kann eigentlich nur an einer Source
00:32:22: Caro: arbeiten.
00:32:23: Martin: Ja, das ist tatsächlich, und das ist
00:32:25: Martin: tatsächlich anders in Git, weil es eben
00:32:28: Martin: schon von Anfang an darauf ausgerichtet
00:32:31: Martin: worden ist, verteilt zu arbeiten.
00:32:33: Martin: Also, ich glaube, die Historie geht so,
00:32:35: Martin: dass die Kernentwickler für Linux, die
00:32:38: Martin: hatten eine Lösung, und die konnten sie aus
00:32:40: Martin: irgendeinem Grund, der mir jetzt spontan
00:32:42: Martin: nicht einfällt, das konnten sie nicht
00:32:45: Martin: weiterverwenden.
00:32:45: Martin: Und dann hat der Linus Torvalds ja eben
00:32:46: Martin: gesagt, jo, dann schreibe ich halt mein
00:32:47: Martin: eigenes, wie man das halt so macht.
00:32:49: Martin: Und ich glaube, wenn man den Linux-Körner
00:32:52: Martin: damit entwickeln kann, dann ist es schon
00:32:53: Martin: ziemlich gut, und da arbeiten ja doch auch
00:32:55: Martin: viele Leute an dem Linux-Körner.
00:32:57: Martin: Von daher glaube ich dass, dass es
00:32:59: Martin: tatsächlich möglich ist, auch mit mehreren
00:33:02: Martin: Leuten an ing zu arbeiten.
00:33:04: Martin: Aber das ist tatsächlich eine spannende
00:33:05: Martin: Frage, weil es eben kein.
00:33:11: Martin: Wenn ich jetzt irgendwie so ein Checkout
00:33:12: Martin: von diesem Projekt mache und das dann lokal
00:33:14: Martin: habe und nicht mehr auf meiner entfernten
00:33:16: Martin: Instanz so GitLab oder GitHub oder wie sie
00:33:19: Martin: alle heißen, dann kann es natürlich in der
00:33:21: Martin: Zwischenzeit sein, dass irgendjemand anders
00:33:24: Martin: anfängt, an diesen Dateien zu arbeiten, und
00:33:26: Martin: ich glaube, da ist es dann tatsächlich
00:33:28: Martin: weniger ein technisches Problem als ein
00:33:31: Martin: Problem der Prozessoptimierung.
00:33:33: Martin: Also, wie arbeite ich an etwas?
00:33:34: Martin: Und ich bin halt ein großer Fan von der
00:33:38: Martin: Idee von Test-Driven Development und auch
00:33:41: Martin: von Drunk-Based Development oder generell,
00:33:44: Martin: selbst wenn man diese Sachen nicht machen
00:33:46: Martin: würde dass man eben anstatt, wie man das so
00:33:48: Martin: früher gemacht hat, zwei, dreimal im Jahr
00:33:50: Martin: so ein Monster-Release hat sondern dass man
00:33:53: Martin: eben kleine inkrementelle Änderungen macht.
00:33:55: Martin: Und diese kleinen inkrementellen Änderungen,
00:33:57: Martin: das kann sein, ich füge eine Tabellenspalte
00:33:59: Martin: hinzu, ich erzeuge den Index neu, ich mache
00:34:05: Martin: einen Foreign Key hier hin, und so, du
00:34:05: Martin: musst nicht, jedes Release, muss nicht
00:34:06: Martin: irgendwie 20.000 Zeilen Code-Änderungen
00:34:07: Martin: umfassen.
00:34:08: Martin: Es ist tatsächlich viel besser und das
00:34:11: Martin: steht in diesen DORA-Reports, die von
00:34:13: Martin: Nicole Forsgren gemacht werden, und das ist
00:34:16: Martin: auch in diesem Accelerate, in ihrem
00:34:17: Martin: Accelerate-Buch drin steht es dann kleine
00:34:20: Martin: inkrementelle Änderungen, die dann
00:34:22: Martin: automatisch geprüft werden.
00:34:24: Martin: Und da sprechen wir bestimmt gleich drüber
00:34:26: Martin: über die Pipelines Oder Git-Commit-Hacks,
00:34:29: Martin: hacks, hux, hux heißen die Dinger nicht Hux,
00:34:33: Martin: dass man eben lokal schon mal testet, ja,
00:34:35: Martin: funktioniert das, und dann zieht man es
00:34:37: Martin: eben ein, und dann ist auch das Risiko von
00:34:39: Martin: Überschneidungen geringer, weil ich nicht
00:34:43: Martin: irgendwie eine Datei dann habe, auf der ich
00:34:45: Martin: dann einen Monat oder zwei sitze, bevor ich
00:34:46: Martin: die dann versuche, in den Test-Branch
00:34:49: Martin: reinzumergen, wo 47 andere Leute gerade
00:34:52: Martin: auch dran arbeiten.
00:34:53: Martin: Und das ist das typische Problem.
00:34:55: Martin: Was man dann eben bekommt, ist dann dieses
00:34:57: Martin: Merge-Request-Hall, weil 27 Kollisionen auf
00:35:01: Martin: der Datei sind, und dann dauert das ewig,
00:35:06: Martin: bis man das wieder herausgearbeitet hat.
00:35:07: Martin: Was denn jetzt wichtig ist, wie man
00:35:09: Martin: verschiedene Changes unter einen Hut
00:35:10: Martin: bekommt, wenn man die gleich committet und
00:35:13: Martin: in das Release einspielt, also vielleicht
00:35:16: Martin: innerhalb von einem Tag.
00:35:17: Martin: also ganz extrem ist das ja im Trump-based
00:35:19: Martin: Development, wo sie sagen ich sitze auf
00:35:23: Martin: meiner Änderung für maximal einen Tag, also
00:35:25: Martin: ich komme morgens hin, mache meinen Change,
00:35:27: Martin: und abends ist der live.
00:35:29: Martin: Das ist natürlich.
00:35:31: Martin: Da gehört schon viel dazu, dass man das
00:35:33: Martin: unfallfrei hinbekommt.
00:35:35: Martin: Aber je länger man auf seinen Changes
00:35:37: Martin: rumsitzt, desto schwieriger wird, das
00:35:40: Martin: Peer-Review zu bekommen, weil du kannst ja
00:35:43: Martin: nicht direkt ein Main mergen hoffentlich Da
00:35:48: Martin: gibt es ja Release-Management in der Regel
00:35:50: Martin: oder irgendwie der Haupt-Maintainer, der
00:35:52: Martin: dann da drauf guckt und sagt hey, da musst
00:35:53: Martin: du vielleicht noch was ändern.
00:35:54: Martin: Aber ja, je kleiner die Änderung, desto
00:35:57: Martin: geringer das Risiko, dass man nachher zu
00:35:59: Martin: Kollisionen kommt.
00:36:01: Caro: Zusammenzufassen Okay, das hast du schon
00:36:03: Caro: einmal vorgegriffen.
00:36:06: Caro: Also, wenn man mit Git, wenn man mit Git
00:36:07: Caro: arbeitet und über Git spricht und über
00:36:08: Caro: Entwicklungsprozesse in Git spricht, dann
00:36:11: Caro: hat man ja also zumindest so default-mäßig
00:36:15: Caro: zumindest früher auch oft dieses Git-Flow
00:36:18: Caro: im Kopf gehabt, was dann ja im Endeffekt
00:36:20: Caro: ist.
00:36:21: Caro: Ich entwickle etwas für längere Zeit, ich
00:36:23: Caro: packe das vielleicht auf einen Testbranch,
00:36:25: Caro: es wird dann getestet, dann packe ich es in
00:36:26: Caro: einen Releasebranch, und dann kommt dieser
00:36:28: Caro: Releasebranch irgendwann.
00:36:30: Martin: Oh, die Hotfix ist nicht vergessen.
00:36:31: Caro: Ja, stimmt.
00:36:33: Martin: Die muss man ja auch noch haben.
00:36:36: Caro: Und das ist ja so.
00:36:36: Caro: Ich sag mal die klassische Art und Weise.
00:36:39: Caro: Und tatsächlich jetzt einfach, weil ich es
00:36:42: Caro: von mir kenne als ich das mit dem
00:36:43: Caro: Drunk-Based Development das erste Mal
00:36:45: Caro: gehört habe, war ich tatsächlich sehr
00:36:47: Caro: irritiert.
00:36:49: Caro: In meinem Kopf war das so ich habe etwas ja
00:36:51: Caro: noch gar nicht fertiggestellt, aber ich
00:36:53: Caro: deploye schon einen Teil davon, deshalb
00:36:58: Caro: wirken lassen, darüber nachgedacht habe und
00:37:01: Caro: dann nochmal mich in Projekte reingefunden
00:37:02: Caro: habe, und so, dann habe ich schon
00:37:03: Caro: festgestellt, ja, das macht total Sinn,
00:37:06: Caro: gerade auch im Sinne von einem
00:37:07: Caro: automatisierten Deployment.
00:37:08: Caro: Also, wenn man das nicht immer selber
00:37:09: Caro: machen muss, dann macht das absolut Sinn.
00:37:16: Caro: Und erkanntest du da vielleicht nochmal so
00:37:16: Caro: ein ganz bisschen in die Unterschiede?
00:37:18: Caro: also du hast es eben schon grob erklärt,
00:37:19: Caro: aber dass du dann vielleicht nochmal so ein
00:37:20: Caro: ganz bisschen in die Unterschiede
00:37:21: Caro: einsteigst.
00:37:21: Caro: Oder wenn du zum Beispiel ein Feature hast,
00:37:23: Caro: was du entwickelst, wie du dann ich habe es
00:37:26: Caro: ja eben erklärt, wie man es mit GitFlow
00:37:27: Caro: machen würde, wie du es dann mit dem
00:37:28: Caro: Trunk-Based Development machen würdest.
00:37:31: Martin: Ja, also bei Trunk-Based Development ist
00:37:33: Martin: die reine Lehre ja, dass du tatsächlich
00:37:35: Martin: also Trunk im Sinne von Main.
00:37:37: Martin: Also ich glaube, in CVS hieß der Hauptzweig
00:37:40: Martin: oder der Produktivzweig, der hieß damals
00:37:41: Martin: Trunk.
00:37:42: Martin: Deswegen, glaube ich, heißt es Trunk-Based
00:37:43: Martin: Development, und dann hat man eben nur
00:37:45: Martin: diesen einen, und die Entwickler entwickeln
00:37:48: Martin: dann, wie gesagt, innerhalb von einem Tag
00:37:50: Martin: an ihren Change, und dann wird der dann
00:37:52: Martin: gegen Ende des Tages oder früher.
00:37:53: Martin: Wenn der früher fertig ist, wird der dann
00:37:55: Martin: eben schon direkt in Main reingemerged, und
00:37:59: Martin: idealerweise ist das Feature dann schon
00:38:01: Martin: fertig.
00:38:01: Martin: Aber bei manchen Sachen sagst du ja auch
00:38:03: Martin: genau richtig, das dauert ein bisschen
00:38:04: Martin: länger.
00:38:04: Martin: Dann würde ich ja sozusagen ein
00:38:06: Martin: halbfertiges Feature in Main reinschieben.
00:38:09: Martin: Das ist dann normalerweise ein
00:38:11: Martin: Top-Kriterium, für die Pipeline geht auf
00:38:13: Martin: Rot, alle lassen alles fallen und stehen
00:38:15: Martin: und müssen die Pipeline fixen, weil wir
00:38:18: Martin: gerade alle nicht mehr arbeiten können.
00:38:20: Martin: Die Idee dahinter ist eben, dass man das
00:38:23: Martin: über Feature-Flags macht, und zwar sagt man
00:38:25: Martin: hier so ich arbeite jetzt an Feature XYZ,
00:38:28: Martin: und in meinem Code habe ich immer so einen
00:38:30: Martin: Flag, der eben sagt XYZ scharf schalten,
00:38:33: Martin: nein, und so kann ich das dann.
00:38:35: Martin: Idealerweise entwickeln ich dann dieses
00:38:37: Martin: neue Feature sozusagen parallel zu den
00:38:40: Martin: Sachen, die aktiv geschaltet sind, und erst,
00:38:42: Martin: wenn ich dann fertig bin und es getestet
00:38:44: Martin: wurde und abgenommen worden ist.
00:38:46: Martin: Dann sage ich eben, dieses Feature-Flag
00:38:48: Martin: setze ich dann von false auf true, und dann
00:38:50: Martin: funktioniert es.
00:38:52: Martin: Und das könnte man in Oracle zum Beispiel
00:38:54: Martin: hervorragend machen, auch über
00:38:56: Martin: Edition-Based Redefinition.
00:38:59: Martin: Das heißt, wenn ich an so einem
00:39:01: Martin: PS-Secret-Package zum Beispiel arbeite oder
00:39:04: Martin: ja, das ist vielleicht das beste Beispiel
00:39:06: Martin: oder PS-Secret-Code allgemein, dann könnte
00:39:09: Martin: ich eben sagen, ich erzeuge jetzt eine neue
00:39:11: Martin: Edition in meiner Datenbank, und die
00:39:13: Martin: benutze ich aber nicht.
00:39:14: Martin: Also die Anwendung, die verbindet sich dich
00:39:16: Martin: mal zu der neuesten Edition und machst die
00:39:18: Martin: andere aus.
00:39:29: Martin: Und das könntest du auch über so ein Canary
00:39:31: Martin: Deployment machen, dass du sagst, hier nur
00:39:32: Martin: ein paar bestimmte Anwendungen von meinen
00:39:35: Martin: Applikationsservern, die verbinden sich
00:39:37: Martin: jetzt dahin.
00:39:39: Martin: Und so könnte man dann sagen, jetzt ein
00:39:40: Martin: Drittel meiner User ist dann auf der neuen
00:39:42: Martin: Edition, und zwei Drittel sind noch auf der
00:39:43: Martin: alten.
00:39:44: Martin: Und wenn alles gut geht, dann ziehe ich
00:39:45: Martin: eben die zwei Drittel nach.
00:39:47: Martin: Und wenn es nicht gut geht, kommt ja auch
00:39:48: Martin: vor das ist auch so ein DevOps-Gedanke
00:39:52: Martin: embrace failure.
00:39:53: Martin: Es wird vorkommen, dass Sachen nicht
00:39:55: Martin: funktionieren.
00:39:56: Martin: Man muss aber dann gewappnet sein und
00:39:58: Martin: vorbereitet sein.
00:39:59: Martin: Ich kann sagen okay, dann mache ich eben
00:40:00: Martin: den Rollback auf die Vorredner-Edition.
00:40:04: Martin: Das finde ich halt bei Oracle superklasse,
00:40:06: Martin: weil man so viele Sachen online machen kann.
00:40:11: Martin: Die Anwendung merkt davon quasi gar nichts.
00:40:12: Martin: Ich könnte mir auch vorstellen, dass ich
00:40:13: Martin: nur so ein Testing-Team auf die neue
00:40:15: Martin: Edition loslasse, also dass ich Leute, die
00:40:17: Martin: genau wissen, was sie testen müssen, wenn
00:40:19: Martin: es denn sowas gibt, dass man die da drauf
00:40:21: Martin: loslässt, und nur nachdem der Test okay war,
00:40:26: Martin: switcht man dann um.
00:40:27: Martin: Und ich erinnere mich an so manchen Samstag,
00:40:28: Martin: wo so ein Release, so ein 6-Monats-Release
00:40:30: Martin: reinspielt wurde, wo man sich sehr einsam
00:40:32: Martin: fühlt, weil alle anderen weg sind, und der
00:40:35: Martin: DBA hat nichts zu tun bis zum Schluss, und
00:40:37: Martin: dann irgendwann um 11 Uhr nachts kommt dann
00:40:38: Martin: die Nachricht Release erfolgreich.
00:40:40: Martin: Und dann hast du dann oh, da war der
00:40:42: Martin: Blutdruck von 180 dann wieder auf 60 runter.
00:40:45: Martin: Aber bis dahin war der Samstag eher
00:40:47: Martin: gruselig.
00:40:48: Martin: Und so könnte ich mir vorstellen, wenn man
00:40:50: Martin: so ein Release über EBR und Online
00:40:52: Martin: Streaming, migrations, also die ganzen
00:40:53: Martin: Sachen, die man mit Auric machen kann.
00:40:55: Martin: Wenn man das mal implementiert hätte damals
00:40:58: Martin: vor vielen Jahren ist das schon gewesen da
00:41:00: Martin: hätte ich auch sehr viel ruhiger schlafen
00:41:01: Martin: können, weil dann Rollback ja, wer testet
00:41:03: Martin: schon Rollback?
00:41:04: Martin: großartig.
00:41:06: Martin: Wir haben damals auf dem Solaris Array
00:41:08: Martin: Snapshots, erzeugt von den Land für die.
00:41:10: Martin: Datenbank.
00:41:11: Martin: Da habe ich gefragt okay, und wann habt ihr
00:41:13: Martin: schon mal probiert, ob das Hobby wieder
00:41:15: Martin: zurückkommt?
00:41:16: Martin: Ja, das haben wir noch nie gemacht.
00:41:17: Martin: Ja, Ihr habt eine super Rollback-Strategie.
00:41:21: Martin: Ich fühle mich jetzt schon sehr viel
00:41:22: Martin: sicherer.
00:41:24: Caro: Auch gefühlt.
00:41:26: Caro: Auch wenn man ein Rollvac-Skript hat
00:41:27: Caro: gefühlt, sagt man immer okay, nee, wir
00:41:29: Caro: gehen nur nach vorne, no-transcript.
00:41:49: Caro: Also ich für mich habe das so ein bisschen
00:41:51: Caro: runtergedampft, also um das selbst zu
00:41:53: Caro: verstehen und zu verinnerlichen und den
00:41:55: Caro: Sinn dahinter zu sehen.
00:41:57: Caro: Wenn wir zum Beispiel auch ein Projekt
00:41:58: Caro: haben oder ein Feature, was wir entwickeln,
00:42:00: Caro: und dann Datenmerkänderungen haben, dann
00:42:02: Caro: spricht ja auch nichts dagegen, Also außer,
00:42:04: Caro: wir ändern natürlich bestehende Spalten.
00:42:06: Caro: Aber wenn wir neue hinzufügen oder so
00:42:27: Caro: no-transcript, ob das dann auch wirklich
00:42:32: Caro: ausführbar ist.
00:42:33: Caro: Das ist natürlich viel, viel komfortabler,
00:42:35: Caro: wenn man das Ganze runterdampfen kann auf
00:42:37: Caro: kleinere Happen Und also dieses Trunk-Based
00:42:40: Caro: Development beziehungsweise allgemein CICD,
00:42:43: Caro: und da schlagen wir jetzt so ein bisschen
00:42:44: Caro: den Bogen hin.
00:42:45: Caro: Eigentlich sind wir schon mittendrin, aber
00:42:47: Caro: egal, Wir schlagen da jetzt den Bogen rein.
00:42:49: Caro: Da hast du es ja eben auch schon gesagt.
00:42:51: Caro: Testing ist dort eigentlich ein ganz, ganz
00:42:53: Caro: wichtiges Thema, weil ansonsten schießen
00:42:55: Caro: wir irgendwelche Sachen in die Produktion,
00:42:57: Caro: die wir nicht reinschießen sollten, weil
00:42:59: Caro: sie nicht funktionieren.
00:43:06: Caro: Also in der Datenmarktentwicklung kenne ich
00:43:06: Caro: jetzt persönlich nur UTP-SQL als
00:43:07: Caro: Testing-Tool, was man dort verwenden kann.
00:43:08: Caro: Hast du noch irgendwelche anderen Sachen
00:43:09: Caro: oder irgendwelche Hinweise für die Zuhörer?
00:43:12: Martin: Ja, da kann ich jetzt wieder ganz
00:43:13: Martin: unvoreingenommen auf das
00:43:14: Martin: JavaScript-Ecosystem verweisen.
00:43:17: Martin: Natürlich, die Maintainer von UTL, ps SQL,
00:43:22: Martin: die machen einen Megadrop.
00:43:24: Martin: Ich finde das klasse.
00:43:25: Martin: das ist ein Open-Source-Projekt, sollte man
00:43:27: Martin: tatsächlich wirklich benutzen, wenn man PS
00:43:30: Martin: SQL-Anwendungen hat.
00:43:31: Martin: Und es gibt auch gute Videos von Ask Tom,
00:43:34: Martin: wo Jacek und Philipp mit Conor dann quasi
00:43:39: Martin: sozusagen mal durchlaufen wie sieht das aus,
00:43:41: Martin: wenn ich das benutze, wenn ich es bisher
00:43:43: Martin: noch im Einsatz gehabt habe?
00:43:45: Martin: Ich finde, auch testen ist unfassbar
00:43:47: Martin: wichtig.
00:43:47: Martin: aber es sollten halt auch gute Tests sein,
00:43:51: Martin: die man schreibt.
00:43:51: Martin: Also jetzt testen um das Testen zu willen,
00:43:53: Martin: das bringt nicht viel, denn man sollte
00:43:54: Martin: schon tatsächlich die Sachen testen, die
00:43:56: Martin: tatsächlich auch Probleme bereiten können.
00:43:58: Martin: Also, teststrategie ist auch ganz wichtig,
00:44:01: Martin: und da kenne ich tatsächlich aus dem
00:44:03: Martin: Open-Source-Bereich auch keine weiteren
00:44:05: Martin: weiteren Frameworks, die da helfen würden.
00:44:07: Martin: Für JavaScript ist die Sache schon wieder
00:44:08: Martin: ein bisschen anders, weil JavaScript
00:44:11: Martin: Unit-Tests wie gesagt, man macht das ja
00:44:14: Martin: schon seit sozusagen Menschen gedenken,
00:44:16: Martin: dass man irgendwelche Unit-Tests in
00:44:18: Martin: JavaScript, in Node-Anwendungen schreibt,
00:44:20: Martin: zum Beispiel.
00:44:22: Martin: Und da ist halt auch der Vorteil von Oracle,
00:44:25: Martin: der Datenbank 23.ai, dass ich eben auch auf
00:44:28: Martin: dieses Ökosystem, auf diese Infrastruktur
00:44:30: Martin: schon zurückgreifen kann, und da gibt es
00:44:32: Martin: auch jede Menge Best Practices, wie man das
00:44:34: Martin: machen kann.
00:44:35: Martin: Und wie es in der Open-Source-Welt so
00:44:37: Martin: üblich ist, gibt es auch zigtausend
00:44:39: Martin: verschiedene Frameworks.
00:44:40: Martin: Da ist es dann tatsächlich schwerer
00:44:41: Martin: rauszukriegen.
00:44:42: Martin: Welches nehme ich denn jetzt?
00:44:44: Martin: Was funktioniert denn für mich?
00:45:09: Martin: no-transcript halt das Spannende an der
00:45:13: Martin: JavaScript-Geschichte.
00:45:14: Martin: Also, es ist sehr viel mehr als Select,
00:45:17: Martin: insert, update, delete über den SQL-Driver
00:45:19: Martin: abzusetzen.
00:45:19: Martin: Du hast unfassbar viele Möglichkeiten,
00:45:22: Martin: coole Sachen zu machen.
00:45:23: Martin: Jetzt gibt es auch zum Beispiel in ORMS
00:45:25: Martin: seit einiger Zeit die Möglichkeit,
00:45:46: Martin: no-transcript in so eine Pipeline einbauen,
00:45:52: Martin: so eine CI-Pipeline einbauen, wo ich dann
00:45:53: Martin: halt eben syntaktisch teste.
00:45:56: Martin: Ich habe einen Linter vielleicht will ich
00:45:58: Martin: Prettier über den Code laufen lassen, der
00:45:59: Martin: das dann so formatiert, dass es immer
00:46:01: Martin: gleich aussieht, und dann kann ich meine
00:46:03: Martin: Unit und Integration-Tests laufen lassen,
00:46:06: Martin: und diese Sachen, die gibt es, und da kann
00:46:07: Martin: man auch im Internet nachlesen, und dann
00:46:09: Martin: findet man halt schon so Jammer-Dateien,
00:46:11: Martin: die man dann einfach nur anpassen muss für
00:46:14: Martin: seine eigenen Zwecke.
00:46:15: Martin: Also das ist schon wirklich sehr, sehr cool,
00:46:18: Martin: was möglich ist.
00:46:19: Martin: Aber ja, unit-tests, die sind natürlich
00:46:22: Martin: sehr wichtig, aber man sollte auch über die
00:46:24: Martin: Unit-Tests nicht vergessen, dass Unit-Tests
00:46:26: Martin: alleine nicht garantieren, dass die
00:46:28: Martin: Anwendung richtig funktioniert.
00:46:31: Martin: Ja, genau Weil, selbst wenn alle Unit-Tests
00:46:32: Martin: funktionieren, kommt es immer noch vor,
00:46:34: Martin: dass Dinge schief gehen, weil die
00:46:36: Martin: Kombination aus verschiedenen Sachen so
00:46:38: Martin: individuell noch nicht getestet worden ist.
00:46:40: Caro: Ja auch die UI selber.
00:46:42: Caro: die klammere ich jetzt die ganze Zeit ja
00:46:43: Caro: auch so ein bisschen aus.
00:46:45: Caro: Also wie gesagt gesagt für mich, wo ich ja
00:46:46: Caro: im Datenbankumfeld unterwegs bin, die
00:46:48: Caro: Apex-Anwendung mit der Versionierung,
00:46:50: Caro: vielleicht auch Trunk-Based Development und
00:46:51: Caro: so, ich glaube, das ist auch nochmal ein
00:46:53: Caro: ganz eigenes Thema und eine ganz eigene
00:46:56: Caro: Welt, auch wenn es wahrscheinlich möglich
00:46:58: Caro: ist.
00:46:58: Caro: Aber ich glaube, da muss man dann nochmal
00:46:59: Caro: ein bisschen umdenken, und auch da ist
00:47:02: Caro: Testing dann natürlich nochmal.
00:47:04: Caro: UI-Testing ist dann gegebenenfalls, also
00:47:06: Caro: nicht gegebenenfalls es ist auf jeden Fall
00:47:07: Caro: nochmal was anderes als den Datenbankcode
00:47:09: Caro: selbst zu testen.
00:47:11: Caro: Das ist vielleicht nochmal ein Thema für
00:47:13: Caro: eine weitere Session, dass man sich darüber
00:47:16: Caro: nochmal unterhält.
00:47:17: Caro: Das, was du eben beschrieben hattest, hast
00:47:18: Caro: du da zufällig schon einen Blogartikel oder
00:47:22: Caro: sowas geschrieben, oder nimmst du das als
00:47:23: Caro: Inspiration mit, das vielleicht mal in
00:47:26: Caro: einem Blog-Artikel zusammenzufassen?
00:47:28: Martin: Also, als ich angefangen habe bei Oracle
00:47:29: Martin: war eben eines der Themen, das ich
00:47:31: Martin: übernommen habe, war eben MatheLingual
00:47:32: Martin: Enfield mit dem JavaScript-Teil im Moment
00:47:35: Martin: für 23.ai.
00:47:36: Martin: Aber das andere Thema, was Gerhard, meinem
00:47:38: Martin: Chef auch sehr am Herzen liegt, ist das
00:47:40: Martin: Thema CICD Und was wir gemacht haben.
00:47:42: Martin: letztes Jahr, also relativ lange haben wir
00:47:45: Martin: daran gearbeitet, uns Ideen, uns
00:47:48: Martin: gegenseitig Ideen an den Kopf geworfen, was
00:47:50: Martin: hältst du davon, wie sollte man das machen?
00:47:52: Martin: Und wir haben dann so ein Tech-Brief
00:47:53: Martin: geschrieben, und das nennt sich
00:47:56: Martin: Implementing DevOps Principles with Oracle
00:47:59: Martin: Database, und es ist relativ mächtig als
00:48:01: Martin: Dokument, wobei es meiner Meinung nach halt
00:48:04: Martin: gerade so an der Oberfläche kratzt.
00:48:06: Martin: aber das ist halt so.
00:48:07: Martin: über die ICD, devops und diese Themen mit
00:48:11: Martin: Datenbank, da könntest du locker ein
00:48:12: Martin: 300-seitiges Buch schreiben, und es ist
00:48:14: Martin: trotzdem noch nicht alles gesagt.
00:48:16: Martin: Also haben wir versucht, so einen
00:48:18: Martin: Kompromiss zu machen.
00:48:18: Martin: Da steht dann so ziemlich alles drin, was
00:48:21: Martin: ich zu dem Thema wichtig finde.
00:48:23: Martin: Also, warum soll man das machen?
00:48:24: Martin: Warum sollte ich Versionierung verwenden?
00:48:26: Martin: Zum Beispiel?
00:48:27: Martin: wir hatten über Git gesprochen, ja, wenn es
00:48:29: Martin: mich doch zurückhält, wenn es mich langsam
00:48:31: Martin: macht, und das Ganze ist dann so so.
00:48:32: Martin: Test-Driven-Development ist da so eine
00:48:34: Martin: Stufe drüber.
00:48:35: Martin: Also, bevor ich irgendwie welchen Code
00:48:37: Martin: schreibe, überlege ich mir einen Test, und
00:48:38: Martin: dann implementiere ich den Test, der am
00:48:42: Martin: Anfang natürlich fehlschlägt, und dann mein
00:48:45: Martin: Feature funktioniert.
00:48:46: Martin: Aber bis das Feature dann mal geschrieben
00:48:48: Martin: ist, brauche ich vielleicht länger.
00:48:50: Martin: Und dann ist das halt dieser Trade-off
00:48:52: Martin: zwischen okay, ich kann jetzt nicht sofort
00:48:54: Martin: loshacken und was in die Datenbank
00:48:56: Martin: schreiben, sondern ich muss mir jetzt
00:48:58: Martin: Gedanken darüber machen, und das kommt auch
00:49:00: Martin: nicht bei jedem gut an.
00:49:02: Martin: Das ist auch wieder so eine kulturelle
00:49:03: Martin: Frage.
00:49:04: Martin: Da steht aber auch was zu drin, Und dann
00:49:06: Martin: haben wir auch was zum Deployment.
00:49:09: Martin: Also Frage Da steht aber auch was zu drin,
00:49:09: Martin: und dann haben wir auch was zum Deployment.
00:49:10: Martin: also über SQL benutze ich da sehr viel.
00:49:11: Martin: Liquidbase ist ein Format, worüber wir
00:49:13: Martin: jetzt noch nicht gesprochen haben, aber das
00:49:14: Martin: ist eben genau der Weg, den ich so sehe,
00:49:18: Martin: wie man Datenbankänderungen in die
00:49:20: Martin: Datenbank einspielen sollte, wobei das auch
00:49:22: Martin: wieder manchmal kontrovers ist.
00:49:24: Martin: Da gibt es manche, die machen das nicht, da
00:49:25: Martin: gibt es Leute, die machen das, und dann
00:49:27: Martin: hast du Chaos.
00:49:29: Martin: Man müsste sich auch einigen, dass alle das
00:49:31: Martin: machen, was auch wieder eventuell
00:49:33: Martin: Diskussionsbedarf darstellt.
00:49:36: Martin: und es geht auch, wie man Testumgebungen
00:49:38: Martin: wirklich schnell hervorzaubern kann für
00:49:41: Martin: Pipelines, weil man will ja nicht zehn
00:49:42: Martin: Minuten warten, bis die Pipeline die
00:49:43: Martin: Testumgebung erstellt hat bis zu
00:49:49: Martin: Online-Schema-Migration mit Edition-Based
00:49:50: Martin: Redefinition und DBMS-Redefinition und der
00:49:51: Martin: ganze Kram.
00:49:52: Martin: Also, ich habe mir da schon relativ viel
00:49:53: Martin: Gedanken zugemacht.
00:49:54: Martin: Ich würde mich freuen, wenn es Feedback zu
00:49:56: Martin: dem Tech-Brief gibt.
00:49:58: Martin: Das ist halt.
00:49:59: Martin: es ist nicht ein One-Man's-Opinion.
00:50:00: Caro: also, es ist schon relativ viel
00:50:02: Caro: Gehirnschmalz reingeflossen aber es würde
00:50:23: Caro: mich halt interessieren, wie man das im
00:50:26: Caro: Feld ach Mensch, das ist so fortgeschritten.
00:50:29: Caro: Ich würde trotzdem gerne nochmal kurz das
00:50:31: Caro: Thema anreißen, wenn das okay ist.
00:50:34: Caro: Ja, klar, okay, super.
00:50:35: Caro: Also, wenn wir jetzt auch von automatischem
00:50:37: Caro: Deployment sprechen und sowas oder mehr
00:50:40: Caro: oder minder automatischem Deployment, dann
00:50:42: Caro: ist das oft auch eine Sorge von den Leuten,
00:50:44: Caro: gerade im Datenbankkontext.
00:50:46: Caro: Was ist denn mit den Dependencies?
00:50:47: Caro: Also, man muss dann ja beim Deployment
00:50:49: Caro: möglichst die Dependencies einhalten,
00:50:51: Caro: sodass das dann auch überhaupt deployed
00:50:54: Caro: werden kann.
00:50:55: Caro: Idealerweise würde sich dann die
00:50:57: Caro: Installationsstrecke, sag ich mal, aber
00:50:59: Caro: auch automatisch dieses Skript, was dann
00:51:01: Caro: ausgeführt werden würde, zusammenbauen.
00:51:04: Caro: Kommt da dann an deiner Stelle Liquibase
00:51:07: Caro: ins Spiel, oder ist Liquibase für dich
00:51:09: Caro: primär, tatsächlich die Struktur abzubilden,
00:51:12: Caro: also Tabellen, spalten, indizes etc?
00:51:16: Martin: Ich mache mit Liquibase mehr oder weniger
00:51:19: Martin: alles, weil ich hatte oftmals das Problem
00:51:23: Martin: in meinem früheren Leben in einem früheren
00:51:26: Martin: Leben.
00:51:28: Martin: Da war ich Consultant, und dann gab es dann
00:51:29: Martin: so vier verschiedene Testumgebungen, und
00:51:30: Martin: dann gab es eine Integration und einen
00:51:32: Martin: Performance-Test, und dann gab es dann
00:51:34: Martin: Produktion Und die vier verschiedenen
00:51:37: Martin: Testdatenbanden.
00:51:38: Martin: Die sahen alle komplett unterschiedlich aus.
00:51:41: Martin: Also jedes Mal, wenn man irgendein
00:51:42: Martin: Deployment da drauf gemacht hat, als BBA
00:51:44: Martin: wusstest du, wie funktioniert das.
00:51:46: Martin: Aber viel wichtiger noch ist okay, das
00:51:48: Martin: funktioniert jetzt auf der Test 1, das
00:51:49: Martin: funktioniert nicht auf der Test 2, das
00:51:51: Martin: funktioniert auf der Integration, das
00:51:53: Martin: funktioniert jetzt auf der Produktion.
00:51:57: Martin: Und ich dachte halt immer, der Sinn von
00:51:58: Martin: Testen ist eben, dass man nachher relativ
00:52:00: Martin: sicher ist, dass, was man auf Produktion
00:52:02: Martin: einspielt, dass es auch so funktioniert.
00:52:05: Martin: Du willst nämlich nicht am Samstag der
00:52:06: Martin: Einzige sein, der dann das jetzt noch durch
00:52:09: Martin: der View kompiliert.
00:52:10: Martin: Das Package braucht dies und jenes.
00:52:12: Martin: Wo ist das?
00:52:12: Martin: Wo kommt das her?
00:52:13: Martin: Was kann ich tun?
00:52:14: Martin: Hilfe, kein Entwickler da.
00:52:15: Martin: Das ist doof.
00:52:17: Martin: Und von daher bin ich halt ein großer
00:52:18: Martin: Freund von Liquibase für alle Datenbank
00:52:21: Martin: Interaktionen, weil da kann ich eben über
00:52:24: Martin: Tags und andere Sachen kann ich dann auch
00:52:26: Martin: die History sehen.
00:52:27: Martin: Also dann sehe ich ganz genau, welches
00:52:28: Martin: Skript ist wann von wem eingespielt worden,
00:52:33: Martin: und das ist halt Goldwert, und das hätte
00:52:34: Martin: ich damals gerne gehabt.
00:52:35: Martin: Dann könnte ich nämlich sagen Test 1 und
00:52:36: Martin: Test 2 verglichen, ja, da fehlen aber noch
00:52:38: Martin: vier Skripte, zum Beispiel, und dann könnte
00:52:40: Martin: man das nachziehen.
00:52:41: Martin: Also, liquibase ist für mich ein
00:52:43: Martin: unverzichtbares Werkzeug geworden, um
00:52:46: Martin: Änderungen nachzuziehen.
00:52:47: Martin: Aber es ist halt eben so einmal Liquid Base,
00:52:49: Martin: immer Liquid Base, weil wenn du dann
00:52:51: Martin: anfängst, an Liquid Base vorbei
00:52:54: Martin: irgendwelche Sachen zu machen, dann geht
00:52:55: Martin: das garantiert irgendwann auch in die Hose,
00:52:57: Martin: und dann ist auch ganz, ganz blöd für
00:52:59: Martin: denjenigen, der das dann wieder nachts um
00:53:02: Martin: 22 Uhr in Ordnung bringen muss.
00:53:05: Caro: Ja, nice, du hast ja vorhin schon also nur
00:53:07: Caro: um nochmals wiederholt zu wissen und das
00:53:09: Caro: hier zu hören dass, wenn sie jetzt sofort
00:53:11: Caro: starten wollen, all ihre kulturellen Sachen
00:53:14: Caro: für Stiplement so umstellen wollen man kann
00:53:16: Caro: ja mit SQL CL, auch gibt es ja eine
00:53:18: Caro: Liquibase-Integration, und da kann man dann
00:53:20: Caro: auch, wenn man ein bestehendes Projekt hat,
00:53:21: Caro: ja auch schon alles exportieren an
00:53:23: Caro: Strukturen Also, sodass man dann auch auf
00:53:25: Caro: Basis eines bestehenden Systems anfangen
00:53:28: Caro: kann, starten kann.
00:53:29: Martin: Ja.
00:53:30: Martin: Oder du sagst ganz einfach okay, das ist.
00:53:34: Martin: Bisher ist mein System mit anderen Mitteln
00:53:35: Martin: und Technologien bereitgestellt worden.
00:53:37: Martin: Und ab dem Zeitpunkt jetzt arbeiten wir
00:53:39: Martin: halt eben mit Liquibase dass man eben sagt
00:53:42: Martin: ja, die Tabelle, ich nehme das jetzt an,
00:53:43: Martin: dass die Tabelle T1 existiert, wie sie
00:53:45: Martin: existiert, und über Liquibase kannst du ja
00:53:48: Martin: auch SQL-Dateien als Format.
00:53:49: Martin: Du musst ja nicht das XML-Format nehmen, du
00:53:51: Martin: kannst SQL nehmen.
00:53:52: Martin: Und dann kannst du ganz einfach sagen
00:53:53: Martin: Liquibase Format, jetzt SQL und dann den
00:53:55: Martin: Header, und dann sagst du alter Table T1,
00:53:58: Martin: add Column, was auch immer.
00:54:01: Martin: Und dann sagst du ganz einfach ich mitgebe
00:54:03: Martin: jetzt von da aus Vorrang.
00:54:04: Martin: Du musst dann halt natürlich sicherstellen,
00:54:06: Martin: dass deine Testumgebungen, auf denen du
00:54:07: Martin: entwickelst, auf demselben Stand sind wie
00:54:10: Martin: die Produktion.
00:54:11: Martin: Weil, wie gesagt, wenn du Testumgebungen
00:54:13: Martin: hast, die alle unterschiedlich sind, dann
00:54:15: Martin: kannst du damit nichts machen.
00:54:16: Martin: Von daher ist es dann wichtig, und das geht
00:54:17: Martin: halt in der Cloud gut, wenn du zum Beispiel
00:54:19: Martin: mit Autonomous arbeitest, kannst du eine
00:54:21: Martin: Autonomous Datenbank über Terraform klonen
00:54:23: Martin: oder OCI als CLI, und dann kannst du
00:54:25: Martin: dagegen testen.
00:54:26: Martin: Oder on-premises gibt es das Interface, das
00:54:29: Martin: PDB-Interface für Ords, sofern man die
00:54:33: Martin: Multi-Tenant-Leistung hat.
00:54:34: Martin: Da gibt es schon Mittel und Wege, wie man
00:54:36: Martin: das machen kann, und ich bin tatsächlich
00:54:38: Martin: der Meinung, ja, ich würde niemandem sagen,
00:54:40: Martin: wie er zu entwickeln hat, aber es ist
00:54:42: Martin: definitiv gut investierte Zeit, sich mal
00:54:45: Martin: mit dem Thema zu beschäftigen.
00:54:48: Caro: Ja, vor allen Dingen auch.
00:54:49: Caro: Es hört sich jetzt sehr simpel an, aber
00:54:51: Caro: diese Frage immer wenn ich jetzt
00:54:52: Caro: Strukturerweiterungen an der
00:54:53: Caro: Datenbanktabelle habe, wie schreibe ich das?
00:54:56: Caro: dann Schreibe ich das so, dass es
00:54:57: Caro: eigentlich nur einmal ausführbar ist.
00:54:58: Caro: Aber was ist denn, wenn ich das Skript dann
00:55:00: Caro: nochmal bearbeiten muss?
00:55:01: Caro: Muss ich es nochmal ausführen?
00:55:03: Caro: Dann kommt es auf einen Fehler.
00:55:04: Caro: Dann muss ich jetzt PLSQL-Code schreiben
00:55:07: Caro: mit execute immediate.
00:55:08: Caro: Das dann anlegen, dann ist die Historie der
00:55:12: Caro: Datenbank-Tabelle vielleicht so, dass ich
00:55:13: Caro: mir auf einmal meine neue Spalte
00:55:14: Caro: wegschmeiße, weil ich da früher vor keine
00:55:17: Caro: Ahnung fünf Jahren oder so, habe ich da mal
00:55:19: Caro: was eingebaut, dass die Spalte mit genau
00:55:20: Caro: dem Namen eigentlich weggeschmissen werden
00:55:22: Caro: soll und so.
00:55:22: Caro: Und das hat man natürlich dann.
00:55:24: Caro: Mit Liquibase hat man ja die Version
00:55:26: Caro: sozusagen, die ja dann dokumentiert ist in
00:55:28: Caro: der Datenbank.
00:55:28: Caro: Die Datenbank ist jetzt auf Version XYZ
00:55:31: Caro: dass man dann, dass das Tool weiß okay, die
00:55:34: Caro: Tabelle, die gehört dahin.
00:55:36: Caro: Äh, quatsch, die Spalte, die soll nicht
00:55:37: Caro: weggeschmissen werden.
00:55:39: Martin: Ja, genau ja, wobei es halt natürlich auch
00:55:42: Martin: so ein bisschen wieder anders ist als in
00:55:44: Martin: anderen Sprachen, in Java zum Beispiel.
00:55:45: Martin: wenn ich dann meine Java-Klasse habe und
00:55:47: Martin: schreibe dann was dran, und dann habe ich
00:55:49: Martin: dann Version 1 in meiner Produktion, und
00:55:51: Martin: dann ändere ich den existierenden Code und
00:55:54: Martin: baue dann ein neues Feature ein, und das
00:55:57: Martin: geht dann wieder in Git rein, aber unter
00:55:59: Martin: demselben Namen.
00:55:59: Martin: und das geht eben in Liquibase nicht.
00:56:01: Martin: Das ist eben das, wo man, wie du sagst, ja,
00:56:04: Martin: ich kann jetzt nicht einfach die Tabelle,
00:56:06: Martin: das Tabellen-DDL ändern, weil Liquibase
00:56:09: Martin: eine Prüfsumme errechnet über die Datei,
00:56:11: Martin: und er sagt jetzt okay, eingespielt habe
00:56:13: Martin: Prüfsumme 1, 2, 3, und jetzt ist aber die
00:56:15: Martin: Prüfsumme 3, 4, 5, und das heißt,
00:56:17: Martin: irgendeiner hat dann rumgebastelt, das
00:56:19: Martin: fasse ich nicht an, und dann hast du halt
00:56:21: Martin: auch diese Deployment-S.
00:56:22: Martin: Oh nein, oh Gott, ja, das ist halt ein
00:56:26: Martin: anderer Workflow.
00:56:27: Martin: Man muss dann eben eine neue Datei
00:56:28: Martin: schreiben.
00:56:28: Martin: Die neue Datei muss man dann einspielen.
00:56:30: Martin: Also es ist halt tatsächlich so ein
00:56:33: Martin: Migrationsprozess.
00:56:34: Martin: Das heißt, wenn ich jetzt auf T0, dann ist
00:56:36: Martin: der Stand so und so, t1 ist dann so, und
00:56:38: Martin: wenn ich in T1 einen Fehler mache, muss ich
00:56:40: Martin: den in T2 korrigieren.
00:56:45: Martin: Ich kann jetzt nicht die Dateien in T1
00:56:47: Martin: modifizieren, also zum Zeitstempel 1 und
00:56:48: Martin: die nochmal einführen.
00:56:48: Martin: Das geht eben nicht.
00:56:50: Martin: Da muss man halt wissen muss man auch für
00:56:52: Martin: sein Team akzeptieren, oder muss das Team
00:56:53: Martin: akzeptieren?
00:56:54: Martin: und wie gesagt, es müssen halt alle
00:56:57: Martin: irgendwie mitmachen, ansonsten macht es
00:57:00: Martin: keinen Spaß.
00:57:01: Martin: Und das ist wieder, um auf das Buch von MED
00:57:03: Martin: Freeman zurückzukommen es ist ganz wichtig,
00:57:06: Martin: dass man die Leute mitnimmt zurückzukommen.
00:57:07: Martin: Es ist ganz wichtig, dass man die Leute
00:57:08: Martin: mitnimmt, dass man kommuniziert, und dieser
00:57:10: Martin: menschliche Faktor ist sehr, sehr, sehr
00:57:11: Martin: wichtig.
00:57:12: Caro: Ja, und auch dokumentiert, denke ich das
00:57:14: Caro: dann zusätzlich.
00:57:15: Caro: Aber das gehört ja alles zu der kulturellen.
00:57:18: Martin: Fähre, aber wir dokumentieren doch immer
00:57:19: Martin: alles, oder?
00:57:20: Caro: Genau, absolut.
00:57:22: Caro: Wir wissen immer alle, was wir machen
00:57:23: Caro: müssen.
00:57:25: Martin: Dokumentation ist auch immer auf dem
00:57:26: Martin: neuesten Aktuellsten gestellt.
00:57:28: Martin: Da gibt es nichts, was veraltet ist,
00:57:30: Martin: niemals.
00:57:32: Caro: Okay, also ich, tatsächlich hätte ich noch
00:57:34: Caro: sehr, sehr viele mehr Fragen, aber
00:57:36: Caro: abschließend, weil die Zeit schon so
00:57:38: Caro: fortgeschritten ist, abschließend noch kurz
00:57:40: Caro: die Frage, weil ich es nicht mehr auf dem
00:57:41: Caro: Schirm hatte, dieses, das Feature, in der
00:57:43: Caro: Datenbank Edition-Based-Sachen abzulegen.
00:57:46: Caro: War das, hat das irgendwelche?
00:57:48: Caro: kostet das was?
00:57:49: Caro: Oder hat man das theoretisch in jeder
00:57:50: Caro: Version?
00:57:51: Caro: Weißt du das zufällig?
00:57:52: Martin: Da müsste ich ins Licensing-Guide
00:57:54: Martin: reingucken.
00:57:54: Martin: Das weiß ich tatsächlich nicht auswendig.
00:57:56: Martin: Aber ich weiß, ich kenne die Leute, die das
00:57:58: Martin: sozusagen verantworten.
00:58:01: Martin: Das gehört zu Glenn Hawkins im MAA-Team,
00:58:20: Martin: Und das ist tatsächlich auch ein super
00:58:22: Martin: interessantes Thema, was man sehr
00:58:23: Martin: kompliziert anwenden kann, aber gar nicht
00:58:24: Martin: muss.
00:58:24: Martin: Also man kann das ja, Edition-Based ja.
00:58:26: Martin: Dann ist es auch so eine Technologie, wo
00:58:28: Martin: man sagt, hier vorheriges Wissen vielleicht
00:58:30: Martin: mal kurz zur Seite legen und mal
00:58:32: Martin: unvoreingenommen reinschauen, Man kann
00:58:36: Martin: alles machen, muss aber nicht mit der EBA
00:58:39: Martin: alles machen.
00:58:40: Martin: Also, wenn man nur Code ändern will, ist
00:58:42: Martin: das auch total okay, meiner Meinung nach
00:58:44: Martin: Danke dir.
00:58:46: Caro: Und ja, dann würde ich sagen danke, vielen
00:58:49: Caro: Dank.
00:58:49: Caro: Vielleicht trifft man sich ja nochmal auf
00:58:50: Caro: der Konferenz, dann können wir nochmal in
00:58:52: Caro: eine dritte Session reingehen.
00:58:56: Caro: Ja, genau Wie du mitgekriegt hast.
00:58:57: Caro: ich quatsche viel, wenn ich gefragt werde
00:59:05: Caro: nicht so viele Berührungspunkte, also mit
00:59:06: Caro: den Smart TV und so natürlich schon, aber
00:59:07: Caro: gerade mit so CI, cd und wie man das dann
00:59:09: Caro: am besten aufbaut und natürlich auch den
00:59:12: Caro: Leuten dann gut vermitteln kann, dass es
00:59:14: Caro: ganz gut ist, das zu haben, das genau damit
00:59:17: Caro: hatte ich noch nicht so viele
00:59:18: Caro: Berührungspunkte, noch nicht so viel
00:59:19: Caro: Erfahrung.
00:59:20: Caro: Deswegen finde ich das immer super spannend,
00:59:23: Caro: wenn ich, wenn es möglich ist und ich die
00:59:24: Caro: Sachen auch finde, wenn es möglich ist und
00:59:26: Caro: ich die Sachen auch finde, werde ich alle
00:59:27: Caro: die Bücher, die du erwähnt hast und so, und
00:59:28: Caro: den Guide natürlich.
00:59:29: Caro: Diesen Tech Brief werde ich dann auch
00:59:30: Caro: nochmal in den Show Notes verbinden, äh
00:59:32: Caro: verlinken, meine ich, und natürlich dein
00:59:34: Caro: Profil.
00:59:36: Caro: Und ja, danke an der Stelle nochmal für das
00:59:38: Caro: Interview Nummer zwei und danke auch an die.
00:59:44: Caro: Zuhörer.
00:59:44: Caro: Ja, vielen Dank.
00:59:45: Caro: Musik, musik, musik Musik.
Neuer Kommentar