ORACLE数据库安装过程

1. 安装依赖

1
sudo apt-get install automake  autotools-dev binutils bzip2 elfutils expat gawk gcc gcc-multilib g++-multilib lib32ncurses5 lib32z1 ksh less libmotif-dev lib32z1 libaio1 libaio-dev libc6-dev libc6-dev-i386 libc6-i386  libelf-dev libltdl-dev libxm4:i386 libuil4:i386 libmrm4:i386 libxm4 libuil4 libmrm4 libmotif-common libodbcinstq4-1 libodbcinstq4-1:i386 libpth-dev  libpthread-stubs0-dev libstdc++5 lsb lsb-core make openssh-server  mksh rlwrap rpm sysstat unixodbc unixodbc-dev unzip x11-utils zlibc

手动安装以下安装包:

lesstif2 暂时忽略

对于 libpthread-stubs0

1
2
3
4
5
6
7
sudo su
echo 'deb http://cz.archive.ubuntu.com/ubuntu precise main universe' >> /etc/apt/sources.list.d/extra.list
apt-get update
apt-get install libpthread-stubs0
mv /etc/apt/sources.list.d/extra.list /etc/apt/sources.list.d/extra.list.backup
apt-get update
exit

2. 检测系统变量

1
2
3
4
5
6
7
8
9
sudo /sbin/sysctl -a | grep sem 
sudo /sbin/sysctl -a | grep shm
sudo /sbin/sysctl -a | grep file-max
sudo /sbin/sysctl -a | grep aio-max
sudo /sbin/sysctl -a | grep ip_local_port_range
sudo /sbin/sysctl -a | grep rmem_default
sudo /sbin/sysctl -a | grep rmem_max
sudo /sbin/sysctl -a | grep wmem_default
sudo /sbin/sysctl -a | grep wmem_max

然后根据上面命令中得到的参数值在/etc/sysctl.conf中增加对应数据

1
sudo vim /etc/sysctl.conf

把sysctl.conf中的以下内容用查得的值填上

1
2
3
4
5
6
7
8
9
10
11
fs.aio-max-nr = ? 
fs.file-max = ?
kernel.shmall = ?
kernel.shmmax = ?
kernel.shmmni = ?
kernel.sem = ?
net.ipv4.ip_local_port_range = ?
net.core.rmem_default = ?
net.core.rmem_max = ?
net.core.wmem_default = ?
net.core.wmem_max = ?

运行一下命令更新内核参数:

1
sudo sysctl -p  

修改安装Oracle的用户的资源限制

对于Ubuntu 16.04.2 LTS仅需添加下面的内容:

1
2
3
4
5
6
root@dbserver:~# vi /etc/security/limits.conf
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle soft memlock 3145728
oracle hard memlock 3145728

3. 创建用户组和用户

创建oinstall、dba、oper用户组和oracle用户:

1
2
3
4
5
6
7
8
9
10
11
root@dbserver:~# groupadd oinstall
root@dbserver:~# groupadd dba
root@dbserver:~# groupadd oper
root@dbserver:~# useradd -g oinstall -G dba,oper oracle
root@dbserver:~# passwd oracle
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
//Ubuntu下需要手动创建主目录:
root@dbserver:~# mkdir /home/oracle
root@dbserver:~# chown oracle:oinstall ~oracle

检查umask变量,使用oracle用户登录:

1
2
3
4
5
6
7
root@dbserver:~# su - oracle
# su - oracle
$ umask
0022
//确保umask=022,否则修改.bash_profile添加如下行:
$ vi ~/.profile
umask 0022

4. 创建软件安装目录

创建ORACLE_BASE并授权:

1
2
3
root@dbserver:~# mkdir -p /u01/app/
root@dbserver:~# chown -R oracle:oinstall /u01
root@dbserver:~# chmod -R 775 /u01
1
2
3
4
5
6
7
8
9
10
11
#oracle安装目录,本步创建的文件夹
export ORACLE_BASE=/u01/app/oracle
#网上说可以随便写
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
#数据库的sid
export ORACLE_SID=orcl
export ORACLE_UNQNAME=orcl
#默认字符集
export NLS_LANG=.AL32UTF8
#环境变量
export PATH=${PATH}:${ORACLE_HOME}/bin/:$ORACLE_HOME/lib64;
  1. 关于oracle图形化安装过程中出现的黑色竖线的处理办法

默认我们安装的时候都是: ./runInstaller 也就是直接运行安装文件,但是这种默认安装的方式就会出现上述错误,为了避免上述情况出现可以通过指定参数安装:

1
./runInstaller -jreLoc /usr/lib/jvm/jdk1.8.0_211

链接一下

1
2
3
4
5
6
7
8
9
10
11
sudo mkdir /usr/lib64 
sudo ln -s /etc /etc/rc.d
sudo ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib64/
sudo ln -s /usr/bin/awk /bin/awk
sudo ln -s /usr/bin/basename /bin/basename
sudo ln -s /usr/bin/rpm /bin/rpm
sudo ln -s /usr/lib/x86_64-linux-gnu/libc_nonshared.a /usr/lib64/libc_nonshared.a
sudo ln -s /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a /usr/lib64/libpthread_nonshared.a
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /lib64/
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib64/
echo 'Red Hat Linux release 5' > /etc/redhat-release

环境变量

1
2
3
4
5
6
7
8
9
10
11
12

