===== Die aktuellen Oracle NLS Settings einer SQL Session ermittlen =====
**Erstellt 09.2013**
Möglichkeiten:
* In einer Session mit den NLS views
* Login Trigger Monitoring
* Trace mit OraDEBUG für anderes Sessions
Die Eigenschaften werden IMMER vom Client zur Datenbank vererbt, d.h. ist sind keine Einstellung in der DB oder dem DB Server, es sind die Client Einstellungen, die für die NLS Settings einer Session verantwortlich sind!
----
====Innerhalb einer Session über die NLS Views die Einstellungen ermitteln===
Mit SQL*Plus an der DB anmelden und mit der View **nls_session_parameters** die Eigenschaften innerhalb dieser Session überprüfen:
column parameter format a24 heading "NLS Session Parameter"
column value format a30 heading "Setting"
select PARAMETER
,Value
from nls_session_parameters
order by 1
/
----
====Login Trigger Monitoring ====
Stichwort:
Login Trigger erstellen, der mit einer autonomen Transaktion die NLS Werte in eine Log Tabelle schreibt.
Im Prinzip gleich wie beim ein allgemeiner Error Trigger, siehe hier [[dba:oracle_sqlfehler_protokoll|DB Fehler protokollieren]].
create or replace trigger trg_logon
after logon
on database
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
begin
-- Werte aus nls_session_parameters lesen
……
-- wert in Log Tabelle schreiben
……
end;
/
Ist der Trigger ungültig, kann keine Anmeldung an der DB erfolgen! Daher sorgfältig entwickeln!
----
====Einen Trace mit OraDEBUG erzeugen ====
Für einen Trace mit dem "OraDEBUG" Kommando in SQL*Plus muss die OS PID (Process ID) der zu analysierenden Session bekannt sein.
- Mit SQL*Plus an der DB als sys User anmelden:sqlplus / as sysdba
- OS PID ermittlen:
SQL>select p.inst_id
, to_char(p.spid) as os_pid
, vs.username
, p.tracefile as trace_file_location
from gv$session vs
, gv$process p
where vs.paddr=p.addr
and vs.inst_id=p.inst_id
and vs.username is not null
and vs.username like '%&&USER_NAME.%'
order by vs.username
/
- Trace für die Session erstellen und Parameter in das Tracefile schreiben lassen:SQL> oradebug SETOSPID ;
SQL> oradebug dump modified_parameters 1;
Auch mit mit oradebug dump modified_parameters 0; testen!
- Das Tracefile in der DIAG Destinatin der Datenbank öffnen (Name wie _ora_.trc ):
host notepad
....
-- ** 2013-08-26 19:58:32.881
Processing Oradebug command 'dump modified_parameters 1'
DYNAMICALLY MODIFIED PARAMETERS:
nls_language = GERMAN
nls_territory = GERMANY
nls_sort = GERMAN
nls_date_language = GERMAN
nls_date_format = DD.MM.RR
nls_currency = €
nls_numeric_characters = ,.
nls_iso_currency = GERMANY
nls_calendar = GREGORIAN
nls_time_format = HH24:MI:SSXFF
nls_timestamp_format = DD.MM.RR HH24:MI:SSXFF
nls_time_tz_format = HH24:MI:SSXFF TZR
nls_timestamp_tz_format = DD.MM.RR HH24:MI:SSXFF TZR
nls_dual_currency = €
nls_comp = BINARY
----
====Quellen====
* 12c => NLS_SESSION_PARAMETERS https://docs.oracle.com/database/121/REFRN/GUID-BB209B28-8180-4793-8FB6-E7C98C131133.htm#REFRN29032