这里记录一下在 debian 6.0 上安装和配置 oracle 数据库 11gR2 的一些注意事项。
准备工作
先设置一下环境变量(加入 ~/.bashrc):
export ORACLE_BASE=<oracle base>
export ORACLE_HOME=<install home>
export ORACLE_SID=<orcl> # default is orcl
export PATH=$PATH:$ORACLE_HOME/bin
注意环境变量的目录末尾不能带有“/”,否则会有奇奇怪怪的问题。然后读入设置:
. ~/.bashrc
安装一些包:
aptitude install gawk libaio1 libaio-dev libstdc++5
ln -s /usr/bin/gawk /bin/awk
ln -s /usr/bin/basename /bin/basename
稍微注释一下,awk 是安装的最后一步配置时用到的,basename 是为了解决下面的错误提示:
libclntsh.so: undefined reference to `nnfoboot'
网上说的解决这个错误还有另外两步:
ln -s $ORACLE_HOME/lib/libclient10.a $ORACLE_HOME/lib/libagtsh.a
$ORACLE_HOME/bin/genagtsh $ORACLE_HOME/lib/libagtsh.so 1.0
经过实践发现只需建一个 basename 的软链接就行了。
把下面两行加入 /etc/sysctl.conf:
fs.file-max = 6815744
# 根据实际需要设置 shm 的最大值,如果小了在安装过程中会有提示
kernel.shmmax = 6442450944
然后执行
sysctl -p
使之生效。除了这两个参数还有另外很多要求,但是一路用起来也没发现什么所以就不管了,其实 fs.file-max 不改好像也没问题。
安装前最后一步提示缺少 xx 包可以忽略掉,因为 debian 中没有特定的版本;另外还有一堆内核参数不对,oracle 倒是有个“Fix & Check Again”按钮,但是这个只对 rhel 有用,debian 一点反应都没有,所以不管了。
启动
先启动 listener:
lsnrctl start
然后启动数据库:
sqlplus /nolog <<!
connect /as sysdba
startup
!
如果启动成功会出现下面类似的提示:
ORACLE instance started.
Total System Global Area xxx bytes
Fixed Size xxx bytes
Variable Size xxx bytes
Database Buffers xxx bytes
Redo Buffers xxx bytes
Database mounted.
Database opened.
启动不了会出现各种各样的问题,我都是重装完事。
使用 web 控制界面
oracle 安装完后会提示使用 web 控制界面的地址:
https://localhost:1158/em
机器重启后不能访问,执行下面的命令:
emctl start dbconsole
如果报错:
ulimit: 25: bad number
OC4J Configuration issue. $ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_<hostname>_orcl not found.
第一个错误很好解决,编辑 $ORACLE_HOME/bin/emctl,把第一行的“#!/bin/sh”改为“#!/bin/bash”即可。
第二个错误比较麻烦,先到 $ORACLE_HOME/oc4j/j2ee/ 下可以发现有一个名为“OC4J_DBConsole_localhost_orcl”的文件夹,把这个文件夹复制一份并重命名为“OC4J_DBConsole_
EM Configuration issue. $ORACLE_HOME/<hostname>_orcl not found.
同样复制重命名再重启一般就可以了。如果还不行的话就要出大招了:
emca -deconfig dbcontrol db -repos drop
emca -config dbcontrol db -repos create
或者
emca -config dbcontrol db -repos recreate
我试了几次都出现了几个“SEVERE”字样的错误,所以这方法不一定可行,但是网上是这么说的,我也就顺手做下笔记。
这种情况可能是由于安装的时候使用的是 localhost,而重启了之后却用了真实的 ip 造成的。如果还不能访问,先申请一个静态 ip(没有静态 ip 的话我也不知道怎么办)然后做下面的步骤;或者如果可以访问网站但是出来的却是乱码,其中含有“EMKey”字样的,也做下面的步骤。先看看提示里的做法:
1) Copy the emkey.ora file from another OMS or backup machine to the $ORACLE_HOME/sysman/config and run following commands:
i) $ORACLE_HOME/bin/emctl config emkey -emkeyfile $ORACLE_HOME/sysman/config/emkey.ora -force
ii) $ORACLE_HOME/bin/emctl config emkey -copy_to_repos
iii) Run EM Configuration Assistant again (试试这个:emca -config dbcontrol db -repos recreate)
2) If emkey.ora is not available from backup, run $ORACLE_HOME/bin/emca with -repos create option.
前面的方法还不行的话...找 dba 去吧,或者重装数据库或者操作系统...终于明白为什么会有 oracle 认证而没有 mysql 认证,而且考个证书贼贵。mysql 落在 oracle 手里还不知前途怎样,当初 SUN 就不应该收购 mysql,结果是害了自己也害了别人。
再多说两句。SUN 让我想起了 SGI,一家和 SUN 一样我很喜欢的公司。现在跑着 oracle 数据库的文件系统就是 SGI 开发的 xfs,一个据说读写速度接近裸设备的文件系统。SUN 和 SGI 都成立于 1982 年,在上世纪 90 年代到本世纪初辉煌一时,但又不约而同地在 2009 年陨落:SUN 被金钱味极重的 oracle 收购,而 SGI 则落入了一家不甚出名的公司 rackable systems 手中。