Creating an Oracle 10g database from the
command line only
This article is the successor to Creating an Oracle 9i database on NT from the command line
only.
There are basically three ways to create an Oracle database:
• Using the Database Configuration Assistant (DBCA)
• With the SQL create database statement
• Through upgrading an existing database.
This article focuses on the second option. It can be completed on the command line only, that
is, without any GUI tool.
Also, the article is a bit biased towards Windows and its command prompt (cmd.exe: start-
>run->cmd).
Specifying the Instance's SID
There can be more than one Oracle instance on a single machine. In order to be able to
distinguish these instances, Oracle uses a SID (System Identifier) which is a string.
The SID can be set through the ORACLE_SID environment variable.
D:\oracle\product\10.1.0>set ORACLE_SID=ORA10
Creating an Oracle Service
On Windows, each instance requires a Windows service. This service must first be created with
oradim:
D:\oracle\product\10.1.0\Db_1>oradim -new -sid %ORACLE_SID%
-intpwd MYSECRETPASSWORD -startmode M
Instance created.
It can be verified that a Windows service was created by typing services.msc into the
console. A service named OracleServiceORA10 (ORA10 = %ORACLE_SID%) will be found.
Also, the startup type is manual as was requested by -startmode M.
Oracle also created a password file under %ORACLE_HOME%\database:
D:\oracle\product\10.1.0\Db_1>dir database
Volume in drive D has no label.
Volume Serial Number is C4E9-469A
Directory of D:\oracle\product\10.1.0\Db_1\database
03/05/2005 03:54 PM <DIR> .
03/05/2005 03:54 PM <DIR> ..
03/05/2005 11:16 AM <DIR> archive
03/05/2005 11:13 AM 31,744 oradba.exe
http://www.adp-gmbh.ch/ora/admin/creatingdbmanually.html
03/05/2005 03:54 PM 2,560 PWDORA10.ORA
As can be seen, the SID is in the password file's name.
Creating the initialization parameter file
When an Oracle instance starts up, it requires either an initialization paramter file (init.ora) or
an SPFILE.
SPFILES have binary content and must be created from init.ora files. Therefore, the init.ora file
(which is an ordianary text file) is created first.
Here's a minimal init.ora (under $ORACLE_HOME/dbs if it is Unix, or
%ORACLE_HOME%\database, if it is windows) just to demonstrate how the control files
are found. Of course, you will add more init params into the init.ora file.
D:\oracle\product\10.1.0\Db_1\database\initORA10.ora
control_files = (d:\oracle\databases\ora10\control01.ora,
d:\oracle\databases\ora10\control02.ora,
d:\oracle\databases\ora10\control03.ora)
undo_management = auto
db_name = ora10
db_block_size = 8192
The undo_management parameter is necessary if we want to use automatic undo
management.
Although the above seems to be the bare required minimum, you probably also want do define
background_dump_dest, core_dump_dest and user_dump_dest.
Starting the instance
Now, that we have created an Oracle service and the init.ora file, we're ready to start the
instance:
D:\oracle\product\10.1.0\Db_1>sqlplus /nolog
SQL*Plus: Release 10.1.0.2.0 - Production on Sat Mar 5 16:05:15
2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
SQL> connect sys/MYSECRETPASSWORD as sysdba
Connected to an idle instance.
http://www.adp-gmbh.ch/ora/admin/creatingdbmanually.html
SQL*Plus tells us that we're connected to an idle instance. That means that it is not yet
started. So, let's start the instance. We have to start the instance without mounting
(nomount) as there is no database we could mount at the moment.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 113246208 bytes
Fixed Size 787708 bytes
Variable Size 61864708 bytes
Database Buffers 50331648 bytes
Redo Buffers 262144 bytes
This created the SGA (System Global Area) and the background processes.
Creating the database
We're now ready to finally create the database:
SQL>create database ora10
logfile group 1 ('D:\oracle\databases\ora10\redo1.log') size
10M,
group 2 ('D:\oracle\databases\ora10\redo2.log') size
10M,
group 3 ('D:\oracle\databases\ora10\redo3.log') size
10M
character set WE8ISO8859P1
national character set utf8
datafile 'D:\oracle\databases\ora10\system.dbf'
size 50M
autoextend on
next 10M maxsize unlimited
extent management local
sysaux datafile 'D:\oracle\databases\ora10\sysaux.dbf'
size 10M
autoextend on
http://www.adp-gmbh.ch/ora/admin/creatingdbmanually.html
next 10M
maxsize unlimited
undo tablespace undo
datafile 'D:\oracle\databases\ora10\undo.dbf'
size 10M
default temporary tablespace temp
tempfile 'D:\oracle\databases\ora10\temp.dbf'
size 10M;
If something goes wrong with the creation, Oracle will write an error into the alert.log. The
alert log is normaly found in the directory that is specified with the background_dump_dest. If
this parameter was not specified (as is the case in our minimal init.ora), the alert.log will be
written into %ORACLE_HOME%/RDMBS/trace.
If an ORA-01031: insufficient privileges is returned, that means most likely, that the current
user is not in the dba group (on unix), or the ORA_DBA (windows).
If the init.ora file is not at its default location or has not been found with the pfile attribute, an
ORA-01078: failure in processing system parameters and an LRM-00109: could not open
parameter file '/appl/oracle/product/9.2.0.2/dbs/initadpdb.ora' error is issued.
The create database command also executes a file whose name is determined by the (hidden)
init parameter _init_sql_file (which seems to default to sql.bsq)
After the creation of the database, it can be mounted and opened for use.
Completing the DB creation
In order to complete the db creation, the following scripts must be run as sys:
• %ORACLE_HOME%/rdbms/admin/catalog.sql
• %ORACLE_HOME%/rdbms/admin/catproc.sql and
SQL*Plus provides a shortcut to refer to the ORACLE_HOME directory: the question mark (?).
Therefore, these scripts can be called like so:
SQL> @?/rdbms/admin/catalog.sql
SQL> @?/rdbms/admin/catproc.sql
catalog.sql creates the data dictionary. catproc.sql creates all structures required for PL/SQL.
catalog.sql calls, for example, catexp.sql which is a requirement for exp, or dbmsstdx.sql
which is a requirement to create triggers.
The user system might also want to run ?/sqlplus/admin/pupbld.sql. pupbld.sql creates a
table that allows to block someone from using sql plus.
SQL> connect system/manager
SQL> @?/sqlplus/admin/pupbld
Of course, tablespaces, users, tables and so on must be created according to the use of the
database.
http://www.adp-gmbh.ch/ora/admin/creatingdbmanually.html
Setting up database to using java
Also call @?/javavm/install/initjvm if you want to enable the JServer option(?).
Oracle managed files
Refer also to DB_CREATE_ONLINE_LOG_DEST_n and DB_CREATE_FILE_DEST for Oracle-
managed files.
Errors while creating database
If there is an error while the database is created, such as a ORA-01092: ORACLE instance
terminated. Disconnection forced, the alert log should be consulted. This file most probably
contains a more desriptive error message.
If the error occurs at a very early stage, there won't be an alert.log. In this case, the error will
most probably be found in a trace file in udump directory.
http://www.adp-gmbh.ch/ora/admin/creatingdbmanually.html