@TOC

前言

如何不使用 dbca,手动一步步快速创建数据库实例。

一、环境准备

首先安装好 Oracle 软件,Linux 系统选择 redhat,环境信息如下:

主机版本 Oracle版本 主机内存 主机硬盘 IP地址
rhel6.9 11.2.0.4 8G 50G 10.211.55.188

📢 注意: 只需要安装好 Oracle 软件即可,建库不使用 dbca 来创建。

二、创建数据库

手工创建数据库需要使用 Linux 操作系统中 vivim 文本编辑器编写相关配置文件。如果不熟悉 vi 命令的使用,可以在虚拟机图形控制台界面使用 gedit 命令来编辑文件。

1、初始化实例 ID

首先,通过远程连接工具连接到实训环境中:

1
ssh root@10.211.55.188

本文演示需要创建的实例为:PROD3,配置当前环境的实例名:

1
2
3
4
5
## 切换到 oracle 用户下
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
## root 用户下创建
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
## 创建一个 createdb.sql 脚本
vi /home/oracle/createdb.sql

替换数据库名称、数据文件路径,为了快速替换,可以使用以下命令:

1
2
3
4
5
6
7
8
9
## 替换数据库名称
:%s+mynewdb+PROD3
## 修改 sys/system 用户密码
:%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
## oracle 用户下修改
cat<<EOF>>/etc/oratab
PROD3 :$ORACLE_HOME:N
EOF

此时,再去使用 dbca 即可识别并管理手工创建的数据库实例。