实验环境:
系统:2核8G内存60G硬盘,centos7.4;
优化操作:已经关闭了防火墙、selinux,/etc/hosts文件中以添加"172.16.1.92 slave-node2"的主机解析记录;
设置umask文件权限:[root@slave-node2 ~]# echo 'umask 022' >>/etc/profile && source /etc/profile
yum的base和epel源仓库已经更改为阿里云的yum仓库;
1.1、oracle软件包下载:
1、下载地址:
https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
2、软件包选择:
#官方手册:https://docs.oracle.com/cd/E11882_01/install.112/e24326/toc.htm#BHCJCBAF
3、使用xftp上传软件包:
[root@slave-node2 ~]# mkdir -p /tools/
1.2、创建oracle用户和用户组:
[root@slave-node2 ~]# groupadd oinstall
[root@slave-node2 ~]# groupadd dba
[root@slave-node2 ~]# useradd -g oinstall -G dba oracle
[root@slave-node2 ~]# id oracle
uid=1000(oracle) gid=1000(oinstall) 组=1000(oinstall),1001(dba)
1.3、创建oracle工作目录:
[root@slave-node2 tools]# cd /tools/
[root@slave-node2 tools]# unzip linux.x64_11gR2_database_1of2.zip 1>/dev/null
[root@slave-node2 tools]# unzip linux.x64_11gR2_database_2of2.zip 1>/dev/null
[root@slave-node2 tools]# cd ~
[root@slave-node2 ~]# ls -ld /tools/database/ #解压包目录;
drwxr-xr-x 8 root root 128 8月 21 2009 /tools/database/
[root@slave-node2 ~]# mkdir /application/{Oracle11gR2,oraInventory} -p
#Oracle11gR2是oracle的安装目录,oraInventory是oracle的配置文件目录;
[root@slave-node2 ~]# ln -s /application/Oracle11gR2/ /application/oracle
[root@slave-node2 ~]# chown -R oracle:oinstall /tools/database/
[root@slave-node2 ~]# chown -R oracle:oinstall /application/Oracle11gR2/
[root@slave-node2 ~]# chown -R oracle:oinstall /application/oraInventory/
#上面三行是授权;
1.4、修改系统标识:
oracle默认是不支持CentOS系统安装的,所以要修改OS标识文件;
[root@slave-node2 ~]# cp -a /etc/redhat-release{,.ori}
#备份文件;
[root@slave-node2 ~]# vim /etc/redhat-release
redhat-7
1.5、安装oracle所需的依赖包:
[root@slave-node2 ~]# yum -y install binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33*i686 \
compat-libstdc++-33*.devel compat-libstdc++-33 compat-libstdc++-33*.devel gcc gcc-c++ glibc glibc*.i686 \
glibc-devel glibc-devel*.i686 ksh libaio libaio*.i686 libaio-devel libaio-devel*.devel libgcc libgcc*.i686 libstdc++ \
libstdc++*.i686 libstdc++-devel libstdc++-devel*.devel libXi libXi*.i686 libXtst libXtst*.i686 make sysstat unixODBC \
unixODBC*.i686 unixODBC-devel unixODBC-devel*.i686
1.6、修改内核参数:
[root@slave-node2 ~]# vim /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
fs.file-max = 6815744
#设置一个进程可以打开的最大打开文件数
fs.aio-max-nr = 1048576
#限制未完成的并发请求,避免I/O系统故障
kernel.shmall = 2097152
##########################################################################
#共享内存分页总量,应不小于shmmax/page_size缺省值就是2097152,8G(2097152*4k/1024/1024)
#推荐设置为物理内存大小除以分页大小,分页默认大小是4k;
##########################################################################
kernel.shmmax = 4294967296
#最大共享内存段大小,不小于物理内存的一半(推荐70%),且大于数据库实例的SGA,单位是字节
kernel.shmmni = 4096
#设置系统级最大共享内存段数量
kernel.sem = 250 32000 100 128
#设置的信号量
net.ipv4.ip_local_port_range = 9000 65500
#可使用的IPv4端口范围
net.core.rmem_default = 262144
#默认接收缓冲区大小
net.core.rmem_max= 4194304
#接收缓冲区最大值
net.core.wmem_default= 262144
#默认的发送缓冲区大小
net.core.wmem_max= 1048576
#发送缓冲区最大值
[root@slave-node2 ~]# sysctl -p
#使内核参数生效;
1.7、对oracle用户设置限制:
[root@slave-node2 ~]# vim /etc/security/limits.conf
#@student - maxlogins 4
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
# End of file
1.8、配置oracle环境变量:
[root@slave-node2 ~]# vim /home/oracle/.bash_profile
export ORACLE_BASE=/application/oracle
#oracl安装目录
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
#oracle路径
export ORACLE_SID=orcl
#oracle启动数据库实例名
export ORACLE_TERM=xterm
#xterm窗口模式安装
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
#添加系统环境变量
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
#添加系统环境变量
export LANG=en_US.UTF-8
#防止安装过程出现乱码
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
#设置Oracle客户端字符集,必须和oracle安装时的字符集保持一致
[root@slave-node2 ~]# source /home/oracle/.bash_profile
#使环境变量生效;
1.9、安装oracle:
1、使用Xbrower中的Xstart连接linux:
#具体的关于Xstart的相关配置,请参考“linux架构_02-1(1、如何通过xstart远程连接桌面)”;
2、安装:
(1)切换用户:
[root@slave-node2 ~]# su - oracle
上一次登录:四 8月 1 01:43:49 CST 2019pts/2 上
(2)设置DISPLAY环境变量:
[oracle@slave-node2 ~]$ export DISPLAY=172.16.1.254:0.0
[oracle@slave-node2 ~]$ echo $DISPLAY
172.16.1.254:0.0
(3)启动oracle安装程序:
[oracle@slave-node2 ~]$ cd /tools/database/
[oracle@slave-node2 database]$ ./runInstaller
#提示:启动oracle安装程序后会在windows中跳出oracle安装图形界面;
(4)oracle图形界面安装步骤:
1)
2)
3)
4)
5)
6)
7)
8)
9)
10)
11)
12)
13)
14)
15)
16)
17)
18)
19)
20)
#检查时出现swap分区不足的解决办法如下:
[root@slave-node2 ~]# dd if=/dev/zero of=/root/swap bs=1024 count=8500000
#创建一个8G的swap分区;
[root@slave-node2 ~]# mkswap /root/swap
#格式化swap分区;
[root@slave-node2 ~]# chmod 0600 /root/swap
#赋权swap分区;
[root@slave-node2 ~]# swapon /root/swap
#挂载swap分区;
[root@slave-node2 ~]# free -m | grep Swap
Swap: 10348 0 10348
#查看现在swap分区量;
[root@slave-node2 ~]# chmod +x /etc/rc.d/rc.local
[root@slave-node2 ~]# echo 'swapon /root/swap' >>/etc/rc.local
#将swap分区挂载加入到开机自启动;
#重新检测
21)
22)
#当安装到68%时会出现上图所示报错,解决办法如下:
[root@slave-node2 ~]# vim /application/oracle/product/11.2.0/db_1/ctx/lib/ins_ctx.mk +11
-static/usr/lib64/libc.a
#修改第11行的参数;
#再点击"Retry"时会出现如下报错;
#解决上图报错的方法如下:
[root@slave-node2 ~]# vim /application/oracle/product/11.2.0/db_1/sysman/lib/ins_emagent.mk +190
$(MK_EMAGENT_NMECTL) -lnnz11
#修改第190行的参数;
#再点击"Retry"后安装正常进行;
23)安装完成:
24)执行脚本:
[root@slave-node2 ~]# sh /application/oraInventory/orainstRoot.sh
[root@slave-node2 ~]# sh /application/oracle/product/11.2.0/db_1/root.sh
………………………………………………………………………………………………………………………………
Enter the full pathname of the local bin directory: [/usr/local/bin]: #此处直接回车;
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
………………………………………………………………………………………………………………………………
#到此处oracle安装成功,关闭oracle安装界面,以上创建了一个'orcl'全局数据库和其下面的'orcl'实例;
[root@slave-node2 ~]# netstat -tunlp | grep 1521
tcp6 0 0 :::1521 :::* LISTEN 1241/tnslsnr
1.10、启动数据库:
1、登录到服务器,切换到oracle用户;
[root@slave-node2 ~]# su - oracle
上一次登录:四 8月 1 14:15:24 CST 2019pts/3 上
[oracle@slave-node2 ~]$
2、打开oracle的监听服务:
(1)开启服务:
[oracle@slave-node2 ~]$ lsnrctl start
(2)查看监听服务:
[oracle@slave-node2 ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 01-AUG-2019 16:11:45
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 01-AUG-2019 16:11:20
Uptime 0 days 0 hr. 0 min. 24 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /application/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File /application/oracle/diag/tnslsnr/slave-node2/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=slave-node2)(PORT=1521)))
The listener supports no services
The command completed successfully
3、启动oracle实例:
[oracle@slave-node2 ~]$ sqlplus system/123456 as sysdba
……………………………………………………………………………………
SQL> startup
ORACLE instance started.
Total System Global Area 3340451840 bytes
Fixed Size 2217952 bytes
Variable Size 1811941408 bytes
Database Buffers 1509949440 bytes
Redo Buffers 16343040 bytes
Database mounted.
Database opened.
SQL>
4、通过sqldeveloper连接oracle:
5、补充:如何关闭oracle数据库:
(1)关闭实例:
[oracle@slave-node2 ~]$ sqlplus system/123456 as sysdba
SQL> shutdown immediate;
(2)关闭监听:
[oracle@slave-node2 ~]$ lsnrctl stop
1.11、设置oracle开机自启动:
1、查看dbstart和dbshut命令:
[oracle@slave-node2 ~]$ dbstart
ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener
Usage: /application/oracle/product/11.2.0/db_1/bin/dbstart ORACLE_HOME
[oracle@slave-node2 ~]$ dbshut
ORACLE_HOME_LISTNER is not SET, unable to auto-stop Oracle Net Listener
Usage: /application/oracle/product/11.2.0/db_1/bin/dbshut ORACLE_HOME
#错误原因是dbstart和dbshut脚本文件中ORACLE_HOME_LISTNER设置有问题;
2、修改dbstart和dbshut脚本:
(1)修改dbstart脚本:
[oracle@slave-node2 ~]$ vim $ORACLE_HOME/bin/dbstart +80
ORACLE_HOME_LISTNER=$ORACLE_HOME
#修改第80行处如上:
(2)修改dbshut脚本:
[oracle@slave-node2 ~]$ vim $ORACLE_HOME/bin/dbshut +50
ORACLE_HOME_LISTNER=$ORACLE_HOME
#修改第50行处如上;
3、修改/etc/oratab文件开启oracle实例开机自启动功能:
[oracle@slave-node2 ~]$ vim /etc/oratab
orcl:/application/oracle/product/11.2.0/db_1:Y
#将N改为Y如上,格式为:"$ORACLE_SID:$ORACLE_HOME:<N|Y>"
4、自启动方法:
(1)登录到root用户:
[oracle@slave-node2 ~]$ su - root
Password:
Last login: Thu Aug 1 17:08:50 CST 2019 on pts/0
(2)方法一:将dbstart加入/etc/rc.local开机自启动文件中:
[root@slave-node2 ~]# chmod +x /etc/rc.d/rc.local
[root@slave-node2 ~]# echo 'su - oracle /application/oracle/product/11.2.0/db_1/bin/dbstart' >>/etc/rc.local
(3)方法二:创建oracle自启动脚本:
1)编写脚本:
[root@slave-node2 ~]# cat /etc/init.d/oracled
#!/bin/sh
#chkconfig: 2345 61 61
#description: Oracle 11g R2 AutoRun Servimces
#location: /etc/init.d/oracle
#Run-level Startup script for the Oracle Instance, Listener
#ORACLE_SID="orcl"
#AUTHOR:LIUCHANG
ORACLE_BASE="/application/oracle"
ORACLE_HOME="$ORACLE_BASE/product/11.2.0/db_1"
ORA_OWNR="oracle"
PORT=`netstat -tunlp | grep 1521 | awk -F '[ :]+' '{print $4}'`
[ $UID -eq 0 ] || {
echo "This Shell only root execute"
exit 1
}
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]; then
echo "Oracle startup: cannot start"
exit 1
fi
RETVAL=0
function check() {
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
echo -e "$1\033[1;32m Success! \033[0m"
else
echo -e "$1\033[1;31m Faild! \033[0m"
fi
}
function start() {
PORT=`netstat -tunlp | grep 1521 | awk -F '[ :]+' '{print $4}'`
if [ "$PORT" = "1521" ]; then
echo "Oracle already Start!"
else
su - $ORA_OWNR $ORACLE_HOME/bin/dbstart &>/dev/null
check "Oracle Start"
fi
}
function stop() {
PORT=`netstat -tunlp | grep 1521 | awk -F '[ :]+' '{print $4}'`
if [ "$PORT" = "1521" ]; then
su - $ORA_OWNR $ORACLE_HOME/bin/dbshut &>/dev/null
check "Oracle Stop"
else
echo "Oracle already Stop!"
fi
}
function status() {
PORT=`netstat -tunlp | grep 1521 | awk -F '[ :]+' '{print $4}'`
if [ "$PORT" = "1521" ]; then
echo "Oracle is Running!"
else
echo "Oracle is Stop!"
fi
}
function Usage() {
echo "Usage:$0{start|stop|status|reload|reload}"
exit 1
}
function main() {
if [ $# -eq 1 ]; then
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
reload|restart)
stop
sleep 30
start
;;
*)
Usage
esac
else
Usage
fi
}
main $*
2)将脚本加入到开机自启动:
[root@slave-node2 ~]# chmod u+x /etc/init.d/oracled
[root@slave-node2 ~]# chkconfig --add oracled
[root@slave-node2 ~]# chkconfig --list oracled
oracled 0:关 1:关 2:开 3:开 4:开 5:开 6:关
#在linux7版本上会报建议使用Systemctl命令的提示,忽略即可;
1.12、设置oracle监听:
oracle监听分为服务端和客户端两部分,服务端监听必须在安装oracle数据库的服务器上,而客户端网络服务可以配置在
任何一台能连接到oracle服务器的服务器上,也可以将两者都配置在oracle服务器上,本实验使用的是将两者都配置了oracle
服务器上;
上面的实验在建数据库"orcl"实例的时候已经创建好了服务端监听和客户端"orcl"数据库实例的网络
服务,这里我将其删除重新配置;
1、使用xstart登录到oracle用户:
[root@slave-node2 ~]# su - oracle
上一次登录:五 8月 2 23:17:46 CST 2019pts/2 上
[oracle@slave-node2 ~]$ export DISPLAY=172.16.1.254:0.0
[oracle@slave-node2 ~]$ netca
2、配置服务端监听:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
#当oracle监听配置完成后,在控制台会输出"Listener started successfully"的提示;
3、配置客户端网络服务:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
#控制端输出配置成功信息如下:
(12)
1.13、添加新的oracle实例:
1、使用xstart登录到oracle用户:
[root@slave-node2 ~]# su - oracle
上一次登录:五 8月 2 23:20:34 CST 2019pts/2 上
[oracle@slave-node2 ~]$ export DISPLAY=172.16.1.254:0.0
[oracle@slave-node2 ~]$ dbtca
2、添加实例:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
使用自动内存管理,当点击Sizing设置时会报如下错误,原因是默认的/dev/shm空间不足;
解决办法如下:
[oracle@slave-node2 ~]$ su - root
Password:
Last login: Sat Aug 3 00:11:21 CST 2019 on pts/2
[root@slave-node2 ~]# df -h /dev/shm
文件系统 容量 已用 可用 已用% 挂载点
tmpfs 3.9G 1.9G 2.1G 49% /dev/shm
#/dev/shm使用的是内存的空间,默认大小是物理内存的一半,最大不超过物理内存的80%,可以看到/dev/shm可用
#大小只有2.1G(2068M),而警告的要求是3185M,所以(8*0.8-1.9)*1024M>3185M,我这里将tmpfs设置为6G;
[root@slave-node2 ~]# vim /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=6G 0 0
#在/etc/fstab配置文件中添加如上配置;
[root@slave-node2 ~]# mount -o remount /dev/shm
#将/dev/shm重新挂载;
[root@slave-node2 ~]# df -h /dev/shm
文件系统 容量 已用 可用 已用% 挂载点
tmpfs 6.0G 1.9G 4.2G 32% /dev/shm
#可以看到/dev/shm的空间已经增大了;
点击"ok"继续配置;
(11)
(12)
(13)
(14)
(15)
(16)安装完成:
3、提示:
"oa"数据库实例安装完成后使用的是服务端默认监听(1521),会根据默认服务器监听自动配置"oa"数
据库实例的客户端网络服务,如果想使用新的端口号访问新建的"oa"数据库实例,可以添加新的服务端
监听,然后删除客户端网络服务重新配置;
4、修改数据库实例开机自启动"/etc/oratab"文件如下,将"oa"数据库实例开机自启服务打开:
[root@slave-node2 ~]# vim /etc/oratab
oa:/application/oracle/product/11.2.0/db_1:Y
到此,oracle数据库多实例操作就完成了;
#oracle是通过端口号来区分不同的数据库实例的,而oracle是通过不同的数据库实例名来区分不同的数据库实例的;