A step-by-step walkthrough for ODA release 19.12 or later, using KVM virtualization and the ODACLI command-line interface.
1. Overview
In this guide, we will walk through the deployment of a Microsoft Windows Server 2022 virtual machine on an Oracle Database Appliance (ODA) using the built-in KVM virtualization layer. We will start by provisioning the VM instance through the ODACLI command line, then establish VNC console access to the bare metal node, then work through the Oracle VirtIO storage drivers that Windows Setup needs in order to see the underlying virtual disk, and finish with a clean installation of Windows Server 2022 booting into the desktop environment.
My upcoming ODA book covers a wide range of administration topics on Oracle Database Appliance, but application KVM deployment did not make it into the final outline. We are covering that gap here on dbaexpert.com so that the full procedure is available to anyone working through the same problem.
This walkthrough is written for the Database Administrator, system administrator, or IT infrastructure engineer who is responsible for managing an ODA KVM environment running release 19.12 or later.
This walkthrough was produced against ODA release 19.30, which Oracle made available in January 2026 (the release ships with the January 2026 Database Release Update). The Oracle Solution-in-a-Box guide that the procedure follows covers ODA bare metal release 19.18 and later. Reference materials:
- Oracle ODA Solution-in-a-Box Guide, Release 19.30 — KVM deployment procedures and Application VM concepts.
- ODA 19.30 Release Notes — what is new and supported in this release.
2. How ODA Virtualization Works
ODA virtualization does not behave like general-purpose hypervisors such as VMware. A common misunderstanding we run into in the field is that customers want to treat the Oracle Database Appliance like a general-purpose hypervisor. They expect to provision any kind of VM through a vCenter-style management plane. They expect storage to behave like a free form pool that any VM can carve up at will. ODA is not that.
The KVM layer on ODA is purpose-built for two specific workloads:
- Oracle Database workloads running as Database System VMs (DB Systems). This is identical to the DB Systems that you see on Oracle Cloud Infrastructure (OCI).
- A smaller number of Application VMs running alongside the DB Systems on the same hardware.
The provisioning surface is odacli and the BUI. There is no separate hypervisor management product to install. There is no vCenter equivalent to point at multiple appliances. The design philosophy is built around running Oracle workloads on Oracle hardware, not a generic IT virtualization infrastructure.
That distinction matters because it changes the mental model. You are not building a private cloud on the ODA. Technically, you can, but you are taking what is an engineered system and making it into a complex infrastructure that can break during patching and upgrade cycles. On the ODAs, you can run a small number of defined Oracle workloads, plus a handful of supporting application VMs, on a deeply integrated stack that Oracle owns end to end. Once that thought process sticks with you, the rest of the ODACLI commands in this post stop feeling unfamiliar and start looking like the natural way to manage VMs on this kind of platform.
↳2.2 Supported List of Guest VM Operating Systems
For the official list of supported guest operating systems on ODA Application KVMs, Oracle's documentation defers to the Oracle Linux KVM User's Guide. The supported list includes recent Oracle Linux releases (7 through 10), Red Hat Enterprise Linux 7 through 10, and several other Linux distributions such as CentOS, AlmaLinux, Rocky Linux, SLES, and Ubuntu.
It also includes Microsoft Windows Server 2016, 2019, 2022, and 2025, plus Windows 10 and 11 on the desktop side.
Last but not least, it includes support for Oracle Solaris 11.4.
The starting points are the Application KVMs FAQ for ODA and the underlying KVM Guest Operating Systems list.
↳2.3 VM Storage Comes from the ASM Disk Group
The way storage is provisioned for application VMs on ODA also differs from a typical hypervisor. When you run odacli create-vmstorage, you are not creating a generic file system on local disks. You are carving out a slice of an ASM disk group (DATA in our example) and turning that slice into a virtual file system that the VM layer can use as a backing store for VMs and virtual disks.
3. Prerequisites
Before you begin, verify that the following pieces are in place. Each one is needed for the procedure to run cleanly without backtracking:
- ODA release 19.12 or later is installed and operational on the bare metal host.
- The Oracle VirtIO Drivers ISO for Microsoft Windows has been downloaded from Oracle Software Delivery Cloud or My Oracle Support and staged on the ODA shared repository path (e.g.,
/u05/app/sharedrepo/vmgstorage/). Version 0.1.285 or a compatible signed release is required. Refer to the known caveats in Section 5 regarding driver signing. - The Windows Server installation ISO (e.g.,
SERVER_EVAL_x64FRE_en-us.iso) has been staged on the same shared repository path. - The ODACLI commands
odacli create-cpupool,odacli create-vmstorage,odacli create-vdisk, andodacli create-vmare available and executable as root on the ODA bare metal node. - A VNC client such as RealVNC Viewer or TigerVNC is installed on the administrator workstation.
- Root SSH access to the ODA bare metal node (e.g.,
vnaoda0.plano.viscositytechnology.com) is available. - For ODA releases 19.11 or 19.12 using the Browser User Interface (BUI): the
-esrcoption is not available in the BUI. You must use the ODACLI command line exclusively for VM creation.
Note: For ODA releases earlier than 19.12, refer to My Oracle Support Note 2748946.1 for the applicable procedure.
4. Step-by-Step Procedure
↳Step 1: Create a VM CPU Pool (Optional)
If the Windows VM should have its own dedicated CPU resources rather than share the default pool, you can create a VM CPU pool on the ODA bare metal node ahead of time. The following ODACLI command sets up a pool named odavm_pool with six cores allocated to VM workloads:
# odacli create-cpupool -n odavm_pool -c 6 -vm-nCPU Pool name-cNumber of CPU cores to allocate-vmSpecifies a VM Instance type CPU pool
Note: This step is optional. You can skip it if the Windows VM will share the default CPU pool.
↳Step 2: Create VM Storage
Next, we provision VM storage on the ODA shared repository. The example below creates a 100 GB storage volume named vmgstorage on the DATA ASM disk group:
# odacli create-vmstorage -n vmgstorage -s 100G -dg DATA-nVM Storage name-sStorage size-dgASM Disk Group (default: DATA with MIRROR redundancy)
↳Step 3: Create a Virtual Disk (Optional)
If the Windows VM needs additional disk capacity beyond the operating system disk, you can create a virtual disk now and attach it during VM creation in the next step. The example below creates a 49 GB shared virtual disk named vmdisk02-vm:
# odacli create-vdisk -n vmdisk02-vm -vms vmgstorage -s 49G -sh-nVirtual disk name-vmsVM Storage name to associate with-sDisk size-shShared disk flag
Note: This step is optional and only required if an additional data disk is needed.
↳Step 4: Create the VM Instance with VirtIO External Source
Now we create the Windows VM instance itself. The odacli create-vm command accepts an -esrc option that attaches the VirtIO drivers ISO as a second virtual CD-ROM alongside the Windows installation ISO. Without that ISO attached at boot time, Windows Setup has no mechanism to load the VirtIO SCSI driver, and it will not be able to see the VirtIO-based virtual disk that the VM is provisioned with.
odacli create-vm -n vnaoda-vm2 -vc 2 -m 4G -vms vmgstorage -s 49G \
-vd vmdisk02-vm -cp odavm_pool -vn pubnet \
-src /u05/app/sharedrepo/vmgstorage/SERVER_EVAL_x64FRE_en-us.iso \
-esrc /u05/app/sharedrepo/vmgstorage/virtio-win-0.1.285.iso-nVM name-vcNumber of virtual CPUs-mMemory size-vmsVM Storage name-sOS disk size-vdVirtual disk name (optional)-cpCPU Pool name (optional)-vnVirtual network name (pubnetfor public access)-srcPath to the Windows installation ISO-esrcPath to the VirtIO drivers ISO (external source)
Warning: The
-esrcflag requires ODA release 19.11 or later. It is not available in the BUI on releases 19.11 or 19.12. You must use the ODACLI command line.
↳Step 5: Identify the VNC Display Port
Once the VM is created, we need to find out which VNC display port the guest console is listening on. Run the following command on the ODA bare metal node and locate the Display Port value in the output:
# odacli describe-vm -n vnaoda-vm2You will need this value for the vncviewer command in Step 9. As a reference, a Display Port of 1 corresponds to TCP port 5901, a Display Port of 2 corresponds to 5902, and so on.
↳Step 6: Connect to the ODA Bare Metal Node via RealVNC Viewer
From the administrator workstation, open RealVNC Viewer. In the address bar at the top of the RealVNC Connect window, enter the ODA bare metal node IP address followed by the VNC display number (for example, 192.168.254.50:2), then press Enter to initiate the connection.

