<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3496259157130184660</id><updated>2026-10-14T18:29:09.692-07:00</updated><category term="AWS"/><category term="oracle"/><category term="Exadata"/><category term="Kubernetes"/><category term="ollama"/><category term="GCP"/><category term="OCI"/><category term="EKS"/><category term="Oracle Cloud"/><category term="rag"/><category term="database"/><category term="DevOps"/><category term="Azure"/><category term="Oracle AI Database"/><category term="llamaindex"/><category term="AWS EKS"/><category term="Cloud"/><category term="AI"/><category term="AWS RDS"/><category term="Amazon Bedrock"/><category term="12c"/><category term="Cloud Engineer"/><category term="Generative AI"/><category term="Oracle 12c"/><category term="agentic"/><category term="graphrag"/><category term="huggingface"/><category term="GKE"/><category term="GenerativeAI"/><category term="OKE"/><category term="Oracle 19c"/><category term="Oracle Performance Tuning"/><category term="cloudvanity"/><category term="ibmcloud"/><category term="oraclecloud"/><category term="Finops"/><category term="Oracle 26ai"/><category term="Oracle AI Database 26ai"/><category term="SQL"/><category term="blogging"/><category term="newsletter"/><category term="oracle 23ai"/><category term="ASM"/><category term="AUSOUG"/><category term="Agentic AI"/><category term="Gitops"/><category term="GoldenGate"/><category term="K8s"/><category term="Linux"/><category term="OpenAI"/><category term="Oracle 11g"/><category term="Oracle 11gR2"/><category term="Oracle ACE"/><category term="Oracle Cloud Infrastructure"/><category term="Oracle Fusion Middleware 11g"/><category term="Oracle GoldenGate"/><category term="Oracle Pakistan"/><category term="Terraform"/><category term="chatgpt"/><category term="dba"/><category term="docker"/><category term="server"/><category term="11g"/><category term="ADR 11g"/><category term="AI RAG"/><category term="AI Vector Search"/><category term="ARGO CD"/><category term="AWS Bedrock"/><category term="AWS CLI"/><category term="AWS Finops"/><category term="AWS SSM"/><category term="Active Data Guard"/><category term="CBO"/><category term="CloudFormation"/><category term="CyberSecurity"/><category term="Dynamodb"/><category term="GenAI"/><category term="Git"/><category term="JSON"/><category term="LLM"/><category term="LangChain"/><category term="Log Buffer"/><category term="OKafka"/><category term="Oracle Application Server 10g"/><category term="Oracle DBA"/><category term="Oracle Exadata"/><category term="Oracle select ai"/><category term="PMON"/><category term="Private Agent Factory"/><category term="Prompt Engineering"/><category term="Pythian"/><category term="ai agents"/><category term="cohere"/><category term="fine-tuning"/><category term="haystack"/><category term="llama 3.1"/><category term="llama2"/><category term="mistral7b"/><category term="qwen"/><category term="10g"/><category term="12c installation problem"/><category term="12c pluggable database"/><category term="AGI"/><category term="AI Transcription"/><category term="AI Workflow Design"/><category term="AKS"/><category term="AWS Aurora"/><category term="Anomaly Detection"/><category term="Apache Iceberg"/><category term="Bind Variables"/><category term="Cloud Security"/><category term="Codefresh"/><category term="Conference"/><category term="Converged Database"/><category term="DORA"/><category term="Database Messaging"/><category term="Developer Tips"/><category term="Duality Views"/><category term="ECS"/><category term="Enterprise AI Strategy"/><category term="Exadata Jobs"/><category term="Exadata Pakistan"/><category term="F5TTS"/><category term="Flux"/><category term="Gen AI"/><category term="GoldenGate 23ai"/><category term="HunyuanVideo"/><category term="JSON Documents"/><category term="JSON Relational Duality Views"/><category term="Kafka on Oracle"/><category term="MCP Server"/><category term="Model Selection"/><category term="NoSQL"/><category term="OCI Generative AI"/><category term="OLTP"/><category term="OOW12"/><category term="Oracle AI"/><category term="Oracle Certification Karachi"/><category term="Oracle Cloud Database"/><category term="Oracle blockchain"/><category term="Oracle blockchain table"/><category term="Perth"/><category term="PostgreSQL"/><category term="Python"/><category term="RDS"/><category term="RFP Automation"/><category term="Raft Replication"/><category term="Real Application Clusters"/><category term="S3"/><category term="SQLcl MCP"/><category term="Smart Scan"/><category term="Training Optimizers"/><category term="ai agent"/><category term="ai voice cloning"/><category term="autonomous database"/><category term="bedrock"/><category term="blog"/><category term="cellcli"/><category term="code llama"/><category term="comfyui"/><category term="crewai"/><category term="crossplane"/><category term="crowdstrike"/><category term="data"/><category term="deep live cam"/><category term="deepseek"/><category term="deepseek r1"/><category term="ecoute"/><category term="exadata patching"/><category term="facefusion"/><category term="finetune llm"/><category term="function calling"/><category term="gemma"/><category term="gemma 7b"/><category term="gpt4omini"/><category term="gradient"/><category term="groq"/><category term="hunyuan"/><category term="idefics2"/><category term="lightrag"/><category term="live face swap"/><category term="llama-cpp-python"/><category term="llama3.1"/><category term="llm finetuning"/><category term="memory leak"/><category term="mistral"/><category term="mistral nemo"/><category term="mixtral"/><category term="nvidia"/><category term="ora-00600"/><category term="phi3"/><category term="quantization"/><category term="quanto"/><category term="real application cluster"/><category term="record"/><category term="rope pearl"/><category term="select ai"/><category term="semantic kernel"/><category term="speaking"/><category term="sql server"/><category term="stable diffusion"/><category term="tom kyte"/><category term="tool use"/><category term="triplex"/><category term="tts"/><category term="unsloth"/><category term="vertex ai"/><category term="yum"/><category term="00600"/><category term="11g RAC"/><category term="12C RAC"/><category term="12G documentation"/><category term="12c enqueus"/><category term="12c listener problem"/><category term="12g DBA"/><category term="12g books"/><category term="12g download"/><category term="401 Authorization Required"/><category term="ADB-ExaC@C"/><category term="ADR"/><category term="AI Acceleration"/><category term="AI Application Development"/><category term="AI Budgeting"/><category term="AI Comics"/><category term="AI Cost Management"/><category term="AI Database 26ai"/><category term="AI Enrichment"/><category term="AI Game"/><category term="AI Job interview"/><category term="AI Memory Systems"/><category term="AI Training"/><category term="AI-Ready Database"/><category term="AMD MI300X"/><category term="AMM"/><category term="ANZ"/><category term="ASM 12c"/><category term="ASM 18c"/><category term="AWR"/><category term="AWS Application Composer"/><category term="AWS Application Security"/><category term="AWS Athena"/><category term="AWS Athena tutorial"/><category term="AWS Blogs"/><category term="AWS Calculator"/><category term="AWS Cloud Architect Associate Exam"/><category term="AWS Cloud Architect Associate Exam preparation"/><category term="AWS EMR"/><category term="AWS Karpenter"/><category term="AWS Lambda"/><category term="AWS Lattice"/><category term="AWS Linter"/><category term="AWS Multicloud"/><category term="AWS Networking"/><category term="AWS Redshift"/><category term="AWS Resilience Hub"/><category term="AWS TNB"/><category term="AWS Telco Network Builder"/><category term="AWS Urdu"/><category term="AWS VPC"/><category term="AWS courses"/><category term="Accelerate book"/><category term="Accelerate book pdf"/><category term="Agent Memory Systems"/><category term="Agent Skills"/><category term="Agentic AI Security"/><category term="Agentic RAG"/><category term="Aggregation Filters"/><category term="Alibaba"/><category term="Allow-List Security"/><category term="Amazon Athena"/><category term="Amazon Aurora"/><category term="Amazon Aurora Serverless"/><category term="Amazon Linux 2"/><category term="Amazon Linux 2023"/><category term="Amazon Linux 3"/><category term="Amazon Linux 4"/><category term="Amazon Web Service"/><category term="Anthos"/><category term="Application Security"/><category term="ArtificialIntelligence"/><category term="Aurora"/><category term="Aurora PostgreSQL"/><category term="Autonomous AI Database"/><category term="Azure Blogs"/><category term="BAAG"/><category term="BEA"/><category term="BP12"/><category term="BP13"/><category term="BP16"/><category term="Bandwidth Alliance"/><category term="Big Query"/><category term="BigQuery"/><category term="Bind Variable Peeking"/><category term="BuildKite"/><category term="CDC"/><category term="CICD"/><category term="CIDR"/><category term="CIDR Formula. AWS"/><category term="CLOUDFRONT"/><category term="CORBA"/><category term="COUNT FILTER"/><category term="CRSCTL"/><category term="CVU 11g"/><category term="Cell Node ADR"/><category term="CfCT"/><category term="ChatGLM"/><category term="Claude MCP Server"/><category term="Client ID Metadata"/><category term="Cline"/><category term="Cloud Blog Aggregator"/><category term="Cloud Carnival"/><category term="Cloud Cost Optimization"/><category term="Cloud DBA"/><category term="Cloud Engineer Interview"/><category term="Cloud Engineer Job"/><category term="Cloud Functions"/><category term="Cloud Interviews"/><category term="Cloud Jobs"/><category term="Cloud Vanity"/><category term="Cloudflare@OCI"/><category term="Cloudtrail"/><category term="Cluster Time Service"/><category term="Clustering Factor"/><category term="Cody"/><category term="Cold Chain Logistics"/><category term="Conditional Aggregates"/><category term="Cost Optimization"/><category term="Cross-App Access"/><category term="DBA Certification Pakistan"/><category term="DBA Pakistan"/><category term="DBRM"/><category term="DBaas"/><category term="DDoS Protection"/><category term="Data Grants"/><category term="Data Guard"/><category term="Data Replication"/><category term="Data Residency"/><category term="Data Science"/><category term="Database Automation"/><category term="Database Pub/Sub"/><category term="Database Security"/><category term="Database Sharding"/><category term="De-Duplication"/><category term="Deepmind"/><category term="Developer Features"/><category term="Developer Guide"/><category term="Developer Productivity"/><category term="Disaggregated Inference"/><category term="Document AI"/><category term="Dolly"/><category term="DragGan"/><category term="E2TTS"/><category term="E5-TTS"/><category term="E5TTS"/><category term="EBS Snapshot"/><category term="EFS"/><category term="EKS Karpenter"/><category term="Edge Security"/><category term="Enterprise AI Security"/><category term="Event Streaming"/><category term="Event-Driven Architecture"/><category term="Exadata 12c"/><category term="Exadata BP14"/><category term="Exadata Database Service"/><category term="Exadata Developers"/><category term="Exadata Storage Server"/><category term="Exadata certification"/><category term="Exadata certification Australia"/><category term="Exadata certification sydney"/><category term="Exadata jobs Australia"/><category term="Exadata melbourne"/><category term="Exadata sydney"/><category term="Exalogic"/><category term="Exdata Perth"/><category term="External Vector Tables"/><category term="F5-TTS"/><category term="FAILURE"/><category term="FAST NU"/><category term="FRA"/><category term="Falcon"/><category term="Flan-T5"/><category term="Flashback"/><category term="Flex CD"/><category term="Fluxcd"/><category term="Forms 6i"/><category term="Free Development License"/><category term="Fusion Insights"/><category term="GCP  Blogs"/><category term="GDPR"/><category term="GPT-4o Mini"/><category term="GPU Offload"/><category term="GPnP Get Item"/><category term="GenApps"/><category term="Generative AI Agents"/><category term="Glacier"/><category term="Globally Distributed Autonomous AI Database"/><category term="Globally Distributed Database"/><category term="GoldenGate 19c"/><category term="GoldenGate Error"/><category term="GoldenGate Installation"/><category term="Google Cloud Platform"/><category term="Google Service Weaver"/><category term="HA"/><category term="HCC"/><category term="HR GenAI Safety"/><category term="Hadoop"/><category term="Helm"/><category term="High Performance Caching"/><category term="High Performance Computing"/><category term="High Water Mark"/><category term="Histograms"/><category term="Hybrid Activations"/><category term="Hybrid Retrieval"/><category term="ILM"/><category term="IORM"/><category term="IPMI"/><category term="Identity Management"/><category term="Insync"/><category term="Insync12"/><category term="JMESPATH"/><category term="JRockit"/><category term="JSON Document Store"/><category term="Jonathan Lewis"/><category term="K9s"/><category term="KCNA"/><category term="Kafka Java API"/><category term="Karpenter"/><category term="Kernel Networking"/><category term="Kubernetes Engine"/><category term="Kubernetes Urdu"/><category term="LLM Serving"/><category term="LOB 11g"/><category term="LUN"/><category term="Lightsail"/><category term="Lightsail for Research"/><category term="Linode Cloud"/><category term="Linode Kubernetes"/><category term="Linux Firewall"/><category term="Lit-Parrot"/><category term="Llama Guard Fine-Tuning"/><category term="Local RAG"/><category term="MAA Best Practices"/><category term="MCP Security"/><category term="ML"/><category term="MOS"/><category term="Managed Caching Service"/><category term="Mapped Collections"/><category term="Maximum Availability Architecture"/><category term="Metalink"/><category term="Metalink SR"/><category term="Microservices Architecture"/><category term="Mistral Large 2"/><category term="Mixtral 8x7B"/><category term="Mixtral8X7B"/><category term="MongoDB"/><category term="Multicloud HA"/><category term="My Oracle Support"/><category term="MySQL"/><category term="NV-INGEST"/><category term="NZOUG"/><category term="NZOUG14"/><category term="Netfilter"/><category term="OAuth for AI Agents"/><category term="OC4J"/><category term="OCA Pakistan"/><category term="OCDBA"/><category term="OCI Cache"/><category term="OCI Compute Clusters"/><category term="OCI Console"/><category term="OCI IAM"/><category term="OCI Streaming"/><category term="OCP Pakistan"/><category term="ODA"/><category term="OEL6"/><category term="OHS"/><category term="OID"/><category term="OKE Managed Nodes"/><category term="OKafka Authentication"/><category term="OOW"/><category term="OOW2011"/><category term="ORA-00240"/><category term="ORA-00494"/><category term="ORA-00700"/><category term="ORA-04031"/><category term="ORA-07445"/><category term="ORA-4031"/><category term="ORA-700"/><category term="OTN"/><category term="OTN Lounge"/><category term="OU"/><category term="OpSec"/><category term="Ora Tech"/><category term="Oracle 11g OCP"/><category term="Oracle 11g RAC"/><category term="Oracle 18c"/><category term="Oracle 21c"/><category term="Oracle 23c"/><category term="Oracle 6i"/><category term="Oracle AI Agent Memory"/><category term="Oracle AI Data Platform"/><category term="Oracle AI Database Development"/><category term="Oracle AI Database@AWS"/><category term="Oracle ASM"/><category term="Oracle Analytics Cloud"/><category term="Oracle Apps R12"/><category term="Oracle Autonomous AI Database"/><category term="Oracle Big Data"/><category term="Oracle Certification Lahore"/><category term="Oracle Certification Pakistan"/><category term="Oracle Cloud Blog"/><category term="Oracle Coherence"/><category term="Oracle DBA Pakistan"/><category term="Oracle Database"/><category term="Oracle Database 11g Release 2  Tips"/><category term="Oracle Database 11g Release 2 Installation"/><category term="Oracle Database 23ai"/><category term="Oracle Database Messaging"/><category term="Oracle Database Protection"/><category term="Oracle Datawarehousing"/><category term="Oracle Deep Data Security"/><category term="Oracle Development"/><category term="Oracle GDPR"/><category term="Oracle GI"/><category term="Oracle HA Connection String"/><category term="Oracle Key Vault"/><category term="Oracle Kubernetes"/><category term="Oracle Kubernetes pricing"/><category term="Oracle Linux"/><category term="Oracle Loader"/><category term="Oracle MIX"/><category term="Oracle ML"/><category term="Oracle Mobile Authenticator"/><category term="Oracle Open World 2009"/><category term="Oracle PSU"/><category term="Oracle Partitioning"/><category term="Oracle Perth"/><category term="Oracle RAC"/><category term="Oracle RAC 11g"/><category term="Oracle RAG"/><category term="Oracle Regular Expressions"/><category term="Oracle Report Server"/><category term="Oracle Reports"/><category term="Oracle SQL"/><category term="Oracle SQL Developer"/><category term="Oracle SQL Firewall"/><category term="Oracle Security"/><category term="Oracle Temp"/><category term="Oracle Transactional Event Queues"/><category term="Oracle TxEventQ"/><category term="Oracle Vector Index"/><category term="Oracle Vector Search"/><category term="Oracle WebLogic Server"/><category term="Oracle WebLogic Server 11g"/><category term="Oracle with 20:20 Foresight"/><category term="PACKET"/><category term="PITR"/><category term="PMON Latch"/><category term="PROW"/><category term="PSU"/><category term="Packet Processing"/><category term="Pakistan Oracle"/><category term="Paul Vallee"/><category term="Performance Insights"/><category term="Phi 3.5 Vision"/><category term="PostgreSQL 15"/><category term="PostgreSQL on AWS"/><category term="Predictive Maintenance"/><category term="Private AI Services"/><category term="Prompt"/><category term="Prompt Classification"/><category term="Prompt Engineer"/><category term="Prompt Guardrail"/><category term="PromptOps"/><category term="Prow Job"/><category term="RAG Evolution"/><category term="RAG Tutorial"/><category term="RAG vs Memory"/><category term="RAPTOR"/><category term="RBAL Hang"/><category term="RDMA"/><category term="REGEXP_LIKE"/><category term="REGEXP_REPLACE"/><category term="REGEXP_SUBSTR"/><category term="RETRY_COUNT"/><category term="RMAN"/><category term="RMAN Tips"/><category term="RPO"/><category term="RTO"/><category term="Real-World Performance"/><category term="Redis on OCI"/><category term="Reinvent"/><category term="Reinvent 2023"/><category term="Relational Tables"/><category term="Remote Diagnostic Agent"/><category term="Resource Map"/><category term="Row-Level Security"/><category term="Runtime Controls"/><category term="SCT"/><category term="SD3"/><category term="SNS"/><category term="SODA Collections"/><category term="SQL Best Practices"/><category term="SQL Enhancements"/><category term="SQL Injection Defense"/><category term="SQL Pattern Matching"/><category term="SQL Tuning"/><category term="SQLcl MCP Server"/><category term="SSIS"/><category term="SUM FILTER"/><category term="Schema Annotations"/><category term="Schema Automation"/><category term="Secure AI Agents"/><category term="Self-Managing Database"/><category term="Semantic Search"/><category term="Serverless"/><category term="Set-Based Processing"/><category term="Sharding"/><category term="Shell Scripts"/><category term="ShortGPT"/><category term="Sohaib Abbasi"/><category term="Solaris"/><category term="Solaris 11 Help"/><category term="Solaris 11 books"/><category term="Solaris 11 certification"/><category term="Solaris 11 faq"/><category term="Solaris 11 introduction"/><category term="Solaris 11 tutorial"/><category term="Sourcegraph"/><category term="StableLM"/><category term="StarCoder"/><category term="Stateful AI Agents"/><category term="Stateful AI Architecture"/><category term="Stress"/><category term="Sydney Oracle Meetup"/><category term="Systems Manager"/><category term="TNB"/><category term="TNS-12518"/><category term="TNS-12571"/><category term="TRANSPORT_CONNECT_TIMEOUT"/><category term="Tagging"/><category term="Terraform 2023"/><category term="Terraform Destroy"/><category term="Terraform Locals"/><category term="Terraform variables"/><category term="Testcontainers"/><category term="Transactional Messaging"/><category term="Transformer"/><category term="TxEventQ"/><category term="UUID"/><category term="VPC Lattice"/><category term="VS Code"/><category term="Valkey Cache"/><category term="Vector Search"/><category term="Vicuna"/><category term="WAF"/><category term="WRITER"/><category term="Wget"/><category term="WizardLM"/><category term="Zsh"/><category term="acfs"/><category term="adalflow"/><category term="administration"/><category term="administrationphysical"/><category term="agenticdb"/><category term="agentless"/><category term="agentops"/><category term="ai database"/><category term="ai dubbing"/><category term="ai eval"/><category term="ai evals"/><category term="ai hub"/><category term="ai lip sync"/><category term="ai song cloning"/><category term="ai webscraping"/><category term="aiagents"/><category term="aichatbot"/><category term="aichatbots"/><category term="aider"/><category term="aievals"/><category term="airllm"/><category term="aitrain"/><category term="alert"/><category term="alibaba llm"/><category term="alphex"/><category term="amazon partyrock"/><category term="amazon titan"/><category term="amazon transcribe"/><category term="ansible"/><category term="anthropic"/><category term="anything llm"/><category term="anythingllm"/><category term="aphex 118b"/><category term="archestra"/><category term="atrain"/><category term="audiocraft"/><category term="audiogen"/><category term="audioldm"/><category term="audioldm2"/><category term="auraflow"/><category term="autocoder"/><category term="autocoder installation"/><category term="autogen"/><category term="autotrain"/><category term="autotrain advanced"/><category term="aws cloud pakistan"/><category term="aws pakistan"/><category term="aws partyrock"/><category term="aws sagemaker"/><category term="bedrock-runtime"/><category term="beyondllm"/><category term="blockchain"/><category term="blockchain table"/><category term="bloom filtering"/><category term="brainsurface"/><category term="call stack trace"/><category term="candle"/><category term="cargo"/><category term="celldisk"/><category term="cfn-lint"/><category term="chat gpt"/><category term="chat gtp"/><category term="chatgtp"/><category term="chattts"/><category term="checkpoint"/><category term="claude 3"/><category term="claude 4"/><category term="cloudwatch"/><category term="codd"/><category term="codellama"/><category term="codestral"/><category term="codestral mamba"/><category term="cogvideo"/><category term="cogvideox"/><category term="command r+"/><category term="command rplus"/><category term="compute nodes"/><category term="concurrency"/><category term="confusion"/><category term="connectivity"/><category term="corpuscreator"/><category term="crawl4ai"/><category term="ctags"/><category term="customllm"/><category term="dan"/><category term="dataset"/><category term="dataset creator"/><category term="datasets"/><category term="db_developer_role"/><category term="dbms"/><category term="dbms_cloud"/><category term="deepfake"/><category term="deeplivecam"/><category term="dept"/><category term="developer"/><category term="devin"/><category term="devopsgpt"/><category term="diagram"/><category term="dml"/><category term="dspy"/><category term="duckdb"/><category term="duckdb nsql"/><category term="ecout"/><category term="elevanlabs"/><category term="elevenlabs"/><category term="embedchain"/><category term="emc"/><category term="emp"/><category term="error"/><category term="event"/><category term="exadata cell patch"/><category term="exadata patch download"/><category term="exadata perth"/><category term="exadata v3"/><category term="exdata"/><category term="exl2"/><category term="exl3"/><category term="exllamav2"/><category term="exllamav3"/><category term="falcon180b"/><category term="fastrag"/><category term="ffmpeg"/><category term="finetune vlm"/><category term="finetuning"/><category term="firebase"/><category term="firewall"/><category term="fivetran"/><category term="flux1 dev"/><category term="flux1 pro"/><category term="flux1 schnell"/><category term="form"/><category term="fortify"/><category term="freewilly"/><category term="freewilly1"/><category term="freewilly2"/><category term="function"/><category term="gemma 2b"/><category term="gemma2b"/><category term="genkit"/><category term="gke-gcloud-auth-login"/><category term="goldengate 18c"/><category term="google cloud platform. google cloud pakistan"/><category term="google colab"/><category term="gpt4"/><category term="gpt4o"/><category term="gradientai"/><category term="gradio"/><category term="graphql"/><category term="griddisk"/><category term="groq8b"/><category term="hardware"/><category term="hindi llm"/><category term="history"/><category term="hqq"/><category term="html"/><category term="hugging face"/><category term="huggingace"/><category term="hunyuan3d"/><category term="i2v"/><category term="iAS"/><category term="iLOM"/><category term="idefics"/><category term="indic parler-tts"/><category term="install oracle 12c"/><category term="installation"/><category term="instance"/><category term="internal"/><category term="intersect"/><category term="islamabad"/><category term="isnan"/><category term="javascript"/><category term="kaggle"/><category term="karachi"/><category term="kathy sierra"/><category term="kdtalker"/><category term="keras"/><category term="kokoro"/><category term="kv cache"/><category term="langchain-oracledb"/><category term="langgraph"/><category term="latentsync"/><category term="librechat"/><category term="link"/><category term="lip sync video"/><category term="lip sync with ai"/><category term="listener"/><category term="live face swapping"/><category term="llama 3 groq"/><category term="llama 3.1 405b"/><category term="llama 3.1 70b"/><category term="llama cpp python"/><category term="llama-cpp-agent"/><category term="llama2 finetuning"/><category term="llama3"/><category term="llama3.2"/><category term="llamacpp"/><category term="llamagpt"/><category term="llamaindex workflows"/><category term="llm compiler"/><category term="llm function calling"/><category term="llm on mobile"/><category term="llm router"/><category term="llm tool calling"/><category term="llm-d"/><category term="llvm"/><category term="llvm ir"/><category term="local"/><category term="log"/><category term="logical"/><category term="long context"/><category term="lora"/><category term="lucid"/><category term="ludwig."/><category term="machine learning"/><category term="magic fixup"/><category term="magicquil"/><category term="magicquill"/><category term="management"/><category term="mark"/><category term="massedcompute"/><category term="mcp"/><category term="melanie caffrey"/><category term="mem0"/><category term="merge"/><category term="meta"/><category term="meta llama"/><category term="microsoft"/><category term="mineru"/><category term="minig"/><category term="minus"/><category term="mistraltiny"/><category term="model context protocol"/><category term="money"/><category term="mosaicml"/><category term="mpt-30b"/><category term="mpt30b"/><category term="mpt7b"/><category term="musicgen"/><category term="myllm"/><category term="native function"/><category term="nemo"/><category term="nemoclaw"/><category term="network"/><category term="nftables"/><category term="nginx"/><category term="ngnix"/><category term="numeric"/><category term="nv ingest"/><category term="nvidia sana"/><category term="o&#39;reilly"/><category term="oca"/><category term="ocp"/><category term="online dpo"/><category term="onsubmit"/><category term="opatch"/><category term="openai . filesearch"/><category term="openclaw"/><category term="opendevin"/><category term="openlit"/><category term="openllm"/><category term="openorca"/><category term="openorcaplatypus"/><category term="openshell"/><category term="openvoice"/><category term="operator"/><category term="oplan"/><category term="orachk"/><category term="oracle cloud pakistan"/><category term="oracle data warehouse"/><category term="oracle digital assistant"/><category term="oracle enqueue"/><category term="oracle enterprise linux 6"/><category term="oracle functions"/><category term="oracle pluggable database"/><category term="oracle regex"/><category term="oracle scheduler"/><category term="oracle university"/><category term="oracle vm"/><category term="oracle webinar"/><category term="oracle23ai"/><category term="orcaplatypus"/><category term="orphan sessions"/><category term="parler tts"/><category term="partyrock"/><category term="passion"/><category term="passionate"/><category term="patching"/><category term="patels"/><category term="pdf extraction toolkit"/><category term="perfoormance"/><category term="performance"/><category term="perplexica"/><category term="perth oracle"/><category term="petals"/><category term="pga"/><category term="phi"/><category term="php"/><category term="physicaldisk"/><category term="platypus2"/><category term="pman"/><category term="polars"/><category term="portability"/><category term="privatelink"/><category term="program"/><category term="prow job example"/><category term="pydantic"/><category term="pythia"/><category term="python polars"/><category term="qualcomm"/><category term="qualcomm ai hub"/><category term="query"/><category term="qwen 7b"/><category term="qwen 7b chat"/><category term="qwen omni"/><category term="qwen-agent"/><category term="qwen2"/><category term="qwen3"/><category term="qwenagent"/><category term="r2r"/><category term="rac"/><category term="rag me up"/><category term="ragtoriches"/><category term="read consistency"/><category term="read only ai"/><category term="research"/><category term="resource manager"/><category term="rittman"/><category term="rope pearl live"/><category term="routellm"/><category term="rust"/><category term="sagemaker"/><category term="sana"/><category term="sciphi"/><category term="scrapegraphiai"/><category term="searxng"/><category term="selectai"/><category term="self management"/><category term="semantic function"/><category term="service"/><category term="sga"/><category term="shared"/><category term="shared pool"/><category term="simpletuner"/><category term="singing"/><category term="slack face swap"/><category term="smash"/><category term="soap"/><category term="soap summary"/><category term="space shooter game"/><category term="stabilityai"/><category term="stable code 3b"/><category term="stable video 4d"/><category term="stablecode"/><category term="stablediffusion"/><category term="storage servers"/><category term="sum small"/><category term="sundiag"/><category term="sv4d"/><category term="swappiness"/><category term="synk"/><category term="system"/><category term="teams face swap"/><category term="techno-ed"/><category term="tencent"/><category term="text to sql"/><category term="text to sql model"/><category term="textbase"/><category term="textbox"/><category term="tinyllama"/><category term="tinyllama 1.1b"/><category term="tinyllm"/><category term="tokenizer"/><category term="tool calling"/><category term="tow"/><category term="transcribe"/><category term="trl"/><category term="tuning"/><category term="ubuntu"/><category term="unicode"/><category term="union"/><category term="union all"/><category term="urdu llm"/><category term="us"/><category term="validating"/><category term="validation"/><category term="venerable"/><category term="virtual column"/><category term="virtualization"/><category term="virtues"/><category term="vlm"/><category term="vmware"/><category term="voicecraft"/><category term="vpc endpoints"/><category term="wan2.2. wan2.2 comfyui workflow"/><category term="webinar"/><category term="werf"/><category term="whisper"/><category term="whisper turbo"/><category term="workflows llamaindex"/><category term="xtts"/><category term="xtuner"/><category term="yaml"/><category term="zone alarm"/><category term="zoom face swap"/><title type='text'>Fahd Mirza on AI, Cloud, DevOps and Databases</title><subtitle type='html'>Blog By Fahd Mirza Chughtai</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>728</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-4112695469451442642</id><published>2026-10-14T18:29:09.690-07:00</published><updated>2026-10-14T18:29:09.692-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 26ai"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle regex"/><title type='text'>A Practical Guide to Oracle Regex</title><content type='html'>&lt;!--BLOGGER INSTRUCTIONS
  Post title (type this in Blogger&#39;s title field): Let the Database Do the Pattern Hunting: A Practical Guide to Oracle Regex
  Switch the editor to &quot;HTML view&quot; (the pencil/&lt;&gt; icon), then paste everything below this comment.--&gt;

&lt;div class=&quot;oracle-regex-post&quot;&gt;

&lt;p&gt;If you&#39;ve ever pulled thousands of rows into an application just to check whether a product code looks right, this post is for you. Oracle&#39;s built-in regular expression functions let you validate, search and tidy text right where the data lives, so you don&#39;t need extra string-handling code in every app that touches the table.&lt;/p&gt;

&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2&gt;The toolkit in one glance&lt;/h2&gt;

&lt;p&gt;Oracle gives you one condition and four functions:&lt;/p&gt;

&lt;div style=&quot;overflow-x: auto;&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; margin: 12px 0px; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background: rgb(238, 238, 238); border: 1px solid rgb(187, 187, 187); color: #222222; padding: 8px; text-align: left;&quot;&gt;Name&lt;/th&gt;
      &lt;th style=&quot;background: rgb(238, 238, 238); border: 1px solid rgb(187, 187, 187); color: #222222; padding: 8px; text-align: left;&quot;&gt;What you get back&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td style=&quot;border: 1px solid rgb(187, 187, 187); padding: 8px;&quot;&gt;&lt;code&gt;REGEXP_LIKE&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(187, 187, 187); padding: 8px;&quot;&gt;A true/false test, used in WHERE clauses and constraints&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td style=&quot;border: 1px solid rgb(187, 187, 187); padding: 8px;&quot;&gt;&lt;code&gt;REGEXP_COUNT&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(187, 187, 187); padding: 8px;&quot;&gt;How many times a pattern shows up&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td style=&quot;border: 1px solid rgb(187, 187, 187); padding: 8px;&quot;&gt;&lt;code&gt;REGEXP_INSTR&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(187, 187, 187); padding: 8px;&quot;&gt;The position where a match starts (or ends)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td style=&quot;border: 1px solid rgb(187, 187, 187); padding: 8px;&quot;&gt;&lt;code&gt;REGEXP_SUBSTR&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(187, 187, 187); padding: 8px;&quot;&gt;The matching text itself&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td style=&quot;border: 1px solid rgb(187, 187, 187); padding: 8px;&quot;&gt;&lt;code&gt;REGEXP_REPLACE&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(187, 187, 187); padding: 8px;&quot;&gt;The string with matches swapped for something else&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;Each accepts an optional match-parameter string. The useful flags are &lt;code&gt;i&lt;/code&gt; (ignore case), &lt;code&gt;c&lt;/code&gt; (respect case), &lt;code&gt;n&lt;/code&gt; (let the dot match a newline), &lt;code&gt;m&lt;/code&gt; (treat each line as its own line for anchors) and &lt;code&gt;x&lt;/code&gt; (ignore spaces in the pattern).&lt;/p&gt;

&lt;h2&gt;Setting up the sample data&lt;/h2&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;CREATE TABLE stock_items (
  sku            VARCHAR2(20),
  item_desc      VARCHAR2(100),
  supplier_email VARCHAR2(80),
  delivery_date  VARCHAR2(10),
  handling_note  VARCHAR2(200)
);

INSERT INTO stock_items VALUES
 (&#39;BRK-0215&#39;,  &#39;  Heavy duty   brake rotor 330mm &#39;, &#39;accounts@brakeworks.example.com.au&#39;, &#39;07/03/2026&#39;,
  &#39;&amp;lt;note&amp;gt;fragile&amp;lt;/note&amp;gt;&amp;lt;note&amp;gt;keep dry&amp;lt;/note&amp;gt;&#39;);
INSERT INTO stock_items VALUES
 (&#39;ROT-1180B&#39;, &#39;Rotor rotor bolt kit&#39;,  &#39;sales@boltbarn.example.com.au&#39;, &#39;19/11/2026&#39;,
  &#39;&amp;lt;note&amp;gt;pallet only&amp;lt;/note&amp;gt;&#39;);
COMMIT;&lt;/pre&gt;

&lt;h2&gt;1. Guarding the door with a CHECK constraint&lt;/h2&gt;

&lt;p&gt;Say every SKU must be three capital letters, a hyphen, four digits, and optionally one trailing capital letter. One constraint handles it for every application:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;ALTER TABLE stock_items ADD CONSTRAINT ck_sku_shape
  CHECK (REGEXP_LIKE(sku, &#39;^[A-Z]{3}-[0-9]{4}[A-Z]?$&#39;, &#39;c&#39;));&lt;/pre&gt;

&lt;p&gt;The anchors &lt;code&gt;^&lt;/code&gt; and &lt;code&gt;$&lt;/code&gt; force the whole value to fit the pattern, and the &lt;code&gt;c&lt;/code&gt; flag keeps lowercase letters out. Results:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;BRK-0215    accepted
ROT-1180B   accepted
brk-0215    rejected (lowercase)
BRK0215     rejected (no hyphen)
BRK-215     rejected (only three digits)
BRK-0215BB  rejected (two trailing letters)&lt;/pre&gt;

&lt;h2&gt;2. Counting words&lt;/h2&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;SELECT item_desc,
       REGEXP_COUNT(item_desc, &#39;\w+&#39;) AS word_count
FROM   stock_items;&lt;/pre&gt;

&lt;p&gt;For &lt;code&gt;&#39;Rotor rotor bolt kit&#39;&lt;/code&gt; this returns 4. It&#39;s a quick way to flag descriptions that are too short to be useful.&lt;/p&gt;

&lt;h2&gt;3. Pulling out a piece of text&lt;/h2&gt;

&lt;p&gt;To get each supplier&#39;s domain, capture it in a group and ask for that group with the sixth argument:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;SELECT REGEXP_SUBSTR(supplier_email, &#39;@(\S+)$&#39;, 1, 1, NULL, 1) AS supplier_domain
FROM   stock_items;&lt;/pre&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;brakeworks.example.com.au
boltbarn.example.com.au&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;@&lt;/code&gt; is matched but left out of the result, because only the bracketed group is returned.&lt;/p&gt;

&lt;h2&gt;4. Finding where something sits&lt;/h2&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;SELECT REGEXP_INSTR(&#39;Rotor kit 330mm&#39;, &#39;\d&#39;)           AS first_digit,
       REGEXP_INSTR(&#39;Rotor kit 330mm&#39;, &#39;\d+&#39;, 1, 1, 1) AS just_after_number
FROM   dual;&lt;/pre&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;FIRST_DIGIT  JUST_AFTER_NUMBER
-----------  -----------------
         11                 14&lt;/pre&gt;

&lt;p&gt;The fifth argument, &lt;code&gt;1&lt;/code&gt;, asks for the position immediately after the match instead of its start.&lt;/p&gt;

&lt;h2&gt;5. Cleaning up messy whitespace&lt;/h2&gt;

&lt;p&gt;Our first row has leading, trailing and doubled spaces:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;SELECT REGEXP_REPLACE(TRIM(item_desc), &#39;\s{2,}&#39;, &#39; &#39;) AS tidy_desc
FROM   stock_items;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;&#39;  Heavy duty   brake rotor 330mm &#39;&lt;/code&gt; becomes &lt;code&gt;&#39;Heavy duty brake rotor 330mm&#39;&lt;/code&gt;. Any run of two or more whitespace characters collapses into one space.&lt;/p&gt;

&lt;h2&gt;6. Back references: reshuffling and spotting repeats&lt;/h2&gt;

&lt;p&gt;A back reference lets you reuse what a group captured. Here we convert Australian-style dates (DD/MM/YYYY) to ISO format:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;SELECT delivery_date,
       REGEXP_REPLACE(delivery_date,
                      &#39;^(\d{2})/(\d{2})/(\d{4})$&#39;,
                      &#39;\3-\2-\1&#39;) AS iso_date
FROM   stock_items;&lt;/pre&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;07/03/2026   2026-03-07
19/11/2026   2026-11-19&lt;/pre&gt;

&lt;p&gt;Rows that don&#39;t fit the pattern pass through unchanged, so test for that before trusting the output.&lt;/p&gt;

&lt;p&gt;Back references also catch accidental repeats, such as &quot;Rotor rotor&quot;:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;SELECT sku
FROM   stock_items
WHERE  REGEXP_LIKE(item_desc, &#39;(^| )(\w+) \2( |$)&#39;, &#39;i&#39;);&lt;/pre&gt;

&lt;p&gt;Group 2 captures a word, and &lt;code&gt;\2&lt;/code&gt; demands the same word straight after it. This flags ROT-1180B.&lt;/p&gt;

&lt;h2&gt;7. Greedy versus lazy matching&lt;/h2&gt;

&lt;p&gt;By default, quantifiers grab as much as they can. Adding &lt;code&gt;?&lt;/code&gt; makes them take as little as possible:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;SELECT REGEXP_SUBSTR(handling_note, &#39;&amp;lt;note&amp;gt;.*&amp;lt;/note&amp;gt;&#39;)  AS greedy,
       REGEXP_SUBSTR(handling_note, &#39;&amp;lt;note&amp;gt;.*?&amp;lt;/note&amp;gt;&#39;) AS lazy
FROM   stock_items
WHERE  sku = &#39;BRK-0215&#39;;&lt;/pre&gt;

&lt;pre style=&quot;background: rgb(245, 245, 245); border-radius: 4px; border: 1px solid rgb(221, 221, 221); color: #222222; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 12px;&quot;&gt;GREEDY                                          LAZY
----------------------------------------------  ---------------------
&amp;lt;note&amp;gt;fragile&amp;lt;/note&amp;gt;&amp;lt;note&amp;gt;keep dry&amp;lt;/note&amp;gt;      &amp;lt;note&amp;gt;fragile&amp;lt;/note&amp;gt;&lt;/pre&gt;

&lt;p&gt;Greedy runs to the last closing tag, while lazy stops at the first.&lt;/p&gt;

&lt;h2&gt;Gotchas worth remembering&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Character classes need two sets of brackets.&lt;/strong&gt; Write &lt;code&gt;[[:upper:]]+&lt;/code&gt;, not &lt;code&gt;[:upper:]+&lt;/code&gt;. The inner pair names the class and the outer pair makes it a list.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Don&#39;t assume Perl, Python or JavaScript syntax carries over.&lt;/strong&gt; Oracle supports shortcuts like &lt;code&gt;\d&lt;/code&gt;, &lt;code&gt;\w&lt;/code&gt; and &lt;code&gt;\s&lt;/code&gt;, but not word-boundary markers (&lt;code&gt;\b&lt;/code&gt;) or lookaheads.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Escape literal metacharacters.&lt;/strong&gt; To match a real dot or bracket, use &lt;code&gt;\.&lt;/code&gt; or &lt;code&gt;\(&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Mind performance.&lt;/strong&gt; A regex condition on a large column usually can&#39;t use an ordinary index. If a pattern query is hot, consider a function-based index or a cheaper pre-filter such as &lt;code&gt;LIKE&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Multibyte text works, but write characters directly.&lt;/strong&gt; Oracle matches on encoded bytes rather than &lt;code&gt;\uXXXX&lt;/code&gt; escapes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Wrapping up&lt;/h2&gt;

&lt;p&gt;Start with a constraint on your messiest column, since that&#39;s where the payoff is quickest. Then add &lt;code&gt;REGEXP_SUBSTR&lt;/code&gt; and &lt;code&gt;REGEXP_REPLACE&lt;/code&gt; to your reporting queries. Once you&#39;ve written a few patterns, you&#39;ll find a lot of application-side string handling can simply be deleted.&lt;/p&gt;

&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/4112695469451442642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/4112695469451442642' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/4112695469451442642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/4112695469451442642'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/10/a-practical-guide-to-oracle-regex.html' title='A Practical Guide to Oracle Regex'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-4244178594211992971</id><published>2026-10-09T22:14:37.791-07:00</published><updated>2026-10-09T22:14:37.791-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Anomaly Detection"/><category scheme="http://www.blogger.com/atom/ns#" term="Cold Chain Logistics"/><category scheme="http://www.blogger.com/atom/ns#" term="OCI Streaming"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle AI Data Platform"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Analytics Cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="Predictive Maintenance"/><title type='text'>Before the Ice Cream Melts: Catching Refrigeration Trouble Early with Oracle AI Data Platform</title><content type='html'>&lt;h1&gt;&lt;br /&gt;&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;A refrigerated truck rarely fails with a bang. It drifts. The trick is noticing the drift while the cargo is still safe.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;A Tuesday Night on the Highway&lt;/h2&gt;
&lt;p&gt;Picture a fleet of refrigerated trucks carrying vaccines, dairy, and frozen food overnight. Each truck produces a steady stream of readings: cargo temperature, compressor current, door-open time, vibration, and fuel use. Those readings usually sit in separate places, such as telematics portals, maintenance systems, and spreadsheets.&lt;/p&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;When someone has to hunt across all of them, problems get found late. This post sketches how a fleet operator could use Oracle Cloud Infrastructure (OCI) and Oracle AI Data Platform to connect those signals and move from reacting to predicting. It is an adapted scenario based on a published Oracle reference approach for industrial IoT, not a customer case.&lt;/p&gt;

&lt;h2&gt;The Cast of Oracle Services&lt;/h2&gt;

&lt;h3&gt;Oracle AI Data Platform&lt;/h3&gt;
&lt;p&gt;The backbone. It brings ingestion, processing, storage, analytics, and AI into one connected foundation, so raw truck telemetry becomes curated data that other teams can reuse.&lt;/p&gt;

&lt;h3&gt;OCI Streaming&lt;/h3&gt;
&lt;p&gt;The intake pipe. Spark publishes sensor events to it through its Apache Kafka-compatible endpoint, which moves high-volume readings toward processing.&lt;/p&gt;

&lt;h3&gt;Spark on OCI&lt;/h3&gt;
&lt;p&gt;The cleanup crew. It validates and enriches incoming data and standardizes timestamps, units, and measurements, so a Fahrenheit reading from one truck and a Celsius reading from another do not get mixed up.&lt;/p&gt;

&lt;h3&gt;Oracle Analytics Cloud&lt;/h3&gt;
&lt;p&gt;The control room screen. Dispatchers and maintenance planners see trends, anomaly flags, and forecasts in shared dashboards.&lt;/p&gt;

&lt;h3&gt;Oracle Fusion Data Intelligence&lt;/h3&gt;
&lt;p&gt;The memory. It can combine maintenance history and work-order data with the operational picture, so a strange reading can be compared with what was last repaired on that unit.&lt;/p&gt;

&lt;h2&gt;Following One Reading from Truck to Technician&lt;/h2&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Sense.&lt;/strong&gt; Sensors on the trailer capture temperature, compressor behavior, and door activity.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Stream.&lt;/strong&gt; Events flow into OCI Streaming through the Kafka-compatible endpoint.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Prepare.&lt;/strong&gt; Spark checks, enriches, and standardizes the data.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Store.&lt;/strong&gt; Object Storage and data-lake layers keep both current and historical readings.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Learn.&lt;/strong&gt; Models flag unusual behavior and forecast where signals are heading.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Show and alert.&lt;/strong&gt; Dashboards and notifications reach the people who can act.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Good predictions depend on good data first. The machine learning only works if the pipeline underneath it is reliable and consistent.&lt;/p&gt;

&lt;h2&gt;Smarter Than a Fixed Alarm&lt;/h2&gt;
&lt;p&gt;A simple threshold alarm only fires after the temperature crosses a line. Anomaly detection looks at patterns across signals, such as a compressor drawing more current while the cargo temperature creeps upward. That pattern can deserve attention even though no single reading has crossed a limit yet.&lt;/p&gt;

&lt;p&gt;Forecasting adds time. If a signal is expected to keep moving the wrong way, planners get a chance to schedule a check at the next depot instead of dealing with a spoiled load on the road.&lt;/p&gt;

&lt;h2&gt;What a Good Alert Looks Like&lt;/h2&gt;
&lt;p&gt;An alert can name the affected signal, the truck or trailer, and the time of the event. The people receiving it should treat it as a prompt to look closer, not as proof that something has broken. They confirm against the dashboard trend, decide whether to inspect, and record what they decided.&lt;/p&gt;

&lt;h2&gt;Two Screens That Do the Heavy Lifting&lt;/h2&gt;

&lt;h3&gt;Fleet health view in Oracle Analytics Cloud&lt;/h3&gt;
&lt;p&gt;Dashboards can combine sensor trends, anomaly indicators, forecasts, maintenance dates, and work-order readiness. One page answers the question: which trailers need eyes on them first?&lt;/p&gt;

&lt;h3&gt;Maintenance context in Fusion Data Intelligence&lt;/h3&gt;
&lt;p&gt;Teams can identify units with higher anomaly rates, compare predicted maintenance dates with scheduled ones, and review asset trends. That helps with prioritizing work and with efforts to limit unplanned downtime.&lt;/p&gt;

&lt;h2&gt;Ask Questions in Plain Language&lt;/h2&gt;
&lt;p&gt;The same curated data can feed AI-assisted reporting. A manager could ask which routes showed the most door-open anomalies this week and explore possible causes without waiting for a separate report. Oracle also notes that Oracle Analytics Cloud data models can be reached through supported MCP clients for natural-language and developer workflows. The MCP tools are described as a preview feature, so review the documentation before testing.&lt;/p&gt;

&lt;h2&gt;Five Things to Settle Before Launch&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Data rules.&lt;/strong&gt; Agree on expected ranges, units, timestamp conventions, and what happens when a sensor goes quiet.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Who owns each alert.&lt;/strong&gt; Name the responsible team, severity levels, notification channel, and escalation path.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Model upkeep.&lt;/strong&gt; Track false alarms and misses, watch for drift, and decide when to retrain or roll back.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Access control.&lt;/strong&gt; Consider least-privilege access, OCI IAM policies, compartment boundaries, encryption, network controls, and audit logging.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;A human in the loop.&lt;/strong&gt; Decide how alerts get verified, how decisions are recorded, and how outcomes are reviewed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Where to Go Next&lt;/h2&gt;
&lt;p&gt;Start by reading the documentation for OCI Streaming, Oracle AI Data Platform, Oracle Analytics Cloud, and Oracle Fusion Data Intelligence. Then test the pipeline, access controls, model monitoring, and response workflow against your own fleet and your own cargo rules.&lt;/p&gt;

&lt;h2&gt;The Takeaway&lt;/h2&gt;
&lt;p&gt;The value is not in collecting more data. It is in connecting what you already collect so the right person sees the right signal early enough to act. Done well, that points toward fewer unplanned breakdowns, steadier cargo quality, and calmer nights for dispatch.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/4244178594211992971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/4244178594211992971' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/4244178594211992971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/4244178594211992971'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/10/before-ice-cream-melts-catching.html' title='Before the Ice Cream Melts: Catching Refrigeration Trouble Early with Oracle AI Data Platform'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-3943281289399611040</id><published>2026-10-08T14:00:00.000-07:00</published><updated>2026-10-09T21:53:01.761-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI Workflow Design"/><category scheme="http://www.blogger.com/atom/ns#" term="Enterprise AI Strategy"/><category scheme="http://www.blogger.com/atom/ns#" term="Model Selection"/><category scheme="http://www.blogger.com/atom/ns#" term="OCI Generative AI"/><category scheme="http://www.blogger.com/atom/ns#" term="RFP Automation"/><category scheme="http://www.blogger.com/atom/ns#" term="Training Optimizers"/><title type='text'>Fit Before Fame: Picking the Right AI Model for the Job You Actually Have</title><content type='html'>&lt;br /&gt;&lt;h1&gt;&lt;br /&gt;&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Leaderboards tell you who won a contest. They do not tell you who will survive your Monday morning workload.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;The Trap of Starting With a Model Name&lt;/h2&gt;
&lt;p&gt;A lot of AI projects kick off by checking rankings and picking whatever is trending. The result often shines in a demo, then stumbles when real volume, many simultaneous users, and hard business deadlines show up. A sturdier approach starts somewhere else entirely: with the work. What must the system produce, how quickly, how accurate must it be, and how much human review already happens afterward?&lt;/p&gt;

&lt;p&gt;What follows is a practical way to answer those questions, drawn from a large request-for-proposal (RFP) automation effort that ran on Oracle Cloud Infrastructure Generative AI.&lt;/p&gt;

&lt;h2&gt;Write Down the Constraints First&lt;/h2&gt;
&lt;p&gt;Before touching an optimizer or shortlisting a model, put numbers and facts behind these questions:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;How many items need processing in one batch or one day?&lt;/li&gt;
    &lt;li&gt;What turnaround time is acceptable?&lt;/li&gt;
    &lt;li&gt;How much human checking still follows the model&#39;s answer?&lt;/li&gt;
    &lt;li&gt;How tightly must answers stay anchored to source documents?&lt;/li&gt;
    &lt;li&gt;What level of concurrency will production realistically see?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Honest answers here cut the options down faster than any benchmark ever will.&lt;/p&gt;

&lt;h2&gt;Training Methods: Match the Tool to the Terrain&lt;/h2&gt;
&lt;p&gt;The optimizer that adjusts weights during training shapes how long training takes, how stable it is, and how good the result becomes. Think of it as choosing a vehicle for the road ahead.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Steady and predictable suits smaller models and tabular data. Adaptive step sizing suits big transformer-style models. History-aware methods suit data that unfolds in sequence.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Simple, stable updates are a good fit when predictable behavior matters more than raw speed. Adaptive methods tune their own step sizes, which tends to speed up convergence on large transformer models and often lowers total compute cost. Methods that weigh recent history can help when the data has a strong sequential flavor.&lt;/p&gt;

&lt;p&gt;Even if your organization only consumes a pre-trained model, this still matters. Upstream training choices shape how the model behaves on your data, so look at the algorithm family alongside your intended production use.&lt;/p&gt;

&lt;h2&gt;Choosing a Model for Your Workload&lt;/h2&gt;
&lt;p&gt;There is no universal winner. Retrieval-heavy tasks that must stay faithful to internal documents lean toward models built for grounded generation. High-volume batch jobs that can tolerate a few gaps lean toward throughput-focused models. Multimodal needs, long-document analysis, or on-premises customization each point somewhere different.&lt;/p&gt;

&lt;p&gt;A reliable test: take a representative slice of your real workload, run it on two or three candidates, and measure both quality and elapsed time under the same network and concurrency conditions production will have.&lt;/p&gt;

&lt;h2&gt;A Real Test Run: What the RFP Project Revealed&lt;/h2&gt;
&lt;p&gt;In the evaluated project, a large set of enterprise questions was processed across different network paths, shared and dedicated infrastructure, and single-user and concurrent loads.&lt;/p&gt;

&lt;p&gt;One model gave thoroughly grounded answers but needed about ninety minutes per batch. A second model finished the same volume in a fraction of that time, and most of its responses were still usable after a short human review that the existing process already included.&lt;/p&gt;

&lt;h3&gt;Surprises Along the Way&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;More concurrent users did not always mean more total throughput. Rate limits in the managed service sometimes made serialized runs the more efficient choice.&lt;/li&gt;
    &lt;li&gt;Many &quot;not found&quot; answers came from missing content in the knowledge base, not from the model.&lt;/li&gt;
    &lt;li&gt;Detailed regional instructions in prompts sometimes caused language drift. Simpler, clearer prompts gave steadier results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The team picked the faster model. Downstream review already covered coverage gaps, and the shorter cycle meant more batches per day. Workflow fit decided it, not a universal ranking.&lt;/p&gt;

&lt;h2&gt;Let the Constraints Shape the Architecture&lt;/h2&gt;
&lt;p&gt;Once the operational needs are clear, the surrounding design falls into place. Routing logic, retrieval settings, fallback handling, and concurrency limits become deliberate choices instead of afterthoughts. Swapping models without revisiting these pieces rarely fixes the real problem.&lt;/p&gt;

&lt;p&gt;Teams that begin with the outcome they need, the latency they can live with, and the review steps already in place usually reach a working system sooner than teams that begin with a favorite model.&lt;/p&gt;

&lt;h2&gt;Your Next Five Moves&lt;/h2&gt;
&lt;ol&gt;
    &lt;li&gt;Document volume, latency target, and review process for your specific use case.&lt;/li&gt;
    &lt;li&gt;Run a side-by-side comparison on a representative sample, under realistic network and load conditions.&lt;/li&gt;
    &lt;li&gt;Check data coverage and retrieval quality before blaming the model for gaps.&lt;/li&gt;
    &lt;li&gt;Treat prompt wording and concurrency settings as dials you can tune, not fixed constants.&lt;/li&gt;
    &lt;li&gt;Measure end-to-end cycle time and human effort, not just model-level scores.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;The Bottom Line&lt;/h2&gt;
&lt;p&gt;Enterprise AI works when the tools and methods line up with the work that must get done. The strongest systems scale reliably inside the operational environment they live in, no matter which model sits at the center.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/3943281289399611040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/3943281289399611040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/3943281289399611040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/3943281289399611040'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/10/fit-before-fame-picking-right-ai-model.html' title='Fit Before Fame: Picking the Right AI Model for the Job You Actually Have'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-3802594292477227701</id><published>2026-10-01T01:30:00.000-07:00</published><updated>2026-10-09T21:55:56.175-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Data Residency"/><category scheme="http://www.blogger.com/atom/ns#" term="Globally Distributed Database"/><category scheme="http://www.blogger.com/atom/ns#" term="OCI"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle AI Database"/><category scheme="http://www.blogger.com/atom/ns#" term="Raft Replication"/><category scheme="http://www.blogger.com/atom/ns#" term="Sharding"/><title type='text'>One Database, Many Countries: Inside Oracle Globally Distributed AI Database</title><content type='html'>&lt;h1&gt;&lt;br /&gt;&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;What if your data could live in the right country, survive a regional outage, and still look like one database to your application?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;The Idea in Plain Words&lt;/h2&gt;
&lt;p&gt;Oracle Globally Distributed AI Database is a single logical database that spreads and replicates data across nodes, regions, and countries. Developers work with it as one database. Behind the scenes, Oracle decides where each piece of data lives.&lt;/p&gt;

&lt;p&gt;Oracle positions it for always-on architectures, high performance, and data residency rules. Applications keep the converged capabilities of Oracle AI Database, including relational, AI vector, JSON, Graph, and Spatial data.&lt;/p&gt;

&lt;h2&gt;Where You Can Run It&lt;/h2&gt;
&lt;p&gt;Oracle lists several deployment options:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Globally Distributed Autonomous AI Database on OCI, a fully automated option.&lt;/li&gt;
    &lt;li&gt;Globally Distributed Exadata Database on Exascale Infrastructure on OCI.&lt;/li&gt;
    &lt;li&gt;Oracle AI Database services on OCI in multicloud environments.&lt;/li&gt;
    &lt;li&gt;Oracle AI Database Enterprise Edition in your own data center.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The capabilities are built into Oracle AI Database Enterprise Edition, so the same approach works wherever it is deployed.&lt;/p&gt;

&lt;h2&gt;Sharding Without the Manual Work&lt;/h2&gt;
&lt;p&gt;Sharding means splitting data across several databases. Doing it by hand is painful. Oracle says its service automates sharding and resharding, and rebalances data to keep workloads even.&lt;/p&gt;

&lt;p&gt;Oracle describes six data distribution methods. One example is composite sharding, which uses two levels of sharding with different methods and keys. The goal is to place data close to where it is needed for low latency, availability, or residency.&lt;/p&gt;

&lt;h2&gt;Raft Replication for Fast Failover&lt;/h2&gt;
&lt;p&gt;Raft is a consensus protocol for replicating logs across nodes. Oracle uses it in an active-active-active design. Its stated goals are failover within seconds and no data loss during outages.&lt;/p&gt;

&lt;p&gt;Raft replication is available with Oracle AI Database 26ai. Oracle also says Globally Distributed AI Database can be used with Oracle Database 19c to gain Raft replication. Oracle Data Guard can be added as another replication choice on the Autonomous service.&lt;/p&gt;

&lt;h2&gt;Data Residency Made Practical&lt;/h2&gt;
&lt;p&gt;Many regulations say certain data must stay in a given country. With this database, you set policies by geography for data, replicas, backups, and encryption keys. Specific shards can sit in-country while the application tier stays central.&lt;/p&gt;

&lt;p&gt;Oracle quotes Munich Re HealthTech saying the service helps them meet residency rules by distributing data across countries, transparently to application users.&lt;/p&gt;

&lt;h2&gt;No Code Changes&lt;/h2&gt;
&lt;p&gt;Oracle says existing Oracle AI Database applications can start using a distributed database without modification. The client drivers support it natively, and developers keep strong consistency and full SQL.&lt;/p&gt;

&lt;h2&gt;Where It Fits&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;Global apps that need low latency for users on every continent.&lt;/li&gt;
    &lt;li&gt;Financial systems that cannot afford to lose transactions.&lt;/li&gt;
    &lt;li&gt;Regulated industries with strict in-country storage rules.&lt;/li&gt;
    &lt;li&gt;AI workloads that combine vector search with business data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Before You Start&lt;/h2&gt;
&lt;ol&gt;
    &lt;li&gt;List which data must stay in which country.&lt;/li&gt;
    &lt;li&gt;Choose a sharding key that matches how your data is accessed.&lt;/li&gt;
    &lt;li&gt;Pick a replication method for your failover and consistency needs.&lt;/li&gt;
    &lt;li&gt;Test failover and resharding under realistic load.&lt;/li&gt;
    &lt;li&gt;Verify current feature and version support in Oracle&#39;s documentation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;The Bottom Line&lt;/h2&gt;
&lt;p&gt;Globally Distributed AI Database aims to give teams global scale, high availability, and residency control without rewriting applications. Oracle&#39;s claims are strong, so run your own workload tests to confirm them for your environment.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/3802594292477227701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/3802594292477227701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/3802594292477227701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/3802594292477227701'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/10/one-database-many-countries-inside.html' title='One Database, Many Countries: Inside Oracle Globally Distributed AI Database'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-178260899833669301</id><published>2026-09-17T22:45:00.000-07:00</published><updated>2026-10-09T21:45:33.977-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Client ID Metadata"/><category scheme="http://www.blogger.com/atom/ns#" term="Cross-App Access"/><category scheme="http://www.blogger.com/atom/ns#" term="Identity Management"/><category scheme="http://www.blogger.com/atom/ns#" term="MCP Security"/><category scheme="http://www.blogger.com/atom/ns#" term="OAuth for AI Agents"/><category scheme="http://www.blogger.com/atom/ns#" term="OCI IAM"/><title type='text'>Giving AI Agents a Badge, Not a Master Key: MCP Security on OCI IAM</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;An agent that can reach everything is a liability. An agent that can reach exactly what it needs is a colleague you can trust.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;The Problem in One Sentence&lt;/h2&gt;
&lt;p&gt;A single chat with an AI assistant can touch several systems: it fetches a sales report, then drafts follow-up tasks in another app. Every one of those hops needs its own yes or no from an identity system. Oracle Cloud Infrastructure IAM now offers building blocks that handle this for Model Context Protocol (MCP) servers.&lt;/p&gt;

&lt;h2&gt;Why MCP Needs a Gatekeeper&lt;/h2&gt;
&lt;p&gt;MCP is the common language agents use to find and call tools in databases, APIs, and business software. That convenience cuts both ways. Without guardrails, a well-meaning agent can wander into places it should never go. OCI IAM acts as the gatekeeper: it approves which clients are allowed, narrows which resources they can touch, and signs off on actions that happen downstream.&lt;/p&gt;

&lt;h2&gt;How the Handshake Works&lt;/h2&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Discover.&lt;/strong&gt; The MCP client reads the server&#39;s Protected Resource Metadata and learns where the authorization and token endpoints live. No hard-coded settings needed.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Identify.&lt;/strong&gt; The client presents its identity through a metadata document (explained below).&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Authenticate.&lt;/strong&gt; The user signs in using the authorization-code flow with PKCE.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Receive a scoped token.&lt;/strong&gt; OCI IAM issues an access token matching the requested MCP resource and scopes.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Verify.&lt;/strong&gt; The MCP server checks validity, audience, and scopes before running any tool.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Client Onboarding Without the Paperwork&lt;/h2&gt;
&lt;p&gt;With Client ID Metadata Documents, an application simply hosts a small JSON file at a public HTTPS address and uses that address as its client ID. OCI IAM retrieves and validates the file, so nobody has to register the same client over and over.&lt;/p&gt;

&lt;h3&gt;Two Locks, Two Keys&lt;/h3&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;8&quot; cellspacing=&quot;0&quot;&gt;
    &lt;thead&gt;
        &lt;tr&gt;&lt;th&gt;Allowlist&lt;/th&gt;&lt;th&gt;Where it lives&lt;/th&gt;&lt;th&gt;What it decides&lt;/th&gt;&lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;&lt;td&gt;Metadata locations&lt;/td&gt;&lt;td&gt;Identity domain&lt;/td&gt;&lt;td&gt;Which sources of client documents are trusted&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Approved clients&lt;/td&gt;&lt;td&gt;Resource application&lt;/td&gt;&lt;td&gt;Which clients may call that specific protected resource&lt;/td&gt;&lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The result: a client can be cleared for sales reporting and still be locked out of every other application.&lt;/p&gt;

&lt;h2&gt;Tokens That Know Their Limits&lt;/h2&gt;
&lt;p&gt;For interactive use, a public client runs the authorization-code flow with Proof Key for Code Exchange. After the user logs in and the client submits its code challenge, OCI IAM returns a token whose audience and scopes fit the requested MCP resource. Read-only report access stays separate from the right to modify data, and the token never exceeds what the administrator set up.&lt;/p&gt;

&lt;h2&gt;When One App Is Not Enough: Cross-App Access&lt;/h2&gt;
&lt;p&gt;Suppose the agent must now act in a second system. OCI IAM handles this with an Identity Assertion JWT Authorization Grant:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;A confidential client in the source domain trades the user&#39;s ID token for a signed intermediate grant.&lt;/li&gt;
    &lt;li&gt;A second confidential client redeems that grant at the target domain.&lt;/li&gt;
    &lt;li&gt;The target domain maps the user, applies its own policies, and issues a brand new access token for its API.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Two things stand out. The interactive client never handles confidential credentials, and each domain keeps full authority over its own rules. The sales app, for example, still decides which tasks that user may create.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/178260899833669301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/178260899833669301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/178260899833669301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/178260899833669301'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/09/giving-ai-agents-badge-not-master-key.html' title='Giving AI Agents a Badge, Not a Master Key: MCP Security on OCI IAM'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-3817741417443038492</id><published>2026-09-04T07:30:00.000-07:00</published><updated>2026-10-09T21:49:04.417-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Anomaly Detection"/><category scheme="http://www.blogger.com/atom/ns#" term="Enterprise AI Security"/><category scheme="http://www.blogger.com/atom/ns#" term="HR GenAI Safety"/><category scheme="http://www.blogger.com/atom/ns#" term="Llama Guard Fine-Tuning"/><category scheme="http://www.blogger.com/atom/ns#" term="Prompt Classification"/><category scheme="http://www.blogger.com/atom/ns#" term="Prompt Guardrail"/><title type='text'>Screening Prompts Before They Reach Your AI</title><content type='html'>&lt;h1&gt;Ask an HR assistant about parental leave and nothing bad happens. Ask it for a coworker&#39;s home address or the history of complaints against them, and suddenly the same assistant becomes a privacy risk. Once a generative AI is wired into HR records, every single prompt deserves a quick look before the main model sees it.&lt;/h1&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

&lt;p&gt;The fix described here is simple: put a compact, specialized classifier in front of the main HR model. It reads each request first, then decides whether to let it through, flag it, or shut it down.&lt;/p&gt;

&lt;h2&gt;Sorting Every Request Into One of Three Buckets&lt;/h2&gt;
&lt;p&gt;The classifier labels each prompt as Normal, Caution, or Restricted. Here is what each one means in plain terms.&lt;/p&gt;

&lt;p&gt;Normal covers the everyday stuff: policy lookups, benefits, how a process works. These sail straight through to the main model with no friction.&lt;/p&gt;

&lt;p&gt;Caution applies to requests that brush against sensitive ground, such as salary ranges for a whole team or who reports to whom. The system can attach a warning or give a trimmed-down answer.&lt;/p&gt;

&lt;p&gt;Restricted is for blunt attempts to pull personal contact details, disciplinary files, or one person&#39;s pay. Those are stopped before the main model ever sees them.&lt;/p&gt;

&lt;p&gt;The payoff is that routine questions stay quick while obvious grabs for confidential data hit a wall.&lt;/p&gt;

&lt;h2&gt;Following One Request From Start to Finish&lt;/h2&gt;
&lt;p&gt;An employee types a question into a portal, a chat window, or an API call. Before anything else happens, the classifier reads it and returns a label with a confidence score. The application then acts on that result: pass the prompt along, add a warning, or send back a refusal. Each decision gets logged, which gives security and compliance teams a trail to review later.&lt;/p&gt;

&lt;p&gt;Since the classifier is small, the extra wait for the user is barely noticeable.&lt;/p&gt;

&lt;h2&gt;Picking a Model and Teaching It Your Rules&lt;/h2&gt;
&lt;p&gt;A compact, safety-oriented model is a good starting point. Fine-tune it on HR-flavored examples and it learns to tell a harmless policy question from an attempt to dig up private details. Keep the training data shaped like real traffic: mostly safe prompts, a smaller group of borderline ones, and a few clearly restricted ones. That realistic balance stops the model from crying wolf on legitimate questions.&lt;/p&gt;

&lt;p&gt;Fine-tuning uses adapters, so only a thin layer of extra weights is trained and stored. The base model stays frozen. Memory use stays low, and updating the safety rules later does not mean starting from scratch.&lt;/p&gt;

&lt;h2&gt;Wiring It Into a Live System&lt;/h2&gt;
&lt;p&gt;In production, you load the classifier once and expose it as a small service. A call looks roughly like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;from transformers import pipeline

safety_pipe = pipeline(
    &quot;text-generation&quot;,
    model=&quot;./hr_safety_adapter&quot;,
    device_map=&quot;auto&quot;
)

def check_prompt(user_text):
    raw = safety_pipe(user_text, max_new_tokens=15)[0][&quot;generated_text&quot;]
    # Parse the generated label and confidence from raw output
    return parse_label(raw)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Place the service behind an API gateway. Keep the model files and adapter in object storage and pull them in when the container boots. Send logs and metrics to your monitoring stack so odd patterns show up fast.&lt;/p&gt;

&lt;h2&gt;Shipping It: Six Steps&lt;/h2&gt;
&lt;ol&gt;
    &lt;li&gt;Bundle the classifier and adapter into a container image.&lt;/li&gt;
    &lt;li&gt;Push that image to a container registry.&lt;/li&gt;
    &lt;li&gt;Run it on a managed container service or a Kubernetes cluster.&lt;/li&gt;
    &lt;li&gt;Keep model artifacts in object storage and load them at startup.&lt;/li&gt;
    &lt;li&gt;Send all traffic through an API gateway that enforces authentication.&lt;/li&gt;
    &lt;li&gt;Ship decision logs to a central logging service for review.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Lessons Worth Borrowing&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Sharp label definitions beat a bigger pile of training examples.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Preserving the real-world mix of safe and sensitive requests cuts false alarms. It also helps to treat the model as a text generator rather than a pure classifier, since that is how it actually produces its labels. And once the training data is swapped out, the same pattern carries over to other sensitive domains.&lt;/p&gt;

&lt;h2&gt;The Short Version&lt;/h2&gt;
&lt;p&gt;A small, domain-tuned safety model in front of an HR assistant catches risky prompts before they reach the core system. Latency stays low, the infrastructure is modest, and every decision can be audited. The same design suits any setting where employee or customer data must stay protected without giving up useful AI features.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/3817741417443038492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/3817741417443038492' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/3817741417443038492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/3817741417443038492'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/09/screening-prompts-before-they-reach.html' title='Screening Prompts Before They Reach Your AI'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-1583911429438445664</id><published>2026-08-27T23:02:00.000-07:00</published><updated>2026-10-09T22:03:06.637-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Data Guard"/><category scheme="http://www.blogger.com/atom/ns#" term="Database Sharding"/><category scheme="http://www.blogger.com/atom/ns#" term="Globally Distributed Autonomous AI Database"/><category scheme="http://www.blogger.com/atom/ns#" term="OCI Console"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Key Vault"/><category scheme="http://www.blogger.com/atom/ns#" term="Raft Replication"/><title type='text'>Build Your First Globally Distributed Autonomous AI Database on OCI: A Console Walkthrough</title><content type='html'> &lt;h1&gt;&lt;br /&gt;&lt;/h1&gt;



&lt;p&gt;&lt;br /&gt;&lt;/p&gt;



&lt;h2&gt;What You Are Actually Creating&lt;/h2&gt;

&lt;p&gt;In the OCI Console, a Globally Distributed Autonomous AI Database is a single resource that holds the whole configuration: the nodes (shards), the catalog, the data distribution method, the replication method, connection details, and backup settings. You start from the service home page and select Create database.&lt;/p&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;



&lt;h2&gt;Settings You Cannot Change&lt;/h2&gt;

&lt;p&gt;Two fields are fixed. Only Dedicated Infrastructure is supported as the deployment type, and only Transaction Processing is supported as the workload type. For the database version, you choose between 19c and 26ai.&lt;/p&gt;



&lt;h2&gt;The Big Decision: Distribution and Replication&lt;/h2&gt;

&lt;p&gt;This is the most important step, because the replication type is set once and cannot be changed later.&lt;/p&gt;



&lt;h3&gt;Three ways to distribute data&lt;/h3&gt;

&lt;ul&gt;

    &lt;li&gt;&lt;strong&gt;Automated:&lt;/strong&gt; data is spread across nodes using partitioning by consistent hash, evenly and randomly.&lt;/li&gt;

    &lt;li&gt;&lt;strong&gt;User managed:&lt;/strong&gt; you map data to specific nodes yourself. This suits cases where performance or regulation requires certain data on a particular node, and you want full control over moving it.&lt;/li&gt;

    &lt;li&gt;&lt;strong&gt;Multi-Level:&lt;/strong&gt; you create several data spaces for different subsets of a table that is hash partitioned. A data space is a set of nodes holding a range or list of key values. The documentation says this gives better load balancing than User managed distribution.&lt;/li&gt;

&lt;/ul&gt;



&lt;h3&gt;Two ways to replicate&lt;/h3&gt;

&lt;ul&gt;

    &lt;li&gt;&lt;strong&gt;Raft:&lt;/strong&gt; replication units made of chunks are distributed automatically across nodes. The system handles chunk assignment, movement, and balancing when you scale. User managed distribution is not available with Raft.&lt;/li&gt;

    &lt;li&gt;&lt;strong&gt;Data Guard:&lt;/strong&gt; a node-level approach that creates a standby database for each node. You do not set it up in the initial deployment. You configure the replicas after the database is created.&lt;/li&gt;

&lt;/ul&gt;



&lt;h2&gt;The Catalog Comes Preconfigured&lt;/h2&gt;

&lt;p&gt;The catalog appears already filled in, and you can change it with Edit in the Actions menu. Raft does not apply to the catalog. Protect it by adding Data Guard replication after creation.&lt;/p&gt;



&lt;h2&gt;Locking It Down: Credentials and Encryption&lt;/h2&gt;

&lt;p&gt;You set an ADMIN password that can access every database in the configuration, including the catalog.&lt;/p&gt;



&lt;p&gt;For encryption, you choose between OCI Vault Service and Oracle Key Vault. The rules depend on your distribution type:&lt;/p&gt;

&lt;ul&gt;

    &lt;li&gt;With Automated distribution, all nodes share the same vault and key (OCI Vault) or the same OKV endpoint group name (Oracle Key Vault).&lt;/li&gt;

    &lt;li&gt;With User managed distribution, each node can use the same or different key details, and this is optional.&lt;/li&gt;

    &lt;li&gt;With Multi-Level distribution, all nodes within a data space share the same key details.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Oracle&#39;s guidance is simple: use OCI Vault if your nodes sit in fewer than three regions, and use Oracle Key Vault if they span three or more. You cannot switch between the two types once the database exists.&lt;/p&gt;



&lt;h2&gt;Network, Characters, and Ports&lt;/h2&gt;

&lt;p&gt;Pick the private endpoint you configured earlier. For character sets, AL32UTF8 is recommended by default, with AL16UTF16 as the national character set. Then enter the listener port, the local ONS port, and the remote ONS port. The remote ONS port and the TLS port must each be unique to this database. Do not reuse a number from another one until its delete operation has fully finished.&lt;/p&gt;



&lt;h2&gt;Optional Extras Under Advanced Options&lt;/h2&gt;

&lt;p&gt;You can pass settings to enable automatic backups to Object Store. You can also attach a network security group to the virtual cloud network that hosts the GSMs. The NSG must already exist.&lt;/p&gt;



&lt;h2&gt;Validate, Create, Wait&lt;/h2&gt;

&lt;ol&gt;

    &lt;li&gt;Select Validate to run checks against your configuration.&lt;/li&gt;

    &lt;li&gt;Fix any errors, then select Create.&lt;/li&gt;

    &lt;li&gt;Watch the State column and the Work request tab for progress.&lt;/li&gt;

    &lt;li&gt;Wait for the node status to show Available.&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;Expect a wait. Creation includes host procurement, software installation, and generating certificates for the GSMs.&lt;/p&gt;



&lt;h2&gt;One Warning to Remember&lt;/h2&gt;

&lt;blockquote&gt;

&lt;p&gt;After creation, do not move the vaults and keys, or the database will stop working.&lt;/p&gt;

&lt;/blockquote&gt;



&lt;h2&gt;Quick Recap of the Permanent Choices&lt;/h2&gt;

&lt;p&gt;Replication type, encryption key type, and the dedicated infrastructure and transaction processing options are all fixed once set. Decide them on paper first, then build.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/1583911429438445664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/1583911429438445664' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/1583911429438445664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/1583911429438445664'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/08/build-your-first-globally-distributed.html' title='Build Your First Globally Distributed Autonomous AI Database on OCI: A Console Walkthrough'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-7586011320282529738</id><published>2026-08-15T02:00:00.000-07:00</published><updated>2026-10-09T21:59:54.206-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI Workflow Design"/><category scheme="http://www.blogger.com/atom/ns#" term="Enterprise AI Strategy"/><category scheme="http://www.blogger.com/atom/ns#" term="Model Selection"/><category scheme="http://www.blogger.com/atom/ns#" term="OCI Generative AI"/><category scheme="http://www.blogger.com/atom/ns#" term="RFP Automation"/><category scheme="http://www.blogger.com/atom/ns#" term="Training Optimizers"/><title type='text'>How Enterprises Should Choose AI Models and Training Methods That Actually Fit the Work</title><content type='html'>&lt;br /&gt;&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Many teams begin an AI project by looking at leaderboards or popular model names. That approach often leads to systems that look strong in tests but struggle once real volume, concurrency, and business deadlines appear. The more reliable path starts with the work itself: what the system must produce, how fast it must run, how accurate the answers need to be, and how much human review already exists downstream.&lt;/p&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;This post outlines a practical way to make those choices, using lessons from a large-scale request-for-proposal automation effort that ran on Oracle Cloud Infrastructure Generative AI.&lt;/p&gt;

&lt;h3&gt;Start with the Operational Requirements&lt;/h3&gt;
&lt;p&gt;Before selecting an optimizer or a model, list the constraints that matter for the actual process:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;How many items must be processed in a single batch or day?&lt;/li&gt;
    &lt;li&gt;What is an acceptable turnaround time?&lt;/li&gt;
    &lt;li&gt;How much human review will still occur after the model responds?&lt;/li&gt;
    &lt;li&gt;How important is it that every answer stay tightly grounded in source documents?&lt;/li&gt;
    &lt;li&gt;What concurrency levels are realistic in production?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These answers narrow the field more effectively than any benchmark score.&lt;/p&gt;

&lt;h3&gt;Matching Training Algorithms to the Data and Goal&lt;/h3&gt;
&lt;p&gt;The optimizer that updates model weights during training has a direct effect on training time, stability, and final quality. Different optimizers suit different situations:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Simple, stable updates work well for smaller models or tabular data where predictable behavior matters more than raw speed.&lt;/li&gt;
    &lt;li&gt;Adaptive methods that adjust step sizes automatically tend to converge faster on large transformer-style models and often reduce overall compute cost.&lt;/li&gt;
    &lt;li&gt;Methods that emphasize recent history can help when the data has a strong sequential character.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The same principle carries forward when an organization consumes a pre-trained model. The training choices made upstream shape how the model behaves on enterprise data, so the selection process should consider both the algorithm family and the intended production use.&lt;/p&gt;

&lt;h3&gt;Selecting a Model for the Workload&lt;/h3&gt;
&lt;p&gt;No single model is best for every task. Retrieval-heavy work that must stay faithful to internal documents often favors models designed around grounded generation. High-volume batch jobs that tolerate occasional gaps may favor models optimized for throughput. Multimodal needs, long-document analysis, or on-premises customization each point toward different options available on the platform.&lt;/p&gt;
&lt;p&gt;A useful test is to run a representative slice of the real workload on two or three candidate models and measure both quality and elapsed time under the same network and concurrency conditions that production will face.&lt;/p&gt;

&lt;h3&gt;What the RFP Automation Effort Showed&lt;/h3&gt;
&lt;p&gt;In the evaluated project, a large set of enterprise questions was processed under different network paths, shared versus dedicated infrastructure, and single-user versus concurrent loads. One model produced thoroughly grounded answers but required roughly ninety minutes per batch. A second model completed the same volume in a fraction of that time, with the majority of responses still usable after a short human review step that was already part of the existing process.&lt;/p&gt;
&lt;p&gt;Several practical limits appeared during testing:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Adding concurrent users did not always increase overall throughput; rate limits in the managed service sometimes made serialized runs more efficient.&lt;/li&gt;
    &lt;li&gt;A large number of “not found” answers traced back to missing content in the knowledge base rather than to the model itself.&lt;/li&gt;
    &lt;li&gt;Detailed regional instructions in prompts occasionally caused language drift; simpler, clearer prompts improved consistency.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The team ultimately selected the faster model because the downstream review process already covered coverage gaps, and the shorter cycle time increased the number of batches that could be handled each day. The choice was driven by workflow fit, not by a universal ranking.&lt;/p&gt;

&lt;h3&gt;Design the Workflow Around the Constraints&lt;/h3&gt;
&lt;p&gt;Once the operational needs are clear, the supporting architecture follows naturally. Routing logic, retrieval configuration, fallback handling, and concurrency limits become part of the design rather than afterthoughts. Swapping models without adjusting these elements rarely solves the underlying problem.&lt;/p&gt;
&lt;p&gt;Organizations that begin by defining the required outcome, acceptable latency, and existing review steps tend to reach a workable system faster than those that start with a preferred model name.&lt;/p&gt;

&lt;h3&gt;Practical Next Steps&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Document the volume, latency target, and review process for the specific use case.&lt;/li&gt;
    &lt;li&gt;Run a side-by-side evaluation on a representative sample under realistic network and load conditions.&lt;/li&gt;
    &lt;li&gt;Inspect data coverage and retrieval quality before attributing gaps to the model.&lt;/li&gt;
    &lt;li&gt;Treat prompt wording and concurrency settings as tunable parts of the system, not fixed constants.&lt;/li&gt;
    &lt;li&gt;Measure end-to-end cycle time and human effort, not only model-level scores.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enterprise AI succeeds when the chosen tools and methods line up with the actual work that must be completed. The strongest systems are those that scale reliably inside the existing operational environment, regardless of which model sits at the center.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/7586011320282529738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/7586011320282529738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/7586011320282529738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/7586011320282529738'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/08/how-enterprises-should-choose-ai-models.html' title='How Enterprises Should Choose AI Models and Training Methods That Actually Fit the Work'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-7147064578792893606</id><published>2026-07-08T19:23:26.385-07:00</published><updated>2026-07-08T19:23:26.385-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Allow-List Security"/><category scheme="http://www.blogger.com/atom/ns#" term="Database Security"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Database Protection"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle SQL Firewall"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Injection Defense"/><title type='text'>Protect Your Oracle Database from SQL Injection and Unauthorized Access with SQL Firewall</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;SQL injection and credential misuse remain serious threats to database security. Oracle SQL Firewall offers a practical way to defend against these risks by allowing only approved SQL statements and trusted connection paths for each database user.&lt;/p&gt;

&lt;p&gt;Instead of relying solely on application-level controls, SQL Firewall operates directly inside the database kernel. This makes it difficult to bypass and gives you fine-grained control over what each user can do.&lt;/p&gt;

&lt;h3&gt;How SQL Firewall Works&lt;/h3&gt;
&lt;p&gt;SQL Firewall uses an allow-list approach. You first let it observe normal activity for a user, then create a policy that defines exactly which SQL statements and connection details are permitted. Anything outside that policy triggers a violation that can be logged or blocked in real time.&lt;/p&gt;

&lt;p&gt;It evaluates both the SQL statement itself and the context in which it runs, including the client IP address, operating system user, and program name. This helps protect against stolen credentials and unexpected access paths.&lt;/p&gt;

&lt;h3&gt;Key Benefits in Practice&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Inspects every SQL statement, including those generated inside PL/SQL&lt;/li&gt;
    &lt;li&gt;Works whether connections are local or remote, encrypted or not&lt;/li&gt;
    &lt;li&gt;Gives you the choice to log violations only or actively block them&lt;/li&gt;
    &lt;li&gt;Applies per database user, making it easy to protect application accounts or individual users&lt;/li&gt;
    &lt;li&gt;Integrates well with other Oracle security features like Database Vault and auditing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Setting Up SQL Firewall - A Practical Approach&lt;/h3&gt;
&lt;p&gt;Here is a straightforward way to implement SQL Firewall for an application service account.&lt;/p&gt;

&lt;h4&gt;Step 1: Enable SQL Firewall&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;EXEC DBMS_SQL_FIREWALL.ENABLE;&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Step 2: Start Capturing Normal Activity&lt;/h4&gt;
&lt;p&gt;Begin recording what the target user typically does. This example captures activity for an application user named APP:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;BEGIN
  DBMS_SQL_FIREWALL.CREATE_CAPTURE(
    username       =&amp;gt; &#39;APP&#39;,
    top_level_only =&amp;gt; TRUE,
    start_capture  =&amp;gt; TRUE
  );
END;
/&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Let the application run normally for a sufficient period so the firewall learns the expected SQL patterns and connection details.&lt;/p&gt;

&lt;h4&gt;Step 3: Review What Was Captured&lt;/h4&gt;
&lt;p&gt;Check the captured data to confirm it covers the expected workload:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SELECT SQL_TEXT 
FROM DBA_SQL_FIREWALL_CAPTURE_LOGS 
WHERE USERNAME = &#39;APP&#39;;&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Step 4: Generate the Allow-List Policy&lt;/h4&gt;
&lt;p&gt;Once you are satisfied with the captured data, create the policy:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;EXEC DBMS_SQL_FIREWALL.GENERATE_ALLOW_LIST(&#39;APP&#39;);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can review the allowed SQL statements and connection contexts using the DBA_SQL_FIREWALL_ALLOWED_* views.&lt;/p&gt;

&lt;h4&gt;Step 5: Enable Enforcement&lt;/h4&gt;
&lt;p&gt;Activate protection for the user. This example enforces allowed SQL statements and blocks violations:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;BEGIN
  DBMS_SQL_FIREWALL.ENABLE_ALLOW_LIST(
    username =&amp;gt; &#39;APP&#39;,
    enforce  =&amp;gt; DBMS_SQL_FIREWALL.ENFORCE_SQL,
    block    =&amp;gt; TRUE
  );
END;
/&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can choose to enforce SQL statements, connection context, or both. You can also decide whether to block or only log violations.&lt;/p&gt;

&lt;h3&gt;Monitoring and Ongoing Management&lt;/h3&gt;
&lt;p&gt;Review violations regularly using this query:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SELECT SQL_TEXT, FIREWALL_ACTION, IP_ADDRESS, CAUSE, OCCURRED_AT
FROM DBA_SQL_FIREWALL_VIOLATIONS 
WHERE USERNAME = &#39;APP&#39;
ORDER BY OCCURRED_AT DESC;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Periodically clean up old violation records and consider exporting policies using Data Pump for backup or movement between environments.&lt;/p&gt;

&lt;h3&gt;Important Considerations&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;SQL Firewall only captures statements that execute successfully&lt;/li&gt;
    &lt;li&gt;It normalizes SQL by replacing literal values before storing signatures&lt;/li&gt;
    &lt;li&gt;Connection context is checked at session creation time&lt;/li&gt;
    &lt;li&gt;You can add new allowed entries later from either the capture log or violation log&lt;/li&gt;
    &lt;li&gt;Existing sessions are not terminated when you first enable a policy&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;When to Use SQL Firewall&lt;/h3&gt;
&lt;p&gt;This feature works especially well for:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Protecting application service accounts that run a known set of SQL statements&lt;/li&gt;
    &lt;li&gt;Adding an extra layer of defense for sensitive users such as reporting accounts or DBAs&lt;/li&gt;
    &lt;li&gt;Quickly restricting direct database access to known IP addresses or programs&lt;/li&gt;
    &lt;li&gt;Detecting and responding to potential SQL injection attempts in real time&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;Oracle SQL Firewall provides a practical, database-native way to enforce least-privilege access at the SQL level. By combining allow-listing of both statements and connection contexts, it helps reduce the attack surface without requiring major changes to your applications.&lt;/p&gt;

&lt;p&gt;Start with a focused rollout on your most critical application accounts, review the captured activity carefully, and gradually expand protection across your environment.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/7147064578792893606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/7147064578792893606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/7147064578792893606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/7147064578792893606'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/07/protect-your-oracle-database-from-sql.html' title='Protect Your Oracle Database from SQL Injection and Unauthorized Access with SQL Firewall'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-2420511737766270602</id><published>2026-07-03T21:44:00.000-07:00</published><updated>2026-07-06T21:44:57.566-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="autonomous database"/><category scheme="http://www.blogger.com/atom/ns#" term="AWS Multicloud"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle AI Database@AWS"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Autonomous AI Database"/><category scheme="http://www.blogger.com/atom/ns#" term="Self-Managing Database"/><title type='text'>Run Fully Autonomous Oracle Databases Natively Inside AWS</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Organizations running Oracle workloads in AWS now have a powerful new option. Oracle Autonomous AI Database Serverless is generally available on Oracle AI Database@AWS. This allows teams to deploy a completely self-managing Oracle database directly through the AWS Console while using their existing AWS spending commitments.&lt;/p&gt;

&lt;p&gt;The service handles patching, performance tuning, scaling, and security updates automatically, so teams spend less time on routine maintenance and more time on strategic initiatives.&lt;/p&gt;

&lt;h3&gt;The Shift Toward Hands-Off Database Management&lt;/h3&gt;
&lt;p&gt;Many companies want the benefits of automation without moving away from AWS. This release delivers exactly that. You get Oracle’s most advanced autonomous database technology running inside AWS data centers, with the same tools and purchasing experience your teams already use.&lt;/p&gt;

&lt;p&gt;Independent research has shown strong returns for organizations adopting this approach, including major gains in team productivity and sharp reductions in unexpected outages. Those advantages are now available without leaving the AWS environment.&lt;/p&gt;

&lt;h3&gt;Reduced Day-to-Day Database Work&lt;/h3&gt;
&lt;p&gt;The service takes care of many tasks that traditionally require manual effort:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Patches and upgrades are applied automatically with no downtime&lt;/li&gt;
    &lt;li&gt;Indexing and query optimization happen continuously in the background&lt;/li&gt;
    &lt;li&gt;Compute and storage scale independently based on actual demand&lt;/li&gt;
    &lt;li&gt;Security updates are managed without scheduling windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This automation helps database administrators and infrastructure teams become significantly more productive. They can shift focus toward architecture, data strategy, and innovation instead of ongoing maintenance.&lt;/p&gt;

&lt;h3&gt;Support for Different Workload Needs in One Service&lt;/h3&gt;
&lt;p&gt;Rather than running separate systems for different requirements, a single instance can handle multiple patterns:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;High-volume transactional applications and mixed workloads&lt;/li&gt;
    &lt;li&gt;Analytics, data warehousing, and lakehouse scenarios with support for open table formats&lt;/li&gt;
    &lt;li&gt;Document-centric applications using familiar JSON interfaces&lt;/li&gt;
    &lt;li&gt;Rapid application development through low-code tools with built-in AI features&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Reliable Protection for Important Systems&lt;/h3&gt;
&lt;p&gt;Mission-critical applications need strong uptime guarantees. The service includes:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;A 99.995 percent availability commitment&lt;/li&gt;
    &lt;li&gt;Disaster recovery options across AWS regions&lt;/li&gt;
    &lt;li&gt;Local high availability with automatic failover between availability zones&lt;/li&gt;
    &lt;li&gt;Fully managed backups stored in Amazon S3&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Deep Integration with AWS Services&lt;/h3&gt;
&lt;p&gt;Because the database runs on Oracle infrastructure inside AWS data centers, connectivity to other AWS services is fast and straightforward. Key integrations include:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Automated backups landing in Amazon S3 with options for immutability&lt;/li&gt;
    &lt;li&gt;Encryption using customer-managed keys through AWS KMS&lt;/li&gt;
    &lt;li&gt;Zero-ETL data movement into Amazon Redshift for analytics&lt;/li&gt;
    &lt;li&gt;Native metrics and events flowing into CloudWatch and EventBridge&lt;/li&gt;
    &lt;li&gt;Provisioning and management through the AWS Console, APIs, and CloudFormation templates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Best Fit Scenarios&lt;/h3&gt;
&lt;p&gt;This offering works especially well when teams want to:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Bring existing Oracle applications into AWS with limited changes&lt;/li&gt;
    &lt;li&gt;Lower the operational load on database and infrastructure teams&lt;/li&gt;
    &lt;li&gt;Build AI applications that need vector search and natural language capabilities&lt;/li&gt;
    &lt;li&gt;Consolidate different workload types onto a single managed platform&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Availability and Next Steps&lt;/h3&gt;
&lt;p&gt;The service is available now in the US East (N. Virginia) and US West (Oregon) regions. Both Oracle AI Database 26ai and 19c are supported, along with flexible licensing models.&lt;/p&gt;

&lt;p&gt;Teams already comfortable with AWS tools can start exploring the service through familiar interfaces while taking advantage of Oracle’s automation and resilience features.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/2420511737766270602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/2420511737766270602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/2420511737766270602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/2420511737766270602'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/07/run-fully-autonomous-oracle-databases.html' title='Run Fully Autonomous Oracle Databases Natively Inside AWS'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-7486885858157274298</id><published>2026-06-30T21:41:00.000-07:00</published><updated>2026-07-06T21:42:41.625-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI Application Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Hybrid Retrieval"/><category scheme="http://www.blogger.com/atom/ns#" term="langchain-oracledb"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Vector Search"/><category scheme="http://www.blogger.com/atom/ns#" term="RAG Tutorial"/><title type='text'>Build a Production-Ready RAG Pipeline with LangChain and Oracle AI Database</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Creating a reliable retrieval-augmented generation (RAG) system usually involves a lot of boilerplate. With the &lt;strong&gt;langchain-oracledb&lt;/strong&gt; integration, you can build a complete pipeline; document loading, chunking, vector storage, hybrid search, semantic caching, and conversation memory; in a clean and compact way.&lt;/p&gt;

&lt;p&gt;This guide walks you through a practical, end-to-end implementation using Oracle AI Database as the single source of truth for vectors, text, cache, and history.&lt;/p&gt;

&lt;h3&gt;Why Oracle AI Database + LangChain?&lt;/h3&gt;
&lt;p&gt;Instead of juggling multiple systems (vector database + cache + message store), everything lives inside Oracle AI Database. This simplifies architecture, improves consistency, and gives you enterprise-grade features like transactions and security out of the box.&lt;/p&gt;

&lt;h3&gt;High-Level Architecture&lt;/h3&gt;
&lt;p&gt;Here’s how the pieces connect:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Ingestion&lt;/strong&gt;: Load → Split → Embed → Store in OracleVS&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Retrieval&lt;/strong&gt;: Hybrid search combining semantic similarity and keyword search&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Intelligence Layer&lt;/strong&gt;: Semantic cache + persistent chat history&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Answer Generation&lt;/strong&gt;: Use retrieved context to generate responses&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Step 1: Document Ingestion Pipeline&lt;/h3&gt;
&lt;p&gt;We’ll read runbook content from a database table, split it intelligently, and store the chunks with embeddings.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;from langchain_oracledb.document_loaders import OracleDocLoader, OracleTextSplitter
from langchain_oracledb.vectorstores import OracleVS, DistanceStrategy
from langchain_community.embeddings import HuggingFaceEmbeddings

def ingest_documents(conn):
    # Load documents with metadata
    loader = OracleDocLoader(
        conn=conn,
        params={
            &quot;owner&quot;: conn.username,
            &quot;tablename&quot;: &quot;RUNBOOK_SOURCE&quot;,
            &quot;colname&quot;: &quot;CONTENT&quot;,
            &quot;mdata_cols&quot;: [&quot;ID&quot;, &quot;TITLE&quot;, &quot;CATEGORY&quot;]
        }
    )
    docs = loader.load()

    # Create vector store
    embeddings = HuggingFaceEmbeddings(model_name=&quot;all-MiniLM-L6-v2&quot;)
    
    vs = OracleVS(
        conn,
        embeddings,
        table_name=&quot;DOCUMENT_VECTORS&quot;,
        distance_strategy=DistanceStrategy.COSINE
    )

    # Split and store
    splitter = OracleTextSplitter(
        conn=conn,
        params={&quot;by&quot;: &quot;words&quot;, &quot;max&quot;: 250, &quot;split&quot;: &quot;sentence&quot;}
    )

    vs.add_documents(docs, text_splitter=splitter)
    return vs&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Step 2: Hybrid Retrieval&lt;/h3&gt;
&lt;p&gt;Combine semantic search (vector similarity) with keyword search for better results.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;from langchain_oracledb.retrievers import OracleTextSearchRetriever

def hybrid_retrieve(vector_store, query, k=5):
    # Semantic search
    semantic_docs = vector_store.similarity_search(query, k=k)
    
    # Keyword search
    keyword_retriever = OracleTextSearchRetriever(
        vector_store=vector_store,
        k=k
    )
    keyword_docs = keyword_retriever.invoke(query)
    
    # Simple fusion logic (you can improve this with RRF)
    combined = semantic_docs + keyword_docs
    # Deduplicate and rank (basic version shown)
    seen = set()
    unique_docs = []
    for doc in combined:
        doc_id = doc.metadata.get(&quot;ID&quot;)
        if doc_id not in seen:
            seen.add(doc_id)
            unique_docs.append(doc)
    
    return unique_docs[:k]&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Step 3: Add Semantic Caching&lt;/h3&gt;
&lt;p&gt;Reuse answers for similar questions to reduce cost and latency.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;from langchain_oracledb.cache import OracleSemanticCache
from langchain.schema import Generation

def get_cached_or_generate(conn, embeddings, query, context):
    cache = OracleSemanticCache(
        conn,
        embeddings,
        table_name=&quot;SEMANTIC_CACHE&quot;,
        score_threshold=0.85
    )
    
    cached = cache.lookup(query, &quot;answer_cache&quot;)
    
    if cached:
        return cached[0].text, True  # cache hit
    
    # Generate new answer (call your LLM here)
    answer = generate_response(query, context)
    
    cache.update(query, &quot;answer_cache&quot;, [Generation(text=answer)])
    return answer, False&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Step 4: Persist Conversation History&lt;/h3&gt;
&lt;p&gt;Keep full chat context across sessions.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;from langchain_oracledb.chat_message_histories import OracleChatMessageHistory
from langchain.schema import HumanMessage, AIMessage

def save_to_history(conn, session_id, question, answer):
    history = OracleChatMessageHistory(
        session_id,
        client=conn,
        table_name=&quot;CONVERSATION_HISTORY&quot;
    )
    
    history.add_messages([
        HumanMessage(content=question),
        AIMessage(content=answer)
    ])
    
    return len(history.messages)&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Complete End-to-End Function&lt;/h3&gt;
&lt;p&gt;Here’s how everything works together in a single function:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def ask_question(conn, vector_store, question, session_id=&quot;default&quot;):
    embeddings = HuggingFaceEmbeddings(model_name=&quot;all-MiniLM-L6-v2&quot;)
    
    # 1. Hybrid retrieval
    relevant_docs = hybrid_retrieve(vector_store, question)
    context = &quot;\n\n&quot;.join([doc.page_content for doc in relevant_docs])
    
    # 2. Check cache or generate
    answer, was_cached = get_cached_or_generate(conn, embeddings, question, context)
    
    # 3. Save to history
    history_length = save_to_history(conn, session_id, question, answer)
    
    return {
        &quot;answer&quot;: answer,
        &quot;cached&quot;: was_cached,
        &quot;sources&quot;: len(relevant_docs),
        &quot;history_messages&quot;: history_length
    }&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;How to Run This Locally&lt;/h3&gt;
&lt;ol&gt;
    &lt;li&gt;Install dependencies with Poetry&lt;/li&gt;
    &lt;li&gt;Run the sample script — it automatically spins up an Oracle AI Database Free container using Testcontainers&lt;/li&gt;
    &lt;li&gt;Ask questions and observe hybrid retrieval, caching behavior, and growing chat history&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Benefits of This Approach&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Single database for vectors, documents, cache, and history&lt;/li&gt;
    &lt;li&gt;Hybrid search improves answer quality&lt;/li&gt;
    &lt;li&gt;Semantic caching reduces expensive LLM calls&lt;/li&gt;
    &lt;li&gt;Conversation state is durable and queryable&lt;/li&gt;
    &lt;li&gt;Very little custom code required thanks to langchain-oracledb&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;Building a solid RAG system doesn’t have to be complex. By leveraging Oracle AI Database through the official LangChain integration, you get a clean, maintainable pipeline that handles ingestion, retrieval, caching, and memory in one place.&lt;/p&gt;

&lt;p&gt;This pattern scales well and keeps your architecture simple while delivering strong retrieval performance.&lt;/p&gt;

&lt;p&gt;Start experimenting with the sample, you’ll be surprised how quickly you can get a capable system running.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/7486885858157274298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/7486885858157274298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/7486885858157274298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/7486885858157274298'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/build-production-ready-rag-pipeline.html' title='Build a Production-Ready RAG Pipeline with LangChain and Oracle AI Database'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-2268554595789209879</id><published>2026-06-30T14:08:02.081-07:00</published><updated>2026-06-30T14:10:06.224-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="archestra"/><title type='text'>Take Full Control of Your AI Agents with Archestra</title><content type='html'>&lt;p&gt;&amp;nbsp;If you have been wiring local AI agents to MCP servers, you already know the uneasy feeling. You connect a model, give it some tools, send it off on a task, and then you just hope it behaves. You have no real view into what it is calling, and no easy way to stop it when it does something it should not.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;I spent some hands-on time with Archestra, an open source AI platform that fixes exactly this, and ran the whole thing locally on my own hardware.&lt;/p&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;What Archestra Is&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;Archestra is an all-in-one, open source platform for running AI agents safely. It pulls together the pieces you would normally wire up yourself: a chat interface, a no-code agent builder, an LLM gateway, an MCP gateway, a private MCP registry, deterministic guardrails, and full observability. One Docker command brings the whole stack up. The team behind it previously worked on Grafana OnCall, so the production thinking shows.&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Running It Locally&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;I drove everything with a local model, Qwen3.6 27B served through Ollama, on my own GPU. No cloud dependency for inference. Archestra is provider agnostic, so pointing it at a local Ollama endpoint took a single configuration step.&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;The Part That Matters&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;I built a simple agent and gave it one tool: a website reader pulled from Archestra&#39;s MCP registry. What stood out is that every MCP server runs as its own isolated pod inside a Kubernetes cluster that Archestra spins up automatically. That is real isolation, not just a local process.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;I ran a task and watched the agent make its tool call live. Every step it took was visible. Then came the payoff. I set a deterministic guardrail to block that tool, re-ran the task, and the agent could no longer touch it. The block is enforced at the platform level, so a prompt cannot talk its way around it.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;That is the whole point. Seeing what your agents do is good. Being able to stop them, deterministically, is what makes agentic AI safe to run.&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Try It Yourself&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;Archestra is open source and self-hostable. Grab it from GitHub, run the Docker quickstart, and try the same flow on your own machine.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;Watch the full hands-on walkthrough in the video below.&lt;/p&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;&lt;a href=&quot;https://youtu.be/9JiA6RYpEYo&quot;&gt;https://youtu.be/9JiA6RYpEYo&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/2268554595789209879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/2268554595789209879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/2268554595789209879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/2268554595789209879'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/take-full-control-of-your-ai-agents.html' title='Take Full Control of Your AI Agents with Archestra'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-3323672188154638859</id><published>2026-06-17T20:37:00.000-07:00</published><updated>2026-06-20T20:37:47.379-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Kernel Networking"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux Firewall"/><category scheme="http://www.blogger.com/atom/ns#" term="Netfilter"/><category scheme="http://www.blogger.com/atom/ns#" term="nftables"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Packet Processing"/><title type='text'>Demystifying Netfilter and nftables: How Linux Packet Filtering Really Works</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Understanding how Linux handles network packets at the kernel level can feel overwhelming — until you see how the pieces fit together. Netfilter provides the foundation, while nftables gives us a modern, flexible way to define firewall rules, NAT, and packet mangling.&lt;/p&gt;

&lt;p&gt;Whether you’re debugging connectivity issues, writing security tools, or optimizing performance, knowing these internals helps you work more effectively with Linux networking.&lt;/p&gt;

&lt;h3&gt;Netfilter: The Kernel’s Packet Processing Framework&lt;/h3&gt;
&lt;p&gt;Netfilter is the Linux kernel’s packet filtering and mangling infrastructure. It defines well-known hook points where packets can be inspected and modified as they flow through the system:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;PREROUTING&lt;/strong&gt; — Right after a packet arrives, before routing decisions&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;INPUT&lt;/strong&gt; — Packets destined for the local system&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;FORWARD&lt;/strong&gt; — Packets being routed through the host&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;OUTPUT&lt;/strong&gt; — Locally generated packets&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;POSTROUTING&lt;/strong&gt; — After routing, before leaving the host&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chains attached to these hooks let you enforce security policies, perform NAT, or influence routing.&lt;/p&gt;

&lt;h3&gt;nftables: The Modern Replacement for iptables&lt;/h3&gt;
&lt;p&gt;nftables brings a cleaner, more consistent syntax and better performance compared to the older iptables framework. It organizes configuration into tables, chains, rules, sets, and expressions.&lt;/p&gt;

&lt;h3&gt;Core nftables Building Blocks&lt;/h3&gt;

&lt;h4&gt;Tables&lt;/h4&gt;
&lt;p&gt;Containers that group related chains, sets, and rules. Common families include &lt;code&gt;ip&lt;/code&gt; (IPv4), &lt;code&gt;ip6&lt;/code&gt; (IPv6), and &lt;code&gt;inet&lt;/code&gt; (both).&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;nft add table ip myfirewall&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Chains&lt;/h4&gt;
&lt;p&gt;Sequences of rules. Base chains attach directly to Netfilter hooks and define behavior (filter, nat, route).&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;nft add chain ip myfirewall input { type filter hook input priority 0 \; }&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Rules&lt;/h4&gt;
&lt;p&gt;Define matching conditions and actions (accept, drop, jump, etc.).&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;nft add rule ip myfirewall input tcp dport 22 accept&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Sets&lt;/h4&gt;
&lt;p&gt;Efficient collections for matching (IP addresses, ports, etc.).&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;nft add set ip myfirewall trusted_ips { type ipv4_addr \; }
nft add element ip myfirewall trusted_ips { 192.168.1.10, 10.0.0.5 }&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Practical Example: Simple Firewall&lt;/h3&gt;
&lt;p&gt;Here’s how to create a basic firewall that allows SSH from trusted IPs and drops everything else:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;nft add table ip myfirewall
nft add chain ip myfirewall input { type filter hook input priority 0 \; }
nft add set ip myfirewall trusted_ips { type ipv4_addr \; }
nft add element ip myfirewall trusted_ips { 192.168.1.1, 192.168.1.2 }
nft add rule ip myfirewall input ip saddr @trusted_ips accept
nft add rule ip myfirewall input drop&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Behind the Scenes: User Space to Kernel&lt;/h3&gt;
&lt;p&gt;Tools like nft use libmnl and libnftnl to communicate with the kernel via Netlink. This allows atomic batch operations — multiple changes applied together or not at all — ensuring consistent firewall state.&lt;/p&gt;

&lt;h3&gt;Best Practices for Production&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Use named sets for frequently updated lists (trusted IPs, blocked addresses)&lt;/li&gt;
    &lt;li&gt;Keep base chains simple and explicit with a final drop rule&lt;/li&gt;
    &lt;li&gt;Leverage priorities to control execution order&lt;/li&gt;
    &lt;li&gt;Batch operations when making multiple changes&lt;/li&gt;
    &lt;li&gt;Monitor and log dropped packets for visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Netfilter and nftables form a powerful, unified framework for packet processing in Linux. Understanding how tables, chains, rules, and sets work together helps you build more effective firewalls, troubleshoot network issues faster, and appreciate the elegance of the modern Linux networking stack.&lt;/p&gt;

&lt;p&gt;Whether you’re securing servers, implementing complex NAT rules, or exploring kernel internals, nftables gives you the tools to control traffic with precision and clarity.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/3323672188154638859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/3323672188154638859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/3323672188154638859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/3323672188154638859'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/demystifying-netfilter-and-nftables-how.html' title='Demystifying Netfilter and nftables: How Linux Packet Filtering Really Works'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-5301298720035512491</id><published>2026-06-16T20:35:00.000-07:00</published><updated>2026-06-20T20:36:21.886-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Active Data Guard"/><category scheme="http://www.blogger.com/atom/ns#" term="MAA Best Practices"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle HA Connection String"/><category scheme="http://www.blogger.com/atom/ns#" term="Real Application Clusters"/><category scheme="http://www.blogger.com/atom/ns#" term="RETRY_COUNT"/><category scheme="http://www.blogger.com/atom/ns#" term="TRANSPORT_CONNECT_TIMEOUT"/><title type='text'>Mastering High Availability Connection Strings in Oracle: What Really Happens Behind the Scenes</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Most Oracle DBAs and developers copy-paste the same “recommended” TNS connection string for RAC and Data Guard without fully understanding how each parameter affects real-world behavior. That changes today.&lt;/p&gt;

&lt;p&gt;This guide breaks down the critical parameters in a typical HA connect descriptor, shows measurable timing impacts, and gives clear guidance on when to tune what — so your applications stay resilient during switchovers, failovers, and maintenance.&lt;/p&gt;

&lt;h3&gt;The Standard HA Connect String&lt;/h3&gt;
&lt;p&gt;Here’s the common pattern you’ll see in MAA documentation:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(DESCRIPTION =
  (CONNECT_TIMEOUT=90)(RETRY_COUNT=100)(RETRY_DELAY=3)
  (TRANSPORT_CONNECT_TIMEOUT=1000ms)
  (ADDRESS_LIST = (LOAD_BALANCE=on) (ADDRESS = ...))
  (ADDRESS_LIST = (LOAD_BALANCE=on) (ADDRESS = ...))
  (CONNECT_DATA = (SERVICE_NAME = my_service))
)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Let’s explore what each setting actually does and how changing it impacts connection behavior.&lt;/p&gt;

&lt;h3&gt;1. FAILOVER = ON (Default)&lt;/h3&gt;
&lt;p&gt;Controls whether the client tries alternate addresses when one fails. Keep this ON unless you have a very specific reason to disable it. Turning it OFF makes connections order-dependent and can prevent reaching an available site during role transitions.&lt;/p&gt;

&lt;h3&gt;2. LOAD_BALANCE = ON&lt;/h3&gt;
&lt;p&gt;Randomizes the starting address in an ADDRESS_LIST. This prevents one SCAN IP from being hammered and helps spread load. Strongly recommended when you have multiple addresses, especially during partial outages or maintenance.&lt;/p&gt;

&lt;h3&gt;3. RETRY_COUNT &amp;amp; RETRY_DELAY&lt;/h3&gt;
&lt;p&gt;RETRY_COUNT defines how many additional rounds the client makes through the address list. RETRY_DELAY adds a pause between rounds so the service has time to become available after a switchover or failover.&lt;/p&gt;

&lt;p&gt;Tip: Use RETRY_DELAY=3 (seconds) as a good starting point. Tight loops (RETRY_DELAY=0) create unnecessary load and should be avoided in production.&lt;/p&gt;

&lt;h3&gt;4. TRANSPORT_CONNECT_TIMEOUT&lt;/h3&gt;
&lt;p&gt;This is crucial when an IP or port is unreachable. It caps how long the client waits for a TCP connect before moving to the next address. Set it low enough to fail fast during outages, but high enough to handle normal network jitter (1000ms is a common balanced value).&lt;/p&gt;

&lt;h3&gt;5. CONNECT_TIMEOUT&lt;/h3&gt;
&lt;p&gt;Limits the total time for a single connection attempt, including server process creation. Set this higher than TRANSPORT_CONNECT_TIMEOUT (commonly 60–90 seconds) to allow normal connects under load while protecting against hanging attempts.&lt;/p&gt;

&lt;h3&gt;Practical Recommendations&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;For frequent role changes (Fast-Start Failover): Use LOAD_BALANCE=on and moderate RETRY_COUNT&lt;/li&gt;
    &lt;li&gt;For stable primary with rare switchovers: Prefer LOAD_BALANCE=off with clear site ordering&lt;/li&gt;
    &lt;li&gt;Always set TRANSPORT_CONNECT_TIMEOUT explicitly — don’t rely on defaults&lt;/li&gt;
    &lt;li&gt;Align your application connection pool timeouts with the worst-case client wait time&lt;/li&gt;
    &lt;li&gt;Use the latest Oracle client (26ai recommended) for millisecond precision support&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Final Advice&lt;/h3&gt;
&lt;p&gt;Don’t treat the HA connection string as magic copy-paste code. Understand what each parameter controls and tune it to your environment’s failover patterns and network characteristics. Small changes here can dramatically improve application resilience during planned maintenance and unplanned outages.&lt;/p&gt;

&lt;p&gt;Test your connection strings under simulated failure scenarios (service down, network blocked) and measure real connect times. The better you understand your client behavior, the more predictable and reliable your high-availability applications will be.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/5301298720035512491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/5301298720035512491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/5301298720035512491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/5301298720035512491'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/mastering-high-availability-connection.html' title='Mastering High Availability Connection Strings in Oracle: What Really Happens Behind the Scenes'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-533046274263874730</id><published>2026-06-15T20:34:00.000-07:00</published><updated>2026-06-20T20:35:29.444-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Active Data Guard"/><category scheme="http://www.blogger.com/atom/ns#" term="Exadata Database Service"/><category scheme="http://www.blogger.com/atom/ns#" term="Maximum Availability Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Multicloud HA"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle AI Database 26ai"/><title type='text'>Oracle AI Database 26ai Supercharges Active Data Guard: Faster Failovers, Stronger Multicloud Resilience</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Mission-critical applications demand minimal downtime and lightning-fast recovery. With Oracle AI Database 26ai, Oracle has dramatically improved Data Guard and Active Data Guard role transitions, making high-availability architectures faster and more reliable than ever.&lt;/p&gt;

&lt;p&gt;These enhancements push Oracle Maximum Availability Architecture (MAA) Platinum tier capabilities across Oracle’s multicloud ecosystem, giving organizations consistent, enterprise-grade resilience no matter where they run.&lt;/p&gt;

&lt;h3&gt;Game-Changing Performance Improvements&lt;/h3&gt;
&lt;p&gt;Oracle’s testing shows impressive gains:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Up to **5x faster failovers** — often completing in under 30 seconds&lt;/li&gt;
    &lt;li&gt;Up to **3.4x faster switchovers**&lt;/li&gt;
    &lt;li&gt;Consistent results across both small and large workloads&lt;/li&gt;
    &lt;li&gt;No changes required to your applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These optimizations span database recovery, checkpoint processing, service management, and multitenant operations — delivering real reductions in Recovery Time Objectives (RTO).&lt;/p&gt;

&lt;h3&gt;MAA Platinum Tier Now Available Across Multicloud&lt;/h3&gt;
&lt;p&gt;Organizations using Oracle Database@Azure, Oracle Database@AWS, or Oracle Database@Google Cloud can now standardize on the same Platinum MAA architecture:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Local HA with RTO under 10 seconds&lt;/li&gt;
    &lt;li&gt;Regional DR with RTO under 30 seconds&lt;/li&gt;
    &lt;li&gt;Zero or near-zero Recovery Point Objective (RPO)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This consistency lets teams apply the same proven best practices, operational procedures, and resiliency strategies across all their multicloud deployments.&lt;/p&gt;

&lt;h3&gt;Why This Matters for Your Business&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Less Downtime&lt;/strong&gt; — Faster planned maintenance and unplanned recovery&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Better User Experience&lt;/strong&gt; — Minimal disruption during role transitions&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Simplified Operations&lt;/strong&gt; — Standardize high-availability practices across environments&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Future-Proof Architecture&lt;/strong&gt; — Built for the most demanding mission-critical workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Who Should Upgrade?&lt;/h3&gt;
&lt;p&gt;Existing Exadata and Exadata Database Service customers running Active Data Guard will see immediate benefits from moving to Oracle AI Database 26ai. The performance gains make Platinum MAA tier objectives much more achievable without major architectural overhauls.&lt;/p&gt;

&lt;h3&gt;Next Steps&lt;/h3&gt;
&lt;p&gt;If you’re running mission-critical databases, now is the perfect time to evaluate Oracle AI Database 26ai. The combination of Exadata performance, Active Data Guard, and these accelerated role transitions creates one of the strongest availability platforms available today.&lt;/p&gt;

&lt;p&gt;Explore the updated MAA reference architectures and multicloud certification matrix to see how you can strengthen your high-availability strategy across Oracle Cloud and major hyperscalers.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/533046274263874730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/533046274263874730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/533046274263874730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/533046274263874730'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/oracle-ai-database-26ai-supercharges.html' title='Oracle AI Database 26ai Supercharges Active Data Guard: Faster Failovers, Stronger Multicloud Resilience'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-694680154053527703</id><published>2026-06-14T20:33:00.000-07:00</published><updated>2026-06-20T20:34:07.619-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Database Messaging"/><category scheme="http://www.blogger.com/atom/ns#" term="Kafka on Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="OKafka Authentication"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle AI Database Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Transactional Event Queues"/><title type='text'>Connect to Oracle Like It’s Kafka: OKafka Authentication Made Simple</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;One of the nicest things about OKafka is how familiar it feels if you’ve used Kafka before. You configure connections with Properties objects, just like kafka-clients. The big difference? You’re talking directly to Oracle Database Transactional Event Queues instead of a separate broker.&lt;/p&gt;

&lt;p&gt;Here’s how to set up authentication cleanly for development and production.&lt;/p&gt;

&lt;h3&gt;Two Main Authentication Paths&lt;/h3&gt;

&lt;h4&gt;1. PLAINTEXT (Great for Local Dev)&lt;/h4&gt;
&lt;p&gt;Simple username/password setup using an ojdbc.properties file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Properties props = new Properties();
props.put(&quot;security.protocol&quot;, &quot;PLAINTEXT&quot;);
props.put(&quot;bootstrap.servers&quot;, &quot;your-host:port&quot;);
props.put(&quot;oracle.service.name&quot;, &quot;your_service_name&quot;);
props.put(&quot;oracle.net.tns_admin&quot;, &quot;/path/to/config/dir&quot;);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Your ojdbc.properties file should contain:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;user=testuser
password=YourStrongPassword123&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;2. SSL / mTLS (Production Ready)&lt;/h4&gt;
&lt;p&gt;Use Oracle Wallet for secure connections. Point to your wallet directory and specify the TNS alias:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;props.put(&quot;security.protocol&quot;, &quot;SSL&quot;);
props.put(&quot;oracle.net.tns_admin&quot;, &quot;/path/to/wallet&quot;);
props.put(&quot;tns.alias&quot;, &quot;your_tns_alias&quot;);&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Full Working Example&lt;/h3&gt;
&lt;p&gt;Here’s a complete snippet to create an AdminClient and make a topic:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;try (Admin admin = AdminClient.create(props)) {
    NewTopic topic = new NewTopic(&quot;MY_EVENTS&quot;, 5, (short) 0);
    admin.createTopics(Collections.singletonList(topic)).all().get();
    System.out.println(&quot;Topic created successfully&quot;);
}&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Pro Tips for Smooth Sailing&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Always use uppercase topic names with OKafka&lt;/li&gt;
    &lt;li&gt;Store wallet files securely and never commit them to version control&lt;/li&gt;
    &lt;li&gt;Test with Oracle Database Free + Testcontainers for quick iterations&lt;/li&gt;
    &lt;li&gt;Move to mTLS early in your development cycle&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;OKafka makes connecting to Oracle feel just like connecting to any other Kafka cluster — but you get all the power, security, and transactional guarantees of the database built right in.&lt;/p&gt;

&lt;p&gt;No extra infrastructure. No separate cluster to manage. Just reliable event streaming where your data already lives.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/694680154053527703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/694680154053527703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/694680154053527703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/694680154053527703'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/connect-to-oracle-like-its-kafka-okafka.html' title='Connect to Oracle Like It’s Kafka: OKafka Authentication Made Simple'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-5359849018782068118</id><published>2026-06-13T20:31:00.000-07:00</published><updated>2026-06-20T20:33:00.874-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Database Messaging"/><category scheme="http://www.blogger.com/atom/ns#" term="Event-Driven Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Kafka on Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="OKafka"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle AI Database"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle TxEventQ"/><title type='text'>OKafka: Run Kafka-Style Apps Directly in Oracle Database with Zero Extra Infrastructure</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Want the familiar Kafka Java APIs without standing up and managing a separate Kafka cluster? Oracle’s **OKafka** (Kafka Java Client for Transactional Event Queues) lets you produce and consume events straight from your Oracle Database — with full transactional guarantees and exactly-once semantics.&lt;/p&gt;

&lt;p&gt;Here’s everything you need to know to get started quickly and build reliable event-driven applications on Oracle AI Database.&lt;/p&gt;

&lt;h3&gt;Why OKafka?&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Use standard Kafka Java producer/consumer code&lt;/li&gt;
    &lt;li&gt;Events are stored and processed inside the database&lt;/li&gt;
    &lt;li&gt;Atomic transactions between database changes and event publishing&lt;/li&gt;
    &lt;li&gt;No separate message broker to operate and scale&lt;/li&gt;
    &lt;li&gt;Works with Oracle Database 23ai Free and above&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Quick Start: Database Setup&lt;/h3&gt;
&lt;p&gt;First, create a database user with the required privileges:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;CREATE USER okafka_user IDENTIFIED BY Oracle123;

GRANT AQ_USER_ROLE TO okafka_user;
GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO okafka_user;
GRANT EXECUTE ON DBMS_AQ TO okafka_user;
GRANT EXECUTE ON DBMS_AQADM TO okafka_user;
GRANT SELECT ON GV_$SESSION TO okafka_user;
-- ... (full list in documentation)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then create your first topic:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;BEGIN
    DBMS_AQADM.CREATE_DATABASE_KAFKA_TOPIC(
        topicname =&amp;gt; &#39;MY_TOPIC&#39;,
        partition_num =&amp;gt; 5,
        retentiontime =&amp;gt; 7*24*3600
    );
END;&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Connection Configuration&lt;/h3&gt;

&lt;h4&gt;Option 1: PLAINTEXT (Simple)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;security.protocol=PLAINTEXT
bootstrap.servers=your-host:port
oracle.service.name=your_service
oracle.net.tns_admin=/path/to/ojdbc.properties&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Option 2: SSL (Recommended for Production)&lt;/h4&gt;
&lt;p&gt;Use Oracle Wallet for secure mTLS connections.&lt;/p&gt;

&lt;h3&gt;Building Your First OKafka App&lt;/h3&gt;
&lt;ol&gt;
    &lt;li&gt;Clone the OKafka distribution&lt;/li&gt;
    &lt;li&gt;Build with Gradle: &lt;code&gt;./gradlew jar&lt;/code&gt; or &lt;code&gt;./gradlew fullJar&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;Add the resulting JAR to your project&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Producer Example&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;Properties props = new Properties();
props.put(&quot;bootstrap.servers&quot;, &quot;your-host:port&quot;);
props.put(&quot;key.serializer&quot;, &quot;org.apache.kafka.common.serialization.StringSerializer&quot;);
props.put(&quot;value.serializer&quot;, &quot;org.apache.kafka.common.serialization.StringSerializer&quot;);

KafkaProducer&lt;string string=&quot;&quot;&gt; producer = new KafkaProducer&amp;lt;&amp;gt;(props);

ProducerRecord&lt;string string=&quot;&quot;&gt; record = new ProducerRecord&amp;lt;&amp;gt;(&quot;MY_TOPIC&quot;, &quot;key1&quot;, &quot;Hello from OKafka!&quot;);
producer.send(record).get();

producer.close();&lt;/string&gt;&lt;/string&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Consumer Example&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;KafkaConsumer&lt;string string=&quot;&quot;&gt; consumer = new KafkaConsumer&amp;lt;&amp;gt;(props);
consumer.subscribe(Collections.singletonList(&quot;MY_TOPIC&quot;));

while (true) {
    ConsumerRecords&lt;string string=&quot;&quot;&gt; records = consumer.poll(Duration.ofMillis(100));
    for (ConsumerRecord&lt;string string=&quot;&quot;&gt; record : records) {
        System.out.println(&quot;Received: &quot; + record.value());
    }
}&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Best Practices&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Use transactions for atomic database + event operations&lt;/li&gt;
    &lt;li&gt;Always handle proper error paths and rollbacks&lt;/li&gt;
    &lt;li&gt;Test with Testcontainers + Oracle Database Free&lt;/li&gt;
    &lt;li&gt;Monitor queue depth and consumer lag&lt;/li&gt;
    &lt;li&gt;Start with PLAINTEXT for development, move to SSL in production&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;OKafka brings the power and familiarity of Kafka directly into Oracle Database. You get enterprise-grade messaging with transactional integrity, high availability, and zero additional infrastructure to manage.&lt;/p&gt;

&lt;p&gt;Whether you’re building microservices, event-driven architectures, or real-time analytics, OKafka lets you leverage your existing Oracle investment for reliable pub/sub messaging.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/5359849018782068118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/5359849018782068118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/5359849018782068118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/5359849018782068118'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/okafka-run-kafka-style-apps-directly-in.html' title='OKafka: Run Kafka-Style Apps Directly in Oracle Database with Zero Extra Infrastructure'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-4162101606931804097</id><published>2026-06-12T20:31:00.000-07:00</published><updated>2026-06-20T20:31:28.930-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Database Pub/Sub"/><category scheme="http://www.blogger.com/atom/ns#" term="Event Streaming"/><category scheme="http://www.blogger.com/atom/ns#" term="OKafka"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle AI Database"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Database Messaging"/><category scheme="http://www.blogger.com/atom/ns#" term="TxEventQ"/><title type='text'>Why Run Your Message Broker Inside Oracle Database? Meet TxEventQ</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Building event-driven applications usually means standing up another system — Kafka, RabbitMQ, or similar. But what if your database could handle reliable messaging natively, with full transactional guarantees and zero extra infrastructure?&lt;/p&gt;

&lt;p&gt;That’s exactly what **Oracle Database Transactional Event Queues (TxEventQ)** delivers.&lt;/p&gt;

&lt;h3&gt;What Is TxEventQ?&lt;/h3&gt;
&lt;p&gt;TxEventQ is a built-in, high-performance messaging system inside Oracle Database. It supports:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Multiple producers and consumers&lt;/li&gt;
    &lt;li&gt;Exactly-once delivery semantics&lt;/li&gt;
    &lt;li&gt;Partitioned queues with ordering guarantees&lt;/li&gt;
    &lt;li&gt;Full SQL access to events and metadata&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Available since Oracle Database 21c (including the free edition), it’s ready to use today.&lt;/p&gt;

&lt;h3&gt;Why Teams Are Choosing TxEventQ&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Simplified Architecture&lt;/strong&gt; — No separate message broker to manage, patch, or scale&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Transactional Integrity&lt;/strong&gt; — Database changes and message publishing happen atomically&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Exactly-Once Semantics&lt;/strong&gt; — Critical for financial, compliance, and mission-critical flows&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;SQL-Native&lt;/strong&gt; — Query, join, and analyze events using familiar SQL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s especially powerful when you need tight coupling between data changes and event publishing — no dual-write problems.&lt;/p&gt;

&lt;h3&gt;How to Get Started&lt;/h3&gt;
&lt;p&gt;The easiest path for Java developers is the **Kafka Java Client for Oracle TxEventQ (OKafka)**. It uses the familiar Kafka APIs you already know, but talks directly to the database.&lt;/p&gt;

&lt;p&gt;Other options include:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;PL/SQL using DBMS_AQ&lt;/li&gt;
    &lt;li&gt;REST via Oracle REST Data Services (ORDS)&lt;/li&gt;
    &lt;li&gt;Python, Node.js, .NET, and other language drivers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Real-World Use Cases&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Event-driven microservices inside the database&lt;/li&gt;
    &lt;li&gt;Change Data Capture (CDC) patterns&lt;/li&gt;
    &lt;li&gt;Application integration and workflow orchestration&lt;/li&gt;
    &lt;li&gt;Real-time analytics and notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Pro Tips from the Field&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Start with the Kafka Java API if you’re already familiar with Kafka&lt;/li&gt;
    &lt;li&gt;Use triggers for automatic event publishing on DML operations&lt;/li&gt;
    &lt;li&gt;Leverage partitioning for high-throughput scenarios&lt;/li&gt;
    &lt;li&gt;Combine with Oracle AI Database features for intelligent event processing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;TxEventQ lets you bring reliable pub/sub messaging directly into your Oracle Database, eliminating the need for yet another system to manage. It’s fast, transactional, and deeply integrated with everything else Oracle Database offers.&lt;/p&gt;

&lt;p&gt;Whether you’re modernizing legacy systems, building new event-driven apps, or simplifying your architecture, TxEventQ is worth serious consideration.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/4162101606931804097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/4162101606931804097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/4162101606931804097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/4162101606931804097'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/why-run-your-message-broker-inside.html' title='Why Run Your Message Broker Inside Oracle Database? Meet TxEventQ'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-2879080090788017663</id><published>2026-06-11T20:29:00.000-07:00</published><updated>2026-06-20T20:30:23.274-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agent Skills"/><category scheme="http://www.blogger.com/atom/ns#" term="Kafka Java API"/><category scheme="http://www.blogger.com/atom/ns#" term="OKafka"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle AI Database"/><category scheme="http://www.blogger.com/atom/ns#" term="Testcontainers"/><category scheme="http://www.blogger.com/atom/ns#" term="Transactional Messaging"/><title type='text'>Build Better Kafka Apps on Oracle AI Database with This Agent Skill</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Writing solid Kafka Java code for Oracle AI Database’s Transactional Event Queues (using OKafka) can be tricky. Agents often miss Oracle-specific patterns around authentication, transactions, serialization, and testing.&lt;/p&gt;

&lt;p&gt;That’s why I created a focused agent skill: **okafka-java-code** — designed to generate high-quality, production-ready OKafka applications from the start.&lt;/p&gt;

&lt;h3&gt;Why This Skill Exists&lt;/h3&gt;
&lt;p&gt;Most AI coding assistants generate OKafka code that works... but not well. They miss key Oracle behaviors like using `getDBConnection()` for transactional consistency, proper topic administration, and realistic testing with Testcontainers.&lt;/p&gt;

&lt;p&gt;This skill packages the hard-won patterns I use daily into something any agent can reuse.&lt;/p&gt;

&lt;h3&gt;What the Skill Includes&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;OKafka administration (topic creation)&lt;/li&gt;
    &lt;li&gt;Authentication and connection properties&lt;/li&gt;
    &lt;li&gt;Transactional producer and consumer patterns&lt;/li&gt;
    &lt;li&gt;OSON serialization best practices&lt;/li&gt;
    &lt;li&gt;Integration testing with Testcontainers&lt;/li&gt;
    &lt;li&gt;Troubleshooting and common pitfalls&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;See It in Action&lt;/h3&gt;
&lt;p&gt;Here’s the kind of clean, correct code the skill generates for a transactional workflow:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;private void publish(BusinessEvent event, boolean failAfterDatabaseWrite) throws Exception {
    producer.beginTransaction();
    try {
        producer.send(new ProducerRecord&amp;lt;&amp;gt;(topic, event.id(), event.payload())).get();
        insertProducedEvent(producer.getDBConnection(), event);
        
        if (failAfterDatabaseWrite) {
            throw new IllegalStateException(&quot;Simulated failure&quot;);
        }
        
        producer.commitTransaction();
    } catch (Exception e) {
        abortAndRethrow(e);
    }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And the consumer side follows the same safe transactional pattern.&lt;/p&gt;

&lt;h3&gt;The Testing Story&lt;/h3&gt;
&lt;p&gt;The skill also generates full integration tests using Testcontainers + Oracle Database Free. It validates:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Successful commit (data + Kafka record both visible)&lt;/li&gt;
    &lt;li&gt;Producer abort (no data persisted)&lt;/li&gt;
    &lt;li&gt;Consumer rollback (message available for retry)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;How to Use It&lt;/h3&gt;
&lt;ol&gt;
    &lt;li&gt;Install the skill from the GitHub repo&lt;/li&gt;
    &lt;li&gt;Describe your use case to your agent&lt;/li&gt;
    &lt;li&gt;Review and run the generated code&lt;/li&gt;
    &lt;li&gt;Iterate with confidence&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;Good agent skills shift the conversation. Instead of fixing basic setup issues, you can focus on business logic, transaction correctness, and real application behavior.&lt;/p&gt;

&lt;p&gt;By packaging proven OKafka patterns into a reusable skill, you raise the baseline quality of every generated application — saving hours of debugging and review time.&lt;/p&gt;

&lt;p&gt;If you work with Oracle AI Database and Kafka-style messaging, give this skill a try. It’s one of the fastest ways to go from “it compiles” to “this is production-ready.”&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/2879080090788017663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/2879080090788017663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/2879080090788017663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/2879080090788017663'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/build-better-kafka-apps-on-oracle-ai.html' title='Build Better Kafka Apps on Oracle AI Database with This Agent Skill'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-5743891929196735630</id><published>2026-06-10T20:28:00.000-07:00</published><updated>2026-06-20T20:28:45.843-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="High Performance Caching"/><category scheme="http://www.blogger.com/atom/ns#" term="Managed Caching Service"/><category scheme="http://www.blogger.com/atom/ns#" term="OCI Cache"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Cloud Infrastructure"/><category scheme="http://www.blogger.com/atom/ns#" term="Redis on OCI"/><category scheme="http://www.blogger.com/atom/ns#" term="Valkey Cache"/><title type='text'>OCI Cache: Fully Managed Valkey &amp; Redis for High-Performance Applications</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Need lightning-fast, in-memory caching for your modern applications? Oracle Cloud Infrastructure (OCI) Cache delivers a fully managed Valkey and Redis-compatible service that removes the operational burden of running your own cache clusters.&lt;/p&gt;

&lt;p&gt;Whether you&#39;re accelerating database queries, powering session stores, or supporting real-time features, OCI Cache gives you enterprise-grade performance with zero infrastructure management.&lt;/p&gt;

&lt;h3&gt;Why Choose OCI Cache?&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Fully managed — Oracle handles patching, scaling, monitoring, and high availability&lt;/li&gt;
    &lt;li&gt;Compatible with Valkey 8.1 (recommended), Valkey 7.2, and Redis 7.0&lt;/li&gt;
    &lt;li&gt;Supports both non-sharded and sharded cluster architectures&lt;/li&gt;
    &lt;li&gt;Easy resizing of nodes, shards, and memory allocation&lt;/li&gt;
    &lt;li&gt;Built-in monitoring, alarms, and automatic security updates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Cluster Types Explained&lt;/h3&gt;

&lt;h4&gt;Non-Sharded Clusters&lt;/h4&gt;
&lt;p&gt;Ideal for most general-purpose caching needs. Scale from 1 to 5 nodes (1 primary + up to 4 replicas) with automatic distribution across fault and availability domains for high availability.&lt;/p&gt;

&lt;h4&gt;Sharded Clusters&lt;/h4&gt;
&lt;p&gt;Designed for massive scale. Split your data across 3 to 99 shards, each with its own primary and up to 4 replicas. Perfect for large datasets and high-throughput workloads.&lt;/p&gt;

&lt;h3&gt;Key Capabilities&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Resizing&lt;/strong&gt; — Dynamically adjust node count, shard count, or memory per node&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Automatic Patching&lt;/strong&gt; — OCI handles security updates and engine upgrades with minimal disruption&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Monitoring &amp;amp; Alarms&lt;/strong&gt; — Built-in metrics for health, capacity, and performance&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;High Availability&lt;/strong&gt; — Replica nodes and intelligent placement for resilience&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Getting Started with OCI Cache&lt;/h3&gt;
&lt;ol&gt;
    &lt;li&gt;Navigate to OCI Cache in the Console&lt;/li&gt;
    &lt;li&gt;Create a new cluster and choose your engine version&lt;/li&gt;
    &lt;li&gt;Select non-sharded or sharded topology&lt;/li&gt;
    &lt;li&gt;Configure memory size and node count&lt;/li&gt;
    &lt;li&gt;Connect your applications using standard Valkey/Redis clients&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Best Practices&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Start with Valkey 8.1 for the latest features and performance&lt;/li&gt;
    &lt;li&gt;Use sharded clusters when your dataset or throughput exceeds single-node limits&lt;/li&gt;
    &lt;li&gt;Monitor key metrics like cache hit ratio, evictions, and CPU utilization&lt;/li&gt;
    &lt;li&gt;Plan for resizing early — horizontal and vertical scaling are both supported&lt;/li&gt;
    &lt;li&gt;Leverage replicas for read-heavy workloads and high availability&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;OCI Cache takes the complexity out of running high-performance caching infrastructure. With managed Valkey and Redis clusters, automatic scaling, and deep integration with the rest of OCI, you can focus on building great applications instead of managing cache servers.&lt;/p&gt;

&lt;p&gt;Whether you&#39;re accelerating APIs, reducing database load, or powering real-time features, OCI Cache delivers the speed and reliability your applications need — without the operational overhead.&lt;/p&gt;

&lt;p&gt;Ready to add blazing-fast caching to your OCI workloads? Create your first OCI Cache cluster today in the Oracle Cloud Console.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;OCI Cache | Valkey | Redis | Managed Caching | Oracle Cloud Infrastructure&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags&lt;/strong&gt;:&amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/5743891929196735630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/5743891929196735630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/5743891929196735630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/5743891929196735630'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/oci-cache-fully-managed-valkey-redis.html' title='OCI Cache: Fully Managed Valkey &amp; Redis for High-Performance Applications'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-4132752935882089075</id><published>2026-06-09T20:26:00.000-07:00</published><updated>2026-06-20T20:26:59.451-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agent Memory Systems"/><category scheme="http://www.blogger.com/atom/ns#" term="Claude MCP Server"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle AI Agent Memory"/><category scheme="http://www.blogger.com/atom/ns#" term="RAG Evolution"/><category scheme="http://www.blogger.com/atom/ns#" term="SQLcl MCP"/><category scheme="http://www.blogger.com/atom/ns#" term="Stateful AI Agents"/><title type='text'>Claude + Oracle AI Database: Building Reliable Agent Memory That Actually Works in Production</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Most AI agents start strong in demos but quietly fail in week two. They forget context, repeat questions, or worse — hallucinate answers because they lost the thread. The fix isn’t a bigger prompt. It’s a proper memory layer.&lt;/p&gt;

&lt;p&gt;Here’s how to combine Claude’s conversational strengths with Oracle’s secure, durable memory capabilities using SQLcl MCP Server, Oracle AI Agent Memory, and LangChain — in a way that survives real workloads.&lt;/p&gt;

&lt;h3&gt;The Core Problem Most Teams Hit&lt;/h3&gt;
&lt;p&gt;Claude is excellent at understanding intent and generating responses. But its built-in memory is scoped to the assistant experience. Once you close the chat or switch sessions, continuity breaks. Meanwhile, your Oracle data stays locked away unless you give the agent broad (and risky) access.&lt;/p&gt;

&lt;p&gt;The solution is a layered architecture: controlled execution + durable application memory.&lt;/p&gt;

&lt;h3&gt;The Recommended Stack&lt;/h3&gt;

&lt;h4&gt;1. Execution Layer: Claude + SQLcl MCP Server&lt;/h4&gt;
&lt;p&gt;Use SQLcl in MCP mode (`sql -mcp`) so Claude interacts with Oracle through explicit, auditable tools instead of raw credentials. This gives you:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Clear tool boundaries and approval gates&lt;/li&gt;
    &lt;li&gt;Session identification in V$SESSION&lt;/li&gt;
    &lt;li&gt;Activity logging in DBTOOLS$MCP_LOG&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;2. Memory Layer: Oracle AI Agent Memory + Oracle AI Database&lt;/h4&gt;
&lt;p&gt;Oracle AI Agent Memory is a Python package that sits on top of Oracle AI Database and gives you:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Thread management&lt;/li&gt;
    &lt;li&gt;Durable, scoped memory records (facts, preferences, episodes)&lt;/li&gt;
    &lt;li&gt;Hybrid retrieval (exact + semantic)&lt;/li&gt;
    &lt;li&gt;Context card assembly for prompts&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;3. Orchestration Layer: LangChain (When Needed)&lt;/h4&gt;
&lt;p&gt;Use LangChain + langchain-oracledb for structured retrieval pipelines, tool routing, and complex context assembly — but keep security and authorization in the database layer.&lt;/p&gt;

&lt;h3&gt;Practical Architecture Flow&lt;/h3&gt;
&lt;ol&gt;
    &lt;li&gt;User talks to Claude&lt;/li&gt;
    &lt;li&gt;Claude calls tools via SQLcl MCP Server&lt;/li&gt;
    &lt;li&gt;Oracle AI Agent Memory handles durable storage and retrieval&lt;/li&gt;
    &lt;li&gt;LangChain orchestrates complex retrieval when required&lt;/li&gt;
    &lt;li&gt;All access is governed by database roles and data grants&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Quick Start Recommendations&lt;/h3&gt;
&lt;ol&gt;
    &lt;li&gt;Begin with read-only access and one approved connection&lt;/li&gt;
    &lt;li&gt;Validate MCP server connectivity and logging first&lt;/li&gt;
    &lt;li&gt;Add Oracle AI Agent Memory once you need cross-session continuity&lt;/li&gt;
    &lt;li&gt;Introduce LangChain only when you need advanced retrieval orchestration&lt;/li&gt;
    &lt;li&gt;Always enforce scope and least privilege at the database level&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Final Thought&lt;/h3&gt;
&lt;p&gt;The winning pattern isn’t “use the biggest context window.” It’s building clear boundaries between execution, memory, and orchestration — with governance baked into the database layer.&lt;/p&gt;

&lt;p&gt;Claude gives you great conversational intelligence. Oracle gives you secure, durable, governed memory. Together, they create agents that don’t just sound smart — they stay reliable over time.&lt;/p&gt;

&lt;p&gt;Ready to move beyond fragile RAG demos? Start with SQLcl MCP + Oracle AI Agent Memory and build a memory layer your agents can actually trust.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/4132752935882089075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/4132752935882089075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/4132752935882089075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/4132752935882089075'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/claude-oracle-ai-database-building.html' title='Claude + Oracle AI Database: Building Reliable Agent Memory That Actually Works in Production'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-7365082306229290223</id><published>2026-06-08T20:22:00.000-07:00</published><updated>2026-06-20T20:23:15.974-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI Training"/><category scheme="http://www.blogger.com/atom/ns#" term="High Performance Computing"/><category scheme="http://www.blogger.com/atom/ns#" term="Kubernetes Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="OCI Compute Clusters"/><category scheme="http://www.blogger.com/atom/ns#" term="OKE Managed Nodes"/><category scheme="http://www.blogger.com/atom/ns#" term="RDMA"/><title type='text'>OKE Managed Nodes Now Support RDMA via OCI Compute Clusters: Faster AI &amp; HPC Workloads</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Oracle Cloud Infrastructure Kubernetes Engine (OKE) just got even better for high-performance workloads. You can now launch **managed node pools** directly into OCI Compute Clusters with RDMA networking — delivering ultra-low latency communication between worker nodes without giving up the operational simplicity of managed nodes.&lt;/p&gt;

&lt;p&gt;This is a major win for distributed AI training, fine-tuning, multi-node inference, and other HPC-style workloads on Kubernetes.&lt;/p&gt;

&lt;h3&gt;Why RDMA Matters for Kubernetes&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Ultra-low latency (single-digit microseconds) between nodes&lt;/li&gt;
    &lt;li&gt;High-bandwidth, direct memory access between GPUs across hosts&lt;/li&gt;
    &lt;li&gt;Significantly better scaling efficiency for multi-node AI/ML jobs&lt;/li&gt;
    &lt;li&gt;Keeps expensive GPUs utilized instead of waiting on network transfers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Key Benefits of This Release&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Full managed node pool experience (auto-scaling, upgrades, node replacement, cordon/drain)&lt;/li&gt;
    &lt;li&gt;No more need for self-managed nodes just to get RDMA&lt;/li&gt;
    &lt;li&gt;OKE automatically enables the required HPC plugins for RDMA&lt;/li&gt;
    &lt;li&gt;Perfect for large-scale distributed training and inference&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;How to Use RDMA with OKE Managed Node Pools&lt;/h3&gt;

&lt;h4&gt;Prerequisites&lt;/h4&gt;
&lt;ul&gt;
    &lt;li&gt;Use an &lt;strong&gt;enhanced OKE cluster&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;The Compute Cluster must exist and be in &lt;strong&gt;ACTIVE&lt;/strong&gt; state&lt;/li&gt;
    &lt;li&gt;Use an RDMA-capable bare metal shape&lt;/li&gt;
    &lt;li&gt;Placement must be in the same availability domain as the Compute Cluster&lt;/li&gt;
    &lt;li&gt;Do not specify fault domains (managed by Compute service)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Required IAM Policy&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;allow any-user to {COMPUTE_CLUSTER_LAUNCH_INSTANCE}
  in compartment &amp;lt;compartment_name&amp;gt;
  where request.principal.type = &#39;nodepool&#39;
    and target.resource.id = &#39;&amp;lt;compute_cluster_OCID&amp;gt;&#39;&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Creating a Managed Node Pool with RDMA (Console)&lt;/h4&gt;
&lt;ol&gt;
    &lt;li&gt;In the OCI Console, go to your enhanced OKE cluster&lt;/li&gt;
    &lt;li&gt;Create a new managed node pool&lt;/li&gt;
    &lt;li&gt;Under Advanced Options → Add a Compute Cluster:
        &lt;ul&gt;
            &lt;li&gt;Select the compartment&lt;/li&gt;
            &lt;li&gt;Select the Compute Cluster&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Choose an RDMA-supported shape&lt;/li&gt;
    &lt;li&gt;Configure placement in the matching availability domain&lt;/li&gt;
    &lt;li&gt;Create the node pool&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;OKE will automatically launch instances into the Compute Cluster with RDMA enabled.&lt;/p&gt;

&lt;h3&gt;Best Practices&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Use enhanced clusters for all new workloads&lt;/li&gt;
    &lt;li&gt;Start with smaller clusters to validate performance gains&lt;/li&gt;
    &lt;li&gt;Monitor GPU utilization and inter-node communication metrics&lt;/li&gt;
    &lt;li&gt;Combine with OKE autoscaling for dynamic workloads&lt;/li&gt;
    &lt;li&gt;Plan for the fact that Compute Cluster cannot be changed after node pool creation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;With RDMA support for managed node pools, OKE now delivers the best of both worlds: the operational simplicity and automation of managed Kubernetes nodes combined with the ultra-low latency networking required for large-scale AI and HPC workloads.&lt;/p&gt;

&lt;p&gt;Whether you’re doing distributed training, multi-node inference, or any communication-intensive workload, you can now take full advantage of OCI’s high-performance Compute Clusters without sacrificing managed node benefits.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/7365082306229290223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/7365082306229290223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/7365082306229290223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/7365082306229290223'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/oke-managed-nodes-now-support-rdma-via.html' title='OKE Managed Nodes Now Support RDMA via OCI Compute Clusters: Faster AI &amp; HPC Workloads'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-2638610186524013957</id><published>2026-06-07T22:32:00.000-07:00</published><updated>2026-06-07T22:33:44.637-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agentic AI"/><category scheme="http://www.blogger.com/atom/ns#" term="AI Memory Systems"/><category scheme="http://www.blogger.com/atom/ns#" term="Developer Guide"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle AI Database"/><category scheme="http://www.blogger.com/atom/ns#" term="RAG vs Memory"/><category scheme="http://www.blogger.com/atom/ns#" term="Stateful AI Architecture"/><title type='text'>Building Stateful AI Agents That Actually Remember : Moving Beyond RAG in Oracle AI</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;RAG (Retrieval-Augmented Generation) is great for looking things up. But it’s not memory. Real AI agents need continuity — they need to remember user preferences, past decisions, policies, and completed work across sessions. That’s where a proper memory system comes in.&lt;/p&gt;

&lt;p&gt;This guide shows how to evolve basic RAG into a production-grade memory layer that gives your agents true statefulness, continuity, and governance.&lt;/p&gt;

&lt;h3&gt;Why Basic RAG Falls Short&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;No multi-turn continuity — agents forget what was just discussed&lt;/li&gt;
    &lt;li&gt;No resumability — close the tab and everything is lost&lt;/li&gt;
    &lt;li&gt;No long-term recall of user preferences or policies&lt;/li&gt;
    &lt;li&gt;Prompts grow uncontrollably, leading to higher costs and lost-in-the-middle problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RAG is retrieval. Memory is a write path + retrieval + governance loop.&lt;/p&gt;

&lt;h3&gt;What a Real Memory System Looks Like&lt;/h3&gt;
&lt;p&gt;A memory system adds a durable write path and a manager that decides what to store, how to retrieve it, and how to rebuild the prompt on every turn. It turns one-time lookup into reusable, governed knowledge.&lt;/p&gt;

&lt;p&gt;Core loop per turn:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Append user message to trace&lt;/li&gt;
    &lt;li&gt;Retrieve relevant typed memory (policy, preferences, facts, episodes)&lt;/li&gt;
    &lt;li&gt;Reassemble prompt from memory (never accumulate transcript)&lt;/li&gt;
    &lt;li&gt;Call the model&lt;/li&gt;
    &lt;li&gt;Extract and promote new artifacts through a gate&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;The Five Types of Memory&lt;/h3&gt;
&lt;p&gt;Don’t throw everything into one vector store. Separate concerns:&lt;/p&gt;

&lt;h4&gt;1. Policy Memory&lt;/h4&gt;
&lt;p&gt;Rules, guardrails, compliance constraints. Exact-match lookup, never similarity.&lt;/p&gt;

&lt;h4&gt;2. Preference Memory&lt;/h4&gt;
&lt;p&gt;User settings and personalization (“always return JSON”, “use DD/MM/YYYY”). Fast keyed lookup.&lt;/p&gt;

&lt;h4&gt;3. Fact Memory&lt;/h4&gt;
&lt;p&gt;Durable assertions with provenance (“Acme’s production DB is in us-east-1”). Hybrid lexical + semantic retrieval.&lt;/p&gt;

&lt;h4&gt;4. Episodic Memory&lt;/h4&gt;
&lt;p&gt;Summaries of completed tasks. Reusable patterns for similar future work.&lt;/p&gt;

&lt;h4&gt;5. Trace Memory&lt;/h4&gt;
&lt;p&gt;Raw execution log for replay, debugging, and audit. Append-only, high volume.&lt;/p&gt;

&lt;h3&gt;Storage Tradeoffs That Matter&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Short-term vs Long-term&lt;/strong&gt; — Keep working set in RAM, durable state in the database&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Filesystem vs Database&lt;/strong&gt; — Files are great for single-tenant prototypes; databases are required for multi-tenant production&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Typed tables vs single store&lt;/strong&gt; — Separate tables per memory type give you the right indexes, retention, and access patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Two Retrieval Paths You Need&lt;/h3&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Known-scope lookup&lt;/strong&gt; — Policy and preferences (exact match, runs every turn)&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Semantic discovery&lt;/strong&gt; — Facts and episodes (hybrid lexical + vector search)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Always filter by scope before ranking — never after.&lt;/p&gt;

&lt;h3&gt;How to Add Memory to Your Agent (Practical Steps)&lt;/h3&gt;
&lt;ol&gt;
    &lt;li&gt;Type your memory — label everything as policy, preference, fact, episodic, or trace&lt;/li&gt;
    &lt;li&gt;Scope every record (tenant_id, user_id, agent_id)&lt;/li&gt;
    &lt;li&gt;Build a promotion gate that decides what gets stored durably&lt;/li&gt;
    &lt;li&gt;Reassemble the prompt on every turn from memory (don’t accumulate transcript)&lt;/li&gt;
    &lt;li&gt;Instrument the entire loop for replay and audit&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;RAG gives you lookup. A memory system gives you continuity, personalization, and governed recall. The difference is the write path, typed storage, scoped retrieval, and a manager that reassembles context intelligently on every turn.&lt;/p&gt;

&lt;p&gt;Once you have a real memory layer, your agents stop feeling stateless and generic. They start to feel like they actually know the user, remember past work, and follow the right rules — every single time.&lt;/p&gt;

&lt;p&gt;Models are shared. Your memory system is what makes your AI product yours.&lt;/p&gt;

&lt;p&gt;Start small, type your memory early, and build the promotion gate before you scale. The investment pays off the moment your users come back for a second conversation.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/2638610186524013957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/2638610186524013957' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/2638610186524013957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/2638610186524013957'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/building-stateful-ai-agents-that.html' title='Building Stateful AI Agents That Actually Remember : Moving Beyond RAG in Oracle AI'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-2453953847430855502</id><published>2026-06-06T07:30:00.000-07:00</published><updated>2026-06-07T22:31:43.794-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agentic AI Security"/><category scheme="http://www.blogger.com/atom/ns#" term="AI Database 26ai"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Grants"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Deep Data Security"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Security"/><category scheme="http://www.blogger.com/atom/ns#" term="Row-Level Security"/><title type='text'>Oracle Deep Data Security in AI Database 26ai: Secure AI Agents at the Source</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;AI agents are powerful, but they introduce a serious new risk: they act as autonomous insiders with broad database access. Traditional application-layer security can’t keep up. Oracle Deep Data Security changes that by enforcing end-user authorization directly inside the database — even when AI agents, vibe-coded apps, or analytics tools query data on a user’s behalf.&lt;/p&gt;

&lt;p&gt;Now available in Oracle AI Database 26ai, Deep Data Security brings true “security at the source” to the agentic era.&lt;/p&gt;

&lt;h3&gt;The Problem: Privileged Access in the AI Era&lt;/h3&gt;
&lt;p&gt;Most applications use highly privileged database connections. The app layer is supposed to filter data for each user. But AI agents don’t follow predefined queries — they generate their own. This creates massive risk of unauthorized data exposure, especially with prompt injection or unexpected agent behavior.&lt;/p&gt;

&lt;p&gt;Even vibe-coded or rapidly evolving applications can’t be trusted to enforce security perfectly every time.&lt;/p&gt;

&lt;h3&gt;How Oracle Deep Data Security Solves It&lt;/h3&gt;
&lt;p&gt;Deep Data Security lets you propagate the real end-user identity and context (via OAuth tokens or direct authentication) into the database at runtime. Declarative data grants then enforce row-level, column-level, and cell-level access based on who the user is — not on what the application or agent asks for.&lt;/p&gt;

&lt;p&gt;The database automatically rewrites every query to apply the correct authorization rules before any data is returned. This works consistently whether the request comes from a traditional app, an AI agent, or a direct SQL query.&lt;/p&gt;

&lt;h3&gt;Real-World Example: Human Capital Management (HCM)&lt;/h3&gt;
&lt;p&gt;Consider an HR table containing sensitive employee data (SSN, salary, phone number, etc.).&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Emma&lt;/strong&gt; (employee) should only see her own record.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Marvin&lt;/strong&gt; (her manager) should see his own record plus his direct reports, but not SSN or home address.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Deep Data Security, both users (or any AI agent acting on their behalf) can query the same table. The database automatically returns only the data each person is authorized to see — no application code required.&lt;/p&gt;

&lt;h3&gt;Key Capabilities&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;End users (distinct from schema users) authenticate directly to the database&lt;/li&gt;
    &lt;li&gt;Data roles + data grants define precise row/column access using predicates&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;ORA_END_USER_CONTEXT.username&lt;/code&gt; resolves the current user’s identity at runtime&lt;/li&gt;
    &lt;li&gt;Works for AI agents, traditional apps, analytics tools, and direct SQL&lt;/li&gt;
    &lt;li&gt;Centralized policy management — no duplication of security logic across layers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Getting Started (FastLab Highlights)&lt;/h3&gt;
&lt;p&gt;Oracle provides a complete LiveLab to explore Deep Data Security in minutes. Here’s the core flow:&lt;/p&gt;

&lt;ol&gt;
    &lt;li&gt;Create end users (Emma and Marvin)&lt;/li&gt;
    &lt;li&gt;Define data roles (HRAPP_EMPLOYEES and HRAPP_MANAGERS)&lt;/li&gt;
    &lt;li&gt;Create data grants with predicates like:
        &lt;pre&gt;&lt;code&gt;WHERE upper(user_name) = upper(ORA_END_USER_CONTEXT.username)&lt;/code&gt;&lt;/pre&gt;
        or manager lookup logic&lt;/li&gt;
    &lt;li&gt;Connect as each user and run queries — the database enforces boundaries automatically&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Even if an AI agent generates unexpected SQL, the results are still correctly restricted.&lt;/p&gt;

&lt;h3&gt;Analyst Perspective&lt;/h3&gt;
&lt;p&gt;Leading analysts agree this is a critical shift for the agentic era:&lt;/p&gt;
&lt;blockquote&gt;“Oracle Deep Data Security introduces identity-aware, fine-grained access control enforced at the database layer… This is a big step up from application-layer controls that are hard to enforce consistently across rapidly evolving agentic workflows.” — Steve McDowell, NAND Research&lt;/blockquote&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;In the age of autonomous AI agents, security at the application layer is no longer enough. Oracle Deep Data Security moves enforcement to the database — where the data lives — giving you consistent, trustworthy, and auditable protection regardless of how data is accessed.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/2453953847430855502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/2453953847430855502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/2453953847430855502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/2453953847430855502'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/oracle-deep-data-security-in-ai.html' title='Oracle Deep Data Security in AI Database 26ai: Secure AI Agents at the Source'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3496259157130184660.post-7622736378648959829</id><published>2026-06-05T22:28:00.000-07:00</published><updated>2026-06-07T22:29:00.031-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI Acceleration"/><category scheme="http://www.blogger.com/atom/ns#" term="Bandwidth Alliance"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloudflare@OCI"/><category scheme="http://www.blogger.com/atom/ns#" term="DDoS Protection"/><category scheme="http://www.blogger.com/atom/ns#" term="Edge Security"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Cloud Infrastructure"/><category scheme="http://www.blogger.com/atom/ns#" term="WAF"/><title type='text'>Cloudflare@OCI: Edge Security &amp; Performance for Your OCI Applications and AI Workloads</title><content type='html'>&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Modern applications and AI workloads demand global speed, strong security, and simple operations. Cloudflare@OCI delivers exactly that by combining Oracle Cloud Infrastructure’s powerful compute and AI platform with Cloudflare’s massive global edge network (330+ cities worldwide).&lt;/p&gt;

&lt;p&gt;This strategic partnership lets you accelerate and protect your OCI workloads without managing multiple vendors or complex integrations.&lt;/p&gt;

&lt;h3&gt;Key Benefits of Cloudflare@OCI&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Significantly reduce latency for users worldwide with Cloudflare’s global CDN&lt;/li&gt;
    &lt;li&gt;Protect against DDoS, bots, and API threats at the edge — before traffic reaches OCI&lt;/li&gt;
    &lt;li&gt;Apply consistent security policies across hybrid, multicloud, and on-premises environments&lt;/li&gt;
    &lt;li&gt;Simplify procurement and billing — everything is available directly in the OCI Console&lt;/li&gt;
    &lt;li&gt;Lower data transfer costs through the Bandwidth Alliance (zero egress fees for OCI Object Storage in North America)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Four Service Bundles to Match Your Needs&lt;/h3&gt;
&lt;p&gt;Choose the right level of edge protection and performance:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Cloudflare Business Services&lt;/strong&gt; — Essential CDN, DDoS protection, WAF, and basic rate limiting&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Cloudflare Enterprise Entry&lt;/strong&gt; — Advanced certificate management, load balancing, and logging&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Cloudflare Enterprise Essential&lt;/strong&gt; — Optimized routing, enhanced DDoS protection, and accelerated DNS&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Cloudflare Enterprise Advanced&lt;/strong&gt; — Full security suite including Bot Management, advanced rate limiting, content scanning, and client-side protection&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Perfect for AI Workloads&lt;/h3&gt;
&lt;p&gt;AI applications require low latency, strong security, and reliable global delivery. Cloudflare@OCI helps you:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Accelerate AI inference and model serving at the edge&lt;/li&gt;
    &lt;li&gt;Secure AI APIs and vector search endpoints&lt;/li&gt;
    &lt;li&gt;Protect against prompt injection and other emerging AI threats&lt;/li&gt;
    &lt;li&gt;Deliver consistent performance for distributed AI systems across regions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;How to Get Started&lt;/h3&gt;
&lt;ol&gt;
    &lt;li&gt;Log in to the &lt;strong&gt;OCI Console&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Navigate to &lt;strong&gt;Identity &amp;amp; Security&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Browse and select the Cloudflare@OCI package that fits your needs&lt;/li&gt;
    &lt;li&gt;Purchase and connect your OCI workloads to Cloudflare&lt;/li&gt;
    &lt;li&gt;Configure policies and deploy in minutes&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Cloudflare@OCI gives you the best of both worlds: OCI’s high-performance cloud infrastructure paired with Cloudflare’s industry-leading edge security and global performance platform — all managed through a single, Oracle-led experience.&lt;/p&gt;

&lt;p&gt;Whether you’re building traditional web apps, modern microservices, or production AI systems, this partnership helps you deliver faster, safer, and more reliable experiences to users everywhere.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.fahdmirza.com/feeds/7622736378648959829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3496259157130184660/7622736378648959829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/7622736378648959829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3496259157130184660/posts/default/7622736378648959829'/><link rel='alternate' type='text/html' href='http://www.fahdmirza.com/2026/06/cloudflareoci-edge-security-performance.html' title='Cloudflare@OCI: Edge Security &amp; Performance for Your OCI Applications and AI Workloads'/><author><name>Fahd Mirza</name><uri>http://www.blogger.com/profile/14722451950835849728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfhUV5TmW-L2vC0y9_tOUEON-rPEVJS5jXJTClrk7hZtjtq0z7wrmP-lrSaqv-5Hs4zOJsHmSigxLJvY5mfMKPcFqsvv-pYz0beUZn2L8g_0Ygs4Bx1Inj7AJ_DvhSf08/s220/fahdgooglephoto.gif'/></author><thr:total>0</thr:total></entry></feed>