如何查看其他会话的活动 NLS 设置?

rfu*_*sca 8 oracle oracle-11g-r2

我有另一个会话,我怀疑它没有在 Oracle 11gR2 中使用“正确”的 NLS 设置运行。我可以查询什么来显示不同活动会话的 NLS 设置 - 所有 NLS_* 视图都引用了我的当前会话。

Phi*_*lᵀᴹ 5

没有简单的方法可以实现这一目标。您可以通过跟踪会话或使用登录触发器来完成此操作。以下是如何使用数据库登录触发器执行此操作的示例。

记录表:

create table nls_session_parameters_log
(
    inserted_date    date,
    sid              number,
    username         varchar2(128),
    parameter        varchar2(30),
    value            varchar2(40)
);
Run Code Online (Sandbox Code Playgroud)

公共拨款和同义词:

grant insert on nls_session_parameters_log to public;

create public synonym nls_session_parameters_log for sys.nls_session_parameters_log;
Run Code Online (Sandbox Code Playgroud)

数据库登录触发器:

create or replace trigger nls_log_dbtrig after logon on database
begin
  if user in ('PHIL') then
    insert into nls_session_parameters_log
    select sysdate, (select sys_context('USERENV','SID') from dual), (select user from dual),parameter, value
    from nls_session_parameters;
  end if;

  exception
    when others then 
      null;
end;
/
Run Code Online (Sandbox Code Playgroud)

测试:

SQL> conn phil/phil
Connected.
SQL> select count(*) from nls_session_parameters_log;

  COUNT(*)
----------
        17

SQL>
Run Code Online (Sandbox Code Playgroud)

显然,您最好将表放入适当的架构中并按每个用户授予权限。

如果您需要其他方法(会话跟踪)的帮助,请告诉我。