Skip to main content

Oracle Enterprise Manager 24ai Installation

Oracle Enterprise Manager 24ai Installation

Introduction

In this post, we will cover the Oracle Enterprise Manager (OEM) 24ai Release 1 installation step by step, including repository database preparation, installation prerequisites, OMS configuration, WebTier configuration, plugin deployment, and post-installation verification.

Oracle Enterprise Manager 24ai is Oracle’s latest Enterprise Manager release for monitoring and managing Oracle databases, middleware, hosts, and other enterprise targets from a centralized platform.

Prerequisites

Below are the minimum requirements for a Linux environment:

  • CPU: 2 cores
  • RAM: 10GB
  • Disk space: 50GB (/u01) and 60GB (/oem)
  • OEM binary, downloadable here.
  • Root user or sudo access.
  • Firewall disabled.

Environment Used in This Guide

Hostname oem.oraeasy.com / 192.168.1.43
OS OEL 9.1
OEM Version 24ai Release 1 (24.1)
OMS Home /oem/app/oracle/middleware
Agent Base /oem/app/oracle/agent
Repository Database Name OEMDB
Database Version 19.31.0
Oracle Home /u01/app/oracle/product/19c/dbhome_1

Step 1: Verify Redo Log Groups

The repository database needs enough redo log groups to avoid log file sync waits during installation. Check the current group count and size, add more groups if needed, then retire the undersized originals.


SQL> select name,open_mode,log_mode from v$database;

NAME      OPEN_MODE            LOG_MODE
--------- -------------------- ------------
OEMDB     READ WRITE           ARCHIVELOG

SQL> SELECT group#, status,bytes/1024/1024 AS size_mb FROM v$log ORDER BY group#;

    GROUP# STATUS              SIZE_MB
---------- ---------------- ----------
         1 INACTIVE                200
         2 INACTIVE                200
         3 CURRENT                 200

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/OEMDB/redo03.log
/u01/app/oracle/oradata/OEMDB/redo02.log
/u01/app/oracle/oradata/OEMDB/redo01.log

SQL> ALTER DATABASE ADD LOGFILE GROUP 4 '/u01/app/oracle/oradata/OEMDB/redo04.log' SIZE 1G;

Database altered.

SQL> ALTER DATABASE ADD LOGFILE GROUP 5 '/u01/app/oracle/oradata/OEMDB/redo05.log' SIZE 1G;

Database altered.

SQL> ALTER DATABASE ADD LOGFILE GROUP 6 '/u01/app/oracle/oradata/OEMDB/redo06.log' SIZE 1G;

Database altered.

SQL> SELECT group#, status FROM v$log ORDER BY group#;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2 INACTIVE
         3 CURRENT
         4 UNUSED
         5 UNUSED
         6 UNUSED

6 rows selected.

SQL> SELECT group#, status,bytes/1024/1024 AS size_mb FROM v$log ORDER BY group#;

    GROUP# STATUS              SIZE_MB
---------- ---------------- ----------
         1 INACTIVE                200
         2 INACTIVE                200
         3 CURRENT                 200
         4 UNUSED                 1024
         5 UNUSED                 1024
         6 UNUSED                 1024

6 rows selected.

SQL> ALTER DATABASE DROP LOGFILE GROUP 1;

Database altered.

SQL> SELECT group#, status FROM v$log ORDER BY group#;

    GROUP# STATUS
---------- ----------------
         2 INACTIVE
         3 CURRENT
         4 UNUSED
         5 UNUSED
         6 UNUSED

SQL> ALTER DATABASE DROP LOGFILE GROUP 2;

Database altered.

SQL> SELECT group#, status FROM v$log ORDER BY group#;

    GROUP# STATUS
---------- ----------------
         3 CURRENT
         4 UNUSED
         5 UNUSED
         6 UNUSED

SQL> alter system switch logfile;

System altered.

SQL> alter system checkpoint;

System altered.

SQL> SELECT group#, status FROM v$log ORDER BY group#;

    GROUP# STATUS
---------- ----------------
         3 INACTIVE
         4 CURRENT
         5 UNUSED
         6 UNUSED

SQL> ALTER DATABASE DROP LOGFILE GROUP 3;

Database altered.

SQL> SELECT group#, status FROM v$log ORDER BY group#;

    GROUP# STATUS