#oracle安装目录,第5步创建的文件夹
export ORACLE_BASE=/u01/app/oracle
#网上说可以随便写
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
#数据库的sid
export ORACLE_SID=orcl
export ORACLE_UNQNAME=orcl
#默认字符集
export NLS_LANG=.AL32UTF8
#环境变量
export PATH=${PATH}:${ORACLE_HOME}/bin/:$ORACLE_HOME/lib64;

错误1:Error in invoking target ‘client_sharedlib’ of makefile ‘/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/ins_rdbms.mk’.

打开日志文件,查找出错原因

1
2
3
root@dbserver:~# find /usr -name libpthread_nonshared.a
/usr/lib/x86_64-linux-gnu/libpthread_nonshared.a
root@dbserver:~# ln -s /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a /usr/lib64/libpthread_nonshared.a

错误2: lib//libagtsh.so: undefined reference to `nnfyboot’ in make: rdbms/lib/dg4odbc] Error 1

1
2
3
4
5
6
7
8
9
sudo ln -sf /bin/bash /bin/sh
sudo ln -s /usr/bin/awk /bin/awk
sudo ln -s /usr/bin/rpm /bin/rpm
sudo ln -s /usr/bin/basename /bin/basename

cd $ORACLE_HOME/lib
ln -s libclient11.a libagtsh.a
$ORACLE_HOME/bin/genagtsh $ORACLE_HOME/lib/libagtsh.so 1.0

错误3:libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14

1
2
3
4
这是因为ubuntu 13.04带的libstdc++5.0 和oracle所要不兼容所致

从这里 ftp://rpmfind.net/linux/Mandriva/official/2010.0/x86_64/media/contrib/release/libstdc++5-3.3.6-4mdv2009.0.x86_64.rpm 下载,
直接安压缩包打开提取,并提取到/usr/lib/x86_64-linux-gnu,然后重试就可以了

错误4 :

1
2
3
4
5
/u01/app/oracle/product/11.2.0/dbhome_1/sysman/lib//libnmectl.a(nmectlt.o): In function `nmectlt_genSudoProps':
nmectlt.c:(.text+0x76): undefined reference to `B_DestroyKeyObject'
nmectlt.c:(.text+0x7f): undefined reference to `B_DestroyKeyObject'
nmectlt.c:(.text+0x88): undefined reference to `B_DestroyKeyObject'
nmectlt.c:(.text+0x91): undefined reference to `B_DestroyKeyObject'

解决办法:修改“emdctl”的编译参数,编辑“/u01/app/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk”文件,将

1
sed -i 's/^(\s$(MK_EMAGENT_NMECTL))\s$/\1 -lnnz11/g' $ORACLE_HOME/sysman/lib/ins_emagent.mk
1
2
3
4
5
6
171 #===========================
172 # emdctl
173 #===========================
174
175 $(SYSMANBIN)emdctl:
176 $(MK_EMAGENT_NMECTL)

改为:

1
2
3
4
5
6
171 #===========================
172 # emdctl
173 #===========================
174
175 $(SYSMANBIN)emdctl:
176 $(MK_EMAGENT_NMECTL) -lnnz11

错误5:

1
2
3
4
kdxd4.c:(text.hot+0x2587): undefined reference to `lnxren'
collect2: error: ld returned 1 exit status

INFO: /u01/app/oracle/product/11.2.0/dbhome_1/bin/genorasdksh: Failed to link liborasdk.so.11.1

解决:

直接修改“/u01/app/oracle/product/11.2.0/dbhome_1/bin/genorasdksh”文件,将

1
2
289 $LD $LD_RUNTIME $LD_OPT $LD_OUT $LD_SELF_CONTAINED $BASE_LIB \
290 $LD_OBJS $LD_SYMS $OLIBS $SYSLIBS $USRLIBS

改为

1
2
289 $LD $LD_RUNTIME $LD_OPT -Wl,--no-as-needed $LD_OUT $LD_SELF_CONTAINED $BASE_LIB \
290 $LD_OBJS $LD_SYMS $OLIBS $SYSLIBS $USRLIBS

安装完成后,执行Root Scripts。
执行orainstRoot.sh:

1
root@dbserver:~# /u01/app/oraInventory/orainstRoot.sh

错误7:

1
libhasgen11.so: undefined reference to `procr_get_last_error'

解决:

1
sed -i 's/^\(\s*\)\(\$(OCRLIBS_DEFAULT)\)/\1  -Wl,--no-as-needed \2/g' /u01/app/oracle/product/11.2.0/dbhome_1/srvm/lib/ins_srvm.mk

错误8:

1
nsglsn.c:(.text+0xc29): undefined reference to `ons_subscriber_close

解决:

sed -i ‘s/^(TNSLSNR_LINKLINE.*$(TNSLSNR_OFILES)) ($(LINKTTLIBS))/\1 -Wl,–no-as-needed \2/g’ /u01/app/oracle/product/11.2.0/dbhome_1/network/lib/env_network.mk

1
2
To solve error # libocrutl11.so: undefined reference to `lfifcp' rdbms/lib/ins_rdbms.mk, enter the commands:
sed -i 's/^\(ORACLE_LINKLINE.*\$(ORACLE_LINKER)\) \(\$(PL_FLAGS)\)/\1 -Wl,--no-as-needed \2/g' /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/env_rdbms.mk