How to Create an Oracle SE2 Database and Avoid Licensing Problems

14 min read
Jun 16, 2022

If you recently created an Oracle Standard Edition 2 database, you might not be in compliance with Oracle after all. There are several obscure traps you could fall into during the SE2 database creation process. This post details each step of the installation and how to avoid paying millions in fines for features that were never used.



Before we begin creating the database, it is important to know there’s a specific SE2 installation. In recent versions, there’s only one binary for EE and SE2 (image below). If you are installing an older version, consult the documentation if it’s necessary to download a SE2 specific binary.


That said, let’s get back to the main topic: database creation.

Select Create a database:


Select Advanced Configuration:


Note: You must choose the Custom Database template– if you choose another template, such as Data Warehouse or General Purpose, the data files will be created with the wrong license. 


SE2 can use only up to 3 pluggable databases per CDB, you cannot create more than that for the CDB. Multi-tenant is a paid, Enterprise Edition option.


No pitfalls in this window, choose the best option for your environment:


The same goes here–choose the best option for your environment. Important databases must have the FRA area specified and archivelog enabled:


Listener configuration, no surprises:


Some tricks in this step. Oracle Label Security and Oracle Database Vault are options for Enterprise Edition, therefore don’t select these flags. 

As a best practice, I selected only the necessary components. Also, look for the type of application this database will support. When you install/create just the necessary components/features it avoids bugs, security issues, and upgrades and patching exercises run faster.


No traps here; choose the memory configuration and character set to suit your needs:


Uncheck the checkboxes and click Next:


For better security, you should choose a different password for each account. In this example, I preferred to choose just one password for all the accounts:


One of the most important steps. Don’t go forward before changing the parameters which can violate the SE2 license. Click on “All initialization Parameters”. 


In the top-right corner click on Show advanced parameters flag and order the result by name:


Let’s change the “control_management_pack” to NONE and click on the Include in spfile flag. If you don’t mark this flag, after the database is created if you restart the database, the parameter will set up again with the default value:


Set “deferred_segment_creation” to FALSE. This is an Enterprise Edition feature, so don’t forget to include it in the spfile:


Set “Job_queue_processes” to zero. It’s required because RDBMS Oracle has some internal jobs that violate the SE2 license. After we disabled these jobs, we can set up the “job_queue_processes” to default value again:


Set “optimizer_adaptive_plans” and “optimizer_adaptive_statistics” to FALSE and include them in the spfile:


Take care of the “optimizer_use_sql_plan_baseline” and “optimizer_use_sql_plan”.
Baselines are usually for previous enterprise editions. According to the documentation for the 19c version, SE2 can use this feature, but with some limitations. Only one SQL plan baseline per SQL statement is allowed, and SQL plan evolution is disabled. Let’s avoid using it–better to be safe than sorry. If you need to use it, be cautious and double-check the documentation:



Set “parallel_max_servers” to zero. SE2 doesn’t allow parallelism. You can’t use parallelism in the backup, and you can’t increase the objects (tables and indexes) degree. One big pitfall is even if you set the “parallel_max_servers” to zero and your application is using SQL parallel hint, this SQL will violate the SE2 license. As a best practice, avoid using hints when possible:


Resource Manager is an Enterprise Edition feature, so change the “resource_limit” parameter to false.

Click Close


So far so good. Now, we just need to click “create database”, right? Wrong. Create the response file for this setup and cancel the database creation:



Checking the response file saved:


If we had followed the database creation, the database would be installed with all components even with the flag unchecked. To avoid this problem we need to edit the file  “$ORACLE_HOME/assistants/dbca/templates/New_Database.dbt”:


Change the value to false for the unnecessary components:


Now we’re ready to create the SE2 database. Use the response file created in the previous steps:

[oracle@host1 bin]$ ./dbca -silent -createDatabase -responseFile /home/oracle/dbca.rsp

Enter SYS user password:

Enter SYSTEM user password:

Enter PDBADMIN User Password:

Prepare for db operation
4% complete
Creating and starting Oracle instance
5% complete
6% complete
8% complete
Creating database files
9% complete
13% complete
Creating data dictionary views
14% complete
16% complete
19% complete
20% complete
21% complete
23% complete
25% complete
Oracle JVM
31% complete
38% complete
44% complete
46% complete
Oracle Text
48% complete
50% complete
Oracle Multimedia
63% complete
Creating cluster database views
71% complete
Completing Database Creation
73% complete
75% complete
Creating Pluggable Databases
78% complete
88% complete
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the logfiles at:
Database Information:
Global Database Name:PYTHIAN
System Identifier(SID):PYTHIAN
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/PYTHIAN/PYTHIAN0.log" for further details.
[oracle@host1 bin]$ sqlplus / as sysdba

SQL*Plus: Release - Production on Mon May 23 07:38:37 2022


Check if the components are correct:

Connected to:
Oracle Database 19c Standard Edition 2 Release - Production

SQL> set linesize 100
SQL> col comp_name for a40
SQL> select comp_name, status from dba_registry;

---------------------------------------- -------------
Oracle Database Catalog Views		   VALID
Oracle Database Packages and Types	   VALID
Oracle Real Application Clusters	   OPTION OFF
JServer JAVA Virtual Machine		   VALID
Oracle XDK				   VALID
Oracle Database Java Packages		   VALID
Oracle XML Database			   VALID
Oracle Workspace Manager		   VALID
Oracle Text				   VALID
Oracle Multimedia			   VALID


Now we need to disable the internal auto task job that, if executed, would violate the SE2 license:


-------------------------------------------- --------
auto space advisor			      ENABLED
auto optimizer stats collection 	      ENABLED
sql tuning advisor			      ENABLED


PL/SQL procedure successfully completed.


--------------------------------------------- --------
auto space advisor			       ENABLED
auto optimizer stats collection 	       ENABLED
sql tuning advisor			       DISABLED


After the auto task job is disabled we can set the “job_queue_processes” parameter again to the default value:

SQL> show parameter job_queue_processes

---------------------- ----------- --------------
job_queue_processes	integer	      0

SQL> alter system set job_queue_processes=4000 scope=both sid='*';

System altered.

SQL> show parameter job_queue_processes

NAME				     TYPE	     VALUE
--------------------- ----------- ---------------------
job_queue_processes	   integer	 4000


Check if any Enterprise Edition features were violated:


no rows selected



Oracle Database 19c Licensing Information

Oracle Database 19c – Oracle Advanced Security Data Sheet


I hope you found this post helpful. Feel free to share any questions or feedback in the comments, and make sure to sign up for updates so you don’t miss the next post.


Get Email Notifications

No Comments Yet

Let us know what you think