【问题标题】:Altering session permanently永久更改会话
【发布时间】:2011-12-31 12:15:18
【问题描述】:

即使在我关闭我的 oracle sql 开发人员之后,是否可以永久更改会话?

我要更改的语句示例:

Alter Session Set Nls_Timestamp_Tz_Format='HH24:MI TZR';

上述声明只允许我更改当前会话,而不是永久设置。

谢谢

【问题讨论】:

  • SO 题外话;属于 serverfault.com。

标签: oracle session timestamp oracle-sqldeveloper alter


【解决方案1】:

如果您只想更改 SQL Developer 的默认值,可以在 SQL Developer 设置中进行。在 SQL Developer 3.1 中(早期版本中存在相同的设置,但导航可能略有不同),工具 |偏好 |数据库 | NLS 允许您指定时间戳格式和时间戳 TZ 格式。然后,SQL Developer 将在创建新会话时自动为您发出适当的ALTER SESSION 命令。

【讨论】:

  • 您好,感谢您的回答。这是非常明确的。我知道 sql developer 可以更改我们自己的设置。但是,如果我将表授予其他用户,他们将不会具有相同的配置。有没有配置的示例方法?
  • @user976050 - 否。其他用户将使用其他客户端。其他客户端将从其他地方获取他们的 NLS 设置。其他用户可能有不同的 NLS 偏好。如果您想向其他用户显示字段的特定字符串表示形式,请创建一个使用指定格式掩码执行显式 TO_CHAR 的视图,并授予用户访问该视图的权限。
  • 好的,这就是我为在不同表中显示所有不同时区所做的工作。我只是在想是否有任何更简单的方法可以做到,比如让它永久化。感谢您的澄清!
【解决方案2】:

您需要在initialization parameter file 中设置此项以全局影响数据库。

【讨论】:

  • 数据库中的 NLS 设置被客户端上的设置否决,因此无法正常工作。实际使用数据库默认 NLS 设置的情况很少。
【解决方案3】:

Nls_Timestamp_Tz_Format等初始化参数可以从三个来源设置:

  • 在使用ALTER SESSION SET 语句的会话中
  • 在客户端参数文件init.ora
  • 在服务器端参数文件spfile

【讨论】:

  • 我可以知道如何更改“init.ora”以将其设置为默认值吗?
  • init.ora 和 spfile 都是服务器端的参数文件。任何给定的数据库实例都可以使用 init.ora 文件或 spfile 启动,但不能同时使用两者。 NLS 设置由客户端控制,并且针对不同的客户端应用程序进行不同的控制。 SQL*Plus 之类的东西会从NLS_LANG 派生NLS_TIMESTAMP_TZ_FORMATNLS_LANG 被设置为环境变量或在注册表中。其他应用程序将从其他地方获取值。
  • 所以总而言之,即使我授予其他客户端权限,也无法编辑其他客户端的 nls 设置?谢谢
  • init.ora 是一个文本文件,通常位于$ORACLE_HOME/database。您可以使用任何文本编辑器添加行,如 NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH:MI:SS.FF TZH:TZM'
  • init.ora 和 spfile 都位于数据库服务器中。但它们在不同的层次上运作。第一个是客户端,第二个是服务器端。参考:orafaq.com/wiki/SPFILE
【解决方案4】:

要在数据库中永久设置默认值,从数据库中:-

alter system ... scope=spfile;

然后作为 SYS(因此您可能需要与 DBA 交谈),显然是在适当的时候! -

shutdown;
startup;

(我知道已经提到了spfile,但都可以从sqlplus cmdline 完成,至少在11g 中。)

【讨论】:

    猜你喜欢
    • 2015-04-23
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多