---------- ----------------
         4 CURRENT
         5 UNUSED
         6 UNUSED

SQL> ALTER DATABASE ADD LOGFILE GROUP 7 '/u01/app/oracle/oradata/OEMDB/redo07.log' SIZE 1G;

Database altered.

SQL> ALTER DATABASE ADD LOGFILE GROUP 8 '/u01/app/oracle/oradata/OEMDB/redo08.log' SIZE 1G;

Database altered.

SQL> SELECT group#, status,bytes/1024/1024 AS size_mb FROM v$log ORDER BY group#;

    GROUP# STATUS              SIZE_MB
---------- ---------------- ----------
         4 CURRENT                1024
         5 UNUSED                 1024
         6 UNUSED                 1024
         7 UNUSED                 1024
         8 UNUSED                 1024

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/OEMDB/redo07.log
/u01/app/oracle/oradata/OEMDB/redo08.log
/u01/app/oracle/oradata/OEMDB/redo04.log
/u01/app/oracle/oradata/OEMDB/redo05.log
/u01/app/oracle/oradata/OEMDB/redo06.log

Step 2: Verify the TNS Service and SYS Password

Confirm the repository database is reachable over the network and that the SYS credentials work before starting the installer.


[oracle@oem ~]$ tnsping oemdb

TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 19-SEP-2026 10:06:15

Copyright (c) 1997, 2026, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oem.oraeasy.com)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = oemdb)))
OK (90 msec)
[oracle@oem ~]$

[oracle@oem ~]$ sqlplus sys@oemdb as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Sep 19 10:08:03 2026
Version 19.31.0.0.0

Copyright (c) 1982, 2026, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.31.0.0.0

SQL> select name,open_mode,log_mode from v$database;

NAME      OPEN_MODE            LOG_MODE
--------- -------------------- ------------
OEMDB     READ WRITE           ARCHIVELOG

Step 3: Adjust Repository Database Parameters

OEM's repository has a specific set of parameter requirements. Back up the current settings with a pfile first, then apply the changes and bounce the database.


SQL> select name,open_mode,log_mode from v$database;

NAME      OPEN_MODE            LOG_MODE
--------- -------------------- ------------
OEMDB     READ WRITE           ARCHIVELOG

SQL> create pfile='/home/oracle/oemdb.ora' from spfile;

File created.

SQL> show parameter _allow_insert_with_update_check
SQL>
SQL> show parameter session_cached_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
session_cached_cursors               integer     50
SQL>
SQL>  show parameter shared_pool_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size                     big integer 0
SQL>
SQL> show parameter processes

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     1
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     40
log_archive_max_processes            integer     4
processes                            integer     300
SQL>
SQL> show parameter pga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit                  big integer 2G
pga_aggregate_target                 big integer 0
SQL>
SQL> alter system set "_allow_insert_with_update_check"=true scope=both;

System altered.

SQL> alter system set session_cached_cursors=200 scope=spfile;

System altered.

SQL> alter system set shared_pool_size=600M scope=spfile;

System altered.

SQL> alter system set processes=600 scope=spfile;

System altered.

SQL> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.

Total System Global Area 1879047528 bytes
Fixed Size                  8940904 bytes
Variable Size            1426063360 bytes
Database Buffers          436207616 bytes
Redo Buffers                7835648 bytes
Database mounted.
Database opened.
SQL>
SQL> show parameter _allow_insert_with_update_check

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
_allow_insert_with_update_check      boolean     TRUE
SQL> show parameter session_cached_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
session_cached_cursors               integer     200
SQL> show parameter shared_pool_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size                     big integer 608M
SQL>
SQL> show parameter processes

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     1
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     40
log_archive_max_processes            integer     4
processes                            integer     600
SQL>

Step 4: Create Required Directories and Place the Binary

The OMS Home and Agent Base directories must exist and be owned by oracle before the installer runs, since OEM installs into them rather than creating the parent structure itself. Keeping the downloaded zips and the .bin launcher together under a dedicated software directory also makes it easy to confirm nothing failed to download before starting:


