【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?_操作系统文件

 

         题目         部分

如何在Oracle中写操作系统文件,如写日志?

 

     
         答案部分          

 

 

可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。

CREATE            OR            REPLACE            PROCEDURE            SP_WRITE_LOG(TEXT_CONTEXT VARCHAR2)            IS          
             FILE_HANDLE     UTL_FILE.FILE_TYPE;          
             WRITE_CONTENT   VARCHAR2(1024);          
             WRITE_FILE_NAME VARCHAR2(50);          
BEGIN          
             --open file          
             WRITE_FILE_NAME :=            'db_alert.log'           ;          
             FILE_HANDLE     := UTL_FILE.FOPEN(           '/u01/logs'           , WRITE_FILE_NAME,            'a'           );          
             WRITE_CONTENT   := TO_CHAR(SYSDATE,            'yyyy-mm-dd hh24:mi:ss'           ) ||            '||'            ||TEXT_CONTEXT;          
             --write file          
             IF UTL_FILE.IS_OPEN(FILE_HANDLE)            THEN          
               UTL_FILE.PUT_LINE(FILE_HANDLE, WRITE_CONTENT);          
             END            IF;          
             --close file          
             UTL_FILE.FCLOSE(FILE_HANDLE);          
EXCEPTION          
             WHEN            OTHERS            THEN          
               BEGIN          
                 IF UTL_FILE.IS_OPEN(FILE_HANDLE)            THEN          
                   UTL_FILE.FCLOSE(FILE_HANDLE);          
                 END            IF;          
               EXCEPTION          
                 WHEN            OTHERS            THEN          
                   NULL           ;          
               END           ;          
END            SP_WRITE_LOG;          

 

 

 

其它常见问题如下表所示:

问题

答案

Oracle中哪个包可以获取环境变量的值?

可以通过DBMS_SYSTEM.GET_ENV来获取环境变量的当前生效值。

如何让程序等待60秒钟后继续运行?

可以执行$ORACLE_HOME/rdbms/admin/dbmslock.sql来创建DBMS_LOCK包,该包可以实现让程序暂时等待的功能。若想普通用户使用该包,则需要在SYS用户下执行“GRANT EXECUTE ON DBMS_LOCK TO USER_XXX;”命令。

Oracle使用哪个包可以生成并传递数据库告警信息?

DBMS_ALERT包用于生成并传递数据库告警信息。若想使用DBMS_ALERT包,则必须以SYS登陆,为普通用户授予执行权限。DBMS_ALERT能让数据库触发器在特定的数据库值发生变化时向应用程序发送报警。报警是基于事务的并且是异步的(也就是它们的操作与定时机制无关)。

程序包DBMS_APPLICATION_INFO.READ_MODULE的作用是什么?

DBMS_APPLICATION_INFO是一个非常有用的程序包,它提供了通过V$SESSION跟踪脚本运行情况的能力,该包可以填充V$SESSION中的CLIENT_INFOMODULEACTION3列的值。在CLIENT_INFO列中存放程序的客户端信息;MODULE列存放主程序名,如包的名称;ACTION列存放程序包中的过程名。该包不仅提供了设置这些列值的过程,还提供了返回这些列值的过程。主要有如下的存储过程:

lDBMS_APPLICATION_INFO.SET_CLIENT_INFO:填充V$SESSION视图的CLIENT_INFO列,记录客户端的信息,这里可以记录客户端的IP地址

lDBMS_APPLICATION_INFO.SET_MODULE:填充V$SESSION视图的MODULE列,记录主程序名

lDBMS_APPLICATION_INFO.READ_CLIENT_INFO:从V$SESSION中读取客户端的信息

lDBMS_APPLICATION_INFO.READ_MODULE:从V$SESSION中读取主程序的名称

如何填充V$SESSIONCLIENT_INFO列和CLIENT_IDENTIFIER列?

V$SESSIONCLIENT_INFO列和CLIENT_IDENTIFIER列往往为空,所以需要写登录触发器,然后在触发器中使用如下的存储过程记录这2列的值:

 BEGIN

   DBMS_APPLICATION_INFO.SET_CLIENT_INFO(SYS_CONTEXT('USERENV','IP_ADDRESS'));

   DBMS_SESSION.SET_IDENTIFIER(SYS_CONTEXT('USERENV', 'HOST'));

 EXCEPTION

   WHEN OTHERS THEN

     ROLLBACK;

 END;

如何将信息写入Oracle的告警日志中?

使用系统存储过程“SYS.DBMS_SYSTEM.KSDWRT(2,V_MESSAGE)”可将信息写入Oracle的告警日志。如下:

SYS@orclasm > EXEC SYS.DBMS_SYSTEM.KSDWRT(2,'this is a test');

PL/SQL procedure successfully completed.

查看告警日志:

Sat Mar 18 18:30:27 2017

this is a test

Oracle中,如何获取IP地址?

若是获取服务器IP地址,则使用UTL_INADDR.GET_HOST_ADDRESS。若是获取客户端IP地址则使用SYS_CONTEXT('USERENV','IP_ADDRESS')

如何在存储过程中暂停指定时间?

DBMS_LOCK包的SLEEP过程。例如:“DBMS_LOCK.SLEEP(5);”表示暂停5秒。

DBMS_OUTPUT提示缓冲区不够,怎么增加?

采用命令“DBMS_OUTPUT.ENABLE(20000);”,另外,如果DBMS_OUTPUT的信息不能显示,那么需要设置SET SERVEROUTPUT ON

如何在Oracle中写操作系统文件,如写日志?

可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。

DML语句中有一条数据报错时,如何让该DML语句继续执行?

当一个DML语句运行的时候,如果遇到了错误,那么这条语句会进行回滚,就好像没有执行过。对于一个大的DML语句而言,如果个别数据错误而导致整个语句的回滚,那么会浪费很多的资源和运行时间。所以,从Oracle 10g开始Oracle支持记录DML语句的错误,而允许语句自动继续执行。这个功能可以使用DBMS_ERRLOG包实现。


 

 

 

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

 

 

【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?_Oracle_02      

---------------优质麦课------------

【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?_操作系统文件_03

 详细内容可以添加麦老师微信或QQ私聊。

 

【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?_操作系统文件_04

 

About Me:小麦苗      

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:618766405

 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?_操作系统文件_04DBA宝典

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?_Oracle_06

【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?_操作系统文件_07

【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?_操作系统文件_08喜欢就点击“好看”吧

 

 

 

本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。