Has this happened before?

  1. 01
    Is this new?
    Check the recorded history.
  2. 02
    What happened last time?
    Ask whoever was on call.
  3. 03
    Did anyone fix it?
    Hopefully someone wrote it down.

David Budáčdavidbudac.cz

Building a wiki from database logs, model proposals, and notes from the people fixing things.

Constructed fin1 case study · real workbench · separate measured model experiment

Engineering talk · case-study walkthrough and measured model calls01 / 42

Spoken notes

Before debugging, we want three things: have we seen this, what happened last time, and did anyone fix it? Logbook builds a wiki from Oracle logs and gives engineers a place to record what they tried. I will follow a constructed fin1 case study loaded into the real workbench. The dated reports and actions illustrate the workflow; they are not evidence of historical production runs. Later I will show two actual model calls using this case-study data, with their inputs and outputs retained.

Presenter cue: P opens presenter view. S starts the clock. N notes, T contents.

David Budáč

Job title
Oracle database consultant at a large bank. In modern talk: "ops".
Twenty years of
Oracle. Yes, still. It runs the bank, the bank runs on it, and I run around it.
What that means for you
The errors in this talk come from the database world and have numbers like ORA-04031. Swap the prefix and it is your stack: any log with a code, a host and a timestamp.
Not a data scientist
I did not train a model. I put one on call and made it write things down.
Elsewhere
davidbudac.cz · blog.davidbudac.cz · github.com/davidbudac

Spoken notes

Oracle database consultant at a large bank. In modern talk: "ops". Twenty years of it. So the errors here come from the database world and have numbers on them. Don’t let that put you off: an ORA code is an out-of-memory error with a name tag. The broader idea could apply to other infrastructure logs too; Oracle is where we started. I did not train a model. I put one on call and made it write things down.

Presenter cue: Start with plain text. Advance once to sweep the marker over Oracle database, the first bank, and ops. Keep the introduction brief.

What's the problem?

03 / 42

Spoken notes

Start with the problem: what makes interpreting Oracle events difficult, and what changes when the environment is isolated?

One database, one afternoon

2026-09-15T13:00:00.104ZThread 1 advanced to log sequence 31822 (LGWR switch)…2026-09-15T13:00:00.104Z Current log# 4 seq# 31822 mem# 0: /u01/oradata/FIN1…2026-09-15T13:00:02.517ZARC2 (PID:41207): Archived Log entry 31819 added for …2026-09-15T13:15:00.241ZThread 1 advanced to log sequence 31823 (LGWR switch)…2026-09-15T13:15:00.241Z Current log# 1 seq# 31823 mem# 0: /u01/oradata/FIN1…2026-09-15T13:15:02.660ZARC3 (PID:41209): Archived Log entry 31820 added for …2026-09-15T13:22:41.093ZGLPDB(3):TABLE GL.GL_JE_LINES: ADDED INTERVAL PARTITI…2026-09-15T13:30:00.377ZThread 1 advanced to log sequence 31824 (LGWR switch)…2026-09-15T13:30:00.377Z Current log# 2 seq# 31824 mem# 0: /u01/oradata/FIN1…2026-09-15T13:30:02.811ZARC0 (PID:41203): Archived Log entry 31821 added for …2026-09-15T13:45:00.502ZThread 1 advanced to log sequence 31825 (LGWR switch)…2026-09-15T13:45:00.502Z Current log# 3 seq# 31825 mem# 0: /u01/oradata/FIN1…2026-09-15T13:45:02.940ZARC1 (PID:41205): Archived Log entry 31822 added for …2026-09-15T14:00:00.618ZThread 1 advanced to log sequence 31826 (LGWR switch)…2026-09-15T14:00:00.618Z Current log# 4 seq# 31826 mem# 0: /u01/oradata/FIN1…2026-09-15T14:00:01.207ZGLPDB(3):Resource Manager plan DEFAULT_PLAN is active2026-09-15T14:00:03.055ZARC2 (PID:41207): Archived Log entry 31823 added for …2026-09-15T14:02:30.119ZGLPDB(3):Resize operation completed for file# 12, fna…2026-09-15T14:05:12.104ZGLPDB(3):Errors in file /u01/app/oracle/diag/rdbms/fi…2026-09-15T14:05:12.331ZORA-04031: unable to allocate 4160 bytes of shared memory ("shared pool","SELE…2026-09-15T14:05:12.336ZIncident details in: /u01/app/oracle/diag/rdbms/fin1/…2026-09-15T14:05:19.902ZDumping diagnostic data in directory=[cdmp_2026091514…2026-09-15T14:05:41.277ZGLPDB(3):Errors in file /u01/app/oracle/diag/rdbms/fi…2026-09-15T14:05:41.281ZORA-04031: unable to allocate 4160 bytes of shared me…2026-09-15T14:06:03.590ZGLPDB(3):Errors in file /u01/app/oracle/diag/rdbms/fi…2026-09-15T14:06:03.594ZORA-04031: unable to allocate 4160 bytes of shared me…2026-09-15T14:06:27.115ZGLPDB(3):Errors in file /u01/app/oracle/diag/rdbms/fi…← this one1,936EVENTSONE DATABASE · ONE DAY158 of them in 33 minutes from 14:05Z

Spoken notes

One database, one day: 1,936 events. Almost all routine: log switches, archived logs, a partition added, a data file growing. Then at five past two in the afternoon: ORA-04031, the shared pool cannot allocate four kilobytes for a cursor. Another at 14:05:41. Another twenty seconds later. 158 of them in 33 minutes. Everyone here can look up the code. Whether this database has done this before, and what was done about it, is the harder question.

Presenter cue: Let the number land. Read the highlighted line, then the two below it.

Not everything is interesting, some things may be

