前言
这篇是我在大学时试着往Ubuntu12.04(32位)中安装Oracle11g积攒的资料,换了MacBook之后就没有再使用Linux了,那台装着双系统的Lenovo也无法开机了,今天整理笔记看到了,想起来当时遇到了不少坑,虽然现在无论Linux和Oracle的版本升级了,当时的方法可能都不管用了,此举仅为填补一个单身程序员的空虚的周末,仅为一种浪费时间的没有意义的虚假的充实感……
以下内容是nq在ubuntu 12.04 lts 32位中安装Oracle11g的过程中,搜到的几篇博客的拼凑版,基本上涵盖了所有问题,采用
这些方法后,问题都得到了解决.
配置步骤
标题注明32位是因为网上教程几乎全是以64位安装为例的,32位系统下照着做是绝对会安装失败的。
出现的问题主要有两方面,一个是安装过程中出现的,另一个是安装完成后出现的。
更新系统
1 | sudo apt-get update |
安装界面化程序
如果使用的Ubuntu不是桌面版(如Ubuntu server),由于Oracle安装需要用到图形界面,所以需要安装桌面程序:
1 | sudo apt-get install gnome-core |
相信很多都是使用的桌面版,那么这个步骤就不需要了。
安装Oracle所需的依赖包
1 | sudo apt-get install automake |
很多都是Ubuntu自带的了,谨慎起见都执行一遍吧。
创建用户
此步可省略,直接使用当前的用户即可,下面的安装过程都是以不执行这一步为准的
1 | sudo groupadd oinstall |
检查系统变量
1 | /sbin/sysctl -a | grep sem |
然后根据上面命令中得到的参数值在/etc/sysctl.conf中增加对应数据,比如:
1 | fs.aio-max-nr = 1048576 |
运行一下命令更新内核参数:sysctl –p
添加内核限制
添加对oracle用户的内核限制,在 /etc/security/limits.conf 文件中增加以下数据
1 | oracle soft nproc 2047 |
其中oracle是在第四步中创建的用户,跳过第四步的话就写当前用户
查看/etc/pam.d/login,增加以下行(有了就不用增加了):
1 | session required pam_limits.so |
同样检查/etc/pam.d/su,没有以下行就自己加上:
1 | session required pam_limits.so |
创建文件夹
这些文件夹用于安装oracle,并设置其所有权:
1 | mkdir -p /opt/oracle |
同样,如果跳过了第四步,那就将所有权设置命令中的用户oracle和组oinstall改为自己当前用户和组(通常二者是一样的),当然这时也可以不执行这两个chown命令,本来目录创建者就是所有者了。另外,需要root权限执行这些命令(sudo,下同)
安装JRE
如果Ubuntu上没安装JRE的话,需要安装JRE(我这里直接安装了JDK,以JDK为例):
到Oracle官网下载JDK6(最新为7,考虑到兼容性问题,安装6):
下载jdk-6u45-linux-i586.bin这个文件。放到主文件夹(home目录)下,进入终端:
1 | $sudo chmod 777 jdk-6u37-linux-x64.bin // 将文件赋予运行权限 |
注意核对一下目录结构是不是正确的。
最后验证JDK是否安装正确:
1 | java -version |
出现了JDK版本信息就表示正确了。
配置Oracle环境变量
为Oracle配置环境变量。同样在主文件夹下的.bashrc配置文件中加入如下内容:
1 | #Oracle |
安装Oracle
欺骗安装程序
oracle本身并不支持ubuntu来安装,所以要进行欺骗oracle的安装程序(sudo执行):
1 | ln -s /etc /etc/rc.d |
注意:以上命令是对应于32位Ubuntu安装32位Oracle的,如果是64位Ubuntu安装64位Oracle,上面的i386-linux-gnu就都要改成x86_64-linux-gnu,目标目录的lib也要改成lib64.(没有lib64就新建一个)
因为Ubuntu将某些库文件根据32位系统和64位系统分别存放了,但Oracle只认/usr/lib和/lib目录,所以需要进行上面的软链接。
下载Oracle
下载Linux x86的那两个文件(64位系统就下Linux x86-64),解压后得到database文件夹。
正式安装
安装之前,为database文件夹下的runInstaller文件赋予可执行权限:
1 | chmod 777 runInstaller |
跳转到database目录,在终端下执行:
1 | ./runInstaller |
此时可能会出现database目录下部分文件的权限不足,导致安装程序无法启动的问题,根据提示,对那些文件使用chmod 777进行授权就行了(貌似一共3个文件)。
启动安装图形界面后,可能会发现文字乱码,全是口口口:

