We assume you created user oracle and installed Oracle 12c database software in directory /data/oracle/product/12.2.0/dbhome_1

The following rules are important for every production database

--------------------------------------------------------------------------------
-- execute as oracle
--------------------------------------------------------------------------------

-- create directory structure

-- separate disk for data files
mkdir -p /data/oracle/database/oradb01/adump
mkdir -p /data/oracle/database/oradb01/control
mkdir -p /data/oracle/database/oradb01/data
mkdir -p /data/oracle/database/oradb01/dpdump

-- separate disk for control file and redo logs 1
mkdir -p /redo1/oracle/database/oradb01/control
mkdir -p /redo1/oracle/database/oradb01/redo

-- separate disk for control file and redo logs 2
mkdir -p /redo2/oracle/database/oradb01/control
mkdir -p /redo2/oracle/database/oradb01/redo

-- separate disk for archived logs
mkdir -p /arch/oracle/database/oradb01/arch_logs

--------------------------------------------------------------------------------

-- create init file

vi $ORACLE_HOME/dbs/initoradb01.ora

audit_file_dest='/data/oracle/database/oradb01/adump'
audit_trail='db'
compatible='12.0.0'
control_files='/data/oracle/database/oradb01/control/control.ctl','/redo1/oracle/database/oradb01/control/control.ctl','/redo2/oracle/database/oradb01/control/control.ctl'
db_block_size=8192
db_domain=''
db_name='oradb01'
diagnostic_dest='/data/oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=oradb01XDB)'
log_archive_dest_1='LOCATION=/arch/oracle/database/oradb01/arch_logs MANDATORY REOPEN=300'
memory_target=10G
nls_length_semantics='CHAR'
open_cursors=3000
processes=1000
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDO1'

--------------------------------------------------------------------------------

-- oracle settings

export ORACLE_BASE=/data/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOSTNAME=db01-s
export ORACLE_UNQNAME=oradb01
export ORACLE_SID=oradb01

-- create password file

$ORACLE_HOME/bin/orapwd file=$ORACLE_HOME/dbs/orapworadb01 password=Geheim force=y

-- connect as user sys

sqlplus / as sysdba

-- create spfile

create spfile from pfile;

-- start database instance

startup nomount

--------------------------------------------------------------------------------
-- create empty database

set echo on
set termout on

spool createdb

create database oradb01
user sys identified by Geheim
user system identified by Geheim
maxdatafiles 100
maxinstances 1
maxlogfiles 100
maxlogmembers 2
maxloghistory 1
archivelog
character set AL32UTF8
national character set AL16UTF16
extent management local
datafile '/data/oracle/database/oradb01/data/system01.dbf' size 500M reuse autoextend on next 10M maxsize unlimited
sysaux datafile '/data/oracle/database/oradb01/data/sysaux01.dbf' size 500M reuse autoextend on next 10M maxsize unlimited
bigfile default tablespace USERS datafile '/data/oracle/database/oradb01/data/users01.dbf' size 500M reuse autoextend on next 10M maxsize unlimited
bigfile default temporary tablespace TEMP1 tempfile '/data/oracle/database/oradb01/data/temp01.dbf' size 500M reuse autoextend on next 10M maxsize unlimited
bigfile undo tablespace UNDO1 datafile '/data/oracle/database/oradb01/data/undo01.dbf' size 500M reuse autoextend on next 10M maxsize unlimited
logfile
group  1 ('/redo1/oracle/database/oradb01/redo/redo01.log','/redo2/oracle/database/oradb01/redo/redo01.log') size 100M,
group  2 ('/redo1/oracle/database/oradb01/redo/redo02.log','/redo2/oracle/database/oradb01/redo/redo02.log') size 100M,
group  3 ('/redo1/oracle/database/oradb01/redo/redo03.log','/redo2/oracle/database/oradb01/redo/redo03.log') size 100M,
group  4 ('/redo1/oracle/database/oradb01/redo/redo04.log','/redo2/oracle/database/oradb01/redo/redo04.log') size 100M,
group  5 ('/redo1/oracle/database/oradb01/redo/redo05.log','/redo2/oracle/database/oradb01/redo/redo05.log') size 100M,
group  6 ('/redo1/oracle/database/oradb01/redo/redo06.log','/redo2/oracle/database/oradb01/redo/redo06.log') size 100M,
group  7 ('/redo1/oracle/database/oradb01/redo/redo07.log','/redo2/oracle/database/oradb01/redo/redo07.log') size 100M,
group  8 ('/redo1/oracle/database/oradb01/redo/redo08.log','/redo2/oracle/database/oradb01/redo/redo08.log') size 100M,
group  9 ('/redo1/oracle/database/oradb01/redo/redo09.log','/redo2/oracle/database/oradb01/redo/redo09.log') size 100M,
group 10 ('/redo1/oracle/database/oradb01/redo/redo10.log','/redo2/oracle/database/oradb01/redo/redo10.log') size 100M
;

spool off

--------------------------------------------------------------------------------

-- create sys objects

spool catalog
@?/rdbms/admin/catalog.sql
spool off

spool catproc
@?/rdbms/admin/catproc.sql
spool off

spool javavm
@?/javavm/install/initjvm.sql
spool off

spool catjava
@?/rdbms/admin/catjava.sql
spool off

-- recompile invalid objects

@?/rdbms/admin/utlrp.sql

-- check if everything is created

select comp_name, version, status from dba_registry;

-- restart database instance for spfile to take effect

shutdown immediate;
startup;
exit

--------------------------------------------------------------------------------

-- optional stuff

sqlplus / as sysdba

-- change profile

alter profile DEFAULT limit password_life_time unlimited;

-- directory for data pump

create or replace directory dmpdir as '/data/oracle/database/oradb01/dpdump';

-- create product user profile to avoid the warning in sqlplus

connect system/Geheim

@?/sqlplus/admin/pupbld.sql

exit

--------------------------------------------------------------------------------

-- configure Enterprise Manager DB Express

sqlplus / as sysdba

exec dbms_xdb_config.sethttpsport(5500);

select dbms_xdb_config.gethttpsport() from dual;

-- EM URL: https://hostname:port/em/

-- in my case it is: https://192.168.8.1:5500/em/

-- for more info look at EM DB Express 12cR1

--------------------------------------------------------------------------------