2026-09-15T00:30:19.323Z Completed checkpoint up to RBA [0x2dc202.2.10], SCN: 21740872026-09-15T01:01:58.005Z Completed checkpoint up to RBA [0x296c78.2.10], SCN: 21271562026-09-15T01:12:37.296Z Thread 1 advanced to log sequence 31791 (LGWR switch), Current log# 4 seq# 31791 mem# 02026-09-15T01:41:00.032Z ALTER SYSTEM ARCHIVE LOG2026-09-15T02:10:25.087Z * (CONNECT_DATA=(SERVICE_NAME=glapp)(CID=(PROGRAM=JDBC Thin Client)(HOST=l2026-09-15T02:27:02.805Z ARC0 (PID:41203): Archived Log entry 31788 added for T-1.S-31791 ID 0x1d6c2f8a LAD:12026-09-15T02:57:23.810Z Beginning log switch checkpoint up to RBA [0x1f4a19.2.10], SCN: 21615822026-09-15T03:13:56.640Z Thread 1 advanced to log sequence 31792 (LGWR switch), Current log# 1 seq# 31792 mem# 02026-09-15T03:40:31.853Z Thread 1 advanced to log sequence 31793 (LGWR switch), Current log# 2 seq#2026-09-15T04:12:09.855Z WARNING: Heavy swapping observed on system in last 5 mins. pct of memory s2026-09-15T04:25:14.767Z GLPDB(3):Resize operation completed for file# 12, old size 51200K, new size 52224K2026-09-15T04:38:03.620Z GLPDB(3):AQPC: AQ Propagation Coordinator started2026-09-15T05:01:21.246Z Thread 1 advanced to log sequence 31794 (LGWR switch), Current log# 3 seq# 31794 mem# 02026-09-15T05:28:02.897Z * (CONNECT_DATA=(SERVICE_NAME=glapp)(CID=(PROGRAM=JDBC Thin Client)(HOST=l2026-09-15T05:54:42.783Z Completed checkpoint up to RBA [0x2ae08c.2.10], SCN: 21472852026-09-15T06:10:36.357Z GLPDB(3):Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter2026-09-15T06:22:59.353Z GLPDB(3):Resource Manager plan DEFAULT_PLAN is active2026-09-15T06:27:11.705Z GLPDB(3):Resource Manager plan DEFAULT_PLAN is active2026-09-15T06:28:14.935Z ARC1 (PID:41205): Archived Log entry 31789 added for T-1.S-31792 ID 0x1d6c2f8a LAD:12026-09-15T06:39:05.335Z * (CONNECT_DATA=(SERVICE_NAME=glapp)(CID=(PROGRAM=JDBC Thin Client)(HOST=l2026-09-15T06:42:13.416Z GLPDB(3):Resize operation completed for file# 12, old size 51200K, new size 52224K2026-09-15T07:08:56.582Z ALTER SYSTEM ARCHIVE LOG2026-09-15T07:34:00.089Z GLPDB(3):AQPC: AQ Propagation Coordinator started2026-09-15T07:58:51.797Z GLPDB(3):AQPC: AQ Propagation Coordinator started2026-09-15T08:01:30.929Z GLPDB(3):AQPC: AQ Propagation Coordinator started2026-09-15T08:21:26.415Z Thread 1 advanced to log sequence 31795 (LGWR switch), Current log# 4 seq# 31795 mem# 02026-09-15T08:23:23.567Z Thread 1 advanced to log sequence 31796 (LGWR switch), Current log# 1 seq# 31796 mem# 02026-09-15T08:42:48.244Z Thread 1 advanced to log sequence 31797 (LGWR switch), Current log# 2 seq#2026-09-15T08:50:13.957Z Thread 1 advanced to log sequence 31798 (LGWR switch), Current log# 3 seq#2026-09-15T09:09:05.947Z Beginning log switch checkpoint up to RBA [0x2ef84e.2.10], SCN: 21444372026-09-15T09:26:23.740Z ALTER SYSTEM ARCHIVE LOG2026-09-15T09:44:03.312Z Warning: VKTM detected a forward time drift. Please check trace file for m2026-09-15T10:14:07.853Z ARC2 (PID:41207): Archived Log entry 31790 added for T-1.S-31793 ID 0x1d6c2f8a LAD:12026-09-15T10:43:43.662Z Thread 1 advanced to log sequence 31799 (LGWR switch), Current log# 4 seq# 31799 mem# 02026-09-15T10:44:23.036Z GLPDB(3):Resource Manager plan DEFAULT_PLAN is active2026-09-15T10:57:02.658Z Thread 1 advanced to log sequence 31800 (LGWR switch), Current log# 1 seq# 31800 mem# 02026-09-15T11:20:36.481Z GLPDB(3):Resource Manager plan DEFAULT_PLAN is active2026-09-15T11:48:27.492Z GLPDB(3):Resource Manager plan DEFAULT_PLAN is active2026-09-15T12:17:12.946Z Thread 1 advanced to log sequence 31801 (LGWR switch), Current log# 2 seq# 31801 mem# 02026-09-15T12:40:25.516Z Thread 1 advanced to log sequence 31802 (LGWR switch), Current log# 3 seq# 31802 mem# 02026-09-15T12:57:24.852Z Thread 1 advanced to log sequence 31803 (LGWR switch), Current log# 4 seq#2026-09-15T13:20:06.488Z GLPDB(3):Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter2026-09-15T13:28:37.242Z Thread 1 advanced to log sequence 31804 (LGWR switch), Current log# 1 seq# 31804 mem# 02026-09-15T13:43:43.799Z Thread 1 advanced to log sequence 31805 (LGWR switch), Current log# 2 seq# 31805 mem# 02026-09-15T13:55:24.063Z GLPDB(3):AQPC: AQ Propagation Coordinator started2026-09-15T14:18:49.291Z Thread 1 advanced to log sequence 31806 (LGWR switch), Current log# 3 seq# 31806 mem# 02026-09-15T14:29:45.965Z ARC3 (PID:41209): Archived Log entry 31791 added for T-1.S-31794 ID 0x1d6c2f8a LAD:12026-09-15T14:32:37.169Z Thread 1 advanced to log sequence 31807 (LGWR switch), Current log# 4 seq# 31807 mem# 02026-09-15T14:33:45.121Z * (CONNECT_DATA=(SERVICE_NAME=glapp)(CID=(PROGRAM=JDBC Thin Client)(HOST=l2026-09-15T15:03:52.216Z GLPDB(3):Errors in file /u01/app/oracle/diag/rdbms/fin1/fin1/trace/fin1_or2026-09-15T15:28:21.974Z GLPDB(3):AQPC: AQ Propagation Coordinator started2026-09-15T15:54:35.960Z Beginning log switch checkpoint up to RBA [0x211ca0.2.10], SCN: 21212492026-09-15T16:06:08.311Z ARC0 (PID:41203): Archived Log entry 31792 added for T-1.S-31795 ID 0x1d6c2f8a LAD:12026-09-15T16:34:08.871Z ARC1 (PID:41205): Archived Log entry 31793 added for T-1.S-31796 ID 0x1d6c2f8a LAD:12026-09-15T16:59:47.120Z ALTER SYSTEM ARCHIVE LOG2026-09-15T17:22:37.806Z Thread 1 advanced to log sequence 31808 (LGWR switch), Current log# 1 seq# 31808 mem# 02026-09-15T17:52:51.780Z * (CONNECT_DATA=(SERVICE_NAME=glapp)(CID=(PROGRAM=JDBC Thin Client)(HOST=l2026-09-15T18:24:15.818Z Completed checkpoint up to RBA [0x27f747.2.10], SCN: 21638572026-09-15T18:48:59.905Z Completed checkpoint up to RBA [0x2d925f.2.10], SCN: 21473882026-09-15T19:18:30.371Z GLPDB(3):Resource Manager plan DEFAULT_PLAN is active2026-09-15T19:46:00.651Z Thread 1 advanced to log sequence 31809 (LGWR switch), Current log# 2 seq# 31809 mem# 02026-09-15T20:12:49.157Z Thread 1 advanced to log sequence 31810 (LGWR switch), Current log# 3 seq# 31810 mem# 02026-09-15T20:19:46.227Z * (CONNECT_DATA=(SERVICE_NAME=glapp)(CID=(PROGRAM=JDBC Thin Client)(HOST=l2026-09-15T20:23:57.947Z ALTER SYSTEM ARCHIVE LOG2026-09-15T20:53:24.746Z Thread 1 advanced to log sequence 31811 (LGWR switch), Current log# 4 seq#2026-09-15T20:57:49.109Z GLPDB(3):AQPC: AQ Propagation Coordinator started2026-09-15T21:09:06.932Z Thread 1 advanced to log sequence 31812 (LGWR switch), Current log# 1 seq# 31812 mem# 02026-09-15T21:20:06.637Z * (CONNECT_DATA=(SERVICE_NAME=glapp)(CID=(PROGRAM=JDBC Thin Client)(HOST=lORA-04031: unable to allocate 4160 bytes of shared memory ("shared pool","SELECT AMOUNT_BASE FROM GL_B…2026-09-15T22:05:29.814Z GLPDB(3):Resize operation completed for file# 12, old size 51200K, new size 52224K2026-09-15T22:29:22.568Z * (CONNECT_DATA=(SERVICE_NAME=glapp)(CID=(PROGRAM=JDBC Thin Client)(HOST=l2026-09-15T22:54:00.326Z ALTER SYSTEM ARCHIVE LOG2026-09-15T23:08:20.060Z GLPDB(3):Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter2026-09-15T23:33:09.437Z ALTER SYSTEM ARCHIVE LOG2026-09-16T00:01:37.302Z Beginning log switch checkpoint up to RBA [0x23d3cc.2.10], SCN: 21555382026-09-16T00:14:18.873Z ARC2 (PID:41207): Archived Log entry 31794 added for T-1.S-31797 ID 0x1d6c2f8a LAD:12026-09-16T00:45:28.457Z Completed checkpoint up to RBA [0x23633e.2.10], SCN: 21353202026-09-16T00:55:45.752Z GLPDB(3):Resize operation completed for file# 12, old size 51200K, new size 52224K2026-09-16T00:56:54.079Z Thread 1 advanced to log sequence 31813 (LGWR switch), Current log# 2 seq# 31813 mem# 02026-09-16T01:10:43.447Z Beginning log switch checkpoint up to RBA [0x2e9052.2.10], SCN: 21171402026-09-16T01:25:38.792Z GLPDB(3):Resize operation completed for file# 12, old size 51200K, new size 52224K2026-09-16T01:37:18.664Z ARC3 (PID:41209): Archived Log entry 31795 added for T-1.S-31798 ID 0x1d6c2f8a LAD:12026-09-16T01:44:37.619Z krsv_proc_kill: Killing 1 processes (Process by index)2026-09-16T01:57:27.192Z GLPDB(3):Resource Manager plan DEFAULT_PLAN is active2026-09-16T02:01:41.839Z Completed checkpoint up to RBA [0x2c6d96.2.10], SCN: 21514692026-09-16T02:19:00.648Z * (CONNECT_DATA=(SERVICE_NAME=glapp)(CID=(PROGRAM=JDBC Thin Client)(HOST=l2026-09-16T02:50:14.283Z Thread 1 advanced to log sequence 31814 (LGWR switch), Current log# 3 seq# 31814 mem# 02026-09-16T02:50:41.108Z GLPDB(3):Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter1,936 events · one alert log · one dayroutinewarningcritical
AprilMayJuneJulyAugustSeptember4123885216037441582026-03-31first seenthe close failed · restarted after midnight2026-05-29more memorydoubled the pool · recurred in June2026-09-15mid-monthbusiness hours · not the closeORA-04031 · fin1 · the shared pool runs out at the close6 days · 2,826 failuresone incident · 2026-03-31 to 09-02 · seven fixesfive recurred · two held · back on 09-15