这时可以关闭该界面,先在终端输入:
1 | export LANG=en_US |
或者
1 | export LANG=zh_CN.gbk |
然后再执行:
1 | ./runInstaller |
就可以在全英文界面下进行安装了。
问题复现
交换分区问题
.安装前进行swap空间检查时可能出现swap空间太小的问题,这一般是由于系统安装时没有创建swap分区,解决办法是创建swap文件来开辟swap空间:
通过下面方法建立swap文件:
1 | #dd if=/dev/zero of=/tmp/swapfree bs=32k count=65515 (count是分区数量,swap大小=bs*count,增加2G) |
修改/etc/fstab,让系统每次启动都把/tmp/swapfree作为swap使用,增加下面一行:/tmp/swapfree swap swap defaults 0 0
我在安装linux装系统时,一般都会考虑到设置交换分区。后面会专门把Windows下安装Ubuntu双系统的步骤总结出来。
Oracle用户问题
图形安装界面的第一步是填写电子邮件,但是填完可能会出错:Unexpected error occurred while validating inputs at state ‘getOCMDetails’。这是由于缺少pdksh依赖包,简单的解决办法是不填写邮件地址,不勾选下面的复选框,直接下一步,弹出提示后点‘Yes’就能直接进入下一步了。完美的解决办法可以到网上去看。
安装目录权限错误
在opt/oracle/ 中无法建立软件安装目录(product)和数据库目录(oradata)
解决方法:这是因为在安装程序在/opt/oarcle上没有权限,用命令
1 | sudo chmod 777 /opt/oracle/ -R |
赋予足够权限即可
图形界面下进行依赖检查的时候会列出很多依赖检查失败了,无法进入下一步了,此时选中右上角的‘忽略所有’就可以进入下一步了。
用户与用户组问题
错误提示
OUI-10182 - The effective user ID does not match
在于查看用户与用户组
1 | [oracle database]$ id oracle |
然后设置用户与组的关系
1 | #> chown -R oracle:dba database |
这里把他的用户和用户组换成自己的,然后在安装界面的DBgroup选项选择adm(具体看自己是怎么设置的),这个错过就可以过了。图中的命令格式为:chown -R [uid]:[anyone in groups] [database所在文件夹?忘了]
针对我的
1 | nq-Lenovo-B460:~$ id nq |
1 | uid=1000(nq) gid=1000(nq) 组 = 1000(nq),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),124(sambashare) |
那么我选了nq:adm
所以设置DBgroup为adm
其他错误
漏掉了上面的某些步骤
如果没有严格按照前面的要求做,安装过程中可能弹出错误,此时不要关闭界面,根据给出的日志位置,在日志中查看错误出现的原因,一般都是指定位置找不到相应的文件导致的,此时打开一个新的终端窗口,找到这些文件并将文件复制到对应的位置或者创建软链接即可。(通常是/usr/lib目录下找不到库文件,这些库文件都位于/usr/lib/i386-linux-gnu目录下了)然后在图形界面点击“Retry‘即可继续安装。
比如:“error in invoking target 'client_sharedlib' of makefile '/opt/oracle11g/server/rdbms/lib/ins_rdbms.mk''这个错误就是没有执行:
1 | ln -s /usr/lib/i386-linux-gnu/libpthread_nonshared.a /usr/lib/libpthread_nonshared.a |
这两个命令导致的(针对32位安装的情况)。
如果严格按照前面的要求做了,上面这种错误是不会出现的。另外,如果32位系统安装64位Oracle或者64位系统安装32位Oracle也是会弹出错误的,错误提示是这样的:
Error in invoking target 'client_sharedlib' of makefile '/opt/app/oracle/product/10.2.0/db_1/network/lib/ins_net_client.mk'
这种错误就只能重新下载正确的Oracle版本再进行安装了。
apt-get找不到软件
由于按照上面的apt-get install的命令中,有很多软件是找不到的,而且有些依赖包找不到,我们之前也都给忽略了,导致了这里 “69%” 错误,出现ctx有关的错误(.mk错误,缺少相关编译环境)。
解决办法都在这儿了,把该用的支持包安装后基本这问题就可以过了.
天花板
即使严格按照要求做了,还是会出现两个错误:(随后连个.mk错误)
a

