Oracle counts physical cores on every host where an Oracle container could run, not the CPU limit you set in the pod spec or the Docker run flag. This guide shows exactly where scope expands, what the cost of getting it wrong looks like at $47,500 per Processor list, and which architectural changes actually hold up when License Management Services asks for evidence.
Oracle counts physical cores on every host where an Oracle container could run, not the CPU limit you set in the pod spec or the Docker run flag. This guide shows exactly where scope expands, what the cost of getting it wrong looks like at $47,500 per Processor list, and which architectural changes actually hold up when License Management Services asks for evidence.
Oracle's partitioning classification is binary, and there is no container branch on the decision tree. Docker and Kubernetes land on the soft partitioning side, in the same bucket as VMware, Hyper-V, and KVM, which means every physical core on every host where the Oracle software could run is counted. The corollary that catches most engineering teams: --cpus, --cpuset-cpus, cgroup quotas, and Kubernetes resources.limits are invisible to the count. They are operational controls, not licensing boundaries, and Oracle's License Management Services team has never accepted them as such in any negotiation I have seen. If you want the full policy analysis across KVM, Solaris Zones, and OCI, the soft partitioning audit defense guide walks the whole classification.
Here is the part buyers should internalize before they concede anything. This rule does not live in your Oracle Master Agreement. It lives in the Oracle Partitioning Policy, a PDF Oracle publishes, applies at its discretion, and expressly reserves the right to change: the document states Oracle "may modify the definitions and conditions specified in this document from time to time." Oracle's own framing is even more revealing. The policy describes its purpose as permitting a customer "to license a sub-capacity of total physical cores as an exception from the contractual Oracle Processor definition." Read that carefully. Oracle is conceding that the contract defines the Processor metric and that sub-capacity is a discretionary carve-out layered on top of it, not a term either party signed.
That gap is real leverage in a commercial negotiation, particularly when the policy is not incorporated by reference into your ordering document. But in 25 years of these conversations, I have watched the contractual argument win price concessions far more often than it wins a clean scope reduction. Oracle knows the argument, has scripted responses to it, and will trade discount rather than principle. Architecture is the stronger position, because a physically separated node pool ends the argument instead of extending it. Use the policy gap to compress the settlement number; use architecture to shrink the exposure that produced the number in the first place.
Oracle's own policy calls sub-capacity an exception from the contractual Processor definition, which means the contract, not the policy, defines what you owe.
There is exactly one container topology where the exposure is genuinely bounded, and it is worth knowing precisely: a single Docker daemon on a single physical host, with no clustering layer of any kind. In that configuration Oracle counts the physical cores on that one host, and no further. Not the cluster, not the adjacent hypervisor, not the rack. That is the ceiling, and it is defensible because there is no scheduler that could place the container anywhere else. Treat this as the reference architecture for Oracle containers in development and test, not because it is cheap, but because it is the only container pattern with a knowable number.
Now the arithmetic, because "bounded" is not the same as "small." Take an ordinary 2-socket, 32-core x86 server running a single Oracle Database Enterprise Edition container that a developer uses three hours a week. Apply the 0.5 Intel core factor and you owe 16 Processor licenses. At the 2026 list price of $47,500 per Processor, that is roughly $760,000 before a single option, and annual support at 22 percent adds about $167,200 per year. Nothing in the pod configuration changes that figure. The container could be pinned to two cores with --cpuset-cpus=0,1 and the number is identical, because Oracle counts the host, not the constraint.
The trap is how easily this bounded problem stops being bounded. Add Docker Swarm to the same host for orchestration convenience and you have converted a single-host obligation into a cluster obligation: every node in the swarm becomes licensable, because the container can now be scheduled anywhere in it. Same outcome from joining the host to a Kubernetes cluster, or from letting a CI pipeline pull the Oracle image onto additional nodes. Before you approve any Oracle container in development, write the host into an asset register with its socket and core count, and route it through your internal Oracle license audit process so a later platform decision cannot silently multiply the number.
Here is the sentence that costs money: License Management Services does not ask where your Oracle pod ran, it asks where your Oracle pod could have been scheduled. Oracle Licensing Experts' Kubernetes guidance states the scope plainly, covering all worker nodes where a Database pod could be scheduled, not just where it has run. For an unconstrained cluster with a default scheduler, the honest answer to "where could it be scheduled?" is every worker node, because that is precisely what the Kubernetes scheduler is designed to do. I have watched this play out at 40-node clusters running two Oracle pods, where the customer arrived with a two-node licensing position and LMS presented 40 nodes of exposure. The customer was not lying and LMS was not bluffing. They were answering two different questions, and only one of those questions is in the Processor definition.
The mechanisms that widen scope are all things your platform team turned on for good engineering reasons. Cluster autoscaling means the node inventory at audit time is not the inventory at deployment time, and every node the autoscaler can create is a node the scheduler can place on. DaemonSets touch every node by definition. Image pre-pull, whether via a DaemonSet, a warming job, or a registry mirror policy, puts the Oracle binary on nodes that never ran a database. Redress Compliance's container guidance is direct on this point: pulling an Oracle container image onto a node effectively implicates the entire node.
Your kubectl history proves reach, not restraint, and reach is exactly what Oracle is measuring.
This is why your own telemetry works against you. Buyers reach for `kubectl` history, scheduler logs, and Kubernetes audit logs expecting them to demonstrate discipline. They demonstrate the opposite. Every log line showing a pod placed, evicted, and rescheduled onto a different node is documentary evidence that placement was never bounded. Autoscaler events showing nodes joining and leaving prove the eligible pool is elastic. Bring evidence of a boundary, not evidence of movement, and read our soft partitioning audit defense analysis before you volunteer any of it.
Every buyer-side technical control I have seen presented in a container dispute across the last decade has come out of the same five-item list, and Oracle rejects all five for the same structural reason: none of them is named in the Partitioning Policy as an approved hard partitioning technology. The policy defines a closed set. If your control is not in it, the control is soft partitioning by default, and soft partitioning does not reduce the processor count. Arguing that a control is functionally equivalent to hard partitioning is a losing argument, because Oracle's list is enumerative rather than principled. Resource requests and limits, CPU quotas, node affinity, node selectors, taints and tolerations, pod security policies, and namespace ResourceQuotas all fail this test. Oracle Licensing Experts states it without hedging: Node Affinity, taints, and resource limits are not Oracle-approved hard partitioning, so full cluster licensing applies.
The most dangerous item on that list is node affinity, and the danger is a specific Kubernetes semantic that most platform engineers know and most licensing conversations skip. `requiredDuringSchedulingIgnoredDuringExecution` binds the scheduler at placement time only. If a node's labels change after the pod is running, the pod is not evicted and keeps running on a node the rule would now reject. In practice that means your affinity boundary can go non-binding silently, during a routine node relabel or a cluster upgrade, while your architecture documentation still says the boundary exists. In an audit, that document becomes evidence that you understood you needed a constraint and failed to enforce it. That is a worse position than never having documented anything, because it converts a technical gap into a demonstrated intent to limit scope without limiting scope.
| Control presented | Oracle's likely audit position | Residual exposure |
|---|---|---|
| CPU limits / requests (pod spec) | Soft partitioning. Container shares the host OS and can potentially consume all host resources. A 2-CPU cap is not a limit. | All physical cores on every eligible node |
| Namespace ResourceQuota | Administrative quota, changeable by any cluster admin. Not a partitioning boundary. | All physical cores on every eligible node |
| Node selector | Scheduler hint on a mutable label. No enforcement at the hardware layer. | All nodes carrying, or capable of carrying, the label |
| Node affinity (required...IgnoredDuringExecution) | Not approved hard partitioning, and non-binding after placement if labels drift. | Full eligible node pool, plus documented intent used against you |
| Taints and tolerations | Explicitly named as not Oracle-approved. Tolerations are pod-side and can be added at will. | Full cluster where any Oracle-tolerating spec could be applied |
| Pod security policies / admission controllers | Governance, not partitioning. Reversible by config change. | Unchanged from baseline count |
The action is straightforward. Stop presenting scheduler configuration as a licensing boundary, because doing so trains the auditor to treat your configuration files as the discovery scope. Instead, move the argument to physical separation, then check whether the Partitioning Policy is even referenced into your Oracle Master Agreement, since it sits outside the contract you signed. Run this yourself first using our internal Oracle license audit method, and treat any control on the table above as zero credit until you have written confirmation otherwise.
There is exactly one container architecture that survives an LMS review, and it is not a YAML file. It is dedicated bare-metal worker nodes, physically separated from the shared cluster, with no scheduling path from the general-purpose control plane into the Oracle pool. That means separate clusters or, at minimum, a separate control plane whose scheduler has no registered nodes outside the licensed set. If those workers are virtualized underneath, the hypervisor has to be one Oracle recognizes as hard partitioning, which in practice means capped Solaris Zones or a properly configured KVM host with CPU pinning documented from build time forward, covered in detail in our Solaris Zones hard partitioning rules and the KVM and OLVM core count guide. Anything else and you are back to full physical core counts on every host in the virtual estate.
The architecture alone is not the deliverable. Oracle's auditors ask you to prove the boundary held for the entire lookback period, typically three years, and container platforms are the easiest place in the estate to lose that proof. Build the evidence file while the environment is running, not after the letter arrives.
Two points buyers consistently get backwards. First, architecture is a stronger position than contract argument. Yes, the Partitioning Policy sits outside the signed Oracle Master Agreement and that gap is worth pressing in a negotiation, but a physically isolated pool with a clean audit trail ends the conversation, while a contract argument merely prolongs it at your cost. Second, affinity rules do not evict. A pod scheduled with `requiredDuringSchedulingIgnoredDuringExecution` keeps running when the node labels change beneath it, which is precisely how a boundary silently fails between quarterly reviews.
The reason this argument is worth having is arithmetic. Oracle Database Enterprise Edition lists at $47,500 per Processor on the price list carrying an effective date of April 16, 2026, with support at 22 percent, roughly $10,450 per Processor per year. In our negotiation practice, net EE pricing in the $50K to $500K deal tier lands between $33,000 and $40,000 per Processor, so use $36,500 as a working midpoint when you model exposure. If Oracle pushes you toward Named User Plus instead, remember the 25 NUP per Processor floor applies to whatever processor count they have asserted, so a scope expansion inflates the NUP minimum in lockstep.
Then the multiplier. Every option and management pack must be licensed on the same processor count as the database beneath it. RAC, Partitioning, Advanced Security, Diagnostics Pack and Tuning Pack all inherit the disputed number. A 16-processor scope dispute on a RAC cluster running Partitioning and the Diagnostics Pack is not a 16-processor dispute, it is 16 processors multiplied across four or five SKUs. That is why container scope creep produces seven-figure findings out of environments the DBA team described as small.
| Scenario | Processors counted | EE list | EE net at $36,500 | 3-year support on net |
|---|---|---|---|---|
| Isolated 4-node bare-metal pool, documented | 4 | $190,000 | $146,000 | $96,360 |
| Shared 16-node Kubernetes cluster, no isolation | 16 | $760,000 | $584,000 | $385,440 |
| 40-node cluster with autoscaling node pool | 40 | $1,900,000 | $1,460,000 | $963,600 |
| 16-node cluster, EE plus RAC, Partitioning, Diagnostics | 16 x 4 SKUs | ~$2.66M list equivalent | negotiated per SKU | scales proportionally |
Read the table as a gap, not a price. The delta between the defensible 4-processor design and the unconstrained 16-node cluster is roughly $438,000 net plus $289,000 of three-year support, and that is before options. Push to 40 nodes and the same architectural failure costs $1.3M net plus $867,000 in support over three years. Nothing in the pod spec changed. Only the set of nodes where the image could land.
What to do: price your current container footprint at both the counted and the asserted processor numbers before any renewal conversation, and treat the gap as the budget you are protecting through architecture. Run the exercise yourself first, using the approach in our guide to internal Oracle license audits, because the only bad time to discover a 40-node scope is when LMS presents it to your CFO.
A 16-processor scope dispute on a cluster running RAC, Partitioning and Diagnostics is never a 16-processor dispute.
Sequence matters here, because the wrong first move (calling Oracle) forecloses the other four. Start with inventory, because Oracle's scope trigger is not "where did the database run," it is where an Oracle image exists or could be scheduled. Pulling an Oracle container image onto a node implicates that node, so your registry logs and node-level image caches are the evidence set, not `kubectl get pods`. Run this as a formal exercise: our experience running these engagements is that the first pass on a mature Kubernetes estate finds Oracle images cached on 30 to 60 percent more nodes than the platform team expected, usually from an abandoned test namespace or a DaemonSet-driven prepull. Fold this into your routine internal Oracle license audit cadence rather than treating it as a one-off.
No. Oracle classifies Docker and Kubernetes as soft partitioning, and soft partitioning does not limit license obligations. The --cpus flag, cgroup quotas and Kubernetes resource limits are all ignored, so you license every physical core on the host regardless of the cap. If a vendor rep or SI told you otherwise, get it in writing, because it will not survive an audit.
If an Oracle Database pod could be scheduled on a node, Oracle will position that node as licensable, and merely pulling the container image onto a node is enough to implicate it. The default answer for an unconstrained cluster with autoscaling node pools is therefore all worker nodes. The only reliable way to bound scope is dedicated, physically separated nodes plus documented evidence that the boundary held.
No. Oracle does not treat Kubernetes scheduling controls as approved hard partitioning. They also drift: requiredDuringSchedulingIgnoredDuringExecution will not evict a pod already running on a node whose labels change, so a rule you consider binding may no longer be enforced. Treat these controls as operational hygiene, not license defense.
It is a policy document Oracle publishes and can modify at will, and it sits outside the Oracle Master Agreement unless your contract references it. Oracle itself frames sub-capacity as an exception to the contractual Processor definition. That gap is a legitimate negotiation lever, but it is a fallback, not a plan: a physically separated architecture is a much stronger position than a contract argument.
At April 2026 list of $47,500 per Processor for Enterprise Edition, a 16-node cluster of 2-socket, 32-core servers with a 0.5 core factor is 256 Processors, roughly $12.2 million list plus about $2.7 million in annual support. Net pricing in the $50K to $500K tier has been observed at $33,000 to $40,000 per Processor, and options stack on the same processor count, which is where the number really escalates.
Marginally, and only in scope terms. A single Docker host without Swarm or Kubernetes limits exposure to the physical cores on that one host rather than a whole cluster. That is still full host licensing, and adding any orchestration layer, including Docker Swarm, reintroduces cluster-wide exposure immediately.
Most Oracle Database estates carry 20 to 30 percent removable spend. The buyer side playbook for edition right sizing, option pruning, and third party support.
Gated with a work email on the download page. No sales follow up you did not ask for.
Get the White Paper →500+ enterprise clients. 11 vendor practices. Industry recognized. One conversation can change what you pay for the next three years.
One buyer side briefing a week. Renewal signals, audit moves, and the levers that work. No vendor spin.