Spoken notes

Same error, fin1, first seen March 31 at the month-end close of the general ledger: 412 failures, the close did not finish, the on-call restarted the instance and reran it. April 30, the same. May 29, the same, and the next morning the shared pool was doubled, because that is what the vendor page says. June 30: 603 failures with the bigger pool. July 31: 744. Five month-ends, five restarts, one memory increase. Then a fix that held, and a clean close in August. Then September 15, mid-month, business hours. Does the next person get to read all that before restarting a sixth time?

Presenter cue: Step 0 zooms out of the dense file. Next key: the timeline. Read the bottom bar.

The problem isn’t just finding errors.

Some clues look routine.
The meaning is in the context.

What ran? What changed? What happened before?

Presentation framing06 / 42

Spoken notes

Finding an error code is only the beginning. Relevant clues can be ordinary messages: a job starting, a log switch, a change in the workload. Their presence does not prove a cause. We need to connect the events to the workload and to earlier investigations. Later, the measured example will show a model incorrectly blaming a routine log switch. This is why preserving context matters, and why people still check the interpretation.

An error code is not an explanation.

ORA-04031one line in the loga code, a byte count, a pool namewhat the right answer depends onversion and release update19c · RU 19.24 · one behaviour per RUplatform and editionLinux · Exadata · Windows · Standard or Enterpriseparameters that interactshared_pool_size · sga_target · cursor_sharingone-off patchesa fix on this host that the documentation never mentionswhat this team did beforethe last three attempts and how they endedwhere the answers livevendor documentationtwo sentences per codesupport notesone per version, referencing each otherpractitioner write-upsthe case that looked like yoursthe team’s own notesrunbooks · Confluence · chat threadspeople’s headswhoever was on call last timetens of thousands of codes · most never seen by most administratorsa closed-source operating system with thirty years of legacy baggage

