前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?

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

作者头像
AiDBA宝典
发布2019-09-30 15:59:17
28.8K0
发布2019-09-30 15:59:17
举报
文章被收录于专栏:小麦苗的DB宝专栏

题目部分

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

答案部分

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

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

问题

答案

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_INFO、MODULE和ACTION这3列的值。在CLIENT_INFO列中存放程序的客户端信息;MODULE列存放主程序名,如包的名称;ACTION列存放程序包中的过程名。该包不仅提供了设置这些列值的过程,还提供了返回这些列值的过程。主要有如下的存储过程:l lDBMS_APPLICATION_INFO.SET_CLIENT_INFO:填充V$SESSION视图的CLIENT_INFO列,记录客户端的信息,这里可以记录客户端的IP地址l lDBMS_APPLICATION_INFO.SET_MODULE:填充V$SESSION视图的MODULE列,记录主程序名l lDBMS_APPLICATION_INFO.READ_CLIENT_INFO:从V$SESSION中读取客户端的信息l lDBMS_APPLICATION_INFO.READ_MODULE:从V$SESSION中读取主程序的名称

如何填充V$SESSION的CLIENT_INFO列和CLIENT_IDENTIFIER列?

V$SESSION的CLIENT_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 2017this 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程序员面试笔试宝典》,作者:李华荣。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档