各种各样的 来源互联网上建议每次操作系统升级和/或修补后都需要重新链接 Oracle 二进制文件。
我可以理解在升级 glibc 时需要重新链接。有些软件包可能不需要重新链接,有些需要,有些我不确定:
- 升级 glibc -> 我认为需要重新链接
- 升级 vim -> 我认为不需要重新链接
- 升级 gzip -> 我不确定
- 升级内核 -> 我不确定
有人有列表吗?或者有人能给我指出 Oracle 实际链接的库的列表吗?我不是 Oracle DBA,所以我对 Oracle 链接过程一无所知。我甚至不确定我是否真正理解 Oracle 在重新链接期间所做的事情:在二进制软件中,安装后自行进行链接并不是一个常见的做法,不是吗?
总之,长话短说:我有几个 RHEL[345] 机器,需要打补丁。大多数机器都运行 Oracle,我想知道哪些补丁需要重新链接,哪些不需要。最好能有一份尽可能详尽的清单 :)
答案1
我很少需要重新链接 Oracle 数据库,也许只有在重大操作系统升级或从 32 位升级到 64 位之后才需要。但是,如果您有疑问,只需运行它即可。只需一分钟。另一个可以参考的来源是 metalink note 131321.1... 要点如下:
“在下列情况下会自动进行重新链接:
- 已使用 Oracle 提供的安装程序安装了 Oracle 产品。
- Oracle 补丁集已通过 Oracle 提供的安装程序应用。
以下信息已添加到 Metalink 的‘认证’部分:
Oracle 数据库 - 企业版一般注意事项:
操作系统信息:供应商保证操作系统二进制兼容性;因此,除非另有明确说明,否则升级这些操作系统时不需要重新安装或重新链接 Oracle 软件。
在下列情况下建议手动重新链接 Oracle(即使操作系统供应商可能不需要这样做):
- 已发生操作系统升级。
- 操作系统库已发生更改。这可能发生在应用操作系统补丁期间。
- 新的安装在重新链接阶段失败。
- 初始启动期间单个 Oracle 可执行文件核心转储。
- 已应用单个 Oracle 补丁(但是,明确的重新链接说明通常包含在 README 中或集成到补丁安装脚本中)
“
答案2
为全面了解情况,除了上述内容之外,如果您要更改 Linux 内核,Oracle Clusterware 可能也需要重新链接。例如,如果您使用 ACFS 文件系统,Oracle 有针对特定 Linux 内核版本的 ACFS 内核驱动程序。但不确定小内核升级是否符合此要求。
实际上,修复 acfs 集群件驱动程序的并不是重新链接本身,而是 crs/install/rootcrs.pl -lock(或用于单节点集群件的 roothas.pl -lock)脚本,该脚本会安装新的 ACFS 驱动程序。您必须在重新链接集群件二进制文件之前调用 rootcrs.pl -unlock,重新链接完成后,再调用 rootcrs.pl -lock。
答案3
来自Oracle Metalink Note“重新链接Oracle Home FAQ(常见问题)(文档ID 1467060.1)”已经在另一个答案中提到,该文档的当前版本:
什么时候需要手动重新链接?以下情况下需要手动重新链接。
A) 操作系统升级后,操作系统供应商通常保证操作系统二进制兼容性,因此,除非另有明确说明,否则升级这些操作系统时无需重新安装或重新链接 Oracle 软件。“但是 Oracle 建议在操作系统升级后手动重新链接 Oracle Home 二进制文件”。硬件更改不需要重新链接。
B)操作系统修补后。(推荐)。
OS 升级、降级、打补丁或删除补丁后是否需要重新链接?是的,Oracle 建议在 OS 升级、打补丁、降级或删除补丁或任何影响 OS 库行为的更改后手动重新链接 Oracle Home Binaries。成功重新链接表明 Oracle Executable 已正确链接到 OS 二进制文件。
如果您使用 Oracle Linux,那么这与 Redhat Enterprise Linux 100% 兼容,常见问题解答 Oracle Linux
- 无论是运行 Unbreakable Enterprise Kernel 还是 Oracle 的替代 Red Hat 兼容内核,Oracle Linux 的应用程序二进制文件都与 Red Hat Enterprise Linux 兼容。现有应用程序无需更改即可在 Unbreakable Enterprise Kernel 上运行,因为所有系统库均保持不变。
Red Hat Enterprise Linux 7:应用程序兼容性指南。
注意:在主要版本的生命周期中,Red Hat 将尽商业上合理的努力在所有次要版本和勘误公告中保持核心运行时环境的二进制兼容性。如有必要,Red Hat 可能会针对严重影响安全性或其他重大问题对此兼容性目标做出例外。此外,如上所述和附录 A 中所述,Red Hat Enterprise Linux 的主要版本包含一组有限的向后兼容库,这些库包含在以前的主要版本中,以便轻松迁移应用程序。通常,Red Hat 会以最小化更改量并保持二进制兼容性的方式应用更改。在某些情况下,受控软件包重新定基可能会例外。
因此,Oracle 建议在更改(补丁、升级等)后重新链接二进制文件,而 Redhat 仅“尽商业上合理的努力维护所有次要版本中核心运行时环境的二进制兼容性”。
为了实现二进制兼容性,不仅需要操作系统不改变应用程序二进制接口(ABI),而且应用程序也只能使用这些接口,而不使用其他可能未记录的例程。
重新链接很容易,Oracle 提供了一个必须在正确环境中执行的脚本。因此,实际上您可以将链接添加到数据库的启动脚本(如果有的话),并在每次启动数据库时执行此链接。
所需的 Linux 软件包可以在Linux 数据库安装指南在本节中
- Oracle 数据库安装前任务
4.8. x86-64 Linux 平台的操作系统要求
4.8.1. 支持的 Oracle Linux 7 和 Red Hat Enterprise Linux 7 发行版适用于 x86-64 以及 Linux 7 和 Oracle 12。
binutils-2.23.52.0.1-12.el7.x86_64
compat-libcap1-1.10-3.el7.x86_64
compat-libstdc++-33-3.2.3-71.el7.i686
compat-libstdc++-33-3.2.3-71.el7.x86_64
gcc-4.8.2-3.el7.x86_64
gcc-c++-4.8.2-3.el7.x86_64
glibc-2.17-36.el7.i686
glibc-2.17-36.el7.x86_64
glibc-devel-2.17-36.el7.i686
glibc-devel-2.17-36.el7.x86_64
ksh
libaio-0.3.109-9.el7.i686
libaio-0.3.109-9.el7.x86_64
libaio-devel-0.3.109-9.el7.i686
libaio-devel-0.3.109-9.el7.x86_64
libgcc-4.8.2-3.el7.i686
libgcc-4.8.2-3.el7.x86_64
libstdc++-4.8.2-3.el7.i686
libstdc++-4.8.2-3.el7.x86_64
libstdc++-devel-4.8.2-3.el7.i686
libstdc++-devel-4.8.2-3.el7.x86_64
libXi-1.7.2-1.el7.i686
libXi-1.7.2-1.el7.x86_64
libXtst-1.2.2-1.el7.i686
libXtst-1.2.2-1.el7.x86_64
make-3.82-19.el7.x86_64
sysstat-10.1.5-1.el7.x86_64
但我不确定手册中的这些信息有多可靠。>您还可以对某些二进制文件运行“ldd”命令来找出它使用了哪些库。
$ ldd $ORACLE_HOME/bin/oracle
linux-vdso.so.1 => (0x...)
libodm11.so => $ORACLE_HOME/lib/libodm11.so (0x...)
libcell11.so => $ORACLE_HOME/lib/libcell11.so (0x...)
libskgxp11.so => $ORACLE_HOME/lib/libskgxp11.so (0x...)
librt.so.1 => /lib64/librt.so.1 (0x...)
libnnz11.so => $ORACLE_HOME/lib/libnnz11.so (0x...)
libclsra11.so => $ORACLE_HOME/lib/libclsra11.so (0x...)
libdbcfg11.so => $ORACLE_HOME/lib/libdbcfg11.so (0x...)
libhasgen11.so => $ORACLE_HOME/lib/libhasgen11.so (0x...)
libskgxn2.so => $ORACLE_HOME/lib/libskgxn2.so (0x...)
libocr11.so => $ORACLE_HOME/lib/libocr11.so (0x...)
libocrb11.so => $ORACLE_HOME/lib/libocrb11.so (0x...)
libocrutl11.so => $ORACLE_HOME/lib/libocrutl11.so (0x...)
libaio.so.1 => /lib64/libaio.so.1 (0x...)
libdl.so.2 => /lib64/libdl.so.2 (0x...)
libm.so.6 => /lib64/libm.so.6 (0x...)
libpthread.so.0 => /lib64/libpthread.so.0 (0x...)
libnsl.so.1 => /lib64/libnsl.so.1 (0x...)
libc.so.6 => /lib64/libc.so.6 (0x...)
/lib64/ld-linux-x86-64.so.2 (0x...)
$
但我认为重新链接 Oracle 软件更简单。这并不难。根据 Metalink 说明,设置变量
ORACLE_HOME
PATH to include $ORACLE_HOME/bin
LD_LIBRARY_PATH $ORACLE_HOME/lib:/usr/lib
然后运行
$ORACLE_HOME/bin/relink all
答案4
我会建议不适用于所有情况。我一直认为重新链接是用于升级或修补甲骨文安装,而不是其支持的操作系统。