要使此页正常工作, 需要使用启用脚本的浏览器。

常见问题

本主题回答用户提出的有关 Oracle Universal Installer 的部分常见问题。此 FAQ 中的问题和答案分为以下几类:

使用操作

使用 Oracle Universal Installer

使用查询

存放组件

使用相关性

使用文件和文件组

使用变量

翻译发行说明

使用对话框

多磁盘安装

执行无提示操作

卸载具有相关性的顶级组件


使用操作

是否可以在代码块中调用操作?

不能。操作不能在代码块中调用。

在不同平台上进行安装时, Universal Installer 如何处理特定于平台的操作?

部分操作是特定于平台的。OSP 只提供适用于 Windows 平台和 Solaris 平台的操作。在安装过程中, 不适用于特定平台的操作将被忽略, 而不适用于特定平台的所有查询都将返回默认值。

是否存在可以创建或提取 .exe 文件的操作?

OUI 中不存在创建或运行自提取 (.exe) 文件的操作。不过, 您可以将自提取文件的内容添加到文件组, 然后使用 copyGroup 操作复制文件。如果使用此过程, 则卸载过程中可以删除所有文件。安装可执行文件后, 可以使用衍生操作运行它。

卸载过程是如何工作的?

每个操作都定义了相对应的撤消功能, 在卸载过程中这些功能将按相反的顺序执行。可以指定在安装过程, 安装和卸载过程或者仅在卸载过程中运行这些操作。指定在卸载过程中运行的每个操作都会在组件日志中添加一个条目。在卸载过程中, 日志的运行顺序与卸载时操作的顺序相反。

安装程序操作日志是什么?

每个会话写入一次操作日志。每次开始新的安装会话时都会创建安装程序操作日志。每个操作的目的以及是在安装还是卸载过程中执行这样的信息都记录在安装程序操作日志中。每个会话都保存在文件 installActionstime_stamp.log 中, 其中 time_stamp 的格式如下:

yyyy-mm-dd_hh-mm-ss[AM|PM].log

.err 和 .out 文件的文件名中还使用时间戳, 所以更易于跟踪每个会话的日志文件。

如何衍生 SQL 命令?

要衍生 SQL 命令, 请使用衍生操作。

例如, 要在安装过程中创建两个表, 可以使用名为 ct.sql 的 SQL 脚本 (举例来说), 其中包含以下行:

create table &1 (col1 number, col2 number);
create table &2 (col1 number, col2 number);
exit;

要在安装过程中使用衍生操作, 即使用 SQL Plus 创建 foo1 和 foo2 表, 则安装命令参数如下:

在 Windows NT, 95 或 98 上, 使用以下参数之一:

sqlplusw system/manager @x:/directory/ct.sql foo1 foo2
cmd /c sqlplus system/manager @x:/directory/ct.sql foo1 foo2 (仅限 NT)
command /c sqlplus system/mamager @x:/directory/ct.sql foo1.foo2 (Win 95/98)
sqlplus system/manager @x:/directory/ct.dql foo1 foo2 (在 UNIX 上)

要在安装时启动 Oracle 数据库, 请使用名为 db.startup 的脚本 (举例来说), 其中包含以下行:

connect internal
startup
exit;

使用衍生操作时, 如果 Server Manager 行模式包含在系统路径中, 则安装命令参数如下:

在 UNIX 命令行上:

svrmgr1 command=@/private1/Directory/db.startup

在 DOS 命令行上:

svrmgr1 @/private1/Directory/db.startup

要关闭数据库, 请使用名为 db.shutdown 的脚本 (举例来说), 其中包含以下行:

connect internal
shutdown immediate
exit;

使用衍生操作时, 如果 Server Manager 行模式包含在系统路径中, 则安装或卸载命令参数如下:

在 UNIX 命令行上:

svrmgr1 command=@/private1/Directory/db.shutdown

在 DOS 命令行上:

svrmgr1 @/private1/Directory/db.shutdown

使用查询

是否可以使用查询检索 ORACLE_HOME 产品清单?

您可以使用 RgsQueries 测试使用早期版本的 OUI 安装的产品。可以使用 AreasQueries 测试 OUI 安装的产品。目前, 不存在可返回 Oracle 主目录中安装的所有产品列表的查询。

使用相关性

如何创建共享相同文件的两个组件?

创建共享相同文件的两个组件的一种方法是, 创建包含共享文件的单独组件。然后, 在这两个组件和共享文件的组件之间建立相关性。在安装这两个组件之一时, 将安装此单独组件。如果这两个组件被卸载, 且不存在与该单独组件相关的其他组件, 则该组件也会被卸载。

