CentOS下Oracle安装

安装前准备

安装依赖包

oracle 安装所需程序包,可以到安装步骤时,查看缺少什么程序就安装什么程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
compat-libstdc++-33-3.2.3 (32 bit)
elfutils-libelf-0.125
elfutils-libelf-devel-0.125
gcc-4.1.2
gcc-c++-4.1.2
glibc-2.5-24
glibc-2.5-24 (32 bit)
glibc-common-2.5
glibc-devel-2.5
glibc-devel-2.5 (32 bit)
glibc-headers-2.5
ksh-20060214
libaio-0.3.106
libaio-0.3.106 (32 bit)
libaio-devel-0.3.106
libaio-devel-0.3.106 (32 bit)
libgcc-4.1.2
libgcc-4.1.2 (32 bit)
libstdc++-4.1.2
libstdc++-4.1.2 (32 bit)
libstdc++-devel 4.1.2
make-3.81
sysstat-7.0.2
unixODBC-2.2.14-11.el6 (x86_64) or later
unixODBC-2.2.14-11.el6.i686 or later
unixODBC-devel-2.2.14-11.el6 (x86_64) or later
unixODBC-devel-2.2.14-11.el6.i686 or later
libXp

使用命令 yum install -y ‘package name’ 安装所缺的程序包,pdksh包除外

安装pdksh包,使用rz命令上传pdksh-5.2.14-37.el5_8.1.x86_64.rpm文件到/opt/目录下

1
2
3
# 注意:该程序包与ksh冲突,如果已经安装ksh,建议使用命令 rpm -e ksh-* 卸载
rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm

创建用户及安装目录

使用rz上传p10404530_112030_Linux-x86-64_1of7.zip、p10404530_112030_Linux-x86-64_2of7.zip到/opt/目录下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 分别解压上传的文件,解压得到database文件夹
unzip -x p10404530_112030_Linux-x86-64_1of7.zip
unzip -x p10404530_112030_Linux-x86-64_2of7.zip
# 创建oracle用户和组,并设置密码
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle
# 创建oracl安装目录,并将目录权限赋予oracle用户
mkdir -p /data/DBSoft/oracle/product/11.2.0/db_1
chown -R oracle:oinstall /data/DBSoft/oracle
chmod -R 755 /data/DBSoft/oracle
# 安装时还需要设置Inventory目录,所以创建并赋予权限
mkdir -p /data/DBSoft/oraInventory
chown -R oracle:oinstall /data/DBSoft/oraInventory
chmod -R 755 /data/DBSoft/oraInventory

修改系统参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 修改hosts文件,将127.0.0.1修改为本机的ip,避免安装Oracle在Oracle Net Configuration Assistant时会失败
vi /etc/hosts
192.168.1.250 dbsrver localhost
::1 localhost6 localhost6.localdomain6
# 修改内核参数
vi /etc/sysctl.conf
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
fs.file-max = 6815744
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
# 再执行以下命令使以上配置立即生效
sysctl -p
# 编辑系统资源限制配置文件
vi /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

配置oracle默认安装参数

1
2
3
4
5
6
7
8
9
10
11
12
13
# 切换到orcale用户,修改/home/oracle/.bash_profile文件
su - oracle
vi ~/.bash_profile
# 设置oracle用户环境变量,添加如下
#安装目录
export ORACLE_BASE=/data/DBSoft/oracle
#oracle家目录
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export PATH=$ORACLE_HOME/bin:$PATH
# 保存退出后执行如下命令使以上设置立即生效,并env或者echo $PATH查看下
source ~/.bash_profile

开始安装oracle

配置远程安装环境

1
2
3
4
5
6
7
8
9
# oracle安装需要X-window环境,但是考虑到最大化利用服务器性能,一般服务器中不会安装X-windows环境。所以选择远程来安装oracle。
# 设置语言环境LANG和LC_ALL,改为英文环境
export LANG=en_US
export LC_ALL=en_US
# 使用Xmanager来远程显示oracle的安装界面,安装过程中可能遇到界面显示不完全的问题,因为我是在虚拟机中安装,猜测是与内存大小有关
export DISPLAY=192.168.1.233:0.0
./runInstall

安装数据库软件

1.进入图形化界面,一步步安装,取消勾选I wish…(依照个人),点击Next,弹出确认框再点Yes
此处输入图片的描述
此处输入图片的描述

2.询问是否软件升级,选择”Skip software updates”
此处输入图片的描述

