oracle relink重链接初识之一
分析结论
1,oracle relink就是
Oracle 软件是以对象文件(.o文件),归档文件(.a文件)形式发布的,最后以压缩的 jar 格式提供。然后在安装过程中,这些对象文件被在操作系统级别“relink”,创建可执行文件。这使得 Oracle 可以与 OS 系统库提供的函数形成可靠的整合。通常,relinking 过程中,当前的可执行文件被重命名和保存,而新的可执行文件被生成。一旦新的可执行文件出现,并且你成功的测试过这些新的可执行文件工作正常,就可以删除 ORACLE_HOME/bin 目录下的旧的可执行文件。每个旧的可执行文件的文件名上都会附加一个‘O’,例如,’exp’重命名为’expO’
2,可见
可知 :
A,ORACLE软件是以O文件即对象文件,归档文件即A文件形式发布出来
B,最后以压缩JAR格式提供
C, 上述只是发布且提供,而我们拿到发布的介质还要安装,这这些O文件即对象文件,还在要操作系统级别RELINK,用于创建可执行文件
作用就是把ORACLE软件与操作系统的系统库提供的函数进行整合
D,所以每次重新RELINK时,旧的可执行文件会重命名 :可执行文件O
E,所以旧的可执行文件可以安全删除,前提是新的可执行文件测试通过
3,上述文件在 $ORACLE_HOME/bin
4,relink在oracle_home/bin
5,relink的参数
[oracle@old1 bin]$ ./relink -help
No valid parameter
/nparameters: all, oracle, network, client, client_sharedlib interMedia,/n/tctx, precomp, utilities, oemagent, ldap
6,relink相关的文件类型
* .c (源代码)
* .o (对象文件)
* .a (归档文件)
* .so 或 .sl on HP/UX (PA-RISC) (库文件)
7,如下是各种对象文件和归档文件在 Oracle Home 中所处的目录:
- /lib
- /usr/lib
- $ORACLE_HOME/lib
- $ORACLE_HOME/rdbms/lib
- $ORACLE_HOME/<product>/lib
在 $ORACLE_HOME/rdbms/lib 或者 $ORACLE_HOME/lib 目录中有一个文件叫做 sysliblist,它列出了其它需要包括的库文件的列表。
示例:
[oracle@old1 ~]$ cd $ORACLE_HOME/lib
[oracle@old1 lib]$ ls -l sys*
-rw-r--r-- 1 oracle oinstall 25 Mar 27 2004 sysliblist
[oracle@old1 lib]$ more sysliblist
-ldl -lm -lpthread -lnsl
[oracle@old1 lib]$
8, 为什么需要 Oracle Home relinking?
为了将 Oracle 提供的对象文件与 OS 系统库文件链接,需要执行 Oracle Home relinking.Relinking 确保了与 OS 系统库文件提供的函数的可靠整合。
在如下情况下 relinking 会自动发生:
使用 Oracle Universal Installer ( OUI ) 安装 Oracle Database
通过 Oracle Universal Installer ( OUI ) 安装 Oracle Database Patchset
使用“opatch 工具”安装 Oracle Database Patch
Relinking 也可以手动执行。
9,relink ORACLE单独的组件
[oracle@old1 ~]$ sqlplus
SQL*Plus: Release 9.2.0.4.0 - Production on Sun May 28 06:26:14 2017
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Enter user-name:
[oracle@old1 ~]$ cd /u01/app/oracle/product/9.2.0.4/db_1/sqlplus/lib
[oracle@old1 lib]$ make -f ins_sqlplus.mk install
rm -f sqlplus
/bin/chmod 755 /u01/app/oracle/product/9.2.0.4/db_1/bin/demobld
/bin/chmod 755 /u01/app/oracle/product/9.2.0.4/db_1/bin/demodrop
/bin/chmod 755 /u01/app/oracle/product/9.2.0.4/db_1/bin/helpins
/bin/chmod 755 /u01/app/oracle/product/9.2.0.4/db_1/bin/pupbld
Linking sqlplus
rm -f sqlplus
gcc -o sqlplus -L/u01/app/oracle/product/9.2.0.4/db_1/sqlplus/lib/ -L/u01/app/oracle/product/9.2.0.4/db_1/lib/ -L/u01/app/oracle/product/9.2.0.4/db_1/lib/stubs/ /u01/app/oracle/product/9.2.0.4/db_1/sqlplus/lib/s0afimai.o -lsqlplus -lclntsh `cat /u01/app/oracle/product/9.2.0.4/db_1/lib/ldflags` -lnsslb9 -lncrypt9 -lnsgr9 -lnzjs9 -ln9 -lnl9 -lnro9 `cat /u01/app/oracle/product/9.2.0.4/db_1/lib/ldflags` -lnsslb9 -lncrypt9 -lnsgr9 -lnzjs9 -ln9 -lnl9 -lclient9 -lvsn9 -lwtc9 -lcommon9 -lgeneric9 -lwtc9 -lmm -lnls9 -lcore9 -lnls9 -lcore9 -lnls9 -lxml9 -lcore9 -lunls9 -lnls9 `cat /u01/app/oracle/product/9.2.0.4/db_1/lib/ldflags` -lnsslb9 -lncrypt9 -lnsgr9 -lnzjs9 -ln9 -lnl9 -lnro9 `cat /u01/app/oracle/product/9.2.0.4/db_1/lib/ldflags` -lnsslb9 -lncrypt9 -lnsgr9 -lnzjs9 -ln9 -lnl9 -lclient9 -lvsn9 -lwtc9 -lcommon9 -lgeneric9 -ltrace9 -lnls9 -lcore9 -lnls9 -lcore9 -lnls9 -lxml9 -lcore9 -lunls9 -lnls9 -lclient9 -lvsn9 -lwtc9 -lcommon9 -lgeneric9 -lnls9 -lcore9 -lnls9 -lcore9 -lnls9 -lxml9 -lcore9 -lunls9 -lnls9 `cat /u01/app/oracle/product/9.2.0.4/db_1/lib/sysliblist` -Wl,-rpath,/u01/app/oracle/product/9.2.0.4/db_1/lib:/lib:/usr/lib -lm -lpthread `cat /u01/app/oracle/product/9.2.0.4/db_1/lib/sysliblist` -ldl -lm -lpthread
mv -f /u01/app/oracle/product/9.2.0.4/db_1/bin/sqlplus /u01/app/oracle/product/9.2.0.4/db_1/bin/sqlplusO
mv -f /u01/app/oracle/product/9.2.0.4/db_1/sqlplus/lib/sqlplus /u01/app/oracle/product/9.2.0.4/db_1/bin/sqlplus
/bin/chmod 751 /u01/app/oracle/product/9.2.0.4/db_1/bin/sqlplus
[oracle@old1 lib]$ sqlplus
SQL*Plus: Release 9.2.0.4.0 - Production on Sun May 28 06:27:50 2017
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Enter user-name:
10, 诊断 relinking 问题的工具有哪些?
A ) nm
用来列出在一个 .o、.a 和二进制文件中的所有符号。常用于找出符号是在哪里定义的。常用命令是:
nm <file> | grep <symbol>
其中<file>是你要检查的库的名字,<symbol>是你实际搜寻的符号的名字。
B) ar
建立和维护库和 .o 文件的归档。使用这个命令你可以将 .o 文件分组到一个单独的归档,用来创建可执行程序。它被用来从一个单独的归档库中插入,删除和取代对象。
C) Symfind
如下位置有一个脚本可用:
$ORACLE_HOME/bin/symfind <symbol>:
在 Oracle 的共享对象中找到一个符号。这个脚本基本上执行了上面2个命令。
分析明细
1,操作系统版本
[oracle@old1 bin]$ more /etc/redhat-release
Red Hat Enterprise Linux AS release 4 (Nahant Update 6)
[oracle@old1 bin]$
2,切换到ORACLE_HOME/bin
[oracle@old1 ~]$ cd $ORACLE_HOME/bin
[oracle@old1 bin]$
3,查看当前目录的O后缀的文件
[oracle@old1 bin]$ ls -l *O
-rwxr-xr-x 1 oracle oinstall 0 Feb 26 2004 csscanO
-rwxr-xr-x 1 oracle oinstall 187440 Apr 22 2004 ctxloadO
-rwxr-xr-x 1 oracle oinstall 661323 Apr 22 2004 ctxsrvO
-rwxr-xr-x 1 oracle oinstall 35024 Apr 22 2004 cursizeO
-rwxr-xr-x 1 oracle oinstall 19261 Apr 22 2004 dbfsizeO
-rwxr-xr-x 1 oracle oinstall 397984 Apr 22 2004 dbvO
-rwxr-xr-x 1 oracle oinstall 0 Feb 29 2004 dgmgrlO
-rwxr-xr-x 1 oracle oinstall 608869 Apr 22 2004 expO
-rwxr-xr-x 1 oracle oinstall 34444 Apr 26 2004 extprocO
-rwxr-xr-x 1 oracle oinstall 0 Feb 29 2004 hsallociO
-rwxr-xr-x 1 oracle oinstall 0 Feb 29 2004 hsdepxaO
-rwxr-xr-x 1 oracle oinstall 0 Feb 29 2004 hsotsO
-rwxr-xr-x 1 oracle oinstall 269977 Apr 22 2004 impO
-rwxr-xr-x 1 oracle oinstall 395978 Apr 22 2004 kgmgrO
-rwxr-xr-x 1 oracle oinstall 22495 Apr 22 2004 loadpspO
-rwxr-xr-x 1 oracle oinstall 19389 Apr 22 2004 maxmemO
-rwxr-xr-x 1 oracle oinstall 11452427 Apr 24 2004 migO
-rwxr-xr-x 1 oracle oinstall 0 Feb 26 2004 nidO
-rwxr-xr-x 1 oracle oinstall 0 Feb 26 2004 nmumigr8O
-rw-r--r-- 1 oracle oinstall 0 Feb 26 2004 onrsdO
-rwsr-s--x 1 oracle oinstall 62255897 May 28 04:09 oracleO
-rwxr-xr-x 1 oracle oinstall 25023 Apr 26 2004 orapwdO
-rwxr-xr-x 1 oracle oinstall 10280659 Apr 22 2004 rmanO
-rwxr-xr-x 1 oracle oinstall 671466 Apr 22 2004 sqlldrO
-rwxr-xr-x 1 oracle oinstall 700268 Apr 22 2004 sqlplusO
-rwxr-xr-x 1 oracle oinstall 125368 Apr 22 2004 tkprofO
-rw-r--r-- 1 oracle oinstall 0 Feb 26 2004 tnspingO
-rw-r--r-- 1 oracle oinstall 0 Feb 26 2004 trcrouteO
-rwxr-xr-x 1 oracle oinstall 27408 Apr 22 2004 tstshmO
-rwxr-xr-x 1 oracle oinstall 5661753 Apr 22 2004 wrapO
[oracle@old1 bin]$
4,可知每个ORACLE工具皆有2个对应文件,一为自己,二为自己加O
[oracle@old1 bin]$ ls -l csscan*
-rwxr-xr-x 1 oracle oinstall 162948 Apr 22 2004 csscan
-rwxr-xr-x 1 oracle oinstall 0 Feb 26 2004 csscanO
5,经查 oracle mos 文章 Relinking Oracle Home 常见问题 (?文档 ID 2048232.1)
什么是对 Oracle Home 库的 relinking?
Oracle 软件是以对象文件(.o文件),归档文件(.a文件)形式发布的,最后以压缩的 jar 格式提供。然后在安装过程中,这些对象文件被在操作系统级别“relink”,创建可执行文件。这使得 Oracle 可以与
OS 系统库提供的函数形成可靠的整合。通常,relinking 过程中,当前的可执行文件被重命名和保存,而新的可执行文件被生成。一旦新的可执行文件出现,并且你成功的测试过这些新的可执行文件工作正常,就可以删除 ORACLE_HOME/bin 目录下的旧的可执行文件。每个旧的可执行文件的文件名上都会附加一个‘O’,例如,’exp’重命名为’expO’。
可知 :
A,ORACLE软件是以O文件即对象文件,归档文件即A文件形式发布出来
B,最后以压缩JAR格式提供
C, 上述只是发布且提供,而我们拿到发布的介质还要安装,这这些O文件即对象文件,还在要操作系统级别RELINK,用于创建可执行文件
作用就是把ORACLE软件与操作系统的系统库提供的函数进行整合
D,所以每次重新RELINK时,旧的可执行文件会重命名 :可执行文件O
E,所以旧的可执行文件可以安全删除,前提是新的可执行文件测试通过
6,测试relink,可知relink在$ORACLE_HOME/bin下
[oracle@old1 bin]$ pwd
/u01/app/oracle/product/9.2.0.4/db_1/bin
[oracle@old1 bin]$ ls -l relink
-rwxr-xr-x 1 oracle oinstall 6454 Feb 26 2004 relink
[oracle@old1 bin]$
7,查看relink的用法,其的参数可以为 oracle,client,and so on
[oracle@old1 bin]$ ./relink -help
No valid parameter
/nparameters: all, oracle, network, client, client_sharedlib interMedia,/n/tctx, precomp, utilities, oemagent, ldap
[oracle@old1 bin]$
8,relink的详细执行过程可以定位到一个日志中
可以像如下这样使用 unix 的重定向特性收集手动 relinking 日志:
$ $ORACLE_HOME/bin/relink all
输出会被写在 $ORACLE_HOME/install/relink.log 文件中
9,如下为ORACLE MOS文章 Relinking Oracle Home 常见问题 (文档 ID 2048232.1) 相关内容
文档内容
用途
问题和答案
1) 什么是 relinking?
2) 什么是对 Oracle Home 库的 relinking?
3) 为什么需要 Oracle Home relinking?
4) 什么时候需要手动的 relinking?
5) 在 OS 升级,降级,打补丁或者卸载补丁之后,是否需要 relinking?
6) 如何 relink Oracle Home?
7) Relinking 日志在哪里?
8) 手动 relinking 有哪些已知问题?
9) 如何诊断 relinking 问题?
10) 诊断 relinking 问题的工具有哪些?
11) Windows 上是否发生 relinking?
已知问题
1) AIX 操作系统
2) Solaris 操作系统
参考
适用于:
Oracle Database - Enterprise Edition - 版本 9.2.0.1 到 12.1.0.2 [发行版 9.2 到 12.1]
Generic UNIX
用途
这篇文档阐述了在 Oracle Home 上执行 relinking 的常见问题,文档中的概念适用于 RDBMS Home。
提问,获得帮助,并分享您对于这篇文档的经验。
您是否希望与其他 Oracle 客户、Oracle 员工和业内专家进一步探讨此主题?
请点击这里进入Oracle 社区(中文)。
请点击这里进入My Oracle Support 社区的数据库安装/升级(英文)主页发现更多的话题和讨论。
问题和答案
1) 什么是 relinking?
任何语言所预定义的函数都被定义在那种语言的库文件中,必须编译代码来创建一个二进制格式的文件(对象文件)。这个对象文件然后被连接到 OS 的库文件来创建一个可执行文件。成功的链接应使得所有的函数定义都能被找到,链接从它的组件中生成一个可执行文件。在这个语境中链接(linking)和 relinking 意义相同,可以互换。可执行文件都会从预编译组件中建立起来。
Relinking 过程中涉及的文件类型有:
* .c (源代码)
* .o (对象文件)
* .a (归档文件)
* .so 或 .sl on HP/UX (PA-RISC) (库文件)
2) 什么是对 Oracle Home 库的 relinking?
Oracle 软件是以对象文件(.o文件),归档文件(.a文件)形式发布的,最后以压缩的 jar 格式提供。然后在安装过程中,这些对象文件被在操作系统级别“relink”,创建可执行文件。这使得 Oracle 可以与 OS 系统库提供的函数形成可靠的整合。通常,relinking 过程中,当前的可执行文件被重命名和保存,而新的可执行文件被生成。一旦新的可执行文件出现,并且你成功的测试过这些新的可执行文件工作正常,就可以删除 ORACLE_HOME/bin 目录下的旧的可执行文件。每个旧的可执行文件的文件名上都会附加一个‘O’,例如,’exp’重命名为’expO’。
提供对象文件的优点是它减小了补丁和包的大小;不提供完整的库文件和程序,而是只发布对象文件,之后与 OS 库文件链接来生成可执行文件。
如下是各种对象文件和归档文件在 Oracle Home 中所处的目录:
- /lib
- /usr/lib
- $ORACLE_HOME/lib
- $ORACLE_HOME/rdbms/lib
- $ORACLE_HOME/<product>/lib
在 $ORACLE_HOME/rdbms/lib 或者 $ORACLE_HOME/lib 目录中有一个文件叫做 sysliblist,它列出了其它需要包括的库文件的列表。
3) 为什么需要 Oracle Home relinking?
为了将 Oracle 提供的对象文件与 OS 系统库文件链接,需要执行 Oracle Home relinking.Relinking 确保了与 OS 系统库文件提供的函数的可靠整合。
在如下情况下 relinking 会自动发生:
使用 Oracle Universal Installer ( OUI ) 安装 Oracle Database
通过 Oracle Universal Installer ( OUI ) 安装 Oracle Database Patchset
使用“opatch 工具”安装 Oracle Database Patch
Relinking 也可以手动执行。
4) 什么时候需要手动的 relinking?
在如下情况下需要手动 relinking:
A) 在 OS 升级之后,通常 OS 供应商会保证操作系统库文件完整性,因此,除非有特殊说明,不需要重新安装或者 relink Oracle 软件。
“然而,Oracle 推荐在 OS 升级后对 Oracle Home 的库执行手动的 relinking”。
B) 在操作系统安装了补丁之后(推荐)。
C) Oracle Home 的安装过程的 relinking 阶段出现错误或者警告。
D) 安装一个 RDBMS 补丁在 relinking 阶段失败。
E) 应用报错说 RDBMS home 缺失库文件。
F) 诊断 RDBMS Home 二进制可执行程序(binary)的问题。
G) 在手动修改 RDBMS home 的二进制可执行程序的权限之后。
H) 验证 Oracle Home 二进制可执行程序的完整性。
I) 重置 Oracle Home 二进制可执行程序的权限。
J) 重新创建 Oracle Home 二进制可执行程序。
5) 在 OS 升级,降级,打补丁或者卸载补丁之后,是否需要 relinking?
是的。Oracle 推荐在在 OS 升级,降级,打补丁或者卸载补丁,或者任何影响 OS 库行为的改变之后,对 Oracle Home 二进制可执行程序执行手动的 relinking。成功的 relinking 代表 Oracle 可执行程序被妥当的链接到 OS 库。
6) 如何 relink Oracle Home?
下面是 relink Oracle Home 二进制执行程序的步骤:
A) 设置环境变量
在链接时需要设置如下环境变量:
DISPLAY
TERM or ORACLE_TERM
ORACLE_HOME
PATH 中包含 $ORACLE_HOME/bin
LD_LIBRARY_PATH $ORACLE_HOME/lib:/usr/lib
SHLIB_PATH $ORACLE_HOME/lib:/usr/lib (只适用于HP-UX)
B) 验证 umask 值是否为 022,如果 umask 值不正确,设置 umask 为 022(运行命令“umask 022”)
C) 停止所有访问这个 Oracle Home 的 Oracle 实例,监听和 sqlplus。若是 AIX OS,以 root 用户运行 slibclean,等待5分钟后再次运行 slibclean。
即使有其它数据库启动和运行中,运行 slibclean 也是安全的。如下文档提供了更多细节:
Note 435071.1 Can Slibclean command be Executed when the Database is up and running?
D) 以 Oracle 用户执行如下命令:
$ORACLE_HOME/bin/relink
可以添加的参数有:
"all ", " oracle " , " network", "client" , "client_sharedlib" , "interMedia" , "precomp" , "utilities ", "oemagent", "ldap"。
可以像如下这样使用 unix 的重定向特性收集手动 relinking 日志:
$ $ORACLE_HOME/bin/relink all
输出会被写在 $ORACLE_HOME/install/relink.log 文件中。
E) 11GR2 上可用的其它选项。
11.2.0.1 以上版本的数据库有另一个选项是使用“ Oracle Universal Installer “来执行 relinking,如下所示:
Runinstaller 可以使用如下选项:
-relink:在 oracle home 上执行 relink 动作。
使用:-relink -maketargetsxml <location of maketargetsxml> [-makedepsxml <location of makedepsxml>] [name=value]
例子:
$ORACLE_HOME/oui/bin/runInstaller -relink -waitForCompletion -maketargetsxml $ORACLE_HOME/inventory/make/makeorder.xml -logLocation $ORACLE_HOME/install ORACLE_HOME=$ORACLE_HOME > $ORACLE_HOME/install/relink.log 2>&1
参考
Note 883299.1 Oracle 11gR2 Relink New Feature
F) Relinking 独立的组件
你可以随时使用‘MAKE’文件并提供一个合适的 link_option 来手动的 relink 任何一个可执行程序或者所有的可执行程序:
make -f <makefile> <link_option>
要 relink 一个可执行程序,需使用软件的所有者登陆到系统来执行上述命令。这个命令在<makefile> 所在的 LIB 目录中执行,即,
$ORACLE_HOME/<product_name>/lib
其中<product_name>可以是 oracle,forms45 或 reports30 等等。
[oracle@old1 db_1]$ ls -l
total 192
drwxr-xr-x 10 oracle oinstall 4096 May 28 04:08 Apache
drwxr-xr-x 5 oracle oinstall 4096 May 28 04:08 assistants
drwxr-xr-x 5 oracle oinstall 4096 May 28 04:08 BC4J
drwxr-xr-x 2 oracle oinstall 4096 May 28 04:28 bin
drwxr-xr-x 10 oracle oinstall 4096 May 28 04:09 ctx
drwxr-xr-x 4 oracle oinstall 4096 May 28 04:08 cwmlite
drwxr-xr-x 2 oracle oinstall 4096 May 28 04:09 dbs
drwxr-xr-x 3 oracle oinstall 4096 May 28 04:08 demo
drwxr-xr-x 6 oracle oinstall 4096 May 28 04:09 dm
drwxr-xr-x 10 oracle oinstall 4096 May 28 04:08 ds
drwxr-xr-x 3 oracle oinstall 4096 May 28 04:28 install
-rw-r--r-- 1 oracle oinstall 18 May 28 04:07 install.platform
drwxr-xr-x 8 oracle oinstall 4096 May 28 04:29 inventory
drwxr-xr-x 8 oracle oinstall 4096 May 28 04:09 javavm
drwxr-xr-x 5 oracle oinstall 4096 May 28 04:08 jdbc
drwxr-xr-x 9 oracle oinstall 4096 May 28 04:08 jdk
drwxr-xr-x 2 oracle oinstall 4096 May 28 04:09 jlib
lrwxrwxrwx 1 oracle oinstall 25 May 28 04:08 JRE -> /u01/app/oracle/jre/1.4.2
drwxr-xr-x 6 oracle oinstall 4096 May 28 04:08 jsp
drwxr-xr-x 16 oracle oinstall 4096 May 28 04:09 ldap
drwxr-xr-x 3 oracle oinstall 4096 May 28 04:09 lib
drwxr-xr-x 3 oracle oinstall 4096 May 28 04:09 lib32
drwxr-xr-x 5 oracle oinstall 4096 May 28 04:09 md
drwxr-xr-x 14 oracle oinstall 4096 May 28 04:28 network
drwxr-xr-x 3 oracle oinstall 4096 May 28 04:08 oci
drwxr-xr-x 3 oracle oinstall 4096 May 28 04:08 ocommon
drwxr-xr-x 5 oracle oinstall 4096 May 28 04:08 ocs4j
drwxr-xr-x 6 oracle oinstall 4096 May 28 04:09 olap
drwxr-xr-x 3 oracle oinstall 4096 May 28 04:08 oracm
drwxr-xr-x 4 oracle oinstall 4096 May 28 04:08 oracore
drwxr-xr-x 13 oracle oinstall 4096 May 28 04:08 ord
drwxr-xr-x 8 oracle oinstall 4096 May 28 04:09 otrace
drwxr-xr-x 4 oracle oinstall 4096 May 28 04:08 owm
drwxr-xr-x 3 oracle oinstall 4096 May 28 04:08 pfs
drwxr-xr-x 9 oracle oinstall 4096 May 28 04:09 plsql
drwxr-xr-x 9 oracle oinstall 4096 May 28 04:08 precomp
drwxr-xr-x 15 oracle oinstall 4096 May 28 04:09 rdbms
drwxr-xr-x 3 oracle oinstall 4096 May 28 04:08 relnotes
-rwxr-xr-x 1 oracle oinstall 5880 May 28 04:28 root.sh
-rw-r--r-- 1 oracle oinstall 0 Feb 26 2004 root.sh.old
drwxr-xr-x 3 oracle oinstall 4096 May 28 04:08 slax
drwxr-xr-x 7 oracle oinstall 4096 May 28 04:08 soap
drwxr-xr-x 5 oracle oinstall 4096 May 28 04:08 sqlj
drwxr-xr-x 9 oracle oinstall 4096 May 28 04:09 sqlplus
drwxr-xr-x 4 oracle oinstall 4096 May 28 04:08 srvm
drwxr-xr-x 8 oracle oinstall 4096 May 28 04:09 syndication
drwxr-xr-x 10 oracle oinstall 4096 May 28 04:09 ultrasearch
drwxr-xr-x 3 oracle oinstall 4096 May 28 04:08 wwg
drwxr-xr-x 8 oracle oinstall 4096 May 28 04:08 xdk
[oracle@old1 db_1]$
[oracle@old1 sqlplus]$ pwd
/u01/app/oracle/product/9.2.0.4/db_1/sqlplus
[oracle@old1 sqlplus]$ ls -l lib
total 56
-rw-r--r-- 1 oracle oinstall 43662 Apr 9 2004 env_sqlplus.mk
-rw-r--r-- 1 oracle oinstall 1125 Apr 8 2004 ins_sqlplus.mk
-rw-r--r-- 1 oracle oinstall 1432 Jan 22 2004 s0afimai.o
-rw-r--r-- 1 oracle oinstall 1296 Jan 22 2004 safiimfg.o
[oracle@old1 sqlplus]$ make -help
Usage: make [options] [target] ...
Options:
-b, -m Ignored for compatibility.
-B, --always-make Unconditionally make all targets.
-C DIRECTORY, --directory=DIRECTORY
Change to DIRECTORY before doing anything.
-d Print lots of debugging information.
--debug[=FLAGS] Print various types of debugging information.
-e, --environment-overrides
Environment variables override makefiles.
-f FILE, --file=FILE, --makefile=FILE
Read FILE as a makefile.
-h, --help Print this message and exit.
-i, --ignore-errors Ignore errors from commands.
-I DIRECTORY, --include-dir=DIRECTORY
Search DIRECTORY for included makefiles.
-j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg.
-k, --keep-going Keep going when some targets can't be made.
-l [N], --load-average[=N], --max-load[=N]
Don't start multiple jobs unless load is below N.
-n, --just-print, --dry-run, --recon
Don't actually run any commands; just print them.
-o FILE, --old-file=FILE, --assume-old=FILE
Consider FILE to be very old and don't remake it.
-p, --print-data-base Print make's internal database.
-q, --question Run no commands; exit status says if up to date.
-r, --no-builtin-rules Disable the built-in implicit rules.
-R, --no-builtin-variables Disable the built-in variable settings.
-s, --silent, --quiet Don't echo commands.
-S, --no-keep-going, --stop
Turns off -k.
-t, --touch Touch targets instead of remaking them.
-v, --version Print the version number of make and exit.
-w, --print-directory Print the current directory.
--no-print-directory Turn off -w, even if it was turned on implicitly.
-W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE
Consider FILE to be infinitely new.
--warn-undefined-variables Warn when an undefined variable is referenced.
This program built for x86_64-redhat-linux-gnu
Report bugs to <bug-make@gnu.org>
[oracle@old1 sqlplus]$
7) Relinking 日志在哪里?
在 Oracle Home 安装或者 Patchset 安装的链接操作时
Oracle Home 二进制可执行程序的安装的 relinking 日志在如下文件:
$ORACLE_HOME/install/make.log
手动 relinking
手动 relinking 日志可以使用 unix 重定向特性收集:
$ $ORACLE_HOME/bin/relink all >> relink.out
10) 诊断 relinking 问题的工具有哪些?
A ) nm
用来列出在一个 .o、.a 和二进制文件中的所有符号。常用于找出符号是在哪里定义的。常用命令是:
nm <file> | grep <symbol>
其中<file>是你要检查的库的名字,<symbol>是你实际搜寻的符号的名字。
B) ar
建立和维护库和 .o 文件的归档。使用这个命令你可以将 .o 文件分组到一个单独的归档,用来创建可执行程序。它被用来从一个单独的归档库中插入,删除和取代对象。
C) Symfind
如下位置有一个脚本可用:
$ORACLE_HOME/bin/symfind <symbol>:
在 Oracle 的共享对象中找到一个符号。这个脚本基本上执行了上面2个命令。
正文到此结束