依赖组件与被依赖组件的区别是什么?

依赖组件一般为顶级组件, 它依赖于级别较低的组件 (被依赖组件)。必须先安装依赖组件的所有被依赖组件, 才能安装依赖组件。

例如: 如果组件 A (必需或可选) 要求安装组件 B 才能正常工作, 则 A 依赖于 B。A 为依赖组件, 而 B 为被依赖组件。

循环相关性是指什么?

循环相关性是指某个被依赖组件依赖于初始的依赖组件。例如, 如果 A 依赖于 B, B 依赖于 C, 而 C 又依赖于 A, 则构成循环相关性。在编辑不同会话中的组件并分配相关性时可能会出现这种情况。可以使用 Stage Verifier 检查是否存在循环相关性。

OUI 中不支持循环相关性。

使用变量

如何导出公共变量?

利用变量关联, 可以将依赖组件中的变量与被依赖组件中的变量关联。必须将 B 中的 foo 变量与 A 中对应的公共变量关联。要求将两个变量都标记为 "public", 而且这两个变量必须为相同类型。

例如, 如果组件 A 依赖于组件 B, 而组件 B 具有名为 foo 的公共变量, 则可以导出组件 A 中的变量, 以便为组件 B 中的 foo 变量赋值。

如何在代码块中将字符串赋值给数字变量?

使用 parseInt 函数可以将字符串转换为数字。由于函数不会引发异常错误, 因此如果传递的字符串不代表有效整数, 则 parseInt 函数返回 0。

如何使用 Configuration Assistant 说明文件中的变量?

如下所示, 设置 Configuration Assistant 说明文件中的 CLASSPATH 变量:

Name=<类路径>
Description=<指定要启动的此 configtool 所需的类路径>

还需在说明文件的 GENERAL 部分中的参数列表中包含 CLASSPATH。

使用此说明文件创建 Configuration Assistant 时, 安装/卸载参数中将包含 CLASSPATH 参数。在此处指定 CLASSPATH 时, 要求使用与为操作/查询/对话框/函数指定参数时相同的表达式格式。

注: 由于开关 (-cp) 已经是指定内容的一部分, 因此您无需再指定它。

理论上, 您应当创建以下特定于平台的常数:

如下例所示, 创建常数后可使用它们来确保将正确类路径传递给 Java 运行时环境 (JRE):

NET8_LOCATION + "/lib/netcfg.jar" + c_sPathSeparator + c_sCLASSPATH

使用对话框

如何创建包含多个项的对话框?

包含多个项的对话框显示用户定义的提示以及安装时需要的多个输入字段。每个输入字段左侧显示关联的标签。共有三种可用的输入字段类型: POPDOWN, SECURE 或 TEXTFIELD。这些输入字段类型区分大小写, 必须按列出的方式进行输入。目前, 每个对话框只能包含一个 POPDOWN 字段, 您可从可用选项列表中选择该字段。SECURE 字段一般用于输入口令。TEXTFIELD 类型的字段供您手动输入所需信息。

子标题字段中显示什么内容?

在所有标准对话框中, 您可以指定在标题下方显示子标题。子标题字段的默认值是空字符串。在信息对话框中, 您可以指定显示在对话框底部的说明性文本。说明性文本的默认值为空。

如何验证口令?

使用“口令”对话框时, 可以使用对话框默认值功能设置口令。(对话框的默认值不进行验证。)“口令”对话框执行验证, 检查您在输入口令字段和确认口令字段中输入的值是否相同。此值被设置为接受口令的变量。在变量验证方法中可以添加其他验证, 如检查口令是否正确等等。

执行无提示操作

如何对特定组件执行操作?

默认情况下, 对 component_table 中列出的所有组件执行操作。如果希望只对特定组件执行操作, 请使用组件-键从列表中选择各个组件。例如:

示例 Components_Table:

comp0 c:/components/component0.prp component0 "NT,Solaris" 1.0
comp1 c:/components/component1.prp component1 "NT,Solaris" 1.0
comp2 c:/components/component2.prp component2 "NT,Solaris" 1.0
patch3 c:/components/patch3.prp patch1 "NT,Solaris" 1.1

指定组件的命令行示例:

ospSilent c:/myspec.txt -components {comp0, comp1, patch3}

使用 Oracle Universal Installer

如何在未安装过 Oracle 产品的 NT 系统上为 Oracle_Home 字段指定定制默认值?

可以将以下项添加到 oraparam.ini 文件中:

DEFAULT_HOME_LOCATION=/<HomeDirectory>

该目录名称附加到具有最大可用磁盘空间的驱动器后面, 并且用作为默认值。仅在未安装过 Oracle 产品的系统上进行安装时使用此值。

