简介
众所周知,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]
解决方法很讨厌 编辑 /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 登陆 。。。
出现如下字样 证明转发 基本欧克了。 重新执行xclock 命令, 不出意外的话 你会看到一个表,到这里你已经成功了 1/3了 。。
切换用户到oracle, 执行安装命令。。。
呵呵呵 错误依旧。。。。。
解决方法: 回到root 复制 Xauthority 文件到oracle 用户下 。。。
每一次都要重新复制!!!
[root@265ec45c32d6 ~]# cp ~/.Xauthority /home/oracle/
cp: overwrite `/home/oracle/.Xauthority'? y
重新执行 安装命令,这次不出意外的话 界面会弹出来了!!!
正常安装完成, 在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
*
ERRORat 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> CreateuserPECBAM identified by QFDKBAM;
Usercreated.
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.
ORACLEinstanceshut 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 。。。