最近,在处理oracle gateway的报错问题。只因个人的测试环境已经迁移到docker上了,又懒得装一套环境就直接在机器上安装oracle11g。今天分享的故事就从此开始……
运行环境
项目 | 描述 |
---|---|
操作系统 | CentOS Linux release 7.6.1810 x86_64 |
内存 | 2G |
硬盘大小 | 30G |
CPU | Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz |
虚拟机软件 | Oracle VM VirtualBox 6.0.2 |
Oracle RDBMS | Oracle 11gR2 for Linux x86_64 |
问题描述
由于只是做个测试,选择了安装最简单的单机版,不安装GI。根据以往的经验,执行命令安装系统补丁。但在安装进度在84%,出现类似于下图的报错(因为当时无保留截图,只能在网上找张类似的):
根据以往的经验告诉我,出现这样的问题,肯定是操作系统补丁包缺失导致的。检查了一番,发现需要都操作系统补丁都已经安装上了。
INFO: mv -f /u01/app/oracle/product/11.2.0/dbhome_1/bin/ctxlc /u01/app/oracle/product/11.2.0/dbhome_1/bin/ctxlcO
INFO: mv ctxlc /u01/app/oracle/product/11.2.0/dbhome_1/bin/ctxlc
INFO: chmod 751 /u01/app/oracle/product/11.2.0/dbhome_1/bin/ctxlc
INFO: gcc -o ctxhx -m64 -L/u01/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ -L/u01/app/oracle/product/11.2.0/dbhome_1/lib/ -L/u01/app/oracle/product/11.2.0/dbhome_1/lib/stubs/ /u01/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ctxhx
.o -L/u01/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ -lm -lsc_fa -lsc_ex -lsc_da -lsc_ca -lz -lctxhx -Wl,-rpath,/u01/app/oracle/product/11.2.0/dbhome_1/ctx/lib -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -ln
ls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `c
INFO: at /u01/app/oracle/product/11.2.0/dbhome_1/lib/sysliblist`
INFO: //usr/lib64/libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14'
collect2: error: ld returned 1 exit status
INFO: make: *** [ctxhx] Error 1
INFO: End output from spawned process.
INFO: ----------------------------------
INFO: Exception thrown from action: make
Exception Name: MakefileException
Exception String: Error in invoking target 'install' of makefile '/u01/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk'. See '/oracle/app/oraInventory/logs/installActions2019-03-24_05-39-13AM.log' for details.
Exception Severity: 1
INFO: Linking Text executables
INFO: Linking Text executables
INFO: The output of this make operation is also available at: '/u01/app/oracle/product/11.2.0/dbhome_1/install/make.log'
INFO:
但之前已经再三确认过补丁包已经安装完成,故在my oracle support上查找并没有找到相关的内容。最后寻求度娘的帮助,结果找到了一遍相关的case,说是glibc版本过高导致的,高于2.14。
# yum list glibc
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Installed Packages
glibc.x86_64 2.17-260.0.15.el7_6.3 @ol7_latest
Available Packages
glibc.i686 2.17-260.0.15.el7_6.3 ol7_latest
跟着文档的内容进行修改相关文件ins_ctx.mk点击Retry继续安装。在同样的进度位置出现报错ins_emagent.mk文件的报错,然后修改文件ins_emagent.mk内容再点击Retry继续安装即可完成安装。
解决方案
以下是文件ins_ctx.mk和ins_emagent.mk需修改的相关内容:
修改文件/u01/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk
将
......
ctxhx: $(CTXHXOBJ)
$(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK)
......
修改为
......
ctxhx: $(CTXHXOBJ)
-static $(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK) /usr/lib64/stdc.a
......
修改文件/u01/app/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk
将
......
#===========================
# emdctl
#===========================
$(SYSMANBIN)emdctl:
$(MK_EMAGENT_NMECTL)
......
修改为
......
#===========================
# emdctl
#===========================
$(SYSMANBIN)emdctl:
$(MK_EMAGENT_NMECTL) -lnnz11
......
附录
操作系统补丁安装命令
yum -y install gcc* libaio* glibc* compat-* elfutils* glibc* libgcc* libstdc++* unixODBC* pdksh* ksh*
yum -y install libaio*.i686 glibc*.i686 compat-*.i686 elfutils*.i686 glibc*.i686 libgcc*.i686 libstdc++*.i686 unixODBC*.i686 pdksh*.i686 *ksh*.i686