學習致用——使用PL/SQL提取Oracle資料庫上下文資訊(使用者環境) (Extraction of Oracle context/User environment)
阿新 • • 發佈:2018-12-07
學了這麼久PL/SQL,是時候用一用了。
第一個任務:批量輸出Oracle資料庫上下文資訊(使用者環境)
程式碼:
DECLARE TERMINAL VARCHAR2 (50); LANGUAG VARCHAR2 (50); SESSIONID VARCHAR2 (50); INSTANC VARCHAR2 (50); ENTRYID VARCHAR2 (50); ISDBA VARCHAR2 (50); NLS_TERRITORY VARCHAR2 (50); NLS_CURRENC VARCHAR2 (50); NLS_CALENDAR VARCHAR2 (50); NLS_DATE_FORMAT VARCHAR2 (50); NLS_DATE_LANGUAGE VARCHAR2 (50); NLS_SORT VARCHAR2 (50); CURRENT_USE VARCHAR2 (50); CURRENT_USERID VARCHAR2 (50); SESSION_USER VARCHAR2 (50); SESSION_USERID VARCHAR2 (50); PROXY_USER VARCHAR2 (50); PROXY_USERID VARCHAR2 (50); DB_DOMAIN VARCHAR2 (50); DB_NAME VARCHAR2 (50); HOST VARCHAR2 (50); OS_USER VARCHAR2 (50); EXTERNAL_NAME VARCHAR2 (50); IP_ADDRESS VARCHAR2 (50); NETWORK_PROTOCOL VARCHAR2 (50); BG_JOB_ID VARCHAR2 (50); FG_JOB_ID VARCHAR2 (50); AUTHENTICATION_TYPE VARCHAR2 (50); AUTHENTICATION_DATA VARCHAR2 (50); BEGIN SELECT SYS_CONTEXT ('USERENV', 'TERMINAL') AS TERMINAL INTO TERMINAL FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'LANGUAGE') AS LANGUAG INTO LANGUAG FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'SESSIONID') AS SESSIONID INTO SESSIONID FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'INSTANCE') AS INSTANC INTO INSTANC FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'ENTRYID') AS ENTRYID INTO ENTRYID FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'ISDBA') AS ISDBA INTO ISDBA FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'NLS_TERRITORY') AS NLS_TERRITORY INTO NLS_TERRITORY FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'NLS_CURRENCY') AS NLS_CURRENC INTO NLS_CURRENC FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'NLS_CALENDAR') AS NLS_CALENDAR INTO NLS_CALENDAR FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'NLS_DATE_FORMAT') AS NLS_DATE_FORMAT INTO NLS_DATE_FORMAT FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'NLS_DATE_LANGUAGE') AS NLS_DATE_LANGUAGE INTO NLS_DATE_LANGUAGE FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'NLS_SORT') AS NLS_SORT INTO NLS_SORT FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'CURRENT_USER') AS CURRENT_USE INTO CURRENT_USE FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'CURRENT_USERID') AS CURRENT_USERID INTO CURRENT_USERID FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') AS SESSION_USER INTO SESSION_USER FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'SESSION_USERID') AS SESSION_USERID INTO SESSION_USERID FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'PROXY_USER') AS PROXY_USER INTO PROXY_USER FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'PROXY_USERID') AS PROXY_USERID INTO PROXY_USERID FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'DB_DOMAIN') AS DB_DOMAIN INTO DB_DOMAIN FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'DB_NAME') AS DB_NAME INTO DB_NAME FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'HOST') AS HOST INTO HOST FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'OS_USER') AS OS_USER INTO OS_USER FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'EXTERNAL_NAME') AS EXTERNAL_NAME INTO EXTERNAL_NAME FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS') AS IP_ADDRESS INTO IP_ADDRESS FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'NETWORK_PROTOCOL') AS NETWORK_PROTOCOL INTO NETWORK_PROTOCOL FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'BG_JOB_ID') AS BG_JOB_ID INTO BG_JOB_ID FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'FG_JOB_ID') AS FG_JOB_ID INTO FG_JOB_ID FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'AUTHENTICATION_TYPE') AS AUTHENTICATION_TYPE INTO AUTHENTICATION_TYPE FROM DUAL; SELECT SYS_CONTEXT ('USERENV', 'AUTHENTICATION_DATA') AS AUTHENTICATION_DATA INTO AUTHENTICATION_DATA FROM DUAL; DBMS_OUTPUT.put_line ('TERMINAL:' || TERMINAL); DBMS_OUTPUT.put_line ('LANGUAG:' || LANGUAG); DBMS_OUTPUT.put_line ('SESSIONID:' || SESSIONID); DBMS_OUTPUT.put_line ('INSTANC:' || INSTANC); DBMS_OUTPUT.put_line ('ENTRYID:' || ENTRYID); DBMS_OUTPUT.put_line ('ISDBA:' || ISDBA); DBMS_OUTPUT.put_line ('NLS_TERRITORY:' || NLS_TERRITORY); DBMS_OUTPUT.put_line ('NLS_CURRENC:' || NLS_CURRENC); DBMS_OUTPUT.put_line ('NLS_CALENDAR:' || NLS_CALENDAR); DBMS_OUTPUT.put_line ('NLS_DATE_FORMAT:' || NLS_DATE_FORMAT); DBMS_OUTPUT.put_line ('NLS_DATE_LANGUAGE:' || NLS_DATE_LANGUAGE); DBMS_OUTPUT.put_line ('NLS_SORT:' || NLS_SORT); DBMS_OUTPUT.put_line ('CURRENT_USE:' || CURRENT_USE); DBMS_OUTPUT.put_line ('CURRENT_USERID:' || CURRENT_USERID); DBMS_OUTPUT.put_line ('SESSION_USER:' || SESSION_USER); DBMS_OUTPUT.put_line ('SESSION_USERID:' || SESSION_USERID); DBMS_OUTPUT.put_line ('PROXY_USER:' || PROXY_USER); DBMS_OUTPUT.put_line ('PROXY_USERID:' || PROXY_USERID); DBMS_OUTPUT.put_line ('DB_DOMAIN:' || DB_DOMAIN); DBMS_OUTPUT.put_line ('DB_NAME:' || DB_NAME); DBMS_OUTPUT.put_line ('HOST:' || HOST); DBMS_OUTPUT.put_line ('OS_USER:' || OS_USER); DBMS_OUTPUT.put_line ('EXTERNAL_NAME:' || EXTERNAL_NAME); DBMS_OUTPUT.put_line ('IP_ADDRESS:' || IP_ADDRESS); DBMS_OUTPUT.put_line ('NETWORK_PROTOCOL:' || NETWORK_PROTOCOL); DBMS_OUTPUT.put_line ('BG_JOB_ID:' || BG_JOB_ID); DBMS_OUTPUT.put_line ('FG_JOB_ID:' || FG_JOB_ID); DBMS_OUTPUT.put_line ('AUTHENTICATION_TYPE:' || AUTHENTICATION_TYPE); DBMS_OUTPUT.put_line ('AUTHENTICATION_DATA:' || AUTHENTICATION_DATA); END; /
整理後的資料(環境變數值做了masking處理,僅作示例參考!):
User Envirionment | Sample_Value |
TERMINAL | ComputerName |
LANGUAG | NLS_LANG |
SESSIONID | 123456789 |
INSTANC | INSTANCE |
ENTRYID | ENTRY ID |
ISDBA | FALSE |
NLS_TERRITORY | AMERICA |
NLS_CURRENC | $ |
NLS_CALENDAR | GREGORIAN |
NLS_DATE_FORMAT | DD-MON-RR |
NLS_DATE_LANGUAGE | AMERICAN |
NLS_SORT | BINARY |
CURRENT_USE | DBUserName |
CURRENT_USERID |
123 |
SESSION_USER | DBUserName |
SESSION_USERID | 123 |
PROXY_USER | |
PROXY_USERID | |
DB_DOMAIN | iCompany.com |
DB_NAME | orcl520 |
HOST | APAC\computerName |
OS_USER | OperatingSystemUserName |
EXTERNAL_NAME | |
IP_ADDRESS | 10.123.456.789 |
NETWORK_PROTOCOL | tcp |
BG_JOB_ID | |
FG_JOB_ID | 0 |
AUTHENTICATION_TYPE | DATABASE |
AUTHENTICATION_DATA |