Spoken notes

The code is the easy part. The right answer depends on the version and release update, the platform and edition, parameters that interact, one-off patches, and what this team already tried. The answers are spread across vendor documentation, support notes, practitioner write-ups, team records and people’s experience. The model needs enough technical context to find relevant explanations. The local investigation also needs the workload and action history to judge which explanation fits. In our case study, that means distinguishing the month-end close from the restatement job.

Oracle is not a simple system.

Closed source. Huge.
More than 30 years of history.

Some errors are new to you. Others appear once in a few years.
The tricky ones take research. Logbook should help.

Presentation framing08 / 42

Spoken notes

Oracle is a large, closed-source system with more than thirty years of history. Some errors you may never have seen before. Others appear once every few years, long enough to forget the last investigation. Those rare, tricky cases can take a lot of research. This project should help preserve what we learned and find the relevant history. A message may still be misleading, or a useful clue may not be labelled as an error, so the administrator must judge the context.

A proof of concept. Room to grow.

Oracle first.
Start with what we know.

Better in-house inference. Broader evaluation.
Then explore more infrastructure.

Presentation framing09 / 42

Spoken notes

This is a proof of concept, starting with Oracle because that is where we have strong expertise. We are testing whether retained context makes investigations more useful. Better in-house inference would let us explore greater scale. We also need broader evaluation before extending the approach to other infrastructure. The case study illustrates the workflow; the separate measured calls show what one local model actually did.

The volume

≈ 300 databasesprimary · standby · test× 3 logsFilebeaton every hostLogstashcategorises every linelog type · database · error codeElasticsearch≈ 450kevents per day≈ 164Mevents per yearalert log · listener log · Data Guard log, from every databaseestimate: 300 databases × 1,500 events per database-day
Estate size and event rate are estimates · confirm before the talkCollector pipeline10 / 42

Spoken notes

Roughly 300 databases, three logs each, about 1,500 events per database a day. That is 450,000 events a day. Filebeat ships the lines, Logstash labels them, Elasticsearch stores them. Searching that is fine. Keeping track of the investigations is not.

Presenter cue: Estimate on the slide; say so.

A bank. Not a startup.

“Move fast and break things”
is an incident report.

Conservative enterprise. Everything on-premises.
Move carefully. Keep the bank running.

Obviously, all the cool tools are not available.
so maybe we can do something ourselves

Target banking environment · on-premises infrastructure11 / 42

Spoken notes

This is a bank, not a startup. Move fast and break things is an incident report here. Pause for the joke. The database infrastructure, logs and operational context are all on premises, in a conservative enterprise environment. We cannot trade reliability for speed; the investigation has to fit those constraints. Obviously, all the cool tools are not available, so maybe we can do something ourselves. Later we will distinguish the intended isolated deployment from the broader cloud routes used in the prototype, and explain the boundary for external research.

Add more context to the alert

ORA-04031fin1 · 2026-09-15 · 14:05Zseen before · fixed in August · held four weeksOpen in Kibana ↗

ORA-04031: unable to allocate 4160 bytes of shared memory ("shared pool","SELECT AMOUNT_BASE FROM GL_BALANCES WH...","SQLA","tmp")

Yes · 5 month-ends from March to July 2026, the same close job on fin1.

First seen
2026-03-31 · 412 failures during the GLCLOSE run; the close did not complete
Incidents
one, resolved September 2 · risk noted: any job on the old close code path will reproduce it
Tried
7 interventions · 5 recurred · 2 held, including the release fix

last edit · AGENT · 2026-09-15 · last human action · resolve · 2026-09-02

digests/fin1/2026-09-15.mdes: oracle-logs-alert-default/e235824ea6a4339c1fdaerrors/ORA-4031.mdincident · 2026-03-31

original exactly as logged, with its document ID · generated written by the loops, each line citing an original

Spoken notes

Start with only the original fields: error code, database, timestamp, log message and evidence links. Advance once to expand the alert with the retained history: five month-ends, the incident, attempted fixes and the last human action. Advance again to label original versus generated fields. The history is useful because each claim links back to a retained record. Point at the Tried line and the residual risk.