3.选择第二项:Install database software only,只安装数据库软件
此处输入图片的描述

4.保持默认:Singel instance database installation,点击Next
此处输入图片的描述

5.选择产品语言,默认英语,附加选择了简体中文,点击Next
此处输入图片的描述

6.选择数据库版本,默认企业版,点击Next
此处输入图片的描述

7.配置Oracle安装目录,由于安装前环境变量的配置,安装程序自动读取配置,自动选择好了
此处输入图片的描述

8.同上,Oracle Inventory Directory目录也自动选择好了,oraInventory Group Name选择安装前创建的组oinstall,点击Next
此处输入图片的描述

9.保持默认,点击Next
此处输入图片的描述

10.安装检查中
此处输入图片的描述

11.检查结束,不满足条件列表,可以针对packages包进行yum install
此处输入图片的描述

12.忽略物理内存和交换分区的警告
此处输入图片的描述

13.配置确认,安装
此处输入图片的描述

14.root用户下,命令执行提示sh文件
此处输入图片的描述

安装监听

1
2
# 在oracle用户下
netca

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述
提示1521端口被占用,这里是因为我安装过程中修改过hostname,导致的
此处输入图片的描述

此处输入图片的描述

安装数据库实例

1
2
# 在oracle用户下
dbca

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述
配置全局数据库名称
此处输入图片的描述
取消EM管理界面
此处输入图片的描述

此处输入图片的描述
备配置置超级管理员密码,统一密码
此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述
修改数据库字符编码
此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

配置本地网络服务名

配置本地网络服务名(使服务器充当oracle客户端,连接自己,对数据库进行操作)

1
2
# 在oracle用户下
netca

此处输入图片的描述
此处输入图片的描述
输入连接的oracle服务器的数据库的实例名,这里输入本机的。
此处输入图片的描述
此处输入图片的描述
输入oracle服务器的ip地址,这里输入本机的ip
此处输入图片的描述
选中测试
此处输入图片的描述
点击change Login 输入所连接oracle服务器的其中某一个用户名和密码,点击OK
此处输入图片的描述
看到此界面说明测试成功
此处输入图片的描述
为你所设置的本地网络服务名起个名字,与实例名不能相同
此处输入图片的描述
此处输入图片的描述

遇到的问题

重启linux后,dbca命令无法找到

1
2
3
4
5
6
7
8
9
10
11
vi /etc/profile
# 添加如下内容
# set Oracle
export ORACLE_SID=demo #数据库实例ID
export ORACLE_BASE=/DBSoft/oracle #安装目录
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 #oracle家目录
export PATH=$ORACLE_HOME/bin:$PATH
# 使配置生效
source /etc/profile

安装oracle软件后,安装监听报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Oracle Net Services Configuration:
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# SIGSEGV (0xb) at pc=0xa4bf5f4e, pid=11819, tid=3086902976
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_17-b02 mixed mode)
# Problematic frame:
# C [libclntsh.so.11.1+0x421f4e] snlinGetAddrInfo+0x1b2
#
# An error report file with more information is saved as hs_err_pid11819.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
/u01/oracle/bin/netca: line 178: 11819 Aborted $JRE $JRE_OPTIONS -classpath $CLASSPATH oracle.net.ca.NetCA $*

原因是安装Centos的时候,默认主机名没有修改。对其进行修改。(安装centos时,计算机名必须修改)

1
2
3
4
5
6
7
#修改hostname
vi /etc/sysconfig/network
HOSTNAME=dbserver
#修改hosts文件
vi /etc/hosts
192.168.1.250 dbsrver localhost
::1 localhost6 localhost6.localdomain6

安装完监听后,启动监听报错。

怀疑与安装监听时提示1521端口被占用有关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[oracle@dbserver database]$ netstat -an | grep 1521
[oracle@dbserver database]$ lsnrctl stat
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 29-MAR-2015 15:09:14
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 2: No such file or directory

原因是 $ORAACLE_HOME/network/admin/listener.ora 文件中的 host未定义。

其他知识

数据库名、实例名、SID、服务名、网络服务名

