02月15, 2019

在docker 中 GUI 安装 Oracle 11g LINUX 坑爹指南

简介

众所周知,docker不是用来当作vm来使用的!docker不是用来当作vm来使用的!docker不是用来当作vm来使用的!

重要的话说三遍, 于是碰到了一个这样的 需求,要在docker中安装Oracle 11g, 由于Oracle 11 g linux 版本是需要x11 来驱动的,碰到的坑还是很多的,操作系统 Windows 10

准备工作

建立docker容器映射需要的端口,并赋予特殊权限,以便于修改容器内部的参数。

需求是centOS 6.8

docker run -it --privileged -p 1521:1521  -p 22:22 centos:6.8 bash

这样得到一个终端界面,安装ssh 并修改 root 密码

echo "root:root" | chpasswd
yum update -y
yum install -y openssh
yum install -y openssh-server
yum install -y openssh-clients
chkconfig sshd on
service sshd start

正常来说,这样就可以通过ssh来链接容器了。把 Oracle 11g 放在tmp文件里面。

踩坑日常

这里是本篇的重点 !

这里是本篇的重点 !

这里是本篇的重点 !

建立安装用户

sudo groupadd dba
sudo groupadd oinstall
sudo useradd -g oinstall -G dba -m oracle

切换到 oracle 用户并执行以下命令,正常情况会报错,无法打开安装界面

su – oracle
mkdir -p /data/sgbd/oracle_soa/oradata
cd /tmp
unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip
cd /tmp/database/
./runInstaller

错误提示如下


[oracle@265ec45c32d6 database]$ ./runInstaller
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 120 MB.   Actual 65490 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 3200 MB    Passed
Checking monitor: must be configured to display at least 256 colors
    >>> Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLAY variable is set.    Failed <<<<

Some requirement checks failed. You must fulfill these requirements before

continuing with the installation,

Continue? (y/n) [n]

runinstaller.png

解决方法很讨厌 编辑 /etc/ssh/ssh_config 文件, 添加 以下字符串在配置文件里面

ForwardX11 yes

然后重启 ssh 服务 service sshd restart 显然这样还是不可以的。 为了显示那个弱智gui 界面必须要有X11 来驱动, 还记得之前说的docker 不是vm的话么, 这里要进行端口转发到X11 服务器来显示。 快去下载 https://mobaxterm.mobatek.net/ 这个东西, 这个东西自带 X11服务器, 支持显示转发。

建立ssh 连接,正常 可以用xclock 来显示一下是不是有一个表出来了。。。

显然没有这么简单。。。

[root@265ec45c32d6 /]# xclock
Error: Can't open display:

重新用 mobaxterm 登陆 。。。

ssh.png

出现如下字样 证明转发 基本欧克了。 重新执行xclock 命令, 不出意外的话 你会看到一个表,到这里你已经成功了 1/3了 。。

xclock.png

切换用户到oracle, 执行安装命令。。。

呵呵呵 错误依旧。。。。。

runinstaller.png

解决方法: 回到root 复制 Xauthority 文件到oracle 用户下 。。。

每一次都要重新复制!!!

[root@265ec45c32d6 ~]# cp ~/.Xauthority /home/oracle/
cp: overwrite `/home/oracle/.Xauthority'? y

重新执行 安装命令,这次不出意外的话 界面会弹出来了!!!

oracle.png

正常安装完成, 在perform prerequisite checks 这里可以选择 无视, 前提是 都设置过了,下面的packages 那边 好多是因为是32位的库导致的。

你以为这样就可以顺利的安装完成了么 ? 没有的,要不然我也不会写这个啰嗦的东西。

把这一长串添加 在path里面

PATH=$PATH:/home/oracle/app/oracle/product/11.2.0/dbhome_1/bin

这样就可以使用 sqlplus / as sysdba; 来连接数据库了, 来吧测试一下,新的错误又来了,我x。

SQL> select * from cat;
select * from cat
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0

简单的来说就是数据库没有起来,执行命令 startup

SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initQFDKBAM.ora'
SQL>

新的错误来了把; 解决这个问题啊。。。

  • 用命令“find / -name pfile”查询pfile文件位置, 默认位置 /data/sgbd/admin/orcl/pfile
  • 复制文件到$ORACLE_HOME/dbs 里面 cp /data/sgbd/admin/orcl/pfile/init.ora.115201913123 /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initQFDKBAM.ora 就是刚才出错的位置

重新链接 sqlplus / as sysdba 然后startup,现在可以看到以下回显

[oracle@265ec45c32d6 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Feb 15 13:15:27 2019

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 1185853440 bytes
Fixed Size                  2212776 bytes
Variable Size             335547480 bytes
Database Buffers          838860800 bytes
Redo Buffers                9232384 bytes
Database mounted.
Database opened.
SQL> select count(*) from cat;

  COUNT(*)
----------
      4836

数据库启动起来了 !!!建立用户QFDKBAM 并赋予dba 权限

SQL> Create user PECBAM identified by QFDKBAM;

User created.

SQL> grant dba to QFDKBAM;

Grant succeeded.

但是你以为这样就完了 ?! no no et non!!!

远程机器 执行远程链接命令

sqlplus64 QFDKBAM/QFDKBAM@127.0.0.1:1523/QFDKBAM

结果可想而知,肯定还是有错呗

SQL*Plus: Release 12.1.0.1.0 Production on Fri Feb 15 14:21:14 2019

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

ERROR:
ORA-12541: TNS:no listener

回到之前docker 的机器 sqlplus / as sysdba; 停掉服务 shutdown 命令

SQL> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.

编辑 /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora 并加上合理的参数, 参考如下

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 265ec45c32d6)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
   (SID_DESC =
    (GLOBAL_DBNAME = PECBAM)
    (ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1)
    (SID_NAME = QFDKBAM)
    )
 )
ADR_BASE_LISTENER = /data/sgbd

注意要把QFDKBAM 修改成自己的SID。执行 lsnrctl start 开始监听。 重新用sysdba 登陆 启动数据库。

这次不出意外的话 远程连接数据库就成功了

结语

千万不要在docker里面安装Oracle 。。。

本文链接:https://blog.qfdk.me/post/Oracle11g.html

-- EOF --

Comments