0

我正在使用 PL/SQL 包 OS_COMMAND(它本身使用 Java)来执行 shell 命令。我可以观察他们的返回码。

我想确定我是在 Windows 还是任何其他操作系统上运行。

我想出了不同的方法:

  • 我的第一个想法:执行特定的 Windows 命令(应该始终成功)并检查返回码:0 表示 Windows,其他任何内容表示其他操作系统。
  • 使用 Java 存储过程
  • 使用数据库信息,例如
    • SELECT platform_id, platform_name FROM v$database
    • SELECT dbms_utility.port_string FROM DUAL
    • SELECT NAME FROM v$dbfile并检查格式

您认为哪个“最安全”?您是否使用其他方法?有什么优点/缺点?

我想避免使用 Java 存储过程,但我不知道如何解释数据库信息(如何系统地检查 Windows:结果包含“WIN”或“Windows”,还是...?)。如果您要检查特定的 Windows 命令,我应该使用哪一个?

我会很高兴收到任何方向的建议。

4

1 回答 1

1

一个有点晚的回应,但无论如何这里是我的两分钱。

我同意你的观点,最好直接从数据库环境中获取信息,以避免“环境”之间不必要的调用。因此,这将我们直接带到了提到的 3 个选项:

  1. v$database:好吧,您可以依赖这些信息,从这个角度来看,这似乎是一个非常“安全”的解决方案。不利的一面是,您至少需要对基础表具有选择权限才能使其正常工作,这在某些环境中可能是一个问题。
  2. dbms_utility.port_string:不用担心这里的权限,但是你没有得到与选项 1 一样多的信息。还请记住,仅将其用于操作系统确定而不是 oracle 版本。
  3. v$dbfile:这是一个不推荐使用的视图,所以首先最好使用 v$datafile。但是这种方法有一个重要的缺点:当使用 ASM 时你会做什么?如果我没记错的话,在使用 ASM 时,所有操作系统平台上的名称格式都是相同的。

干杯

比约恩

于 2016-07-26T15:23:56.040 回答