Oracle 11g R2 数据库安装硬件配置要求:
最小内存 1 GB of RAM
虚拟内存容量,这个oracle也有要求,不用担心此时的swap分区不够oracle的要求 。虚拟内存swap如何增加容量,后面将会讲到
Available RAM |
Swap Space Required |
Between 1 GB and 2 GB |
1.5 times the size of RAM |
Between 2 GB and 16 GB |
Equal to the size of RAM |
More than 16 GB |
16 GB |
硬盘空间要求
数据库软件硬盘空间需求:
Installation Type |
Requirement for Software Files (GB) |
Enterprise Edition |
3.95 |
Standard Edition |
3.88 |
数据文件硬盘空间需求:
Installation Type |
Requirement for Data Files (GB) |
Enterprise Edition |
1.7 |
Standard Edition |
1.5 |
Oracle 11g下载地址:
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
Oracle 11g 测试机系统及环境:
虚拟机:VMware Workstation Pro 12
操作系统: CentOS 6.5
数据库版本:Oracle11G R2
系统内存:4G
硬盘:200G 说明:如果操作系统为Redhat,CentOS,建议操作系统版本使用rhel 5.x ,centos 5.x,因为在后续安装oracle 11g解决依赖包关系的时候,很多依赖包都在5.x的安装包里
oracle 11g R1 使用5.4即可,Oracle 11g R2 具体推荐的操作系统版本本人没测试过,操作系统版本大致在5.4~5.8,有兴趣的小伙伴也可以试试。不过使用6.x也不影响oracle
安装使用,但在安装时解决包依赖关系比较麻烦,有的不好找,当然你可以忽略掉,不是硬性要求。但如果生产环境想发挥出oracle出色的性能,建议最好解决掉包依赖关系。
oracle 11g R2 ==> rhel 5.5 (亲测)
oracle 11g R1 ==> reel 5.4
Oracle安装步骤:
关闭Selinux
2 修改主机名,并添加主机名与IP对应记录
3 安装依赖包
4 创建用户和组
5 修改内核参数
6 修改系统资源限制
7 创建安装目录及设置权限
8 设置oracle环境变量
9 安装
10 提供开机启动脚本
11 oracle防火墙策略设定(iptables)
一. 关闭Selinux
shell ~]#sed -i "s/^SELINUX=.*/SELINUX=permissive/" /etc/selinux/config
shell ~]#setenforce 0 查看当前Selinux策略
shell ~]#getenforce
可以看到Selinux已经被禁用,如果是本次修改,需要重启操作系统
修改主机名,并添加主机名与IP对应记录
二. 修改主机名
shell ~]#sed -i -r 's/^(HOSTNAME=).*/\1oracle.dongpi.com/g' /etc/sysconfig/network # 重启操作系统后生效
shell ~]#echo "oracle.dongpi.com" > /proc/sys/kernel/hostname # 即时生效
查看主机名
shell ~]# cat /proc/sys/kernel/hostname
shell ~]# hostname
shell ~]# echo $HOSTNAME ### 重新登录一边shell
之前安装oracle 11g R2主机名配置要求
添加主机名与IP对应记录
shell ~]#echo -e "`ifconfig eth0 | awk '/addr:[0-9]/{print $2}'| cut -d: -f2` \toracle.dongpi.com" >> /etc/hosts
查看解析结果
shell ~]#ping `hostname`
三. 安装依赖包:
之前安装oracle 11g R2 需要解决的依赖包关系截图,有个大概了解,解决依赖关系之前最好挂载上centos 5.x的镜像和epel源,省得去百度下载,不过每个人
的操作系统环境不一样,有些依赖包解决了,有些没解决,oracle安装界面有个重新检测按钮,如果有的包关系没解决,你可以安装检测失败的包,然后在点那个
重新检测按钮。此处只是告诉小伙伴们大概所依赖的软件包,不需要你再一个一个查然后再安装,如果所依赖的软件包提示有两个一模一样的名字,主要是对应
两种cpu架构平台(32位和64位)这两种包都需要安装
shell ~]#yum groupinstall "Development Tools"
shell ~]#yum install libaio glibc compat-libstdc++-33 elfutils-libelf-devel gcc-c++ libaio-devel libgcc libstdc++ libstdc++-devel -y
shell ~]#yum install unixODBC unixODBC-devel pdksh sysstat -y shell ~]#wget http://mirror.centos.org/centos/5/os/x86_64/CentOS/pdksh-5.2.14-37.el5_8.1.x86_64.rpm
shell ~]#yum localinstall pdksh-5.2.14-37.el5_8.1.x86_64.rpm 说明:之前安装oracle 11g R2没解决的依赖包关系,需要注意的是最好把yum的update功能关闭掉,有可能你在安装其他包的时候又破坏了oracle依赖的包的版本要求
推荐几个网址,小伙伴们可以在上面搜一下需要的rpm包
1. http://rpm.pbone.net/
2. https://pkgs.org/
四. 创建用户和组(oracle要求指定的用户和组名)
shell ~]#groupadd oinstall
shell ~]#groupadd dba
shell ~]#useradd -g oinstall -G dba -d /home/oracle oracle
五. 修改内核参数:
具体的内核参数是什么样的值,这里先给一个要修改的内核参数列表,值的最终确定可以通过安装时检测获取,如果相应的内核参数检测失败,下面
有解释:包括期望值和当前值,只要修改相应的内核参数为oracle所期望的值即可,下面这里只是个参考
[root@Test_ELK ~]# cat << EOF > oracle.kernel.list
> net.ipv4.ip_local_port_range=
> fs.file-max=
> kernel.shmall=
> kernel.shmmax=
> kernel.shmmni=
> kernel.sem=
> net.core.rmem_default=
> net.core.wmem_default=
> net.core.rmem_max=
> net.core.wmem_max=
> fs.aio-max-nr=
> EOF
到时候根据检测结果修改为oracle期望的值,然后使用for循环和sed命令追加到/etc/sysctl.conf 文件中
内核参数获取
shell ~]# sysctl -a | grep "xxx"
修改完要想即时生效需要使内核重读此配置文件,然后让oracle重新检测,后面将会看到,现在不用着急配置
shell ~]# sysctl -p ### 通知内核重读配置文件
六. 修改系统资源限制:
文件描述符修改
[root@Test_ELK ~]# cat << EOF >> /etc/security/limits.conf
> oracle soft nproc 2047
> oracle hard nproc 16384
> oracle soft nofile 1024
> oracle hard nofile 65536
> EOF pam认证修改
shell ~]#echo "# pam_limits.so" >> /etc/pam.d/login
shell ~]#echo "session required pam_limits.so" >> /etc/pam.d/login
七. 创建安装目录及设置权限
建议:oracle的数据文件目录和安装目录分开
oracle的数据文件最好存储在可靠的物理设备上(可以使用几块磁盘组成raid10 或者raid 5),最起码是一个单独的分区。
此次安装仅作为实验演示,所以使用一个分区上的目录来创建oracle的工作目录
查看当前分区容量,只要磁盘剩余空间符合oracle的要求即可,我一般喜欢安装大的软件到/opt下
shell ~]#df -Ph
可以看到/dev/sd3 即/opt才使用了不到400兆,下面开始创建oracle所需要的几个目录
shell ~]# mkdir /opt/oracle/{app,oradata} -pv
shell ~]# chmod 755 /opt/oracle/ /opt/oracle/app
shell ~]# chown -R oracle.oinstall /opt/oracle
八. 设置oracle环境变量:
shell ~]#su - oracle ### 必须使用oracle用户登录
[root@oracle ~]# echo '''
ORACLE_BASE=/opt/oracle/app
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
ORACLE_OWNER=oracle
ORACLE_SID=orcl
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
LANG="zh_CN.UTF-8"
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH LANG PATH
''' >> ~/.bash_profile
shell ~]#source ~/.bash_profile
注意此处:最好使用vim修改,因为你的oracle环境PATH有可能有其他的值
九. 准备工作都做好了,开始安装
说明:oracle安装需要在图形化界面完成,所以如果你的操作系统是最小化安装,很悲剧你不能通过命令行的模式去完成,这是比较恶心的地方
解决办法:安装图形化组件和vnc服务,然后通过vnc客户端进行oracle的安装
CentOS上VNC服务的安装配置请参考 http://www.ha97.com/4634.html 此处不做演示,非常简单
shell ~]#mkdir /opt/packages
shell ~]#unzip linux.x64_11gR2_database_1of2.zip
shell ~]#unzip linux.x64_11gR2_database_2of2.zip
解压后会在当前目录下生成一个名为 database的目录
shell ~]#cd database
shell ~]#xhost +
shell ~]#su - oracle ### 为了安全,运行oracle进程的属主不能是root
shell ~]$./runInstaller
解决办法:
1. 直接设置环境变量LANG为英文环境
shell ~]$locale -v ### 查看当前用户的默认语言环境,即Oracle用户的默认语言环境
shell ~]$locale -a ### 查看系统支持的所有字符编码集
shell ~]$LANG=en_US.UTF-8 ### 注意只是本次shell进程有效,要想始终有效,可以在oracle家目录下的.bash_profile定义LANG变量的值
2. 安装中易宋体18030 (参考网站:http://www.xpgod.com/soft/8928.html)
zysong.ttf使用方法:
1.在Linux下执行以下命令,把字体库安装到相应位置
mkdir -p /usr/share/fonts/zh_CN/TrueType && cp zysong.ttf /usr/share/fonts/zh_CN/TrueType/
2.这样在安装的时候。Oracle就会显示中文了,而不再是中文乱码了。
3.索引的丢失可能引起数据库访问失败
4.解决Oracle安装乱码问题。
需要将文件同时安装到/usr/share/fonts/zh_CN/TrueType/和$JAVA_HOME/jre/lib/fonts/fallback/下
3. 如果你还能勉强看懂点英语,建议英文安装,但是安装时排错就比较麻烦
shell ~]$./runinstaller ###再次执行此脚本
图一:
点击下一步
图二:
点击是,选择下一步
图三:
选择创建和配置数据库,下一步
图四:
选择服务器类,下一步
图五
选择单实例数据库安装,下一步
图六:
选择高级安装,高级安装可以自定义一些配置,下一步
图七:
选择语言,一般为简体中文和英语下一步
图八:
选择企业版,选择选项里有六个组件,一般默认即可,下一步
图九:
说明:oracle会根据之前在oracle家目录下的.bash_profile文件设置默认的基本目录和主目录,所以如果你想在安装前修改
就可以在.bash_profile 通过变量ORACLE_BASE,ORACLE_HOME定义,当然你可以在安装中通过浏览定义,oracle
会修改两个变量的值
选择下一步
图十:
!注意 此清单目录一定要为空(比如安装过程异常中断,再次安装oracle),否则会报以下错误:
选择下一步
图十一:
选择第一项,点击下一步
图十二
输入全局数据库名和SID,其中SID也是根据之前的环境变量来获取的,此处你也可以更改,下一步
图十三
如果没有oracle使用经验,选择让数据库自动内存管理
选择合适的字符集,这里选择UTF8
选择下一步
图十四
选择第二项,下一步
图十五
指定oracle数据库数据存放目录,选择文件系统,默认为/opt/oracle/app/oradata 这也是为什么之前创建的目录名为oradata
但是如果在此修改一定要保证修改后的目录具有以下权限
没问题,点击下一步
图十六
选择不启用自动备份,点击下一步,这个功能安装后还能修改,不需要安装时定义,点击下一步
图十七
选择对所有账户使用相同的口令,但生产环境不建议这么做,输入口令后,点击下一步
详细资料里有密码规则,不过你可以忽略,不影响,选择是,点击下一步(一定要记住此密码)
图十八
oracle用户组权限说明,保持默认,点下一步
图十九
oracle检测目标环境并生成结果
图二十
检测一共分三个板块
1. 内存和交换分区大小
2. 操作系统内核参数
3. 程序包依赖
解决:
说明:每个检测失败的选项,oracle都会给出详细信息,照着修改即可,一般就是把当前参数的值改为预期值,再重新检测即可
一. 交换分区大小,一般交换分区在装系统的时候就已经确定,下面接下来讲解安装后如何增加swap分区的大小
从上面的报错可以看到,预期值为大概4g,当前值为2g,所以需要增加2g,但是考虑到其他进程的使用此处我们增加4g,反正也是使用磁盘来用作交换分区,只要你
有足够硬盘空间,你可以增大到你期望的swap大小。
查看内存使用情况
shell ~]#free -m
以下的操作都要在root用户下进行,首先先建立一个分区,采用dd命令比如
这样就会创建/home/swap这么一个分区文件。
可以看到通过dd创建了一个4G大小的swap文件,接着再把这个分区变成swap分区。
再接着使用这个swap分区。其实就是挂载,使其成为有效状态。
现在再用free -m命令查看一下内存和swap分区大小,就发现增加了4G的空间了。
不过当计算机重启了以后,发现swap还是原来那么大,新的swap没有自动启动,还要手动启动。
那我们需要修改/etc/fstab文件,增加如下一行
你就会发现你的机器自动启动以后swap空间也增大了。
点击重新检查:如下图二十一
可以看到,交换分区检测通过,不在报检测失败
二. 操作系统内核参数
你没必要先手动一个一个去修改,选择修补并再次检查,oracle安装程序里有个脚本会自动帮你解决内核参数检测不通过的问题,如果次脚本执行完
还报某几个选项检测失败,这时你可以手动修改了 (使用sysctl命令修改并保存结果到/etc/sysctl.conf中)
图二十二
按提示修改即可:
shell ~]# bash /tmp/CVU_11.2.0.1.0_oracle/runfixup.sh
可以看到,运行此脚本后,会自动修改操作系统内核参数,点确定
图二十三:
图二十四
三 .软件包依赖关系,这里建议都解决了,主要是从CentOS5.x上和google找,此处全部忽略,下一步
图二十五
安装过程中配置的清单,可以选择保存到本地,默认会生成一个名为db.rsp的应答文件,oracle应答文件可以完成脚本式自动安装部署,可以使用图形化安装中生成
的应答文件作为模板。选择保存,此处不做如何使用应答文件快速部署oracle,感兴趣的小伙伴可以自行google或者百度。
shell ~]# mkdir /opt/oracle_rsp;chown oracle.oinstall /opt/oracle_rsp
保存完成后,点击下一步
图二十六:
等待最后安装,这个时间有点长,主要和你的机器配置有关, 可以使用top看下负载
shell ~]#top -u oracle -c
可以看到安装Oracle需要用到java,不过oracle的安装包里已经替我们安装了java,其实oracle图形化安装界面就是用java写的
再看看进度
图二十七
只要安装状态成功就OK,从上面可以看到安装最后一个步骤需要运行一个脚本,点击详细资料可以看到安装的详细过程
图二十八
为了防止进程假死,你最好使用上面的top命令和打开详细过程按钮监控着,以免你在这里一厢情愿地浪费感情,这里你注意oracle的日志目录,里面有安装日志
终于弹下一个窗了,我以为卡死了,这时你就要注意oracle安装日志有没有变动,如果有变动那说明没问题
图二十九
注意当前操作的日志文件路径 /opt/oracle/app/cfgtoollogs/dbca/orcl
图三十
说明:上面红色箭头的部分都要留意下,主要有以下几方面注意的
1. 数据库创建日志
2. 数据库信息
3. 登录方式:URL https://oracle.dongpi.com:1158/em ### 通过web方式登录oracle的OEM
4. 备份加密秘钥文件
shell ~]#mkdir /root/oracle_key
shell ~]#cp -ra /opt/oracle/app/product/11.2.0/dbhome_1/oracle.dongpi.com_orcl/sysman/config/emkey.ora /root/oracle_key/
5. 口令管理,默认oralce会锁定除了(sys,system)用户外的其他账户。这里我们可以选择解锁一个用户scott
点击确定:
图三十一
按上述提示执行以下操作,主要是执行两个脚本
shell ~]#bash /opt/oracle/oraInventory/orainstRoot.sh
shell ~]#bash /opt/oracle/app/product/11.2.0/dbhome_1/root.sh
执行完脚本,点确定
图三十二
十. 基本上Oracle安装算完成了,接下来看看如何启动关闭oracle,并提供sysv风格的启动脚本
用OUI安装并配置Oracle数据库后,Oracle就开启了(包括:数据库实例、监听器、EM)。在重启操作系统之后,Oracle默认是没有启动的。使用如下命令查看Oracle相关服务是否已启动:
oracle相关服务说明:
1.tcp/1158: oracle EM监听端口,网页版的管理器
- 状态查看:shell ~]#emctl status dbconsole ### 切换到orcale用户执行
- 启动和关闭:shell ~]#emctl start/stop dbconsole
- 访问方式:可在web浏览器中输入:https://{ServerIP|Hostname}:1158/em
注意一定要手动输入https://
2. tcp/17191: oracle 数据库实例监听的端口(此端口每次重启oracle都会改变)
手工启动oracle实例,可用sqlplus建立一个idle instance,然后使用startup启动或关闭,如下:
oracle实例关闭:
使用netstat命令再次查看:
可以看到oracle实例已经关闭,但是监听器和EM没有被关闭,接下来我们启动oracle实例
oracle实例启动:
注意以上在关闭oracle实例后,使用sqlplus连接到一个空闲实例(不再是orcl),oralce有一个连接后的默认实例-orcl
使用netstat查看oracle相关tcp连接
3. tcp/1521: oracle监听器,数据库实例启动后,需要启动监听器,才能让远程用户建立连接。
- 监听器状态查看:shell ~]#su -oracle -c "lsnrctl status" ##切换到oracle用户
- 监听器关闭:shell ~] su - oracle -c "lsnrctl stop"
使用sqlplus连接oracle
初学oracle的小伙伴有可能就会疑惑,为什么关闭监听器后任然可以连接oracle,其实是这样子的oracle连接分为本地连接和远程连接,具体如下:
通过sqlplus命令行连接oracle四种方法
. sqlplus / as sysdba
操作系统认证,不需要数据库服务器启动listener,也不需要数据库服务器处于可用状态。比如我们想要启动数据库就可以用这种方式 进入
sqlplus,然后通过startup命令来启动。
. sqlplus username/password
连接本机数据库,不需要数据库服务器的listener进程,但是由于需要用户名密码的认证,因此需要数据库服务器处于可用状态才行。
. sqlplus usernaem/password@orcl
通过网络连接,这是需要数据库服务器的listener处于监听状态。此时建立一个连接的大致步骤如下
a. 查询sqlnet.ora,看看名称的解析方式,默认是TNSNAME
b. 查询tnsnames.ora文件,从里边找orcl的记录,并且找到数据库服务器的主机名或者IP,端口和service_name
c. 如果服务器listener进程没有问题的话,建立与listener进程的连接。
d. 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的 话客户端
就连接上了数据库的server process。
e. 这时连接已经建立,可以操作数据库了。
.sqlplus username/password@//host:port/sid
用sqlplus远程连接oracle命令(例:sqlplus risenet/@//192.168.130.99:1521/risenet)
上面的方式为本地连接,不需要开启oracle监听器,接下来我们使用账号密码远程连接oracle:
可以看到本地连接,不需要开启监听器,远程连接必须开启监听器。注意conn格式(本地和远程)
如果每次重启操作系统都要进行以上操作好麻烦,那么如何让Oracle作为系统服务在开机的时候自动启动呢?
Oracle在$ORACLE_HOME/bin下提供许多对数据库进行操作的脚本,其中dbstart和dbshut可分别用来启动和关闭数据库。注意,这两个脚本已包含监听器的启动或关闭,但并未对EM进行相关的操作。使用如下命令脚本:
/opt/oracle/app/product/11.2./dbhome_1/bin/dbstart ### 启动数据库实例(包含监听器)
2 /opt/oracle/app/product/11.2./dbhome_1/bin/dbshut ### 关闭数据库实例(包含监听器)
以上命令要成功启动数据库实例还得打开Oracle设置的一个关卡:vim /etc/oratab,修改行:
编写oracle开机启动脚本如下:
shell ~]vim /sh/oracle.sh
#!/bin/env bash
#
#*********************
# version: 1.0.
# author: 贾俊伟
# contact:
# - QQ:
#********************* # chkconfig:
# description: Oracle sysv init Boot scipt. # 自定义变量
LogFile=/var/log/oracleinit.log
ORA_OWNER=oracle
PID= # 读取oracle环境变量
source /home/oracle/.bash_profile # 读取系统functions脚本
. /etc/init.d/functions # 网络相关检查
if [ ! -f /etc/sysconfig/network ]; then
exit
fi . /etc/sysconfig/network # Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit start() { if [ ! -x ${ORACLE_HOME}/bin/dbstart ];then
echo "$(date +"%Y-%m-%d %H:%M:%S") [Warning] The file does not exist or can not be executed." | tee -a $LogFile >&
exit
else
echo "$(date +"%Y-%m-%d %H:%M:%S") [Note] Server ORACLE boot start ..." | tee -a $LogFile >&
su - ${ORA_OWNER} -c "${ORACLE_HOME}/bin/dbstart ${ORACLE_HOME}" | tee -a $LogFile >& if (netstat -tnpl | grep -iq ":1521");then
PID=$(pgrep tnslsnr)
echo "$(date +"%Y-%m-%d %H:%M:%S") [Note] ORACLE($PID) Boot is OK." | tee -a $LogFile >&
else
echo "$(date +"%Y-%m-%d %H:%M:%S") [Warning] ORACLE($PID) Boot is Failed,Please start manually" | tee -a $LogFile >&
exit
fi fi
} stop() {
if [ ! -x ${ORACLE_HOME}/bin/dbshut ];then
echo "$(date +"%Y-%m-%d %H:%M:%S") [Warning] The file does not exist or can not be executed."
exit
else
echo "$(date +"%Y-%m-%d %H:%M:%S") [Note] Server ORACLE Stop start ..."
if (netstat -tnpl | grep -iq ":1521");then
su - ${ORA_OWNER} -c "${ORACLE_HOME}/bin/dbshut ${ORACLE_HOME}"
sleep
if (netstat -tnpl | grep -iq ":1521");then
PID=$(pgrep tnslsnr)
kill - $PID
fi
echo "$(date +"%Y-%m-%d %H:%M:%S") [Note] ORACLE Stop is OK."
else
echo "$(date +"%Y-%m-%d %H:%M:%S") [Note] ORACLE is already stopped."
fi
fi
} case $ in
start)
start
;; stop)
stop | tee -a $LogFile >&
;; *)
echo "Usage:`basename $0` {start|stop}"
esac
脚本说明:此脚本判断oracle是否正常启动依据的是监听器,如果监听器没有启动就认为oracle没有启动,其实这是有问题的,不过这种情况只在手动使用命令启动或者关闭oracle
相关服务进程的时候才会出现,正常情况下oracle提供的默认脚本,启动和关闭都包含对监听器的操作。当然亦可以根据以上脚本修改更加严格的判断条件,比如只有oracle三个tcp连接同时存在作为启动判别标准。为了安全起见,本脚本没有启动oracle 管理器EM。
shell ~]cp /sh/oracle.sh /etc/init.d/oracle ## 复制到系统默认开机启动脚本目录,该目录包含了sysv风格的服务启动脚本,即可以使用service命令
shell ~]chmod +x /etc/init.d/oracle ### 添加可执行权限
shell ~]chkconfig --level 35 oracle on ### 加入开机启动
测试脚本:
1.启动oracle,这里我们先使用pkill强行杀死所有oracle进程
shell ~]#pkill - oracle
shell ~]#ps -ef | grep -i "oracle|java" ### 杀掉包含oracle或者java关键字的进程(oracle使用java开发,为防止误杀,请首先确认是否有其他java进程)
shell ~]#netstat -tnpl | egrep -i ":1521|:1158|ora"
返回为空说明,全部杀死。使用sercie命令启动oracle
2.关闭oracle,同样使用service命令
3. oracle启动关闭相关日志:$ORACLE_HOME/{starup.log|shutdown.log}
十一. oracle 防火墙设定
主要是开放oracle三个tcp端口中的(1521:监听器,1158:em)
iptables -A INPUT -s 192.168.95.0/ -p tcp -m state --state NEW -m multiport --dports , -j ACCEPT
使用navicat连接验证:如下图点击测试连接。
至此有关oracle 11g r2基本环境部署就先介绍到这里,后续我会继续分享oracle基本操作命令,oracle备份与恢复。