OracleDBA系列之--(二)创建数据库

前一节传送门安装Oracle
数据库的创建也有两种方式:使用dbca(DatabaseConfigurationAssistant)和sqlplus两种方式;dbca也是图形化方式比较简单使用门槛较低,本文着重介绍dba常用sqlplus方式进行数据库创建。
数据库创建主要步骤:
一、配置OS环境变量
二、配置初始化文件
三、创建必要的目录
四、创建数据库
五、创建数据字典

一、配置OS环境变量

可以进行手动设置或使用脚本进行设置
1、手动设置,必须设置的几个变量如下

export ORACLE_HOME=/opt/app/oracle/product/12.2.0/db_1
export ORACLE_SID=orcl
export LD_LIBRARY_PATH=/usr/lib:$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH

要是这些变量永久生效需要登录到oracle用户在用户主目录下编辑.bash_profile文件,在文件末尾添加以上命令,使用source .bash_profile使配置生效
2、使用脚本配置环境变量,该配置方式适合服务器上存在多个数据库的情况便于管理,主要使用oratab及oraset脚本进行自动化设置。oraset依托oratab文件配置对应oracle环境变量;oratab文件一般存在与/etc目录下,文件格式为<oracle_sid>:<oracle_home_dir>:Y|N 其中Y|N表示是否跟随服务器启动而自动启动,如果/etc下没有该文件可以手动创建该文件,以以上格式进行编辑条目即可使用。
在这里插入图片描述
在这里插入图片描述
oraset脚本内容如下:

#!/bin/bash
# Sets Oracle environment variables.
# Setup: 1. Put oraset file in /etc(Linux), in /var/opt/oracle(Solaris)
#        2. Ensure /etc or /var/opt/oracle is in $PATH
# Usage: batch mode: . oraset <SID>
#        menu mode: . oraset
#=======================================================
if [ -f /etc/oratab ]; then
    OTAB=/etc/oratab
elif [ -f /var/opt/oracle/oratab ]; then
    OTAB=/var/opt/oracle/oratab
else
    echo 'oratab file not found.'
    exit
fi
#
if [ -z $1 ]; then
    SIDLIST=$(egrep -v '#|\*' ${OTAB} | cut -f1 -d:)
    # PS3 inmdicates the prompt to be used for the Bash select command.
    PS3='SID?'
    select sid in ${SIDLIST}; do
        if [ -n $sid ]; then
            HOLD_SID=$sid
            break;
        fi
    done
else
    if egrep -v '#|\*' ${OTAB} | grep -w "${1}:">/dev/null; then
        HOLD_SID=$1
    else
        echo "SID: $1 not found in $OTAB"
    fi
    shift
fi
#
ORACLE_SID=$HOLD_SID
export ORACLE_SID
export ORACLE_HOME=$(egrep -v '#|\*' ${OTAB} | grep -w $ORACLE_SID:|cut -f2 -d:)
export ORACLE_BASE=${ORACLE_HOME%%/product*}
export TMP=$ORACLE_BASE/../tmp
export TMPDIR=$TMP
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ADR_BASE=$ORACLE_BASE/diag
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib

oraset脚本也应位于/etc目录下,需要修改为oracle用户组所属chown oracle:oinstall /etc/oraset
由于oratab文件中可以包含多个数据库条目,因此在执行oraset时会有数据库的选项,对于单一数据库则可以在用户主目录下.bashrc文件中添加 ./etc/oraset orcl 就可以在服务启动时设置对应数据库的环境变量
在这里插入图片描述
在这里插入图片描述

二、配置初始化文件