解决办法:
打开一个新的终端,输入如下命令:
1 | sed -i 's/^\(\s*\$(MK_EMAGENT_NMECTL)\)\s*$/\1 -lnnz11/g' $ORACLE_HOME/sysman/lib/ins_emagent.mk |
然后在图形界面点击‘Retry’就能继续安装了。
下面的安装过程就没有什么问题了。
最后应该就顺利完成了,按照安装程序提示最后执行两个脚本:
1 | sudo /opt/oraInventory/orainstRoot.sh |
就完成了全部的安装。可以通过https://localhost:1158/em进行网络访问
安装后的问题
a.终端下使
1 | emctl start dbcontrol |
命令启动em控制台时出现:
Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name.
的问题,解决办法是设置一个
UNQNAME :export ORACLE_UNQNAME=xxxx
之后会出现会出现 emctl 23 bad number
解决方案:编辑$ORACLE_HOME/bin/emctl,把第一行的#!/bin/sh改为#!/bin/bash即可
b.设置完成后
在终端使用emctl命令关闭或启动dbconsole(emctl stop dbconsole , emctl start dbconsole)的时候还可能出错:
OC4J Configuration issue. /opt/oracle/product/11.2.0/dbhome_1/oc4j/j2ee/OC4J_DBConsole_pavilion_orcl not found.
EM Configuration issue. /opt/oracle/product/11.2.0/dbhome_1/pavilion_orcl not found.
解决此问题的办法是:
将$ORACLE_HOME/NETWORK/ADMIN/listener.ora文件中的HOST=localhost
改为
HOST=pavilion(paviliion为你的主机名)
然后在相应位置完整复制OC4J_DBConsole_localhost_orcl和localhost_orcl并重命名为OC4J_DBConsole_pavilion_orcl和pavilion_orcl
1 | cp -rp /opt/oracle/product/11.2.0/dbhome_1/oc4j/j2ee/OC4J_DBConsole_localhost_orcl /opt/oracle/product/11.2.0/dbhome_1/oc4j/j2ee/OC4J_DBConsole_pavilion_orcl |
如此就能正常启动和关闭dbcontrol了。
或者可以直接使用
1 | emca -config dbconsole db |
命令重新配置一下资料库也可以解决。
另外,修改了Ubuntu主机名或IP地址后同样会导致这样的问题,解决办法也是一样的。
另附EM资料库配置教程
c.EM控制台中的按钮都是口口乱码
这是由于Java字体缺失导致的,因为EM的按钮都是Java生成的。解决办法是:
在JDK(或JRE)的字体文件夹下新建中文字体目录fallback,并将Windows系统下的simsun.ttc字体文件复制到fallback下,然后将其改名为simsun.ttf并授予恰当权限:
1 | $ mkdir $ORACLE_HOME/jdk/jre/lib/fonts/fallback |
后需要清理一下Cache,重启EM即可:
1 | $ rm $ORACLE_HOME/oc4j/j2ee/oc4j_applications/applications/em/em/cabo/images/cache/zhs/*.gif |
登陆Web页面查看,EM显示就可以正常显示中文了.
d.在终端运行sqlplus/as sysdba命令进入SQLPlus工具时可能出现错误:
sqlplus: error while loading shared libraries: /u01/app/oracle/product/11.1.0/db_1/lib/libnnz11.so: cannot restore segment prot after reloc: Permission denied
这是由于SELinux导致的,解决办法是禁用SELinux:
更改/etc/sysconfig/selinux文件的内容为SELINUX=disabled,然后重启
或者使用chcon命令:
1 | chcon -t texrel_shlib_t /usr/local/rsi/idl_6.1/bin/bin.linux.x86/*.so |
e.启动Linstener时可能出现错误:
TNS-12555: TNS:permission denied
原因是无法访问/var/tmp/.oracle文件夹,解决办法是进行授权:
1 | sudo chmod 777 /var/tmp/.oracle |
f.系统关机后每次开机都必须手动启动Oracle,可以编写一个自启动脚本实现每次开机自动启动Oracle,附Oracle启动/关闭方法以及开机自启动脚本
卸载Oracle
- 运行 $ORACLE_HOME/bin/localconfig delete
- rm -rf $ORACLE_BASE/*
- rm -f /etc/oraInst.loc /etc/oratab
- rm -rf /etc/oracle
- rm -f /etc/inittab.cssd
- rm -f /usr/local/bin/coraenv /usr/local/bin/dbhome /usr/local/bin/oraenv
- rm -rf $ORCLE_HOME
done!