Ubuntu安装Oracle11g

基于Ubuntu16.04的Oracle11g安装

实在才识浅薄,难得遇见一个软件在Linux环境下安装比Windows下麻烦太多。

本文安装是在Ubuntu虚拟机下进行

一、安装环境

  • 宿主机 macOS 10.13.3

  • 虚拟机 Parallels Desktop 13 for Mac 13.2.0

(强烈安利!!!这真的是个超级好用的虚拟机,针对win10特别优化,支持DirectX 10,更是支持将Boot Camp 安装的Windows转换成虚拟机使用。)

  • 系统 Ubuntu 16.04 LTS x64

  • 数据库 Oracle_linux_x64_11gR2

注意Oracle对于Linux的swap分区大小有要求,似乎是1.5G,通常swap至少也要4GB以上为好,但是现实是虚拟机快速安装Ubuntu之后,交换分区大小十分的小,我的系统实际可用空间大概为950MB,很尴尬。

所以要么选择手动安装,自己决定分区大小,要么后期增大也是OK的。

二、安装前准备

1. 确保swap有足够空间:

  • 命令free查看Swap分区大小,现在是已经更改之后了,总共5GB。

    1
    2
    3
    4
    $ free
    total used free shared buff/cache available
    Mem: 2035964 1094436 81732 477824 859796 272496
    Swap: 5240824 857856 4382968
  • 找一个空间足够的目录用来存放swap文件

    1
    2
    3
    mkdir /swap
    cd /swap
    sudo dd if=/dev/zero of=swapfile bs=1024 count=2000000

    count代表文件大小

    把生成的文件转换成 Swap 文件

    1
    sudo mkswap -f swapfile
  • 激活Swap文件

    1
    sudo swapon swapfile

    再次free一下,应该是空间变大了。

2. JDK安装

JDK下载 Oracle Java SE Download

通常教程安装的都是JDK8,其实9也是OK的。

解压到目录、设置环境变量:JAVA_HOME自行修改

1
2
3
4
export JAVA_HOME=/usr/jdk-9.0.4
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

3. 安装Oracle所需要的依赖包

需要的包非常非常多,但是为了顺利安装,还是都执行一遍比较好。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/sh
sudo apt-get install automake
sudo apt-get install autotools-dev
sudo apt-get install binutils
sudo apt-get install bzip2
sudo apt-get install elfutils
sudo apt-get install expat
sudo apt-get install gawk
sudo apt-get install gcc
sudo apt-get install gcc-multilib
sudo apt-get install g++-multilib
sudo apt-get install ia32-libs
sudo apt-get install ksh
sudo apt-get install less
sudo apt-get install lesstif2
sudo apt-get install lesstif2-dev
sudo apt-get install lib32z1
sudo apt-get install libaio1
sudo apt-get install libaio-dev
sudo apt-get install libc6-dev
sudo apt-get install libc6-dev-i386
sudo apt-get install libc6-i386
sudo apt-get install libelf-dev
sudo apt-get install libltdl-dev
sudo apt-get install libmotif4
sudo apt-get install libodbcinstq4-1 libodbcinstq4-1:i386
sudo apt-get install libpth-dev
sudo apt-get install libpthread-stubs0
sudo apt-get install libpthread-stubs0-dev
sudo apt-get install libstdc++5
sudo apt-get install lsb-cxx
sudo apt-get install make
sudo apt-get install openssh-server
sudo apt-get install pdksh
sudo apt-get install rlwrap
sudo apt-get install rpm
sudo apt-get install sysstat
sudo apt-get install unixodbc
sudo apt-get install unixodbc-dev
sudo apt-get install unzip
sudo apt-get install x11-utils
sudo apt-get install zlibc

偷个懒,把上面这些复制到一个.sh里头,脚本的方式执行轻松很多。

部分安装不成功就算了….反正我记得我也不是都成功了。

3. 检查系统变量

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

执行上面的命令,得到参数后,在/etc/sysctl.conf中增加对应数据。(格式按照下面那样)

建议开两个终端同时进行比较方便。

1
2
3
4
5
6
7
8
9
10
11
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586

更新内核参数:

1
sysctl –p

4. 创建一个Oracle用户

emmm…我是直接在系统用户设置中创建的用户。

我创建的是名为Oracle的普通用户。

然后执行下:

1
2
sudo groupadd oinstall
sudo groupadd dba

5. 添加对用户的内核限制

修改/etc/security/limits.conf

注意我的账户是oracle所以下面写的是oracle,根据实际进行改动。

