1、 安装依赖项
sudo apt-get install gcc make binutils libc6 libc6-dev lesstif2 rpm libmotif3 libstdc++5 libaio1 libaio-dev
2、 创 建 ORACLE 用 户
sudo addgroup oinstall
sudo addgroup dba
sudo addgroup nobody
sudo usermod -g nobody nobody
sudo useradd -g oinstall -G dba -m -d /home/oracle -s /bin/bash oracle
sudo passwd oracle
3、 创 建 ORACLE 安装目 录
sudo mkdir /opt/oracle
sudo mkdir /opt/oraInventory
sudo chown -R oracle:oinstall /opt/oracle
sudo chown -R oracle:oinstall /opt/oraInventory
4、修改/etc/sysctl.conf,修改linux 内核参数
sudo gedit /etc/sysctl.conf 在文件最后添加
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
运行一下命令更新内核参数
sudo sysctl -p
5、添加对oracle用户的内核限制,
sudo gedit /etc/security/limits.conf 在文件最后添加:
oracle soft nproc 2047
oracle hard nproc 16383
oracle soft nofile 1023
oracle hard nofile 65535
6、
检查/etc/pam.d/login,增加以下行(实际已有了不用增加)
session required pam_limits.so
检查/etc/pam.d/su,增加以下行(实际已有了不用增加)
session required pam_limits.so
7、因为Oracle 默认Linux 系统是Red Hat ,模仿Red Hat
创建文件的链接,使Ubuntu 的目录结构与Red Hat 一致
sudo ln -s /usr/bin/awk /bin/awk
sudo ln -s /usr/bin/rpm /bin/rpm
sudo ln -s /usr/bin/basename /bin/basename
sudo ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
sudo mkdir /etc/rc.d
sudo ln -s /etc/rc0.d /etc/rc.d/rc0.d
sudo ln -s /etc/rc1.d /etc/rc.d/rc1.d
sudo ln -s /etc/rc2.d /etc/rc.d/rc2.d
sudo ln -s /etc/rc3.d /etc/rc.d/rc3.d
sudo ln -s /etc/rc4.d /etc/rc.d/rc4.d
sudo ln -s /etc/rc5.d /etc/rc.d/rc5.d
sudo ln -s /etc/rc6.d /etc/rc.d/rc6.d
sudo ln -s /etc/init.d /etc/rc.d/init.d
编辑/etc/RedHat-release。
su
echo 'Red Hat Linux release 5' > /etc/redhat-release
8. Oracle用户变量
以oracle 用 户 登 录 , 进 入主目 录 ,配置 .bashrc 文件
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=testora
export ORACLE_OWNER=oracle
export ORACLE_TERM=xterm
export ORACLE_UNQNAME=testora
export ORACLE_HOSTNAME=localhost
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export LANG=en_US
9、 开 始 安装
默认情况下安装界面是乱码的,export LANG=en_US使用英文界面安装
./runInstaller
10.链接错误处理,link进度到84%报错处理
10.1 Error in invoking target 'agent nmhs' of makefile '/opt/oracle/product/11.2.0/db_1/sysman/lib/ins_emagent.mk'
在日志中详细错误为
/usr/bin/ld: /opt/oracle/product/11.2.0/db_1/sysman/lib//libnmectl.a(nmectlt.o): undefined reference to symbol 'B_DestroyKeyObject'
以及:
Error in invoking target 'all_no_orcl' of makefile '/opt/oracle/product/11.2.0/db_1/rdbms/lib/ins_rdbms.mk'.
INFO: pt/oracle/product/11.2.0/db_1/lib/libcommon11.a(kdxd4.o): In function `kdxd4bu':
kdxd4.c:(text.hot+0x2467): undefined reference to `lnxren'
collect2: error: ld returned 1 exit status
/opt/oracle/product/11.2.0/db_1/bin/genorasdksh: Failed to link liborasdk.so.11.1
make: *** [liborasdksh] Error 1
处理方法,参考[2]:
sed -i 's/^\(\s*\$(MK_EMAGENT_NMECTL)\)\s*$/\1 -lnnz11/g' $ORACLE_HOME/sysman/lib/ins_emagent.mk
###或者打开 ins_emagent.mk文件, 找到 $(MK_EMAGENT_NMECTL) 改成 $(MK_EMAGENT_NMECTL) -lnnz11
类似编译选项错误,这里一并处处理
sed -i 's/^\(\$LD \$LD_RUNTIME\) \(\$LD_OPT\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/bin/genorasdksh #注意正则式中有空格
sed -i 's/^\(ORACLE_LINKLINE.*\$(ORACLE_LINKER)\) \(\$(PL_FLAGS)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
sed -i 's/^\(\s*\)\(\$(OCRLIBS_DEFAULT)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/srvm/lib/ins_srvm.mk
sed -i 's/^\(TNSLSNR_LINKLINE.*\$(TNSLSNR_OFILES)\) \(\$(LINKTTLIBS)\)/\1 -Wl, --no-as-needed \2/g' $ORACLE_HOME/network/lib/env_network.mk
sed -i 's/^\(TNSLSNR_LINKLINE.*\$(TNSLSNR_OFILES)\) \(\$(LINKTTLIBS)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/network/lib/env_network.mk
###补充:其后才发现:Wl,与--no-as-needed之间应没有空格,这里正确的话根本不会出现下面10.3的error: unrecognized command line option '--no-as-needed'。就一个空格费了我好多时间在这上面。
10.2. INFO: gcc: error: /lib64/libgcc_s.so.1: No such file or directory
处理方法:
sudo ln -s /opt/oracle/product/11.2.0/db_1/lib/stubs/libgcc_s.so.1 /lib64/libgcc_s.so.1
10.3.Error in invoking target 'install' of makefile '/opt/Oracle/product/11.2.0/db_1/network/lib/ins_net_server.mk'.
日志中详细出错信息:
INFO: - Linking tnslsnr
INFO: rm -f tnslsnr
INFO: gcc -o tnslsnr -m64 -L/opt/oracle/product/11.2.0/db_1/network/lib/ -L/opt/oracle/product/11.2.0/db_1/lib/ -L/opt/oracle/product/11.2.0/db_1/lib/stubs/ /opt/oracle/product/11.2.0/db_1/network/lib/s0nsgl.o /opt/oracle/product/11.2.0/db_1/network/lib/snsglp.o -Wl, --no-as-needed -lclntsh `cat /opt/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /opt/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11 -lztkg11 -l
INFO: ztkg11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lmm -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `cat /opt/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /opt/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -l
INFO: nls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `cat /opt/oracle/product/11.2.0/db_1/lib/sysliblist` -Wl,-rpath,/opt/oracle/product/11.2.0/db_1/lib -lm `cat /opt/oracle/product/11.2.0/db_1/lib/sysliblist` -ldl -lm -L/opt/oracle/product/11.2.0/db_1/lib -lons -lnl11 -ln11 -lnlsnr11 -lnlsnrc11 -lnsgr11 -l
INFO: nms -lncm11 -lnmsp -lpeer -lnro11 -ln11 -lnl11 -lnlsnr11 -lnlsnrc11 -lnms -lncm11 -lnmsp -ln11 -lm
INFO: gcc: error: unrecognized command line option '--no-as-needed'
INFO: make: *** [tnslsnr] Error 1
或:
INFO: - Linking tnslsnr
rm -f tnslsnr
INFO: gcc -o tnslsnr -m64 -L/opt/oracle/product/11.2.0/db_1/network/lib/ -L/opt/oracle/product/11.2.0/db_1/lib/ -L/opt/oracle/product/11.2.0/db_1/lib/stubs/ /opt/oracle/product/11.2.0/db_1/network/lib/s0nsgl.o /opt/oracle/product/11.2.0/db_1/network/lib/snsglp.o -lclntsh `cat /opt/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /opt/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11 -lztkg11 -lztkg11 -lclient11 -l
INFO: nnetd11 -lvsn11 -lcommon11 -lgeneric11 -lmm -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `cat /opt/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /opt/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore
INFO: 11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `cat /opt/oracle/product/11.2.0/db_1/lib/sysliblist` -Wl,-rpath,/opt/oracle/product/11.2.0/db_1/lib -lm `cat /opt/oracle/product/11.2.0/db_1/lib/sysliblist` -ldl -lm -L/opt/oracle/product/11.2.0/db_1/lib -lons -lnl11 -ln11 -lnlsnr11 -lnlsnrc11 -lnsgr11 -lnms -lncm11 -lnmsp -
INFO: lpeer -lnro11 -ln11 -lnl11 -lnlsnr11 -lnlsnrc11 -lnms -lncm11 -lnmsp -ln11 -lm
INFO: /opt/oracle/product/11.2.0/db_1/network/lib//libnlsnr11.a(nsglsn.o): In function `nsglonsterm':
nsglsn.c:(.text+0xc29): undefined reference to `ons_subscriber_close'
nsglsn.c:(.text+0xc3b): undefined reference to `ons_shutdown_nowait'
/opt/oracle/product/11.2.0/db_1/network/lib//libnlsnr11.a(nsglsn.o): In function `nsglma':
nsglsn.c:(.text+0x1ffb): undefined reference to `ons_subscriber_receive'
nsglsn.c:(.text+0x251d): undefined reference to `ons_notification_body'
nsglsn.c:(.text+0x2a4b): undefined refere
INFO: nce to `ons_subscriber_relinquish'
nsglsn.c:(.text+0x2a62): undefined reference to `ons_subscriber_receive'
/opt/oracle/product/11.2.0/db_1/network/lib//libnlsnr11.a(nsglsn.o): In function `nsglonsinit':
nsglsn.c:(.text+0x2d43c): undefined reference to `ons_init'
nsglsn.c:(.text+0x2d457): undefined reference to `ons_subscriber_create_async'
nsglsn.c:(.text+0x2d473): undefined reference to `ons_subscriber_status'
nsglsn.c:(.text+0x2dc94): undefined reference to `ons_shutdown_nowait'
nsglsn.c:(.text+0x2e1d8):
INFO: undefined reference to `ons_init_woraclehome'
/opt/oracle/product/11.2.0/db_1/network/lib//libnlsnr11.a(nsgcs.o): In function `nsgcsss':
nsgcs.c:(.text+0x58c): undefined reference to `ons_subscriber_status'
collect2: error: ld returned 1 exit status
INFO: make: *** [tnslsnr] Error 1
--****************
处理方法:
1.手工编译上面出错的gcc命令,修改了编译选项如下
gcc -o tnslsnr -m64 -L/opt/Oracle/product/11.2.0/db_1/network/lib/ -L/opt/oracle/product/11.2.0/db_1/lib/ -L/opt/oracle/product/11.2.0/db_1/lib/stubs/ /opt/oracle/product/11.2.0/db_1/network/lib/s0nsgl.o /opt/oracle/product/11.2.0/db_1/network/lib/snsglp.o -lclntsh `cat /opt/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /opt/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11 -lztkg11 -lztkg11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lmm -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `cat /opt/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /opt/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `cat /opt/oracle/product/11.2.0/db_1/lib/sysliblist` -Wl,-rpath,/opt/oracle/product/11.2.0/db_1/lib,-rpath,/opt/oracle/product/11.2.0/db_1/network/lib/ -lm `cat /opt/oracle/product/11.2.0/db_1/lib/sysliblist` -ldl -lm -L/opt/oracle/product/11.2.0/db_1/lib -lnl11 -ln11 -lnlsnr11 -lnlsnrc11 -lnsgr11 -lnms -lncm11 -lnmsp -lpeer -lnro11 -ln11 -lnl11 -lnlsnr11 -lnlsnrc11 -lnms -lncm11 -lnmsp -ln11 -lm -leons
如果上面通过,会以所在目录生成tnslsnr可执行文件,以后拷到$ORACLE_HOME/bin/
2.修改ins_net_server.mk文件,注释掉tnslsnr的生成以及itnslsnr: tnslsnr改为itnslsnr:
gedit /opt/oracle/product/11.2.0/db_1/network/lib/ins_net_server.mk
#tnslsnr: $(S0NSGL) $(SNSGLP) $(NSGLPNP)
# $(SILENT)$(ECHO) " - Linking $(TNSLSNR)"
# $(RMF) $@
# $(TNSLSNR_LINKLINE)
#itnslsnr: tnslsnr
itnslsnr:
重试继续后[3]中说又有错误INFO: /database/app/oracle/product/11.2.0/dbhome_1/lib//libocrutl11.so: undefined reference to `lfifcp'
但实际我未出现。
附:常用工具
dbca
netca,netmgr
lsnrctl
sqlplus
emctl start|stop dbconsole
重新配置dbconsole的步骤
emca -repos drop
emca -repos create
emca -config dbcontrol db
emctl start dbconsole