[oracle@oem ~]$ mkdir -p /oem/app/oracle/middleware
[oracle@oem ~]$ mkdir -p /oem/app/oracle/agent
[oracle@oem ~]$
[oracle@oem ~]$ ll /oem/app/oracle/
total 8
drwxr-xr-x. 2 oracle oinstall 4096 Sep 19 11:24 agent
drwxr-xr-x. 2 oracle oinstall 4096 Sep 19 11:24 middleware
[oracle@oem ~]$
[oracle@oem ~]$  cd /oem/software/
[oracle@oem software]$
[oracle@oem software]$ ls -lrth /oem/software/
total 7.9G
-r--r--r--. 1 oracle oinstall 1.5G Dec  5  2024 em24100_linux64-2.zip
-r--r--r--. 1 oracle oinstall 1.8G Dec  5  2024 em24100_linux64-3.zip
-r--r--r--. 1 oracle oinstall 1.6G Dec  5  2024 em24100_linux64-4.zip
-r--r--r--. 1 oracle oinstall 1.6G Dec  5  2024 em24100_linux64-5.zip
-r-xr-xr-x. 1 oracle oinstall 1.6G Dec  5  2024 em24100_linux64.bin
[oracle@oem software]$

Step 5: Start the Installation

The installer needs about 12GB of free space to extract into. If /tmp doesn't have that much, point it at another location with enough room.


[oracle@oem ~]$ cd /oem/software/
[oracle@oem software]$ ls -lrth
total 7.9G
-r--r--r--. 1 oracle oinstall 1.5G Dec  5  2024 em24100_linux64-2.zip
-r--r--r--. 1 oracle oinstall 1.8G Dec  5  2024 em24100_linux64-3.zip
-r--r--r--. 1 oracle oinstall 1.6G Dec  5  2024 em24100_linux64-4.zip
-r--r--r--. 1 oracle oinstall 1.6G Dec  5  2024 em24100_linux64-5.zip
-r-xr-xr-x. 1 oracle oinstall 1.6G Dec  5  2024 em24100_linux64.bin
[oracle@oem software]$
[oracle@oem software]$ ./em24100_linux64.bin
ERROR: Temporary directory /tmp does not have enough free space. At least 12289 MB of free space are required.
Please input another directory or [Exit]: /u01/software/temp
Launcher log file is /u01/software/temp/OraInstall2026-09-19_12-04-52PM/launcher2026-09-19_12-04-52PM.log.
Extracting the installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Done
Checking monitor: must be configured to display at least 256 colors.   Actual 16777216    Passed
Checking swap space: must be greater than 512 MB.   Actual 5119 MB    Passed
Checking if this platform requires a 64-bit JVM.   Actual 64    Passed (-d64 flag is not required)
Preparing to launch the Oracle Universal Installer from /u01/software/temp/OraInstall2026-09-19_12-04-52PM

..................................................................................................
.......................................................................................

Step 6: Walk Through the OEM Installer

This launches the graphical installer, which steps through the install type, install locations, repository database connection, and the various passwords OEM needs. Follow the screens below in order.

Select Advanced Install, then click Next. Advanced Install is what lets you set custom OMS Home and Agent Base paths instead of accepting the defaults.

OEM installer screen with Advanced Install option selected

Select Skip, then click Next; this skips checking for OMS software updates over the network during the install itself, which can be applied later instead.

OEM installer screen with Skip option selected for software updates

Click Ignore to dismiss the prerequisite warnings.

OEM installer Prerequisite Checks screen with warnings to ignore

Click Next.

OEM installer screen confirming installation locations

Provide the OMS Home, Agent Base directory, and OEM server hostname, then click Next.

OEM installer screen for OMS Home, Agent Base directory, and server hostname

Click Next.

OEM installer screen confirming Agent registration and Oracle Home details

Provide the password, then click Next.

OEM installer screen for setting the installation owner password

Provide the repository database details, then click Next.

OEM installer screen for repository database connection details

Select "Using SYS" and click Next; this connects with the SYS account you verified in Step 2, rather than requiring a separate proxy user to be pre-created.

OEM installer screen with the Using SYS option selected for repository configuration

A warning about a database memory parameter shows here; click Next. It's informational at this scale and doesn't block the install.

OEM installer warning about a database memory parameter

Provide the SYSMAN and Agent Registration passwords, then click Next. SYSMAN is the OEM repository's own administrative schema, distinct from the SYS account used just to connect to it.