↳Step 7: Acknowledge the Unencrypted Connection Warning
RealVNC Viewer will display an Unencrypted connection warning dialog indicating that the session data will not be encrypted in transit. Review the notice and click Continue to proceed with the connection to the ODA bare metal node.

↳Step 8: Authenticate to the ODA Bare Metal Node
The Authentication dialog will appear next, prompting for credentials of the remote device. Enter the VNC server password for the ODA bare metal node in the Password field, leave the Username blank unless your environment requires it, then click OK to authenticate.

↳Step 9: Launch vncviewer on the ODA Node to Connect to the VM Guest
Once you are connected to the ODA bare metal node desktop via RealVNC, open a terminal window on the bare metal node. From that terminal, execute the vncviewer command targeting localhost on the VM guest's Display Port from Step 5. For example, if the display port is 1, enter:
vncviewer 127.0.0.1:1
↳Step 10: Configure Windows Setup Language and Regional Settings
The Microsoft Server Operating System Setup wizard will launch in the vncviewer session. On the initial screen, verify or select the desired Language to install, Time and currency format, and Keyboard or input method. When the values are correct, click Next.

↳Step 11: Initiate the Windows Server Installation
On the next Windows Setup screen, click Install now to begin the operating system installation process.

↳Step 12: Select the Windows Server 2022 Edition
The operating system selection screen lists the available Windows Server 2022 editions. Select Windows Server 2022 Standard Evaluation (Desktop Experience) to install the full graphical environment, then click Next.

