Me gustaría compartir con ustedes algunas de las funciones que tiene oracle y que son muy útiles a la hora de estar administrando un servidor. Principalmente me refiero a las diferentes maneras que tiene oracle para identificar el usuario con el que estamos conectados así como información relacionada a nuestra sesión.
SYS_CONTEXT
SYS_CONTEXT(n , p [, length]), puede tomar 3 parámetros de entrada, donde n es un namespace, p es un parámetro asociado al namespace n y lenght es el tamaño del valor regresado en bytes que por default es 256. El namespace en Oracle es llamado USERENV el cuál describe nuestra sesión, por lo que siempre colocaremos USERENV y como resultado obtenemos un VARCHAR2.
Existen una gran diversidad de parámetros para el namespace USERENV pero solo voy a colocar los más utilizados:
CURRENT_SCHEMA
CURRENT_SCHEMAID
HOST
INSTANCE
INSTANCE_NAME
IP_ADDRESS
ISDBA
LANG
LANGUAGE
NETWORK_PROTOCOL
NLS_CALENDAR
NLS_CURRENCY
NLS_DATE_FORMAT
NLS_DATE_LANGUAGE
NLS_SORT
NLS_TERRITORY
OS_USER
SERVER_HOST
SERVICE_NAME
SESSION_USER
SESSION_USERID
SESSIONID
SID
TERMINAL
Por ejemplo si queremos ver la IP de donde estamos conectados ejecutamos el siguiente comando:
SELECT SYS_CONTEXT(‘USERENV’,’IP_ADDRESS’)
FROM dual;
SYS_CONTEXT('USERENV','IP_ADDRESS')
------------------------------------
192.168.1.100
Si no te muestra una IP es debido a que no te estas conectando por medio de TCP.Otro ejemplo es el siguiente:
COLUMN usuario FORMAT A10
COLUMN esquema FORMAT A10
COLUMN host FORMAT A30
COLUMN NLS_TERRITORY FORMAT A15
SELECT SYS_CONTEXT('USERENV', 'OS_USER') usuario,
SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') esquema,
SYS_CONTEXT('USERENV', 'HOST') host,
SYS_CONTEXT('USERENV', 'NLS_TERRITORY') NLS_TERRITORY
FROM dual;
USUARIO ESQUEMA HOST NLS_TERRITORY
---------- ---------- ------------------------------ ---------------
usuario01 SYS oracle.dbaremoto.com.mx AMERICA
UID
- Esta función no toma parámetros de entrada y nos entrega el ID de la se sessión. El ID de usuario es un identificador único para cada usuario en una base de datos y puede seleccionarse de la vista DBA_USERS.
SQL> SHOW USER
USER is “SYS”
SQL> SELECT user_id,username, account_status
FROM dba_users
WHERE user_id = UID;
USER_ID USERNAME ACCOUNT_STATUS
---------- ------------------------------ --------------------------------
0 SYS OPEN
USER
- No toma parámetros de entrada y nos regresa un string que contiene el nombre de usuario de nuestra sesión.
SQL> SELECT default_tablespace, temporary_tablespace
FROM dba_users
WHERE username = USER;
DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ------------------------------
SYSTEM TEMP
Existe la función USERENV pero al parecer va a desaparecer ya que oracle la deprecio desde la versión 9i, por lo que se recomienda usar SYS_CONTEXT.