会话如何获得其初始时区

3

当我使用SQL Developer检查会话时区时,

select sessiontimezone from dual;

我得到了'Europe/Berlin'。当我在SQL*Plus中执行相同的操作时,我得到了'+02:00'

这在处理TIMESTAMP WITH LOCAL TIMEZONE时会有所不同,因为德国有时处于UTC+01时区,有时处于UTC+02时区,这取决于夏令时。(目前处于UTC+02。)

这两个工具如何获取/设置它们的默认时区?

系统信息:

  • 连接通过TNS进行。
  • SQL Developer:18.1.0.095.1630
  • Oracle DBMS:Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64位生产版本
  • 操作系统服务器:x86_64 / Linux 2.4.xx
  • 客户端操作系统:Microsoft Windows 10 Professional

是 https://stackoverflow.com/q/23120840/1509264 的复制? - undefined
@MT0: 谢谢,我没有看到这个第一个帖子。无论如何,...所以Wernfried Domscheit认为SQL Developer执行了ALTER SESSION SET time_zone = ...。这可能是对的。但是它从哪里获取地区信息呢?从Windows操作系统吗?至于SQLPlus,那个工具从哪里获取时区信息呢?从服务器操作系统吗?还是有一些Oracle设置在起作用?我还是很好奇 :-) 我看到了第二个帖子,但我不想知道如何更改SQL Developer的设置(实际上我更喜欢它的EUROPE/BERLIN时区,而不是SQLPlus的+02:00)。 - undefined
第二个链接并不是为了告诉你如何更改SQL Developer的设置,而是要告诉你,如果已经更改了设置,初始值将来自sqldeveloper/bin/sqldeveloper.conf配置文件,该文件将用于设置Java VM属性。我仍然没有找到任何关于初始值来源的文档(如果在配置文件中没有明确设置),但我的初步假设是来自操作系统(你可以通过更改操作系统的时区来进行测试)。 - undefined
@MT0: 再次感谢你。抱歉,你说得对,我确实检查了配置文件,但早些时候没有发现任何可以更改时区的内容。是的,我应该能够更改我的Windows地区设置并观察结果。稍后我会这样做,并在这里发布我的结果。(不过服务器的地区设置我无法更改。) - undefined
@MT0: 那是个好主意。这表明当我打开工具时,SQL Developer会获取Windows的地区信息。然后,它会将这个时区应用于我打开的任何会话。 - undefined
1个回答

1

文档只列出了环境变量ORA_SDTZ

然而,它来自以下设置:

  • 注册表键HKCU\SOFTWARE\ORACLE\KEY_{Oracle Home Name}\ORA_SDTZ

  • 注册表键HKLM\SOFTWARE\ORACLE\KEY_{Oracle Home Name}\ORA_SDTZ

    (或者 HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_{Oracle Home Name}\ORA_SDTZ)

  • 环境变量ORA_SDTZ

  • 您机器的当前区域设置(很可能)。

  • 如果以上都没有找到,则使用数据库时区(仅假设)

你的客户端应用程序可能有一些额外的会话时区来源,请参考 如何更改 Oracle SQL Developer / Oracle Data Modeler 的时区? 作为示例。
环境变量应具有最高优先级。

谢谢。所以Oracle首先查找HKCU,然后是HKLM,依此类推直到找到设置为止。由于我没有设置任何ORA_SDTZ,所以将使用服务器的时区("您机器当前语言环境的本地设置")。我明白了。另一方面,SQL Developer使用Windows时区,因为在sqldeveloper.conf文件中没有覆盖的条目。这就是差异的原因。谢谢。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接