本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 chaodev 即可关注。
系统:Linux CentOS 7 64位
Oracle版本:Oracle 11g R2
官网下载地址:https://www.oracle.com/database/technologies/oracle-database-software-downloads.html#11g,下载11g R2 64位版本,两个包都下载,如下:
查看 swap 分区空间大小,建议不少于2G,否则需增加 swap 分区
添加 swap 分区,具体步骤如下
使用dd命令创建名为swapfile 的swap交换文件(文件名和目录任意):
dd if=/dev/zero of=/var/swapfile bs=1024 count=2097152
if:即输入文件 input file
of:即输出文件 output file
dev/zero是Linux的一种特殊字符设备(输入设备),可以用来创建一个指定长度用于初始化的空文件,如临时交换文件。
bs=1024 :单位数据块(block)同时读入/输出的块字节大小为1024 个字节即1KB,bs(即block size)。
count=2097152:数据块(block)数量,也就是 swap 分区的容量。2097152KB=2G。
回车后,会执行2g的读写操作
执行完毕后,对交换文件格式化并转换为 swap 分区:
mkswap /var/swapfile
挂载并激活分区:
swapon /var/swapfile
这里提示建议我们使用0600权限,修改权限,如下
chmod -R 0600 /var/swapfile
现在查看swap分区,可以看到已经成功添加
现在如果系统重启后,分区挂载并不会生效,因此需要设置开机自动挂载该分区,修改 fstab 配置,如下
vim /etc/fstab
在 fstab 文件末尾追加如下内容并保存:
/var/swapfile swap swap defaults 0 0
查看硬盘空间,建议不要低于5G
df -h
3.1 修改主机名称
hostnamectl set-hostname kmvcmdm
3.2 修改hosts文件
vi /etc/hosts
内容为:ip 主机名
输入命令 vi /etc/selinux/config,将 SELINUX 修改为 disabled
安装oracle之前需要安装许多软件包依赖,如果可用外网,使用如下命令安装
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
查看这些软件包版本,可使用如下命令,如有未安装的会有提示:
rpm -q binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel
创建运行 oracle 数据库的系统用户和用户组
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle
id oracle
查看新建的oracle用户
创建数据库软件目录和数据文件存放目录,如下
# ORACLE_BASE
mkdir -p /data/oracle
# ORACLE_HOME
mkdir -p /data/oracle/product/112010/db_1
# INVENTORY_LOCATION
mkdir /data/oracle/inventory
# 恢复数据存放目录
mkdir /data/oracle/flash_recovery_area
更改目录属主为 oracle 用户所有
chown -R oracle:oinstall /data/oracle
chmod -R 775 /data/oracle
chown -R oracle:oinstall /data/oracle/flash_recovery_area
将 oracle 用户加入到 sudo 组中,获得 sudo 权限,修改 /etc/sudoers 文件
vi /etc/sudoers
添加如下内容
oracle ALL=(ALL) ALL
输入命令: vi /etc/sysctl.conf ,将下列内容加入该文件
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmall = 1572864
kernel.shmmax = 6442450944
kernel.shmmni = 4096
kernel.sem = 5010 641280 5010 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
执行如下命令使 sysctl.conf 配置生效。
/sbin/sysctl -p
具体参数解释如下:
fs.file-max:系统中可以同时打开的文件数目。
fs.aio-max-nr:同时可以拥有的的异步IO请求数目。
kernel.shmall:一般为总内存的90%/4096,比如我的总内存90%是6G,也就是6442450944字节,那这里的值就是6442450944/4096=1572864
kernel.shmmax:总内存的90%,6G =6442450944 (shmmax(bytes) = shmmni(page size, default 4k) * shmall (page的个数))
kernel.shmmni:共享内存段的最大数量,默认4k,也就是4096。
net.ipv4.ip_local_port_range:表示应用程序可使用的IPv4端口范围。
net.core.rmem_default:套接字接收缓冲区大小的缺省值。
net.core.rmem_max:套接字接收缓冲区大小的最大值。
net.core.wmem_default:套接字发送缓冲区大小的缺省值。
net.core.wmem_max:套接字发送缓冲区大小的最大值。
kernel.sem = 5010 641280 5010 128,对应4个值分别为SEMMSL、SEMMNS、SEMOPM、SEMMNI
,具体如下:
SEMMSL
: 每个信号集的最大信号数量,数据库最大 PROCESS 实例参数的设置值再加上 10 。Oracle 建议不少于 100 。SEMMNS
:用于控制整个 Linux 系统中信号(而不是信号集)的最大数。Oracle 建议将 SEMMNS 设置为:系统中每个数据库的 PROCESSES 实例参数设置值的总和,加上最大 PROCESSES 值的两倍,最后根据系统中 Oracle 数据库的数量,每个加 10 。使用以下计算式来确定在 Linux 系统中可以分配的信号的最大数量。它将是以下两者中较小的一个值:SEMMNS 或 (SEMMSL * SEMMNI)。SEMOPM
: 用于控制每个 semop 系统调用可以执行的信号操作的数量。一个信号集能够拥有每个信号集中最大数量的SEMMSL 信号,因此建议设置 SEMOPM 等于SEMMSL 。Oracle 建议不少于 100 。SEMMNI
:用于控制整个 Linux 系统中信号集的最大数量。Oracle 建议不少于 100 。示例如下:
SEMMSL:设置为5010。
SEMMNI:设置为128。
SEMMNS:设置为SEMMSLxSEMMNI(5010x128)=641280。
SEMOPM:与SEMMSL参数相同,设置为5010。
输入命令:vi /etc/security/limits.conf,将下列内容加入该文件。
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
示例如下:
oracle soft nproc 2047 //限制oracle用户的进程数,超过2047开始警告。
oracle hard nproc 16384 //系统限制不能超过16384个。
oracle soft nofile 1024 //限制最多能同时打开的文件数,软限制。
oracle hard nofile 65536 // 最多能同时打开的文件数,硬限制。
输入命令:vi /etc/pam.d/login,将下列内容加入该文件
session required /lib/security/pam_limits.so
session required pam_limits.so
编辑 /etc/profile ,输入命令:vi /etc/profile,将下列内容加入该文件。
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
使用如下命令使环境变量生效
source /etc/profile
su - oracle
编辑 bash_profile ,输入命令:vi .bash_profile,将下列内容加入该文件。
export ORACLE_BASE=/data/oracle
export ORACLE_HOME=/data/oracle/product/112010/db_1
export ORACLE_SID=orcl
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
输入如下命令,使环境变量生效
source .bash_profile
将安装包上传,我这里上传至 home/oracle 下,然后解压
unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip
如果不是 oracle 用户请先切换至 oracle 用户
su - oracle
解压后,在文件夹 database/response 中有 db_install.rsp、dbca.rsp 和 netca.rsp 三个应答文件,分别是数据库安装文件、建立数据库实例文件和监听配置安装文件。
修改 db_install.rsp 文件
vi db_install.rsp
修改以下内容:
oracle.install.option=INSTALL_DB_SWONLY //安装类型
ORACLE_HOSTNAME=kmvcmdm //主机名称
UNIX_GROUP_NAME=oinstall //安装组
INVENTORY_LOCATION=/data/oracle/inventory //INVENTORY目录
SELECTED_LANGUAGES=en,zh_CN //选择语言(英文和简体中文)
ORACLE_HOME=/data/oracle/product/112010/db_1 //oracle_home
ORACLE_BASE=/data/oracle //oracle_base
oracle.install.db.InstallEdition=EE //oracle版本
oracle.install.db.DBA_GROUP=dba // dba用户组
oracle.install.db.OPER_GROUP=oinstall //用户组
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE //数据库类型(用途)
oracle.install.db.config.starterdb.globalDBName=orcl // globalDBName
oracle.install.db.config.starterdb.SID=orcl // SID
oracle.install.db.config.starterdb.memoryLimit=800 //自动管理内存的最小内存(M),最小是256MB
oracle.install.db.config.starterdb.password.ALL=123456 //设定所有数据库用户使用同一个密码
DECLINE_SECURITY_UPDATES=true //设置安全更新,这个要选true,否则会无限提醒邮件地址有问题,终止安装。
注:oracle.install.db.config.starterdb.type 指定的是数据库用途,包括一般用途(GENERAL_PURPOSE)和数据仓库,这里根据实际情况选择。
进入解压出的 database目录,然后执行如下命令进行静默安装。
./runInstaller -silent -responseFile /home/oracle/database/response/db_install.rsp -ignorePrereq
安装过程中,如果提示[WARNING]可忽略,此时安装程序仍在后台运行,如果出现[FATAL],则安装程序已经停止了。
安装成功后,有如下安装成功的提示,接下来还需要按照他的要求执行脚本。
可以在安装目录找到本次安装会话的日志,例如:
/data/oracle/oraInventory/logs/installActions2015-06-08_04-00-25PM.log
首先切换到root用户
su root
然后执行即可
/data/oracle/inventory/orainstRoot.sh
/data/oracle/product/112010/db_1/root.sh
根据提示查看执行日志,可以看到已经成功执行。
至此,数据库已经安装成功,但是还没有结束,还需要配置监听以及实例。
由于接下来监听配置中有一项需要指定数据文件存放目录,这里我们新建个目录用来存放数据文件,如下
mkdir /data/oracle/oradata
同样更改目录属主为oracle用户
chown -R oracle:oinstall /data/oracle/oradata
(1)修改监听配置文件 netca.rsp,位置在解压出来的文件夹 database/response 下
vi netca.rsp
修改内容如下:
INSTALL_TYPE=""custom"" 安装的类型
LISTENER_NUMBER=1 监听器数量
LISTENER_NAMES={"LISTENER"} 监听器的名称列表
LISTENER_PROTOCOLS={"TCP;1521"} 监听器使用的通讯协议列表
LISTENER_START=""LISTENER"" 监听器启动的名称
(2)切换回oracle用户
su - oracle
(3)执行如下命令
netca /silent /responseFile /home/oracle/database/response/netca.rsp
执行成功后,在安装目录下(例:/data/oracle/product/112010/db_1/network/admin/)会生成 listener.ora 文件
执行lsnrctl start
开启监听(如已开启则先关闭再启动)
(1)编辑文件 dbca.rsp,位置同样在解压出来的文件夹 database/response 下
vi dbca.rsp
修改内容如下:
RESPONSEFILE_VERSION = "11.2.0"
OPERATION_TYPE = "createDatabase"
GDBNAME = "orcl" //数据库的名字
SID = "orcl" //数据库实例名
TEMPLATENAME = "General_Purpose.dbc" //建库用的模板文件
DATAFILEDESTINATION =/data/oracle/oradata/ //数据文件存放目录
RECOVERYAREADESTINATION=/data/oracle/flash_recovery_area/ //恢复数据存放目录
CHARACTERSET = "AL32UTF8" //字符集
(2)执行dbca命令
dbca -silent -responseFile /home/oracle/database/response/dbca.rsp
然后会让你输入密码,成功执行后如下
根据提示查看执行日志,可以看到已经有一个 orcl 的实例,如下
监听状态查询
lsnrctl status
如果防火墙未打开则开启防火墙,启动 firewalld 服务
systemctl start firewalld
oracle 默认端口1521,需要开放,如下
#永久开放1521端口
firewall-cmd --add-port=1521/tcp --permanent --zone=public
#重启防火墙
firewall-cmd --reload
1、配置监听时执行命令,配置失败,如下
查看日志
应该是 hostname 的问题,因为一开始 /etc/hosts中我用了ip地址,那个ip ping不通,现在为了生成 listener.ora 文件,可以暂时将 /etc/hosts 中那个 hostname 的ip先改成127.0.0.1
改完后 hostname 就能 ping 通了
再次执行就成功。
2、客户端连接时报错 ORA-12541:TNS:no listener
解决方法:修改listener.ora
cd /data/oracle/product/112010/db_1/network/admin/
vi listener.ora
将127.0.0.1改成服务器 ip 地址
然后重启监听即可
lsnrctl stop
lsnrctl start
觉得有帮助点个赞吧!!!
原创不易,转载请注明出处。
微信扫一扫下方二维码即可关注我的公众号