初始化文件相对于oracle数据库的重要性不必多言,主要就是spfile和init.ora两种文件。oracle官方推荐使用spfile文件,但我个人倾向于使用init.ora,因为spfile是二进制文件,oracle官方必然使处于安全性考虑二进制文件不会随便被篡改,但是不便于查看及编辑,需要使用ALTER SYSTEM进行修改,对于DBA来说必然是不会随意更改初始化文件的,init.ora仅是一个文本文件方便查看,因此我推荐使用init.ora方式。
其次init.ora也是可以轻松转换为spfile的,使用CREATE SPFILE [='路径'] FROM PFILE [='路径']语句即可,一般在oracle安装后会在$ORACLE_HOME/dbs目录下会自动生成一个init.ora文件。默认情况下oracle会在$ORACLE_HOME/dbs目录下查找初始化文件。
需要注意oracle启动时查找初始化文件的顺序为spfile<SID>.ora、spfile.ora、init<SID>.ora,因此文件名一定不能写错,否则将无法启动数据库。同时如果存在多个初始化文件情况下,如果仅修改了init.ora文件,根据启动时初始化文件的优先级将不会加载init.ora文件,这时你修改的配置将不会生效。
我的一个initorcl.ora配置如下:

db_name=orcl
db_block_size=8192
memory_target=1G
memory_max_target=1G
processes=300
control_files=(/opt/app/oracle/diag/controlfile/control01.ctl,/home/oracle/controfile/control02.ctl)
job_queue_processes=10
open_cursors=500
fast_start_mttr_target=500
undo_management=AUTO
undo_tablespace=UNDOTBS1
remote_login_passwordfile=EXCLUSIVE

部分参数推荐设置:对于11g及更高版本推荐设置memory_target和memory_max_target;对于10g则应设置sga_target、sga_target_max、 pga_aggregate_target、workarea_size_policy
强烈建议修改open_cursors,该参数默认值为50几乎永远是不够用的,特别是对于OLTP数据库需要更高的配置

三、创建必要的目录

在初始化文件中control_file目录必须提前创建完成

mkdir -p /opt/app/oracle/diag/controlfile
mkdir -p /home/oracle/controfile

控制文件建议分别放在不同的磁盘下,有效起到灾备恢复的作用。我这里由于用的本地数据库因此放在了同一磁盘下
在创建数据库时还需要有确定的数据库位置和重做日志目录

mkdir -p /opt/app/oracle/redo
mkdir -p /home/oracle/redo

重做日志同样建议放在不同磁盘下

mkdir -p /home/oracle/tbsfiles/systbsfiles
mkdir -p /home/oracle/tbsfiles/usertbsfiles

四、创建数据库

sqlplus / as sysdba 连接到空闲数据库
在这里插入图片描述

SQL> startup nomount

启动到nomount模式,此时会根据初始化文件启动数据库实例,分配相应的内存
在这里插入图片描述
创建数据库语句如下:

CREATE DATABASE orcl 
    MAXLOGFILES 16 
    MAXLOGMEMBERS 4 
    MAXDATAFILES 1024 
    MAXINSTANCES 1 
    MAXLOGHISTORY 680 
    CHARACTER SET AL32UTF8 
DATAFILE 
'/home/oracle/tbsfiles/systbsfiles/system01.dbf'
    SIZE 500M REUSE 
    EXTENT MANAGEMENT LOCAL
UNDO TABLESPACE undotbs1 DATAFILE 
'/home/oracle/tbsfiles/systbsfiles/undotbs01.dbf'
    SIZE 800M
SYSAUX DATAFILE 
'/home/oracle/tbsfiles/systbsfiles/sysaux01.dbf'
    SIZE 500M
DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE
'/home/oracle/tbsfiles/systbsfiles/temp01.dbf'
    SIZE 500M
DEFAULT TABLESPACE USERS DATAFILE
'/home/oracle/tbsfiles/systbsfiles/users01.dbf'
    SIZE 500M
LOGFILE GROUP 1
	 ('/opt/app/oracle/redo/redo01a.rdo',
	  '/home/oracle/redo/redo01b.rdo') SIZE 50M,
	 GROUP 2
	 ('/opt/app/oracle/redo/redo02a.rdo',
	  '/home/oracle/redo/redo02b.rdo') SIZE 50M,
	GROUP 3
	 ('/opt/app/oracle/redo/redo03a.rdo',
	  '/home/oracle/redo/redo03b.rdo') SIZE 50M 
