OracleDBA系列之--(二)创建数据库
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
数据库在这个时候已经创建完成,可以正常使用了。但是一般数据库都是存在在远程服务器端的,然后通过客户端连接的。那么此时只创建数据库还不够,还需要配置监听能够使服务端让远程客户端连接,这正是下一章的内容:配置和实现监听。
推荐阅读
-
OracleDBA系列之--(二)创建数据库
-
Asp.Net 网站优化系列之数据库优化分字诀上 分库
-
Asp.Net网站优化系列之数据库的优化措施与索引优化方法
-
Asp.Net 网站优化系列之数据库优化措施 使用主从库(全)
-
Asp.Net 网站优化系列之数据库优化 分字诀 分表(纵向拆分,横向分区)
-
Asp.Net网站优化系列之数据库的优化措施与索引优化方法
-
Asp.Net 网站优化系列之数据库优化措施 使用主从库(全)
-
Asp.Net 网站优化系列之数据库优化 分字诀 分表(纵向拆分,横向分区)
-
Asp.Net 网站优化系列之数据库优化分字诀上 分库
-
技术共享之数据库框架GreenDao的使用以及二次封装