有关使用 oraparam.ini 文件的详细信息, 请参阅 Oracle Universal Installer Concepts Guide 中的 "Troubleshooting" 一章。

在 Unix 上进行安装时如何显示发行说明?

安装结束时, OUI 会提示您输入工具或命令以显示发行说明 (如果适用)。如果希望使用 viemacs 查看发行说明, 请在工具名称前输入 xterm -e。例如, 使用 xterm -e vi 将显示单独的 xterm 窗口, 该窗口将立即执行 vi <filename> 命令。

OUI 返回哪些不同的退出代码?

有关退出代码的详细信息, 请参阅 Oracle Universal Installer Concepts Guide

如何创建包含在特定安装会话中所做的全部选择的响应文件?

有关使用响应文件的详细信息, 请参阅 Oracle Universal Installer Concepts Guide 中的 "Customizing and Creating Response Files" 一章。请重点阅读 "Creating a Response File with Record Mode" 一节。

OUI 如何确定临时文件的位置?

OUI 首先尝试查找 $TEMP 环境变量; 如果找不到, 则尝试查找 $TMP; 如果都找不到, 则使用默认位置 /tmp (在 Solaris 上) 和 C:/Temp(在 Windows 上)。

OUI 按什么顺序为变量赋值?

变量按以下优先顺序设置:

  1. 命令行

  2. 响应文件
  3. 由依赖组件传递
  4. 变量的计算

在 Linux 中, 为什么我不能用英语之外的其他语言来调用 OUI?

在 Linux 环境中, 如果您不能用英语之外的其他语言调用 OUI, 请在 shell 中同时使用国家/地区代码和语言代码来配置语言设置。

将语言设置配置为法语的命令行示例:

setenv LANG fr_FR
setenv LC_ALL fr_FR

为什么在集群系统中看不到“节点选择”页?

如果在集群系统中看不到此页, 请检查是否已成功安装 Oracle Clusterware。如果是, 请运行 <CRSHome>/bin/olsnodes 以检查集群件是否已启动并且正在运行。如果 olsnodes 没有返回节点列表, 则 OUI 不显示此页。这是特定于系统的问题, 不是 OUI 的问题。如果未安装 Oracle Clusterware 且系统是供应商集群件的一部分, 请运行 Disk1/install/<platform>/lsnodes 以获得节点列表。如果 lsnodes 没有返回节点列表, 则 OUI 不显示该页。

为什么空的 Oracle 主目录会显示“所选节点”页?

如果您已从该主目录中卸载了软件, 就会出现这种情况。OUI 仍会记住主目录和节点的信息。从安装 Inventory 的对话框删除 Oracle 主目录 (详细信息参阅联机帮助), 然后开始安装。

为什么 OUI 会在“可用产品”页或“安装类型”页上显示一个列表框?

可能是因为提供的选项太多和/或选项的说明太长, 一页上容纳不下整个列表和所有说明。如果总共有三个选项, 每个选项的说明占三行, 则肯定会显示单选按钮页。

为什么“安装类型”和“概要”页上的大小与 Oracle 主目录的实际要求有所不同?

该大小是安装过程中所需的全部空间和已安装产品所需的全部空间之和。一般来说, 安装完成后一些空间 (用于链接) 就不再需要了。如果大小值不够准确, 安装开发人员应根据需要在组件中更新偏差值。实际大小是在运行 OUI 时使用 -printdisk 选项计算得出的, 同时可确认临时空间, 临时链接空间, Oracle 主目录以及 Oracle 主目录外的任何文件 (如数据库文件) 是否放置在不同的磁盘上。OUI 将在日志目录中创建一个文件, 在每次操作后指定磁盘使用量。可以使用最大使用量和完成时的使用量来设置偏差值 (安装, 临时和安装后空间)。

在安装过程中如何调试错误?

如果安装过程中存在问题, 如安装时出错, 请检查 installActionstime_stamp.log 的最后更新。如果最后一项指示操作/查询出现错误, 则可能是安装脚本存在问题。应在安装开发过程中进一步研究此问题。研究这些问题的一些提示:

如何调试集群安装问题?

如果该问题与远程节点上执行的服务/注册表更新有关, 则属于 OUI 问题。请提供可再现该问题的小环境, OUI 小组将研究该问题。对于大多数集群操作, OUI 依赖于 SRVM API。研究工作的结果将确定是 OUI 执行了不正确的任务, 还是 SRVM 有问题。在这种情况下, OUI 小组将重新分配相应的 Bug。

如何调试配置辅助程序的问题?

存放组件