OEM installer screen for SYSMAN and Agent Registration passwords

Click Next.

OEM installer screen confirming plug-in selection

Review the port details and click Next.

OEM installer Port Configuration Details screen

Review the details, then click Install.

OEM installer Review screen before starting the install

Note: The full installation can take 5-6 hours. Keep an eye on the database alert log during this stretch to catch any failure early.

Monitor the installation progress and related logs.

OEM installer progress screen showing installation steps underway

If the installation appears to hang at this stage, as shown below, check whether the SYSMAN schema's optimizer statistics are locked and gather them if needed.

OEM installer appearing to hang during the configuration phase

Check Whether Stats Are Locked:
SQL> SELECT stattype_locked FROM dba_tab_statistics WHERE owner = 'SYSMAN'; STATT ----- ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL .... .... .... 6266 rows selected. Unlock the Stats and Gather Them:
SQL> EXEC DBMS_STATS.unlock_schema_stats('SYSMAN'); PL/SQL procedure successfully completed. SQL> SELECT stattype_locked FROM dba_tab_statistics WHERE owner = 'SYSMAN'; STATT ----- .... .... .... 6266 rows selected. SQL> EXEC DBMS_STATS.gather_schema_stats('SYSMAN'); PL/SQL procedure successfully completed.

Wait a while and the installation will move forward.

OEM installer progress screen resuming after gathering SYSMAN statistics

Execute the script as the root user, then click OK. This step registers OEM's startup scripts with the OS and finalizes Agent setup, which requires root privileges that the oracle user doesn't have.

OEM installer prompt to run the root configuration scripts

[root@oem ~]# /oem/app/oracle/middleware/oms_home/allroot.sh

Starting to execute allroot.sh .........

Starting to execute /oem/app/oracle/middleware/oms_home/root.sh ......
Check /oem/app/oracle/middleware/oms_home/install/root_oem.oraeasy.com_2026-09-19_21-47-55-759615214.log for the output of root script

Finished product-specific root actions.
/etc exist
Finished execution of  /oem/app/oracle/middleware/oms_home/root.sh ......

Starting to execute /oem/app/oracle/agent/agent_24.1.0.0.0/root.sh ......

Finished product-specific root actions.
/etc exist
Finished execution of  /oem/app/oracle/agent/agent_24.1.0.0.0/root.sh ......
[root@oem ~]#

Installation is now complete. Review the details, then click Close.

OEM installer Finish screen summarizing the completed installation

Step 7: Check the OMS and Agent Status

The installer's Finish screen only confirms the wizard ran to completion, not that the running services are healthy. Querying emctl status for both the OMS and the Agent independently is the more reliable check, since it reports the actual WebTier, console, and heartbeat state rather than just installer success:


[oracle@oem ~]$ cd /oem/app/oracle/middleware/oms_home/bin
[oracle@oem bin]$ ./emctl status oms
Oracle Enterprise Manager 24ai Release 1
Copyright (c) 1996, 2024 Oracle Corporation.  All rights reserved.
WebTier is Up
Oracle Management Server is Up
JVMD Engine is Up
[oracle@oem bin]$
[oracle@oem bin]$ ./emctl status oms -details
Oracle Enterprise Manager 24ai Release 1
Copyright (c) 1996, 2024 Oracle Corporation.  All rights reserved.
Console Server Host        : oem.oraeasy.com
HTTP Console Port          : 7788
HTTPS Console Port         : 7803
HTTP Upload Port           : 4889
HTTPS Upload Port          : 4903
EM Instance Home           : /oem/app/oracle/middleware/gc_inst/em/EMGC_OMS1
OMS Log Directory Location : /oem/app/oracle/middleware/gc_inst/em/EMGC_OMS1/sysman/log
OMS is not configured with SLB or virtual hostname
Agent Upload is locked.
OMS Console is locked.
Active CA ID: 1
Console URL: https://oem.oraeasy.com:7803/em
Upload URL: https://oem.oraeasy.com:4903/empbs/upload

WLS Domain Information
Domain Name            : GCDomain
Admin Server Host      : oem.oraeasy.com
Admin Server HTTPS Port: 7102
Admin Server is RUNNING

Extended Domain Name            : EMExtDomain1
Extended Admin Server Host      : oem.oraeasy.com
Extended Admin Server HTTPS Port: 7016
Extended Admin Server is RUNNING