How can we do this?

13 / 42

Spoken notes

Now the approach: keep the investigation local, preserve useful context, and connect the loops through a shared history.

LLMs. In a conservative bank.

Limited inference resources.
Sensitive context stays inside.

Not possible to ship the logs to a third-party agent.

Intended banking deployment boundary14 / 42

Spoken notes

The environment we are designing for is deliberately isolated. Sensitive logs and identifiable operational context stay inside the database infrastructure. We cannot simply connect a third-party agent to the logs. External research needs a separate, anonymized technical brief. That is the intended deployment boundary. The prototype configuration and experiments are not proof that this boundary has been deployed end to end.

Prototype topology · where everything runs

LOCAL · ON PREMISESREMOTE · INTERNETDatabase hostsFilebeat log shippingElasticsearchRaw log eventsLogbook workerLocal model · codeAgent harness · cronMemoriesWiki · GitHistory · actionsOn-call adminsRead · act · recordInternal sourcesIncidents · fixesCurated team notesInternal researchMatch local historyRebuild past fixesCloud modelPrototype reports + researchWiki context via local harnessPublic docs + sitesVendor documentationApproved practitioner sourcesshipreadwriteactionslocal contextmodel callsfindings returnweb researchPast-fix records:code, no model

Spoken notes

The local side holds database logs, the Logbook worker, the Git wiki and the administrators. The wiki is labelled memories: it retains history, actions and links to evidence. The downward arrow is the administrator recording actions into the wiki. Internal research uses our incident history, past fixes and curated team notes. In particular, past-fix tables are rebuilt by code without a model or web access. Public documentation and practitioner sites are on the remote internet side. The local agent harness calls the cloud model for configured prototype report and research routes, and the research route uses public sources. Findings return to the local worker for the wiki. This prototype can send wiki context to the cloud; it is distinct from the intended isolated brief-only design.

This is Logbook

Oracle estatePrimary + standby≈300 databasesAlert · listener · DGFilebeatElasticsearch3.2M documentsRaw log eventsRead-only accessLogbook · on premisesCompactorClassify · count · deltasOrchestrator + checksTrigger · validate · commitLocal modelStructured proposals.stateRegistry · ledger · telemetryWorkbench APIRead records · save actionsGit wikiDigests · journalsIncidents · errorsReports · actionsWorkbenchWeb app · control UIInvestigate · record actionsResolve · reopenGit remoteVersioned historyAdministratorsRead · decide · actCloud model · prototype routesSelected reports · lint · public-source researchKibana · LangfuseRuns · costs · prompts

Spoken notes

Four advances build the architecture. Database hosts ship logs with Filebeat. Elasticsearch retains the raw events. The local Logbook node compacts events, orchestrates calls, validates proposals and writes the Git wiki. Administrators use the Workbench web application as their control UI between themselves and those records: investigate, record actions, resolve and reopen. Its backend is the Workbench API inside the local node; the diagram abstracts that API mediation into the UI-to-wiki connection. The Git remote retains version history. Selected prototype calls use a cloud model; Kibana and Langfuse provide monitoring. The arrows are deliberately unlabelled; node contents explain each component.

We cannot leak anything to the cloud

Intended isolated design · prototype routes differ

Database infrastructure

Logs and workload context
Incident history and actions
Local model + wiki + admin

Build a technical brief
Remove identifiers · check before release

Technical brief →

← Cited findings

Cloud research

Search public sources
Compare explanations
Refresh reference material

Basically assisted and automated Google search

Research the technical problem outside. Interpret it against local history inside.

Spoken notes

This is the requirement for the intended isolated deployment: we cannot leak sensitive information to the cloud. Logs, workload context, incident history and actions stay inside. The external role is basically assisted and automated Google search, using a checked technical brief and returning cited findings. No wiki clone or infrastructure credentials go to that researcher. The prototype cloud routes shown earlier are broader; this title is a deployment requirement, not a claim that the current configuration guarantees it. End-to-end validation of the isolated path is still required.

Where the investigation notes go

Raw logswhat was logged?every event · timestamp · document IDElasticsearch keeps them, immutableon the card: the black lineand its es: idWikiwhat does it mean?dated interpretations, each citingthe digest and the IDs it came fromon the card: the blue answer5 earlier month-endsAdmin action historywhat did we do?what someone tried, its outcome,a confirmed resolutionon the card: 7 interventions5 recurred, 2 heldKeep the investigation and action history alongside the searchable logs

Spoken notes

Kibana finds the old log lines. I also want the explanation someone reached after reading them, and what they did. Logbook keeps that beside the incident and its action history: Markdown in git, updated by scheduled jobs and by administrators. The idea of a wiki maintained as new material arrives is borrowed. The next person gets something to read besides raw logs.

The agent and the administrators share the wiki

AgentSummarize · research · proposeShared wiki · working historyEventsDigest + incidentResearchDocs + findingsChangeAction + rollbackCheckSignal + reviewHistoryActions + outcomesAdministratorInvestigate · act · record

Spoken notes

The blue agent icon touches Events, Research and History: it summarizes evidence, researches references and proposes updates. The green administrator icon touches Research, Change, Check and History: people judge explanations, investigate, make changes, review recovery and record the outcome. Matching lines and colored edges show who contributes to each record. Code validates files and rebuilds history tables. The shared wiki keeps those contributions together; the agent does not own operational actions or incident resolution.

Which model gets which job? · Prototype

JOBMODELHARNESSWHY USE ITIngestNemotron · localpi · JSONFrequent JSON updatesRoutine report / reviewNemotron · localpi · JSONSummarize supplied historyNotable reportOpus · cloudClaude CodeRead across the wikiLint agentSonnet · cloudClaude CodeFix formatting and linksResearch / source reviewOpus · cloudClaude CodeBrowse and cite referencesPractitioner notesSonnet · cloudClaude Code · webPublic sources; no wiki accessMonitoring / past fixesNo modelPythonEvaluate signals; index actionsLocal: NVIDIA Nemotron 3.5 Lightning 30B-A3B · bulk thinking off; notable ingest thinking onOpus / Sonnet are configured aliases. Other adapters are supported but are not the active routes.

