Dieser Podcast ist eine initiative der Development Community des DOAG e.V.

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

Dein Name oder Pseudonym (wird öffentlich angezeigt)
Mindestens 10 Zeichen
Durch das Abschicken des Formulars stimmst du zu, dass der Wert unter "Name oder Pseudonym" gespeichert wird und öffentlich angezeigt werden kann. Wir speichern keine IP-Adressen oder andere personenbezogene Daten. Die Nutzung deines echten Namens ist freiwillig.