Oracle Management Server Information
Managed Server Instance Name: EMGC_OMS1
Oracle Management Server Instance Host: oem.oraeasy.com
WebTier is Up
Oracle Management Server is Up
JVMD Engine is Up

For Agent:
[oracle@oem bin]$ cd /oem/app/oracle/agent/agent_24.1.0.0.0/bin [oracle@oem bin]$ [oracle@oem bin]$ ./emctl status agent Oracle Enterprise Manager 24ai Release 1 Copyright (c) 1996, 2024 Oracle Corporation. All rights reserved. --------------------------------------------------------------- Agent Version : 24.1.0.0.0 OMS Version : 24.1.0.0.0 Protocol Version : 12.1.0.1.0 Agent Home : /oem/app/oracle/agent/agent_inst Agent Log Directory : /oem/app/oracle/agent/agent_inst/sysman/log Agent Binaries : /oem/app/oracle/agent/agent_24.1.0.0.0 Core JAR Location : /oem/app/oracle/agent/agent_24.1.0.0.0/jlib Agent Process ID : 306422 Parent Process ID : 306378 Agent URL : https://oem.oraeasy.com:3872/emd/main/ Local Agent URL in NAT : https://oem.oraeasy.com:3872/emd/main/ Repository URL : https://oem.oraeasy.com:4903/empbs/upload Started at : 2026-09-19 21:44:57 Started by user : oracle Operating System : Linux version 5.15.0-3.60.5.1.el9uek.x86_64 (amd64) Number of Targets : 6 Last Reload : (none) Last successful upload : 2026-09-19 21:54:20 Last attempted upload : 2026-09-19 21:54:21 Total Megabytes of XML files uploaded so far : 0.15 Number of XML files pending upload : 89 Size of XML files pending upload(MB) : 0.32 Available disk space on upload filesystem : 44.12% Collection Status : Collections enabled Heartbeat Status : Ok Last attempted heartbeat to OMS : 2026-09-19 21:53:36 Last successful heartbeat to OMS : 2026-09-19 21:53:36 Next scheduled heartbeat to OMS : 2026-09-19 21:54:54 --------------------------------------------------------------- Agent is Running and Ready [oracle@oem bin]$

Step 8: Log In to the OEM Console

Open the console URL and sign in with the SYSMAN credentials set during installation.

https://192.168.1.43:7803/em

OEM console login page

Provide the credentials, then click Login.

OEM console login screen with credentials entered

Accept the license agreement.

OEM console license agreement screen

This lands on the welcome page.

OEM console welcome page after login

Click the hamburger menu on the left, then Enterprise, then Summary. This is the main dashboard for confirming all monitored targets — including the Agent installed during this setup — are being tracked correctly.

OEM console hamburger menu with Enterprise option highlighted
OEM console Enterprise Summary page showing monitored targets

Step 9: Start and Stop OEM Services

These are the day-to-day commands for controlling OMS and the agent. Make sure the repository database and its listener are running before starting OMS.


Set the Environment:
[oracle@oem ~]$ export OMS_HOME=/oem/app/oracle/middleware/oms_home [oracle@oem ~]$ export AGENT_HOME=/oem/app/oracle/agent/agent_24.1.0.0.0 To Start:
[oracle@oem ~]$ $OMS_HOME/bin/./emctl start oms [oracle@oem ~]$ $OMS_HOME/bin/./emctl start agent To Stop:
[oracle@oem ~]$ $OMS_HOME/bin/./emctl stop oms [oracle@oem ~]$ $OMS_HOME/bin/./emctl stop agent

At this point, OEM 24ai is installed with its repository database tuned for the workload, the OMS and Agent both reporting healthy status, and the console reachable and showing the Agent as a monitored target.

Thank you for reading!

I hope this content has been helpful to you. Your feedback and suggestions are always welcome. Feel free to leave a comment or reach out with any queries.

Abhishek Shrivastava

Oracle DBA with hands-on experience managing production Data Guard, RAC, GoldenGate, and APEX environments. I write practical, tested installation and troubleshooting guides based on real deployment work.

📧 Email: oraeasyy@gmail.com
🌐 Website: www.oraeasy.com

Follow Us

Comments

↑