Local. Ingest, routine reports and review narration run on the resident Nemotron. No API charges.

Cloud. Notable reports, lint, research and the practitioner notes go to Claude. These are the recorded API charges.

No model. Monitoring and the past-fixes rebuild are plain Python over the records.

Spoken notes

These are the prototype routes, including broader cloud access than the intended isolated design. Most calls go to local Nemotron through pi, thinking off for bulk, on for notable ingest. Same resident model, no swapping. Claude Code runs Opus for notable reports and research, where it reads across pages or browses. Sonnet does lint and practitioner notes.

Presenter cue: Three presses, same order: local, cloud, none.

The prototype schedule

loopcadenceproducesmodel1 · ingestevery 2 h · 23:30digests + one proposalstructured · local2 · reportpost-ingest · 23:30fleet reportstructured local · agentic cloud3 · lintMonday 08:00wiki checksagentic · cloud4 · researchMonday 09:00error-page Referenceagentic · cloud · web4 · caveatsMonday 09:30practitioner notescloud · web search only4 · sources1st of monthsource catalogagentic · cloud · web4 · past fixesdaily 23:45## Past fixes on every error pageno model5 · reviewMonday 10:00review inboxdeterministic select · local narrationmonitoringevery tickrecovery verdictsno modelResearch includes the source review and past fixes; monitoring runs separatelyThe harness checks each model result; wiki edits run under a lock

The local model. Nemotron 30B, 3B active, runs locally for ingest, routine reports and review narration. No API charges.

The cloud. Claude handles notable reports, lint and research. These calls account for the recorded API charges.

No model. Monitoring checks the incident signals. Past fixes rebuilds the action history from incident records. Both run without a model.

Spoken notes

This is the prototype cadence and routing. The isolated deployment keeps incident reasoning local and separates anonymized research. Ingest every two hours. Reports after notable ingests and at 23:30. Monday: lint, research, review. Source review monthly; past fixes nightly. Three presses light the rows: local calls, cloud calls, no model.

Presenter cue: Three presses: local, cloud, none. The pips show where you are.

How can we measure the loops?

Logbook VMcron · six jobs.state ledgers · health logLangfuse exporterFilebeat ships the ledgersshipElasticsearchoracle-logs · the database logslogs-dbwiki.* · run health · cronaudit · agent runs · db runsreadKibana ↗loop overviewpipeline · agent runs:5601every model callLangfuse ↗prompt · response · tokens · costsession = run ID:3000Workbench ↗incidents · recordsreview inboxper-run deep linksinto Kibana and Langfuse:8765dbwiki health · cron maildependencies · unpushed commitsretry lines · the watchdogone run ID joins them: e4c962ba176bhealth log · ledger · git commit · Kibana · Langfuse session

Spoken notes

Everything the jobs do is written down somewhere I can query. The VM keeps ledgers and a health log; Filebeat ships them into the same Elasticsearch as the database logs, so Kibana shows the runs next to the events. Every model call goes to Langfuse: prompt, response, tokens, cost. The workbench links each run into both. One run ID joins the health log, the ledger, the git commit, Kibana and Langfuse. The run ID connects the evidence across these views.

Presenter cue: Point at the shared run ID. Keep the presentation on this slide.

Langfuse · sessions

Prototype screenshot · captured 17 September 202623 / 42

Spoken notes

A session connects the calls in a run. Use the run ID to follow the work across jobs, then inspect the individual traces. This is a captured prototype view from 17 September 2026.

Langfuse · traces

Prototype screenshot · captured 17 September 202624 / 42

Spoken notes

The trace view shows individual ingest and report calls, with their input, output and metadata. This is where we inspect what the model received and returned. These are prototype runs, including the broader cloud routes described earlier.

Langfuse · metrics

Prototype screenshot · captured 17 September 202625 / 42

Spoken notes

The dashboard brings together trace counts, recorded model costs and validation scores. These are operational measurements, not a measure of diagnostic accuracy. A zero recorded model cost does not include the cost of local hardware. The selected time window is one day.

Kibana · agent runs

Prototype screenshot · captured 17 September 202626 / 42

Spoken notes

Kibana shows runs by task, stage duration, token counts and problem runs. It helps us see whether the pipeline ran and where time or resources went. This captured view uses a one-week window; its totals should not be compared directly with the one-day Langfuse view.

The administrator’s incident workbench

Prototype screenshot · captured 17 September 202627 / 42

Spoken notes

This is the administrator-facing work queue. Incidents are grouped by database, with status and links to the error pages. The administrator investigates and records actions and outcomes here. A quiet incident is not automatically resolved. Now let us look at what administrators actually do with that record.

Not everything is an LLM,
that would not make sense.

Spoken notes

Not everything is an LLM, that would not make sense. Code groups and counts the logs, decides when a model is needed, checks its output and writes the records. Use the model where interpretation helps.

Group the logs before calling the model

code · group and countcode · check and publishthe modelElasticsearch3.2M docsCompactorclassify · count · deltasDigestcapped excerptmodelChecksvalidate · lint · commitWiki (git)dated pagesadmin viewsread and act

Spoken notes

The preprocessing is ordinary code: classify, count, group repeats, compare with recorded history. That is a digest. The model reads it and proposes an interpretation. More code checks the result and writes the wiki. One ingest call gets one capped digest with short excerpts and document IDs we can check.

2,254 errors, one group

2,254 eventsestablish_fail ×1TNS-12514digit runs → #; error codes retained1,087 bytesin the digest1 notable groupdgnonc · 2026-08-29
Dated example from the retained wiki and the September 1 deck · dgnonc · 2026-08-29Message templating30 / 42

Spoken notes

