@TOC
前言
如何不使用 dbca,手动一步步快速创建数据库实例。
一、环境准备
首先安装好 Oracle 软件,Linux 系统选择 redhat,环境信息如下:
| 主机版本 |
Oracle版本 |
主机内存 |
主机硬盘 |
IP地址 |
| rhel6.9 |
11.2.0.4 |
8G |
50G |
10.211.55.188 |
📢 注意: 只需要安装好 Oracle 软件即可,建库不使用 dbca 来创建。
二、创建数据库
手工创建数据库需要使用 Linux 操作系统中 vi 或 vim 文本编辑器编写相关配置文件。如果不熟悉 vi 命令的使用,可以在虚拟机图形控制台界面使用 gedit 命令来编辑文件。
1、初始化实例 ID
首先,通过远程连接工具连接到实训环境中:
本文演示需要创建的实例为:PROD3,配置当前环境的实例名:
1 2 3 4 5
| su - oracle
export ORACLE_SID=PROD3 echo $ORACLE_SID
|
确保当前环境的实例名为 PROD3。
2、创建密码文件
进入到 $ORACLE_HOME/dbs 目录下,使用 orapwd 查看命令帮助:
1 2
| cd $ORACLE_HOME/dbs orapwd
|
创建密码文件,管理密码为 oracle:
1
| orapwd file=orapwPROD3 password=oracle
|
一般通过操作系统认证登录数据库是不需要密码文件的,但是如果需要用户认证登录的话就需要创建密码文件。
3、编写初始化参数文件
创建一个初始化参数文件,以下 3 个参数是至少的:
1 2 3 4 5
| cat<<EOF>>$ORCLE_HOME/dbs/initPROD3.ora DB_NAME = PROD3 MEMORY_TARGET = 800M CONTROL_FILES = '/u01/app/oracle/oradata/PROD3/control01.dbf','/u01/app/oracle/oradata/PROD3/control2.dbf' EOF
|

📢 注意: 为方便起见,使用默认文件名 init[SID].ora 并将初始化参数文件存储在 Oracle 数据库默认位置 $ORCLE_HOME/dbs。
4、创建目录
为了顺利启动实例,需要创建参数文件中未创建的目录并授权:
1 2
| mkdir -p /u01/app/oracle/oradata/PROD3
|
📢 注意: 实际路径请根据实训环境自行修改。
5、创建 spfile 文件
为了方便启动实例后可以动态修改配置参数,强烈建议使用 spfile 启动数据库:
1 2
| sqlplus / as sysdba create spfile from pfile;
|
服务器参数文件创建后默认存放在 $ORCLE_HOME/dbs 目录下,也可指定位置进行创建。
6、启动实例至 nomount 状态
启动数据库实例到 nomount 状态,检查当前实例情况:
1 2
| startup nomount; select instance_name,status from v$instance;
|
7、编写建库脚本
创建数据库脚本语句可以参考官方文档:

复制官方文档中的建库语句进行修改:
1 2
| vi /home/oracle/createdb.sql
|
替换数据库名称、数据文件路径,为了快速替换,可以使用以下命令:
1 2 3 4 5 6 7 8 9
| :%s+mynewdb+PROD3
:%s+sys_password+oracle :%s+system_password+oracle
:%s+/u01/logs/my+/u01/app/oracle/oradata/PROD3
:%s+/u01/app/oracle/oradata/mynewdb+/u01/app/oracle/oradata/PROD3
|
修改完成后的脚本内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| CREATE DATABASE PROD3 USER SYS IDENTIFIED BY oracle USER SYSTEM IDENTIFIED BY oracle LOGFILE GROUP 1 ('/u01/app/oracle/oradata/PROD3/redo01a.log','/u01/app/oracle/oradata/PROD3/redo01b.log') SIZE 100M BLOCKSIZE 512, GROUP 2 ('/u01/app/oracle/oradata/PROD3/redo02a.log','/u01/app/oracle/oradata/PROD3/redo02b.log') SIZE 100M BLOCKSIZE 512, GROUP 3 ('/u01/app/oracle/oradata/PROD3/redo03a.log','/u01/app/oracle/oradata/PROD3/redo03b.log') SIZE 100M BLOCKSIZE 512 MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXLOGHISTORY 1 MAXDATAFILES 100 CHARACTER SET AL32UTF8 NATIONAL CHARACTER SET AL16UTF16 EXTENT MANAGEMENT LOCAL DATAFILE '/u01/app/oracle/oradata/PROD3/system01.dbf' SIZE 325M REUSE SYSAUX DATAFILE '/u01/app/oracle/oradata/PROD3/sysaux01.dbf' SIZE 325M REUSE DEFAULT TABLESPACE users DATAFILE '/u01/app/oracle/oradata/PROD3/users01.dbf' SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED DEFAULT TEMPORARY TABLESPACE tempts1 TEMPFILE '/u01/app/oracle/oradata/PROD3/temp01.dbf' SIZE 20M REUSE UNDO TABLESPACE undotbs DATAFILE '/u01/app/oracle/oradata/PROD3/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
|
8、执行建库脚本
由于是使用脚本执行,为了方便查看数据库建库过程,可以新开一个窗口用于查看实时进度:
1
| tailf /u01/app/oracle/diag/rdbms/prod3/PROD3/trace/alert_PROD3.log
|
执行建库脚本:
1 2
| sqlplus / as sysdba @/home/oracle/createdb.sql
|
建库脚本执行完成后,查看实例状态:
1
| select instance_name,status from v$instance;
|
9、运行脚本创建数据字典
运行构建数据字典视图、同义词和 PL/SQL 包以及支持 SQL*Plus 正常运行所需的脚本。

以下脚本需要在 SYSDBA 用户下运行:
1 2 3 4
| sqlplus / as sysdba @?/rdbms/admin/catalog.sql @?/rdbms/admin/catproc.sql @?/rdbms/admin/utlrp.sql
|
以下脚本需要在 SYSTEM 用户下运行:
1 2
| sqlplus system/oracle @?/sqlplus/admin/pupbld.sql
|
如果为了方便的话,可以将上述脚本写进脚本中一键执行:
1 2 3 4 5 6 7 8 9 10 11 12
| cat<<EOF>/home/oracle/createproc.sql conn sys/oracle @?/rdbms/admin/catalog.sql @?/rdbms/admin/catproc.sql @?/rdbms/admin/utlrp.sql conn system/oracle @?/sqlplus/admin/pupbld.sql EOF
sqlplus / as sysdba @/home/oracle/createproc.sql
|
脚本执行完后,PROD3 数据库实例即创建完成!
三、知识拓展
通常创建数据库都是使用 dbca 命令,如果使用手工创建数据库,直接使用 dbca 是无法识别到手工创建好的数据库,需要配置 /etc/oratab 文件:
1 2 3 4
| cat<<EOF>>/etc/oratab PROD3 :$ORACLE_HOME:N EOF
|
此时,再去使用 dbca 即可识别并管理手工创建的数据库实例。