尝试存放时显示错误消息“Lock was not available to get exclusive write access in staging area”(对暂存区执行独占写访问时无法获取锁 )。

为了防止其他进程同时写入暂存区, 暂存区是锁定的。如果您正在运行另一个临时会话, 并尝试存放到同一个暂存区, 或者, 安装会话尝试从同一个暂存区进行安装, 就会显示此错误。检查是否有安装程序会话正在运行并尝试存放到同一个暂存区。

使用文件和文件组

最多可以向文件组添加多少项?

最多可以将大约 6000 个文件添加到文件组中。如果文件组中的文件数超过此数目, 将影响安装时内存要求并降低安装速度。对于使用 copyJarContents 操作提取的 jar 文件, 也存在此数量限制。

翻译发行说明

怎样才能包含我的组件的已翻译发行说明?

由于文件映射中必须包含所有发行说明, 您可以添加所有已翻译的发行说明文件并将它们全部标记为复制到特定目标位置。这样就可以为此文件创建发行说明。

建议将已翻译 (非英语) 的发行说明放在单独的文件组中, 并在最初的 copyGroup 操作之后执行 copyGroup 操作。

多磁盘安装

我的产品位于多个磁盘上。在安装该产品时, OUI 多次要求使用同一磁盘。为什么?

确保在暂存区上执行的最后一个操作是 "创建多 CD 操作"。如果在暂存区中存放, 删除任何组件或执行其他更改, 则必须在 Oracle 软件打包程序中重新创建多个 CD。此外, 请检查以下各项:

卸载具有被依赖组件的顶级产品

以下示例中使用的顶级组件具有 Oracle Universal Installer 提供的不同类型的被依赖组件。

测试 1: 测试具有 "必需" 类型的被依赖组件的组件

设置

创建 2 个顶级组件 (A, B), 每个顶级组件都具有相同的 "必需" 的被依赖组件 (C)。

安装

I1a.选择 A 将安装 A 和 C。
I1b.之后, 选择 B 将仅安装 B (之前已安装被依赖组件 C)。

卸载

D1a.选择 A 将仅卸载 A。不卸载 C, 因为它还是 B 的 "必需" 的被依赖组件, 所以仍然需要该组件。
D1b.选择 A 和 C 将卸载 A, B 和 C。B 也会被卸载, 因为它的“必需”的被依赖组件 C 将被卸载, 而 B 不能在缺少 C 的情况下安装。
D1c.选择 C 将卸载 A, B 和 C。A 和 B 也会被卸载, 因为它们的 "必需" 的被依赖组件 C 将被卸载, A 和 B 不能在缺少 C 的情况下安装。

测试 2: 测试具有“1,more”类型的被依赖组件的组件

设置

创建 2 个顶级组件 (A, B), 每个顶级组件都具有相同的二个“1,more”类型的被依赖组件 (C, D)。

安装测试 2

I2.a. 选择 A 和两个被依赖组件 (C, D) 将安装 A, C 和 D。
I2.b. 之后, 选择 B (未选择 C 和 D) 将仅安装 B。

卸载测试 2

D2.a1.选择 A 将仅卸载 A。
D2.a2.选择 A 和其中一个被依赖组件 C (在 A 之下) 将卸载全部组件 (A, B, C 和 D)。

注: B 和 D 也将被卸载。

D2.a3.仅选择其中一个被依赖组件 C (在 A 之下) 将卸载全部组件 (A, B, C 和 D)。

注: A, B 和 D 也将被卸载。

D2.a4.仅选择其中一个被依赖组件 D (在 A 之下) 将卸载全部组件 (A, B, C 和 D)。

注: A, B 和 C 也将被卸载。

D2.a5.同时选择这两个被依赖组件 C 和 D (在 A 之下) 将卸载全部组件 (A, B, C 和 D)。

注: A 和 B 也将被卸载。

D2.b1.选择 B 将仅卸载 B。
D2.b2.选择 B 和其中一个被依赖组件 C (在 B 之下) 将卸载全部组件 (A, B, C 和 D)。

注: A 和 D 也将被卸载。

D2.b3.仅选择其中一个被依赖组件 C (在 B 之下) 将卸载全部组件 (A, B, C 和 D)。

注: A, B 和 D 也将被卸载。

D2.b4.仅选择其中一个被依赖组件 D (在 B 之下) 将卸载全部组件 (A, B, C 和 D)。

注: A, B 和 C 也将被卸载。

D2.b5.同时选择这两个被依赖组件 C 和 D (在 B 之下) 将卸载全部组件 (A, B, C 和 D)。

注: A 和 B 也将被卸载。

返回页首