数据库名:建数据库时候填写的global database name(select name from v$database;
SID:建数据库时候填写的SID
实例名:与数据库名一致(select instance_name from v$instance

Linux oracle数据库listener.ora存放路径

1
cd /data/DBSoft/oracle/product/11.2.0/db_1/network/admin/listener.ora

Linux oracle数据库tnsnames.ora存放路径

1
cd /data/DBSoft/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

ORACLE多个实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
#SID1、SID2即为2个实例名称
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = SID1)
(ORACLE_HOME = /data/DBSoft/oracle/product/11.2.0/db_1)
(SID_NAME = SID1)
)
(SID_DESC =
(GLOBAL_DBNAME = SID2)
(ORACLE_HOME = /data/DBSoft/oracle/product/11.2.0/db_1)
(SID_NAME = SID2)
)
)

ORACLE启动监听器

1
2
3
4
5
6
#切换至oracle安装用户(一般为oracle)
su - oracle
#启动监听器
lsnrctl start
#停止监听器
lsnrctl stop

启动测试oracle

1
2
3
4
5
6
7
8
[oracle@oracle ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Fri Jul 27 02:12:12 2012
Copyright (c) 1982, 2009, Oracle. All rights reserved.
#关闭数据库
SQL> shutdown
#启动数据库
SQL> startup
SQL> quit

测试的另一种方法:找一台windows平台电脑,telnet oracle主机IP地址:1521,通的话,会出现一个黑屏,光标一闪一闪。

Linux开放1521端口允许网络连接Oracle Listener

症状:
(1)TCP/IP连接是通的。可以用ping 命令测试。
(2)服务器上Oracle Listener已经启动。
lsnrctl status 查看listener状态
lsnrctl start 启动Oracle listener
(3)客户端得到的错误信息通常是:ORA-12170: TNS:连接超时
这时,我们基本可以肯定是服务器没有开放1521端口(假设你用默认设置)

解决方法:

1
2
3
4
5
6
7
8
9
10
#编辑iptables, 开放1521端口:
vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT
#保存配置,以便linux重启后依然有效
service iptables save
#重启防火墙,使规则生效
service iptables restart
#查看防火墙规则:
iptables -L –n

linux下创建oracle用户表空间

就是在已有的数据库实例上创建一个新的帐号,访问一些新的表
操作步骤如下:
(1)登录linux,以oracle用户登录(如果是root用户登录的,登录后用 su - oracle命令切换成oracle用户)
(2)以sysdba方式来打开sqlplus,命令如下:

1
2
3
sqlplus "/as sysdba"
#使用sysdba打开可能会报ORA-12162错误,因为ORACLE_SID未定义
export ORACLE_SID=dbmaster

(3)查看我们常规将用户表空间放置位置:执行如下

1
sql:select name from v$datafile;

(4)创建用户表空间:
根据上步查询出的路径,新建用户表空间

1
2
3
4
create tablespace ts_UserName datafile
'/data/dbdata/ewm/UserName_data01.dbf' size 2G autoextend on next 100M maxsize 31g,
'/data/dbdata/ewm/UserName_data02.dbf' size 2G autoextend on next 100M maxsize 31g,
'/data/dbdata/ewm/UserName_data03.dbf' size 2G autoextend on next 100M maxsize 31g;

(5)创建用户,指定密码和上边创建的用户表空间

1
2
#注意:oracle有个毛病,密码必须以字母开头,如果以数字开头,它不会创建用户
create user UserName identified by PassWord default tablespace ts_UserName profile DEFAULT;

(6)赋予权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
grant create database link to UserName;
grant create procedure to UserName;
grant create sequence to UserName;
grant create session to UserName;
grant create synonym to UserName;
grant create table to UserName;
grant create trigger to UserName;
grant create view to UserName;
grant select any dictionary to UserName;
grant select any table to UserName;
grant unlimited tablespace to UserName;
grant update any table to UserName;
grant debug connect session to UserName;
grant dba to UserName;

–经过以上操作,我们就可以使用UserName/PassWord登录指定的实例,创建我们自己的表了

设置Oracle自启动

1
2
3
4
5
6
7
8
9
su root
vi /etc/oratab
#将末尾的N修改为Y
dbmaster:/data/DBSoft/oracle/product/11.2.0/db_1:Y
#修改linux自启动文件
vi /etc/rc.d/rc.local
su oracle -lc "/data/DBSoft/oracle/product/11.2.0/db_1/bin/lsnrctl start"
su oracle -lc "/data/DBSoft/oracle/product/11.2.0/db_1/bin/dbstart"

参考博客:
Linux 64bit下Oracle11g安装手册
亦步亦趋完成在CentOS 6.4下安装Oracle 11gR2
使用远程X Server安装Oracle
oracle初级系列教程