===== 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