This listener produced 2,254 repeated errors. Normalize digit runs, keep the codes, group matching messages. The digest holds a count, a representative message and a few document IDs, about a kilobyte. We lose detail, so the originals stay in Elasticsearch. The same process turns fin1’s afternoon into three groups: 158 allocation failures, 158 trace-file lines, six diagnostic dumps.

Presenter cue: One press: the events fold into the group. Say “the model reads this box, never the wall”.

What goes into the prompt

Elasticsearch3.2Mdocumentsthe whole estateOne database, one day1,936eventsfin1 · September 15Compaction3groups322 notable eventsPrompt≤ 12,000characters of digestplus incidents + error pagesProposal1JSON objectvalidated, then written by codefleet · July 28–September 10 · 45 calendar days5,312 routing decisions82% skipped1,154 runs≈26/day · 45 days356 published nothingno commit · one ledger line$33 API charges13 cloud calls · local costs excludedMost windows skip the model: nothing notable or no delta. logbook run --explain shows the routing decision.

Spoken notes

For fin1 on September 15, 1,936 events become three groups. The prompt takes at most 12,000 characters of digest, plus the open incidents and the error pages it names. This cap applies to the digest, not to the whole prompt. Over the recorded period, 82 percent of routing decisions skipped the model. There were 1,154 model runs, mostly local, and about 33 dollars in API charges from 13 cloud calls. The compaction and routing are code.

Report: compare today with earlier incidents

reports/2026-07-31-2330.md Illustrative excerpt
# fin1 · month-end close · 2026-07-31 23:30Z

## Today
611 errors so far — already above June’s 603.
[[digests/fin1/2026-07-31]]

## What we tried
Four restarts + a memory increase. The next close failed again.
[[incidents/2026-03-31-fin1-shared-pool-month-end-close]]

## Clues in the history
First failure after Ledger 4.12; 61,000 cursor variants in July.

## Suggested next step
Investigate the statements with the Ledger team. [[errors/ORA-4031]]
Constructed case study · abbreviated report mock · recommendation needs admin review.

Spoken notes

This is an abbreviated Markdown mock of the constructed July report, not a screenshot or a new measured model response. The highlighted sections show what a useful report connects: today’s errors, the changes already tried, clues in the history and a proposed next step. The links lead back to the retained digest, incident and error record. At this July cutoff the incident was still open. The dated returns after four restarts and a memory increase are evidence to investigate the statements, not proof of a diagnosis. This constructed example is separate from the two measured local calls retained in the experiment files.

An incident is a Markdown file with links

Record structure

Code-owned fields

type: incident
db: fin1
status: resolved
opened: 2026-03-31

Interpretation

Model-proposal field

Shared pool exhausted during the close.
412 allocation failures; the close did not finish.

Action history

Administrator-owned fields

Change: restart and rerun the close.
Outcome: rerun completed.
Rollback: none.

Evidence

Links keep it checkable

Error: errors/ORA-4031
Evidence: digests/fin1/2026-03-31

Constructed case-study record · condensed fields, not a verbatim file or a measured model output.

Spoken notes

The incident is Markdown with structured fields and links. In production, code writes the frontmatter and evidence links, a model proposes the interpretation, and administrators own action records. These panels condense the constructed case-study record to show those responsibilities. The complete file is linked in the sources.

Presenter cue: Read the four panels; do not read a full YAML record aloud.

The Git wiki holds the working history.

wiki/ · Git repositorydigests/<db>/<date>.{json,md}Compacted evidence · deterministic outputdatabases/<db>.mdDatabase profile and standing factsdatabases/<db>/journal/<month>.mdDated observations, accumulated over timeincidents/<date>-<db>-<slug>.mdInvestigations, actions and outcomeserrors/<code>.mdExplanations, references and past fixesreports/<date>[-<time>].mdSummaries across databases and incidentshosts/ · services/ · concepts/Linked infrastructure contextsources/<slug>.mdApproved sources and their review recordsindex.md · log.md · AGENTS.mdNavigation, activity log and agent instructionsLinked Markdown + structured fields. Git records how the knowledge changes.
Repository layout · wiki/AGENTS.md · deterministic writers34 / 42

Spoken notes

This is the repository behind the incident we just saw. Digests preserve compacted evidence as JSON and Markdown; raw logs remain in Elasticsearch. Database profiles and monthly journals retain local context. Incidents connect the investigation to administrator actions and outcomes. Error pages collect explanations, cited research and past fixes. Reports summarize across those records. Hosts, services and concepts provide linked context, while source pages record which references are approved and reviewed. These paths are schematic examples of the implemented layout. Most records are Markdown with structured frontmatter and links. Git records their changes so a later investigation can inspect how the knowledge developed.

Prototype research: inputs and outputs

weekly lookup · cloud agent with the wiki checkouterrors/ORA-4031.md · Occurrencesfive month-ends, each citing its digestdigests · the lines around each failurethe context block under the groupdatabases/fin1.md19c · RU 19.24 · GLPDB · sga_target 12Gincidents · open ones firstthe March incident and its eight recordssources/ · 17 approvedtier · domains · fetchable or cite-onlyagentreads · browses · writes## Reference on the error pageOracle documentation · cause and actionpractitioner notes · up to three, citedConfluence · cite-only · copied by handnever Occurrences · never Resolution historypractitioner notes · separate web call · no wiki, no estate namesthe code · Oracle’s cause and action textalready public · plus the approved domain listweb callsearch · fetch≤ 3 notes, each from one fetched page on an approved domainno database names, hosts or addresses in the textfrom the logswritten or approved by the teamfrom outside, cited

Spoken notes

This diagram shows the broader prototype research route, not the isolated brief-only design. The agent can read the wiki checkout: error occurrences, digests, database profiles, incidents and approved-source records. It updates the Reference section with cited public findings and team-approved material; it does not own occurrence evidence or resolution history. A separate caveat call uses the public error code, Oracle cause/action text and approved domains, without a wiki clone or estate names. The diagram distinguishes evidence from logs, team-authored context and outside references.

