1.安装前须知:
1).内存(RAM)的最小要求是 1GB,建议 2GB 及以上。
使用命令:cat /proc/meminfo,这里是虚拟机,用的是2G内存
[root@192 ~]# cat /proc/meminfo|head -1
MemTotal: 1870496 kB
2).交换内存 swap 建议:内存为 1GB~2GB 时建议swap大小为内存大小的 1.5 倍;内存为 2GB~16GB 时建议swap大小为内存的大小;内存超过 16GB 时swap保持16GB。这里是虚拟机交换内存就设为和物理内存一样的大小。
[root@192 ~]# cat /proc/swaps
FilenameTypeSizeUsedPriority
/dev/dm-1 partition20971480-1
3). 要求临时文件目录,如/tmp 的磁盘空间至少 1GB。这里/tmp是挂载在根目录下的,不止是1G的空间。
[root@192 tmp]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18G 3.8G 14G 22% /
devtmpfs 904M 0 904M 0% /dev
tmpfs 914M 0 914M 0% /dev/shm
tmpfs 914M 8.9M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 183M 0 183M 0% /run/user/0
4). 磁盘空间要求:企业版为4.35GB的安装空间和1.7GB以上的数据文件空间;标准版为4.22GB的安装空间和1.5GB以上的数据文件空间。
[root@192 tmp]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18G 3.8G 14G 22% /
这里看是有超过4.35G的空间。
5). 需要 X window 图形界面。
yum groupinstall "Desktop"
这里我们服务器时选择的最小安装的版本。
6). 需要 root 用户权限.
7). 设定主机名与IP地址的映射
vim /etc/hosts
127.0.0.1 localhost
192.168.10.136 oracle_test
2.安装所需程序包
binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
elfutils-libelf-0.125
elfutils-libelf-devel-0.97
gcc-4.1.2
gcc-c++-4.1.2
glibc-2.3.4
glibc-common-2.5
glibc-devel-2.5
glibc-headers-2.5
ksh-20060214
libaio-0.3.105
libaio-devel-0.3.105
libgcc-3.4.6
libstdc++-3.4.6
libstdc++-devel 4.1.2
make-3.81
sysstat-7.0.2
unixODBC-2.2.11-11.el6 (x86_64)or later
unixODBC-devel-2.2.11-11.el6(x86_64) or later
libXp
使用yum list | grep'package name' 或者 rpm -q 'package name' 或者 rpm -qa | grep'package name'查看程序包是否已经安装。
总之,可以使用以下的命令安装软件
yum install -y ksh binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel libaio libaio-devel libgcc libstdc++ libstdc++-devel make numactl sysstat libXp unixODBC unixODBC-devel
安装pdksh包(该程序包未被纳入CentOS的安装盘中):
使用命令 rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm 进行安装(注意:该程序包与ksh冲突,如果已经安装ksh,建议使用命令 rpm -e ksh-* 卸载)
3.创建所需的用户组和帐号和设置系统的一些参数并安装数据库和配置数据库。
1).创建所需的用户组(在root帐号下操作):
groupadd oinstall;
groupadd dba;
groupadd oper;
2).创建所需的帐号(在root帐号下操作):
使用命令 id oracle; 查看 oracle 帐号是否已存在,若未存在则使用如下命令进行创建
useradd -g oinstall -G dba,oper oracle; #初始群组为 oinstall,有效群组为 dba、oper
passwd oracle; #为oracle帐号设置密码(安装的时候需要登录)
若oracle帐号已存在,则使用命令 usermod -g oinstall -G dba,oper oracle 将其加入群组 dba 和oper中
3).修改内核参数(在root帐号下操作):
编辑内核参数配置文件 vi /etc/sysctl.conf,在该文件下修改或添加如下行:
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmall = 2097152
kernel.shmmax= 2147483648
kernel.shmmni= 4096
kernel.sem = 250 32000100 128
net.ipv4.ip_local_port_range= 9000 65500
net.core.rmem_default= 262144
net.core.rmem_max= 4194304
net.core.wmem_default = 262144
net.core.wmem_max= 1048576
再执行以下命令使以上配置立即生效:
sysctl -p;
执行报错
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
执行下面的命令
modprobe bridge
再执行,就不报错了。
[root@kdzfu-test ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmmni = 4096
kernel.sem = 250 32000100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
4).修改系统资源限制(在root帐号下操作):
编辑系统资源限制配置文件 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
5).关闭SELinux(在root帐号下操作):
编辑SELinux配置文件 vim /etc/selinux/config,将SELINUX的值设为 disabled,如下:
SELINUX=disabled;
修改该文件可使重启系统后不启动SELinux。关闭当前已开启的SELinux使用如下命令:
setenforce 0
6).创建所需的目录(在root帐号下操作):
把oracle安装在 /opt/oracle 目录下,所以需创建该目录:
mkdir /opt/oracle;
chown oracle:oinstall /opt/oracle;
chmod 755 /opt/oracle;
7).安装时还需要设置 Inventory 目录,所以需创建该目录:
mkdir /opt/oraInventory;
chown oracle:oinstall /opt/oraInventory;
chmod 755 /opt/oraInventory;
8).安装包相关:
Oracle 11g R2的安装包被压缩成两个文件:linux.x64_11gR2_database_1of2.zip、 linux.x64_11gR2_database_2of2.zip,将它们上传到安装机器上,并使用 unzip linux.x64_11gR2_database_1of2.zip;unzip linux.x64_11gR2_database_2of2.zip; 进行解压缩,将得到一个名称为 database 的目录。我把它放在 /home/oracle/database 中。
由于安装过程是以 oracle 身份进行的,所以需确保oracle帐号对 /home/oracle/database 有执行权限,可使用如下命令将该目录赋予oracle帐号所有,并拥有执行权限:
chmod -R 700 /home/oracle/database;
chown -R oracle:oinstall /home/oracle/database;
退出 root,以 oracle 身份登录
9).设置oracle帐号登录时环境(以oracle身份登录):
编辑文件 vi /home/oracle/.bash_profile,添加如下行:
ORACLE_BASE=/opt/oracle; #安装目录
ORACLE_HOME=$ORACLE_BASE/11g; #oracle家目录
ORACLE_SID=orcl; #实例名
LD_LIBRARY_PATH=$ORACLE_HOME/lib;
PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin;
export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH PATH;
保存退出后执行如下命令使以上设置立即生效:
source /home/oracle/.bash_profile
设置安装时默认语言为英文
echo 'export LANG=en_US.UTF-8' >> ~/.bashrc
10).开始安装(以oracle身份登录):
/home/oracle/database/runInstaller; ##执行该程序开始安装
以下将进入图形安装界面
图-1 输入email,点击next
图-2由于我的安装没连通外网,所以提示我设置代理。选中复选框,点击Continue
图-3 选中第一项,在安装完成时创建并简单配置数据库,点击next
图-4 选中Server Class,点击next
图-5 以单例模式安装(若安装RAC,选择下一项),点击next
图-6 选中Advanced install,点击next
图-8 选择安装企业版,点击next
图-9 安装基目录和Home目录,由于我们已设置好环境变量ORACLE_BASE和ORACLE_HOME,此处无需再选择,点击next
图-10 以oinstall群组身份进行安装,点击next
图-11 安装用于事务处理的数据库(数据仓库选中下一项),点击next
图-13.1 可使用的最大内存,Oracle建议使用自动内存管理,点击选项卡Character sets选择字符集
图-13.2 选择UTF-8作为数据库字符集,点击Sample Schemas顺便创建Oracle提供的案例
图-13.3 选中复选框,点击next
图-14 根据自己需求设置,这里选择什么都不动,点击next
图-16 是否启用自动备份,在生产环境还是启用的好,点击next
图-18 选择DBA帐号所属群组dba和oper帐号所属群组,点击next
图-19 因为swap 空间过小,造成检查通过不了,扩充swap空间。加个1G左右
[root@oracle_test ~]# dd if=/dev/zero of=swapfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 12.8605 s, 83.5 MB/s
[root@oracle_test ~]# mkswap swapfile
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=796f3041-c278-4c72-b1b1-aa5d04fe2ad5
[root@oracle_test ~]# swapon swapfile
swapon: /root/swapfile: insecure permissions 0644, 0600 suggested.
[root@oracle_test ~]# free -m
total used free shared buff/cache available
Mem: 1826 325 68 8 1432 1284
Swap: 3071 0 3071
再重新检查
图-19 安装程序对环境进行检查,由于CentOS的32bit程序包都是i686的,而oracle要求i386,所以此处会失败,忽略即可。点击next
图-20 点击Finish,开始安装
图-21 安装ing
图-22 保留,先执行下一步:以root身份登录执行那两个sh文件
11).如中文显示乱码可参考以下的解决方法。
(1).修改显示中文乱码,把数据库字符集设置为UTF8
vim /etc/sysconfig/i18n
确认内容是否是 LANG="zh_CN.UTF-8"
(2).编辑/home/oracle/.bash_profile,在最后一行添加如下:
NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8";
export NLS_LANG;
执行source /home/oracle/.bash_profile
12).启动测试并修改一些系统的参数。
[oracle@kdzfu-test ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 4月 4 00:23:20 2016
Copyright (c) 1982, 2009, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1603411968 bytes
Fixed Size 2213776 bytes
Variable Size 973080688 bytes
Database Buffers 620756992 bytes
Redo Buffers 7360512 bytes
数据库装载完毕。
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
系统已更改。
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
系统已更改。
SQL> ALTER DATABASE OPEN;
数据库已更改。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 1603411968 bytes
Fixed Size 2213776 bytes
Variable Size 973080688 bytes
Database Buffers 620756992 bytes
Redo Buffers 7360512 bytes
数据库装载完毕。
数据库已经打开。
SQL>
13).修改开机启动脚本dbstart和关闭脚本dbshut
先修改vim /etc/oratab
将最后一行N变成Y
然后修改$ORACLE_HOME/bin/dbstart内容
将ORACLE_HOME_LISTNER=$1 修改为:
ORACLE_HOME_LISTNER=$ORACLE_HOME
su - oracle
dbstart #启动oracle
这个只是启动oracle数据库和监听基本服务
不带3个网页的服务,相当于上面的sqlplus和lsnrtl start 两个操作
dbshut停止oracle了
使用dbshut脚本关闭数据库并查看监听端口是否关闭。
./dbshut
[oracle@kdzfu-test bin]$ ./dbshut
Processing Database instance "orcl": log file /opt/oracle/11g/shutdown.log
[oracle@kdzfu-test bin]$ ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::22 :::*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 128 ::1:631 :::*
LISTEN 0 128 :::56535 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 127.0.0.1:6010 *:*
LISTEN 0 128 ::1:6010 :::*
LISTEN 0 128 127.0.0.1:6011 *:*
LISTEN 0 128 ::1:6011 :::*
LISTEN 0 128 127.0.0.1:6012 *:*
LISTEN 0 128 ::1:6012 :::*
LISTEN 0 128 127.0.0.1:6013 *:*
LISTEN 0 128 ::1:6013 :::*
LISTEN 0 10 *:3938 *:* users:(("emagent",22698,5))
LISTEN 0 30 :::1158 :::* users:(("java",26990,19))
LISTEN 0 128 *:35016 *:*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 *:111 *:*
LISTEN 0 30 :::5520 :::* users:(("java",26990,14))
监听已关闭
[oracle@kdzfu-test bin]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 04-4月 -2016 00:49:00
Copyright (c) 1991, 2009, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS: 无监听程序
TNS-12560: TNS: 协议适配器错误
TNS-00511: 无监听程序
Linux Error: 2: No such file or directory
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=kdzfu-test)(PORT=1521)))
TNS-12541: TNS: 无监听程序
TNS-12560: TNS: 协议适配器错误
TNS-00511: 无监听程序
Linux Error: 111: Connection refused
使用dbstart脚本打开数据库并查看监听端口是否已打开。
[oracle@kdzfu-test bin]$ ./dbstart
Processing Database instance "orcl": log file /opt/oracle/11g/startup.log
监听已开启
[oracle@kdzfu-test bin]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 04-4月 -2016 00:51:32
Copyright (c) 1991, 2009, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for Linux: Version 11.2.0.1.0 - Production
启动日期 04-4月 -2016 00:51:20
正常运行时间 0 天 0 小时 0 分 11 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /opt/oracle/11g/network/admin/listener.ora
监听程序日志文件 /opt/oracle/diag/tnslsnr/kdzfu-test/listener/alert/log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=kdzfu-test)(PORT=1521)))
服务摘要..
服务 "orcl" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
[oracle@kdzfu-test 11g]$ ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::1521 :::* users:(("tnslsnr",29370,13))
LISTEN 0 128 :::22 :::*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 128 ::1:631 :::*
LISTEN 0 128 :::56535 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 127.0.0.1:6010 *:*
LISTEN 0 128 ::1:6010 :::*
LISTEN 0 128 127.0.0.1:6011 *:*
LISTEN 0 128 ::1:6011 :::*
LISTEN 0 128 127.0.0.1:6012 *:*
LISTEN 0 128 ::1:6012 :::*
LISTEN 0 128 127.0.0.1:6013 *:*
LISTEN 0 128 ::1:6013 :::*
LISTEN 0 10 *:3938 *:* users:(("emagent",22698,5))
LISTEN 0 128 :::31619 :::* users:(("oracle",29484,17))
LISTEN 0 30 :::1158 :::* users:(("java",29182,18))
LISTEN 0 128 *:35016 *:*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 *:111 *:*
LISTEN 0 30 :::5520 :::* users:(("java",29182,14))
14).为了使得其他电脑能访问管理器,需要给防火墙把1158端口开放
注意:主机防火墙要开的话,也要放通1521端口。
执行
iptables -I INPUT -p tcp --dport 1158 -j ACCEPT
iptables -I INPUT -p tcp --dport 1521 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/rc.d/init.d/iptables restart
15).修改 /etc/oratab
su - root
#vim /etc/oratab
找到
#$ORACLE_HOME 替换为$ORACLE_HOME变量的值,$SID替换为$SID变量的值
$SID:$ORACLE_HOME:N
改为
$SID:$ORACLE_HOME:Y
把配置文件改为如下所示
orcl:/opt/oracle/11g:Y
16).编辑启动关闭脚本
# vim /etc/rc.d/init.d/oracle
#!/bin/bash
#chkconfig: 234 61 61
#description: Oracle 11g AutoRun Service
#/etc/rc.d/init.d/oracle
case "$1" in
start)
# starts oracle listener and instance
echo "Starting Oracle Database:"
su - oracle -lc "lsnrctl start"
su - oracle -lc dbstart
su - oracle -lc "emctl start dbconsole"
;;
stop)
#shutdown oracle linstener and instance
echo "Shuting down Oracle Database:"
su - oracle -lc "lsnrctl stop"
su - oracle -lc dbshut
su - oracle -lc "emctl stop dbconsole"
;;
reload|restart)
$0stop
$0start
;;
*)
echo "Usage:{start|stop|reload|restart}"
exit 1
esac
exit0
17).为脚本赋予执行权限并检查脚本能否正确执行
#cd /etc/rc.d/init.d
chmod +x oracle
#./oracle stop
[root@kdzfu-test init.d]# ./oracle stop
Shuting down Oracle Database:
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 04-4月 -2016 01:37:02
Copyright (c) 1991, 2009, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
命令执行成功
Processing Database instance "orcl": log file /opt/oracle/11g/shutdown.log
Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0
Copyright (c) 1996, 2009 Oracle Corporation. All rights reserved.
https://kdzfu-test:1158/em/console/aboutApplication
Stopping Oracle Enterprise Manager 11g Database Control ...
... Stopped.
./oracle start
[root@kdzfu-test init.d]# ./oracle start
Starting Oracle Database:
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 04-4月 -2016 01:41:41
Copyright (c) 1991, 2009, Oracle. All rights reserved.
启动/opt/oracle/11g/bin/tnslsnr: 请稍候...
TNSLSNR for Linux: Version 11.2.0.1.0 - Production
系统参数文件为/opt/oracle/11g/network/admin/listener.ora
写入/opt/oracle/diag/tnslsnr/kdzfu-test/listener/alert/log.xml的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=kdzfu-test)(PORT=1521)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for Linux: Version 11.2.0.1.0 - Production
启动日期 04-4月 -2016 01:41:41
正常运行时间 0 天 0 小时 0 分 0 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /opt/oracle/11g/network/admin/listener.ora
监听程序日志文件 /opt/oracle/diag/tnslsnr/kdzfu-test/listener/alert/log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=kdzfu-test)(PORT=1521)))
监听程序不支持服务
命令执行成功
Processing Database instance "orcl": log file /opt/oracle/11g/startup.log
Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0
Copyright (c) 1996, 2009 Oracle Corporation. All rights reserved.
https://kdzfu-test:1158/em/console/aboutApplication
Starting Oracle Enterprise Manager 11g Database Control ............ started.
------------------------------------------------------------------
Logs are generated in directory /opt/oracle/11g/kdzfu-test_orcl/sysman/log
18).执行下列命令:#添加开机启动并做软链接
#chmod 750 /etc/rc.d/init.d/oracle
#ln -s /etc/rc.d/init.d/oracle /etc/rc2.d/S61oracle
#ln -s /etc/rc.d/init.d/oracle /etc/rc3.d/S61oracle
#ln -s /etc/rc.d/init.d/oracle /etc/rc4.d/S61oracle
#ln -s /etc/rc.d/init.d/oracle /etc/rc5.d/S61oracle
#ln -s /etc/rc.d/init.d/oracle /etc/rc0.d/K61oracle
#ln -s /etc/rc.d/init.d/oracle /etc/rc6.d/K61oracle
#chkconfig --add oracle
#chkconfig --level 234 oracle on
注意:执行chkconfig时,需要在脚本中添加至少两行注释行(第3步中),第一行告诉chkconfig 该服务的运行级别,第二行添加关于服务的简要说明。
19).重启下linux操作系统,检查oracle是否自动启动。