1、Oracle数据库由Oracle公司开发,所以它在安装时只支持Oracle旗下的OS及战略伙伴的OS。具体参考$ORACLE_HOME/cv/cvdata/cvu_prereq.xml,列举一段xml:
<OPERATING_SYSTEM RELEASE="SUSE12">
<VERSION VALUE="12"/>
<ARCHITECTURE VALUE="x86_64"/>
<NAME VALUE="Linux"/>
<VENDOR VALUE="SuSE"/>
<KERNEL_VER VALUE="3.12.28"/>
<KERNEL>
<PROPERTY NAME="semmsl" NAME2="semmsl2" VALUE="250" SEVERITY="IGNORABLE"/>
<PROPERTY NAME="semmns" VALUE="32000" SEVERITY="IGNORABLE"/>
<PROPERTY NAME="semopm" VALUE="100" SEVERITY="IGNORABLE"/>
<PROPERTY NAME="semmni" VALUE="128" SEVERITY="IGNORABLE"/>
<PROPERTY NAME="shmmax" SEVERITY="IGNORABLE">
<STEPS>
<STEP NAME="PHYSICAL_MEMORY" GREATER_THAN="1024" UNIT="MB" MULTIPLE="0.5"/>
</STEPS>
</PROPERTY>
<PROPERTY NAME="shmmni" VALUE="4096" SEVERITY="IGNORABLE"/>
<PROPERTY NAME="shmall" SEVERITY="IGNORABLE">
<STEPS>
<!-- assigning minimum value for shmall. Fixing bug 27064319. -->
<MIN VALUE="1024" UNIT="MB"/>
<!-- Checking shmall same as shmmax. Fixing bug 22711523. -->
<STEP NAME="SHMMAX" GREATER_THAN="1024" UNIT="MB" MULTIPLE="1.0"/>
</STEPS>
</PROPERTY>
<PROPERTY NAME="file-max" VALUE="6815744" SEVERITY="IGNORABLE"/>
<PROPERTY NAME="ip_local_port_range" ATLEAST="9000" ATMOST="65535" SEVERITY="IGNORABLE"/>
<PROPERTY NAME="rmem_default" VALUE="262144" SEVERITY="IGNORABLE"/>
<PROPERTY NAME="rmem_max" VALUE="4194304" SEVERITY="IGNORABLE"/>
<PROPERTY NAME="wmem_default" VALUE="262144" SEVERITY="IGNORABLE"/>
<PROPERTY NAME="wmem_max" VALUE="1048576" SEVERITY="IGNORABLE"/>
<PROPERTY NAME="aio-max-nr" VALUE="1048576" SEVERITY="IGNORABLE"/>
<PROPERTY NAME="panic_on_oops" VALUE="1" SEVERITY="IGNORABLE"/>
</KERNEL>
<PACKAGES>
<!-- Packages for ASM -->
<CONDITION VAR="ASM">
<PACKAGE NAME="oracleasm-support" VALUE="2.0" SEVERITY="IGNORABLE"/>
<PACKAGE NAME="oracleasmlib-%KERNEL_RELEASE%" VALUE="2.0" SEVERITY="IGNORABLE"/>
<PACKAGE NAME="oracleasmlib" VALUE="2.0" SEVERITY="IGNORABLE"/>
</CONDITION>
<CONDITION VAR="OCFS2">
<PACKAGE VAR="ocfs2" VALUE="1.2.9" SEVERITY="IGNORABLE"/>
<PACKAGE NAME="ocfs2-tools" VALUE="1.2.3" SEVERITY="IGNORABLE"/>
</CONDITION>
<PACKAGE NAME="make" VALUE="4.0" SEVERITY="IGNORABLE"/>
<PACKAGE NAME="binutils" VALUE="2.24" SEVERITY="IGNORABLE"/>
<PACKAGE NAME="gcc-c++" VALUE="4.8" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="libaio1" VALUE="0.3.109" SEVERITY="IGNORABLE"/>
<PACKAGE NAME="libaio-devel" VALUE="0.3.109" SEVERITY="IGNORABLE"/>
<PACKAGE NAME="libstdc++6" VALUE="4.8.3" SEVERITY="IGNORABLE"/>
<PACKAGE NAME="sysstat" VALUE="8.1.5" SEVERITY="IGNORABLE"/>
<PACKAGE NAME="glibc-devel" VALUE="2.19" SEVERITY="IGNORABLE"/>
<PACKAGE NAME="glibc" VALUE="2.19" SEVERITY="CRITICAL"/>
<PACKAGE NAME="libcap-ng-utils" VALUE="0.7.3-4.125" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="libcap-ng0" VALUE="0.7.3-4.125" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="libcap-ng0-32bit" VALUE="0.7.3-4.125" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="libcap-progs" VALUE="2.22-11.709" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="libcap1" VALUE="1.10-59.61" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="libcap1-32bit" VALUE="1.10-59.61" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="libcap2" VALUE="2.22-11.709" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="libcap2-32bit" VALUE="2.22-11.709" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="libgcc_s1" VALUE="4.8.3" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="libgcc_s1-32bit" VALUE="4.8.3" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="libXtst6" VALUE="1.2.2" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="libXtst6-32bit" VALUE="1.2.1" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="nfs-kernel-server" VALUE="1.3.0-6.9" SEVERITY="IGNORABLE" ARCHITECTURE="x86_64"/>
<PACKAGE NAME="xorg-x11-libs" VALUE="7.6-45.14" SEVERITY="IGNORABLE"/>
<PACKAGE NAME="smartmontools" VALUE="6.2-4.33" SEVERITY="IGNORABLE"/>
<PACKAGE NAME="net-tools" VALUE="1.60-764" SEVERITY="IGNORABLE"/>
</PACKAGES>
</OPERATING_SYSTEM>
该节点取自XPATH路径/HOST/CERTIFIED_SYSTEMS/OPERATING_SYSTEM,该节点下的PACKAGES/PACKAGE节点组为必须安装的软件包及最低版本号。
Oracle For Linux支持的OS有SUSE12、OEL6、OL7、RHEL6、RHEL7。其中OL与RHEL都是RedHat分支,因此只要是RedHat的下属分支都被Oracle支持,比如CentOS与Fedora。SUSE的情况也是如此,SUSE源自Slackware,于是Slackware同样容易安装Oracle。
然而Oracle的OS检测并非基于/etc/xxxx-release文件,而是rpm命令,比如首先检测OL
/bin/sh -c '/bin/rpm -q --whatprovides --qf %{V} oraclelinux-release'
检测成功则返回一个数字。因此非OL、非RHEL、非SUSE的Linux,可以自写一个rpm脚本欺骗Oracle安装程序
如果是RedHat或SUSE的子系,可以先重命名rpm,然后截获OS检测
# mv /bin/rpm /bin/rpm2
# vi /bin/rpm
#!/bin/sh
for x in $*; do
pkg=$x
done
if ([ $pkg = "oraclelinux-release" ])
then
echo "7.6"
exit 0
else
/bin/rpm2 $*
fi
如果是其他Linux
# vi /bin/rpm
#!/bin/sh
for x in $*; do
pkg=$x
done
if ([ $pkg = "oraclelinux-release" ])
then
echo "7.6"
exit 0
elif ([ $(echo $pkg | awk '{s=substr($0,0,1);print s;}') = "-" ])
then
exit 0
else
echo "no package provides ${pkg}"
exit 1
fi
只要OS检测通过,软件包检测抛出的警告可以忽略。软件包检测的命令如下:
/bin/sh -c '/bin/rpm -q -queryformat "<PACKAGE><NAME,%{NAME}><ARCH,%{ARCH}><VERSION,${VERSION}-%{RELEASE}></PACKAGE>" binutils'
当然不想这么麻烦的话,可以用./runInstaller -skipPrereqs跳过所有检测。
只要软件安装没有问题,监控与实例安装应该没有问题。
2、Oracle不支持127.0.0.1,因此必须单独设置host及其对应的IP地址
3、Debian系的Oracle安装最繁琐,不仅需要创建软连接,还需要更改好几个mk文件,而Ubuntu在runInstaller之后更是需要重新创建链接库,其他的Linux没有发现这种情况,甚至比较偏门的AltLinux安装Oracle也很方便,只要采用静默方式安装,Oracle依赖软件包大概十个左右,比如核心的libcap、libaio、libstdc++5。
4、滚动更新快速的Linux安装有点麻烦,主要是glibc,比如archlinux和gentoo的glibc版本都是2.28,这个版本不再提供oracle需要的libpthread_nonshared.a,估计后续版本也是如此,因此需要单独安装glibc-2.27版本,然后软链接到/usr/lib64目录下。另外gentoo的sysctl不在/sbin目录下,而在/usr/sbin目录下,也需要建立软链接。
gentoo的配置选用
[25] default/linux/amd64/17.0/systemd (stable) *
系统安装之后,需要安装如下几个包:
# emerge -av dev-libs/icu sys-apps/gawk sys-devel/gdb app-admin/sysstat sys-libs/libstdc++-v3 dev-db/unixODBC dev-libs/libaio sys-libs/libcap sys-apps/smartmontools
rpm仍然采用sh脚本欺骗Oracle
5、runInstaller安装过程如果有-lclntshcore错误,需要检查$ORACLE_HOME/lib目录下的libclntshcore.so.19.1文件是否存在,libclntshcore.so即libclntshcore.so.19.1的软链接,runInstaller安装如果产生不可忽视的错误,那么有可能丢失libclntshcore.so.19.1文件,很郁闷,搞不懂它为何丢失,如果丢失,只有从zip文件之中提取出来,放入$ORACLE_HOME/lib目录下。
5、sqlplus命令行的Backspace键产生^H字符或者其他功能键产生无厘头字符串,使用Ctrl+Backspace删除。