USER sys IDENTIFIED BY system 
USER system IDENTIFIED BY system;

以上语句附带有文字格式,如果直接复制执行可能会有问题,建议写成sql脚本进行引用执行,脚本如下:

CREATE DATABASE orcl MAXLOGFILES 16 MAXLOGMEMBERS 4 MAXDATAFILES 1024 MAXINSTANCES 1 MAXLOGHISTORY 680 CHARACTER SET AL32UTF8 DATAFILE '/home/oracle/tbsfiles/systbsfiles/system01.dbf'SIZE 500M REUSE  EXTENT MANAGEMENT LOCAL UNDO TABLESPACE undotbs1 DATAFILE  '/home/oracle/tbsfiles/systbsfiles/undotbs01.dbf' SIZE 800M SYSAUX DATAFILE  '/home/oracle/tbsfiles/systbsfiles/sysaux01.dbf' SIZE 500M DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/home/oracle/tbsfiles/systbsfiles/temp01.dbf' SIZE 500M DEFAULT TABLESPACE USERS DATAFILE '/home/oracle/tbsfiles/systbsfiles/users01.dbf' SIZE 500M LOGFILE GROUP 1 ('/opt/app/oracle/redo/redo01a.rdo','/home/oracle/redo/redo01b.rdo') SIZE 50M,GROUP 2 ('/opt/app/oracle/redo/redo02a.rdo','/home/oracle/redo/redo02b.rdo') SIZE 50M,GROUP 3 ('/opt/app/oracle/redo/redo03a.rdo', '/home/oracle/redo/redo03b.rdo') SIZE 50M USER sys IDENTIFIED BY system USER system IDENTIFIED BY system;

执行成功后如下:
在这里插入图片描述
部分参数说明:
system表空间建议使用本地管理,这样可以强制数据库中其他表空间都在本地管理;
reuse参数应谨慎使用,该参数会覆盖对应路径下已经存在的文件,不论那些文件是否正在使用;
创建sys及system用户目的是为了修改这两个用户的默认密码,sys默认密码是change_on_install,system默认密码为manager
重做日志后缀名命名为rdo是为了与普通log区别开,避免误删,使用任何后缀名都是可以的。

五、创建数据字典

1、创建完成后数据库还不能用,需要对数据库进行实例化数据目录及数据字典,需要运行两个脚本。必须使用sys用户去执行这两个脚本。
catalog.sql是用来创建数据库的数据字典文件的,如果不执行则无法使用哪怕是select * from这样的语句,因为不识别关键字;
catproc.sql是用来创建数据库的基本过程和包的,如果不执行则无法使用哪怕是substr()这样的函数。
在执行以上两个脚本之前可以先创建一个日志以便在执行出错时便于查看错误信息

sqlplus / as sysdba
spool create_dd.log
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql

这两个脚本执行时间较长,需要耐心等待。
在这里插入图片描述
出现上图提示时代表catproc.sql脚本已经执行完成。
在生成的日志中查看会发现较多的ORA错误,不必担心,这是由于脚本要考虑到多次执行的情况下在进行create前先进行了drop操作,drop不存在的对象时才会报错,可以忽略。
在这里插入图片描述
如果在切换system用户时出现以上错误可能是由于在执行过程中有中断导致的,重新再执行一次以上两个脚本即可
2、创建完成后切换为system用户创建PRODUCT_USER_PROFILE表,该表是对数据库用户的权限管理表,如果不创建该表在使用sqlplus进行连接时会出现Error accessing PRODUCT_USER_PROFILE的警告,但不影响使用,如果不想看到这些警告信息则可以执行pupbld脚本来避免这些警告:

@?/rdbms/admin/pupbld

在这里插入图片描述
数据库在这个时候已经创建完成,可以正常使用了。但是一般数据库都是存在在远程服务器端的,然后通过客户端连接的。那么此时只创建数据库还不够,还需要配置监听能够使服务端让远程客户端连接,这正是下一章的内容:配置和实现监听

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值