安装 Oracle DB

安装 Oracle DB

我正在尝试安装 Oracle 数据库。

我的想法是从我的 Inno Setup 安装程序调用数据库配置助手,并且我需要知道这个创建过程的结果代码是否等于 0。

但是 Oracle 安装程序调用一个 .bat,而这个 .bat 又调用了很多 .jar 文件,并且没有 .exe 可以调用。

有没有办法知道我的数据库实例是否真的创建了?

答案1

尝试从命令行使用 sql 连接它。

  • 设置环境
  • sqlplus /nolog
  • 系统管理员
  • 显示表格

答案2

查看 Windows 的安装指南(正如您提到的 .exe 和 .bat),有一章关于执行 ORACLE_HOME(OUI - setup.exe)、监听器(netca)和数据库(dbca)的静默安装,您可能会发现它很有用:

http://download.oracle.com/docs/cd/B28359_01/install.111/b32006/gblsupp.htm

故障排除章节只是告诉您检查库存目录中的日志文件,不是很有用:

http://download.oracle.com/docs/cd/B28359_01/install.111/b32006/ts.htm#i1090449

在 Windows 上安装之前,您可能需要验证两件事:

  • 您要安装的驱动器上有足够的可用磁盘。
  • 以管理员身份运行安装程序。

另外,正如 kmarsh 所建议的,您可以检查安装的组件是否响应,例如在运行 netca 后执行 tnsping 并在创建数据库后连接到数据库...

除安装之外的另一种选择是克隆 Oracle Home(例如带有最新补丁的 11.1.0.7),恢复种子数据库(包含所有架构、表)并使用 netca + oradim.exe 添加 Windows 服务。第一步如下:

http://download.oracle.com/docs/cd/B28359_01/em.111/b31207/oui6_cloning.htm#CEGFGIDH

答案3

遇到了同样的问题,愚蠢的 Oracle :-(

无法在 Oracle 静默安装批处理脚本中解决这个问题,因此我创建了一个辅助 VBscript,等待 Oracle 安装程序进程退出后再继续。此外,由于生成了一个单独的进程,我认为没有办法获取退出代码来查看它是成功还是失败。不过,在安装完成后,您可能还可以检查其他内容以查看它是成功还是失败。

静默调用 Oracle 通用安装程序:

setup.exe -silent -nowelcome -force -responseFile """"C:\response\oracle11g.rsp""""

然后调用vbscript:

cscript.exe //nologo “C:\waitfororacle.vbs”

以下是 waitfororacle.vbs 脚本:

    Option Explicit

' Synopsys -
' This script is needed because of the way the Oracle Installer processes run.
' Setup.exe calls OUI.exe. The actual installation runs with java.exe, however
' java.exe does not run under the same process tree, so there is no way in the
' batch file to wait for the install to finish. To resolve this problem this 
' script will look for the instance of java.exe that is running the Oracle install
' and waits for it to finish.

Dim oProcess
Dim oProcess2
Dim oWMI
Dim colProcesses
Dim strWQL

Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
strWQL = "Select ExecutablePath from Win32_Process Where ExecutablePath Like '%OraInstall%'"

Do

    Set colProcesses = oWMI.ExecQuery(strWQL)
    For Each oProcess2 in colProcesses
         Set oProcess = oProcess2
    Next
    Wscript.Sleep 1000

Loop While IsEmpty(oProcess)

Do

    Set colProcesses = oWMI.ExecQuery(strWQL)
    Wscript.Sleep 3000

Loop Until colProcesses.Count = 0

相关内容