1
2
3
4
5
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240

修改/etc/pam.d/login增加以下内容

1
2
session required /lib/security/pam_limits.so
session required pam_limits.so

6. 创建安装文件夹

自己创建就好,我的目录是/home/oracle/oracle11g/

7. 配置Oracle环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#Oracle
#这个写刚刚创建的文件夹
export ORACLE_BASE=/home/oracle/oracle11g
#这个后面可以随便填写
#说是说随便填,但其实最后那个dbhome_1一定要是最终安装的位置
#不然会出现问题,等会安装的时候会再次提到
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/;

source .profile让变量生效,最好是再确定一遍:echo $ORACLE_HOME

8. 欺骗Oracle安装程序

Oracle其实是不支持Ubuntu的,我们这属于强行操作。

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

安装Oracle

上面的系统配置完成之后,最好重启一下服务器,使用oracle用户登陆系统

1. 解压及授权

  1. 上传下载好的oracle压缩文件到/home/oracle目录下。
  2. 进入/home/oracle目录,执行# unzip linux.x64_11gR2_database_1of2.zip和# unzip linux.x64_11gR2_database_2of2.zip,解压的文件在/home/oracle/database目录中。
  3. 设置/home/oracle/database目录的权限:
1
2
# chown oracle:oinstall /home/oracle/database -R
# chmod 775 /home/oracle/database -R

2. 设定字符集

直接运行安装会导致安装程序出现乱码。

1
export LANG=US

3. 执行安装程序

要cd到database文件夹中

1
./runInstaller

注意下面几个步骤

  1. email的那个勾去掉,不要发送。
  2. 然后一步一步走下去,当你到需要输入密码的那个界面输入123456,123456,可能会违反oracle的加密规范,不用管,继续下去。
  3. 这里最好将character Set:AL32UTF8
  4. 有一个步骤选择安装位置的时候,一定注意那个文件夹(一般默认是dbhome_1)要跟环境变量中设置的一致!非常重要!
  5. 安装到倒数几步的时候,会检查出许多包没有安装,其实都已经安装了,只是版本更新或者是32、64位不符合,可以选择右上角的ignore继续安装。

安装到68%时,ins_ctx.mk的错误提示,直接contiue跳过去

安装全程也就只跳过这一个错误提示。

后面还回报错: make file ‘/……emagent.mk’出错,解决方法: 另开一个终端,键入命令行:

1
2
sed -i 's/^\(\s*\$(MK_EMAGENT_NMECTL)\)\s*$/\1 -lnnz11/g' $ORACLE_HOME/sysman/lib/ins_emagent.mk
12

sed: 无法读取 /sysman/lib/ins_emagent.mk: 没有那个文件或目录

当执行上一个命令出现这个错误的时候,说明你没有将$ORACLE_HOME生效。

点击安装界面的retry,就可以继续了
完了以后,又回报错 ins_rdbms.mk的错误提示,这时,在终端,输入如下四个命令:

1
2
3
4
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/^\(ORACLE_LINKLINE.*\$(ORACLE_LINKER)\) \(\$(PL_FLAGS)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
sed -i 's/^\(\$LD \$LD_RUNTIME\) \(\$LD_OPT\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/bin/genorasdksh
sed -i 's/^\(\s*\)\(\$(OCRLIBS_DEFAULT)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/srvm/lib/ins_srvm.mk

然后在图形界面点击Retry就能继续安装了。

最后应该就顺利完成了,按照安装程序提示最后执行两个脚本:

从网络上摘抄的,以实际显示的和自己账户为准。

1
2
3
sudo /home/jovi/doc/oraInventory/orainstRoot.sh
sudo /home/jovi/doc/oracle/product/11.2.0/dbhome_1/root.sh
123

至此安装成功。

验证安装

如果安装成功,访问

https://192.168.1.114:1158/em

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ ps -ef|grep ora_|grep -v grep -->查看oracle进程
$ ps -ef|grep tnslsnr|grep -v grep -->查看oracle的监听进程
$ lsnrctl start -->启动监听
$ dbstart -->启动数据库
$ dbstop -->停止数据库
$ emctl start dbconsole -->启动em控制台
$ isqlplusctl start -->启动pl/sql
$ sqlplus '/as sysdba' -->登录sqlplus
$ env -->输出当前用户的环境变量
$ netca -->启用监听配置程序
#如果是使用sqlplus登录sys
口令需要输入 "密码" + "as sysdba"
例如密码是"1234" 那么需要输入 "1234 as sysdba"

参考资料