我们当前正在将数据库从Sybase迁移到Oracle cloud v12。在旧服务器中,该服务器完全归我们所有,因此我们可以将服务器时区更改为英国时间,同时反映夏时制。我们正在尝试在Oracle数据库中实施相同的更改,但是我们无法进行相同的修复,因为服务器将与另一个团队共享。有人知道改变systimestamp或to_timestamp_tz()使用的默认时区的方法吗?
这样做的目的是因为我们有世界各地的团队成员连接到该数据库,因此我们需要一个中央默认时区。
我们考虑过更改默认的SESSION参数,但这仅适用于个人的本地计算机,不适用于运行这些脚本/查询的正常用户或服务器。
我试图寻找合适的NLS参数,但找不到任何可以做到这一点的东西。
从查看V $ TIMEZONE_NAMES来看,我们似乎希望将其设置为“欧洲/伦敦”,因为Oracle可以使用它来确定是否以及需要为夏时制自动进行更改。
先谢谢您了:)
答案 0 :(得分:0)
SYSTIMESTAMP
在数据库服务器操作系统的时区中返回。通常,您应该在TO_TIMESTAMP_TZ()
中提供时区,但是,如果未指定,则Oracle使用SESSIONTIMEZONE
。您可以使用以下命令设置会话时区:
ALTER SESSION SET TIME_ZONE= ...;
SQL会话的默认时区可以由环境变量ORA_SDTZ
设置。在Windows中,您还可以设置注册表项HKLM\SOFTWARE\Oracle\KEY_{Oracle Home Name}\ORA_SDTZ
实际上,您无法从服务器端控制会话时区。服务器可以提供默认时区,但是只有在客户端中未设置值时,该默认值才适用。