Not only Oracle: the sources we curate

Tier 1 · authoritativeOracle documentationMy Oracle SupportConfluenceTier 2 · practitionersAsk TOMORACLE-BASEOracle blogsJonathan LewisTanel PoderConnor McDonaldFrits HooglandLudovico CaldaraMike DietrichUwe HesseTier 3 · consultancies and forumsdbi servicesPythianEmre BaranselOracle community17 approved · one Markdown page each under sources/ · tinted: cite-only, the agent cannot fetch itagent proposesa new site, in its result flagsadministrator approvesdomains · tier · review intervalresearch citesapproved domains onlymonthly reviewlast_reviewed · stale pages re-runthe list is a wiki page too · a Confluence note carries the page URL and the date it was taken
errors/ORA-4031.md · the note research carried over from the team’s release calendar on Confluence, cited like every other reference
errors/ORA-4031.md · the note research carried over from the team’s release calendar on Confluence, cited like every other reference

Spoken notes

Oracle’s page is two sentences. The rest comes from sources we keep on a list: 17 today, in three tiers, each a wiki page with its domains and review date. The agent can propose a site; an administrator approves it; only then can research cite it; a monthly pass rechecks. Confluence is on the list as cite-only. Next key: the note taken from our release calendar. Ledger 4.12 on March 20 rewrote the close with literals; 4.12.3 on August 20 restored bind variables; and the restatement job is maintained outside that release train. Remember that last sentence.

Presenter cue: Next key: the Confluence note. Point at the last sentence.

What changes for
the next investigation?

37 / 42

Spoken notes

Research alone cannot tell the next admin what we actually changed or whether it helped. Follow the actions and their outcomes through the case.

Resolve the incident and record the remaining risk

Eventsdigest + incidentagentResearchdocs + sourcesagent + administratorChangeaction + rollbackadministratorChecksignal + reviewcode + administratorHistorywhat we triedagent + administrator
Administrator
Watches the first clean month-end, then resolves on September 2.
Resolution
Says why the incident can close and what evidence it rests on.
Residual risk
“Any job that still runs the 4.12 close code path will reproduce it.”
September 2 · the resolution: the August close ran clean; the residual risk sits in the incident body
September 2 · the resolution: the August close ran clean; the residual risk sits in the incident body

Spoken notes

September 2. The August close ran clean, shared pool free stayed above a gigabyte, resolved. Under it, one more line: the fix lives in the close package and a trigger that matches the close module; any job that still runs the old code path will reproduce it. Thirteen days later one did. The most useful sentence in the whole history, and no model wrote it. The wiki’s job was to keep it where the report would find it.

Presenter cue: Next: the resolve record. Quote the residual risk from the notes.

Five restarts, then the first clean close

Mar 31Apr 30May 29Jun 30Jul 31Aug 31ORA-04031 on fin1, per day · log scale · the last business day of each month412388521603744Five month-ends, five failed closes22:00Z the close starts · about 22:40Z the pool is full · a restart after midnightrestartrecurredrestartrecurredrestart · pool 2G→4Grecurredrestart · APP-5120recurredrestart · reportheld4.12.3 + triggerheld0first clean closeresolved Sep 2risk written down

Spoken notes

Five month-ends, five failed closes, each ending in a restart after midnight. Advance once to see the recorded interventions: restarts, a memory increase, the application ticket and the report. Then the August release fix. Advance again: the August 31 close has zero recorded ORA-04031 failures. The incident was resolved September 2 with the remaining risk written down. End here, at the first clean close. These are constructed case-study records, not proof that a particular change caused recovery.

What can get in the way?

Small local models

Limited context windows
Relevant history may not fit
Outputs can be unreliable

Incident storms

Large batches of logs
Analysis can take too long
Results may arrive too late

Prompt injection

Logs and sources are untrusted
Content may try to steer the agent
Keep instructions separate from evidence

Practical risks to evaluate · not all mitigations demonstrated40 / 42

Spoken notes

Three practical risks deserve attention. Small local models have limited context capacity, and their outputs can be unreliable. Reducing the input can also remove the history needed to interpret an event. During an incident storm, a large batch can make analysis run too long to help the administrator in time. Prompt injection is another possible issue: text in logs or research sources may try to redirect the agent. Treat that material as untrusted evidence, constrain what the agent can do, and test adversarial cases. Structural validation alone does not establish that an interpretation is correct or that an agent resisted injection. These risks are reasons to evaluate the next improvements, not a claim that they have all been solved.

What could we improve?

Triage locallySmarter local inferenceLess cloud dependenceAlmost readyResearch more broadlySmarter local inferenceLarger context windowMore sources and researchLet the cloud ask backRequest missing contextHuman reviews and approveswhat is sharedValidate before expandingQuality + capacity · more incidents + failure modesReview outbound briefs · test the isolated research pathScale in-house. Then explore other infrastructure.
Next improvements and validation · local triage readiness reported by the presenter41 / 42

Spoken notes

Three improvements lead into the same validation step. Smarter local inference would let us triage locally and reduce cloud dependence; that work is almost ready. A smarter local model with a larger context window would support more research from more sources. Two-way cloud research would let the model ask for missing context, with a human reviewing and approving what is shared within the intended anonymized boundary. Before expanding, evaluate quality and capacity on more incidents, including failure modes and misleading context. Review the outbound briefs and test the isolated research path end to end. Then scale in-house and explore other infrastructure. These are next steps, not capabilities demonstrated by the screenshots.

For the next person on call

The next person on call should inherit the investigation—not start it again.

github.com/davidbudac/logbook ↗

Spoken notes

We have the events, the investigation, the attempted fixes and the remaining risk in one place. The model helps organize that history; people still decide what to do and whether it worked. The code and presentation are in the repository. The next person on call should inherit the investigation—not start it again.

Presenter cue: Pause after the final sentence. Invite questions; leave the repository link visible.