↳Step 13: Accept the Microsoft Software License Terms
Read the Applicable notices and license terms. Select the checkbox "I accept the Microsoft Software License Terms..." to confirm acceptance, then click Next to continue.

↳Step 14: Select Custom Installation Type
On the "Which type of installation do you want?" screen, select Custom: Install Microsoft Server Operating System only (advanced). This option performs a clean installation without preserving any existing files or settings.

↳Step 15: Load the VirtIO Storage Driver
Windows Setup will display the "Where do you want to install the operating system?" screen with no drives visible and the warning "We couldn't find any drives." This is expected, because Windows does not include native support for VirtIO-based storage. Click Load driver to open the Load driver dialog.

↳Step 16: Click Browse in the Load Driver Dialog
The Load driver dialog will appear with instructions to insert installation media containing the driver files. Click Browse to navigate to the VirtIO ISO that was attached as an external source during VM creation.

↳Step 17: Navigate to the VirtIO Driver Folder for Windows Server 2022
The Browse for Folder dialog will display the contents of the attached VirtIO drivers ISO (CD Drive E: virtio-win-0.1.285). Expand the amd64 folder and select the 2k22 subfolder. The 2k22 folder contains the VirtIO SCSI storage driver that is compatible with Windows Server 2022. Click OK to confirm the selection.

↳Step 18: Select the Red Hat VirtIO SCSI Controller Driver
After browsing to the 2k22 folder, Windows Setup will present the compatible driver: Red Hat VirtIO SCSI controller (E:\amd64\2k22\viostor.inf). Verify that this entry is highlighted in the driver list, then click Next to install the driver.

↳Step 19: Select the Target Drive for Installation
Once the VirtIO driver is loaded, the drive selection screen refreshes and now displays the available virtual disks. Select Drive 0 Unallocated Space (49.0 GB) as the target installation drive, then click Next.

↳Step 20: Confirm Automatic Partition Creation
Windows Setup will display an informational dialog stating that it may create additional partitions for system files. Click OK to acknowledge and allow Windows to automatically partition the selected drive.

↳Step 21: Monitor the Windows Installation Progress
Windows Server Setup will begin the installation, progressing through the following phases: Copying files, Getting files ready for installation, Installing features, Installing updates, and Finishing up. Monitor the status screen and allow the process to complete without interruption. The VM will reboot automatically once the installation finishes.

↳Step 22: Reconnect the VNC Session After Automatic Reboot
When the VM reboots at the end of the installation, the VNC connection to the guest will be dropped. TigerVNC will display a "Connection reset by peer (104)" error and prompt "Attempt to reconnect?". Click No. The session to the bare metal node via RealVNC remains active, which lets you re-run the vncviewer command from Step 9 in the ODA terminal to reconnect to the VM guest console:
vncviewer 127.0.0.1:1
↳Step 23: Observe the Windows First-Boot Initialization
Once you reconnect, the VM will display the Windows first-boot initialization screen showing the Windows logo and the message "Getting ready". Wait for this process to complete before proceeding to the next step.

↳Step 24: Configure the Administrator Password
Windows Setup will present the Customize settings screen, prompting for the built-in Administrator account password. Enter a strong password in the Password field, re-enter it in the Reenter password field to confirm, then click Finish.


↳Step 25: Verify Successful Boot to the Windows Lock Screen
After the Administrator password is set and you click Finish, Windows Server will complete its initialization and display the lock screen. The lock screen confirms that the operating system installation has completed successfully. The screen will show the current time and date along with the instruction "Press Ctrl+Alt+Delete to unlock."

↳Step 26: Log In and Verify the Windows Desktop
Send the Ctrl+Alt+Delete key combination through the VNC client to unlock the session. Enter the Administrator password that you set in Step 24. Windows will complete the login process and display the Windows Server desktop, including the Server Manager splash screen. Verify that the desktop environment loads correctly.


5. Notes and Caveats
↳5.1 VirtIO Driver Version Compatibility
Oracle VirtIO Drivers ISO version 0.1.215 is the recommended version for use with Windows Server 2022 on ODA. Version 0.1.217 has a known driver signing issue on Windows Server 2022 that may prevent the viostor.inf driver from loading successfully during Setup. Always verify the driver version before staging the ISO on the shared repository.
↳5.2 amd64 / 2k22 Driver Folder Selection
When you browse the VirtIO ISO during driver loading, always navigate to the path amd64 > 2k22. The 2k22 folder corresponds to Windows Server 2022. Selecting an incorrect version folder, such as 2k19 for Server 2019, will result in an incompatible driver being offered. The installation will then fail at the drive selection step.
↳5.3 Unencrypted VNC Connection
The VNC connection to the ODA bare metal node operates without transport encryption, as noted in the RealVNC warning dialog. Make sure that this access is conducted exclusively over a secured internal network segment. Do not expose VNC ports to untrusted networks.
Charles is an Oracle ACE Director, VMware vExpert, and author of over a dozen books in the Oracle ecosystem.