重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4032|回复: 1
打印 上一主题 下一主题

[Oracle] 使用SYS.DBMS_SYSTEM.KSDWRT向Oracle实现向警告日志中写入信息

[复制链接]
跳转到指定楼层
楼主
发表于 2019-5-9 12:12:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用SYS.DBMS_SYSTEM.KSDWRT向Oracle实现向警告日志中写入信息

在PL/SQL代码中或SQL*Plus命令行中均可以使用“SYS.DBMS_SYSTEM.KSDWRT”来实现向Oracle警告日志中写入信息的目的。
1.进入到alert目录存放位置
$ cd $ORACLE_BASE/admin/$ORACLE_SID/bdump
2.查看警告日志中最后10行的信息
$ tail -10 alert_ora10g.log
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
QMNC started with pid=32, OS id=31597
Thu Dec 15 06:23:57 2010
Completed: ALTER DATABASE OPEN
Thu Dec 15 06:23:57 2010
db_recovery_file_dest_size of 4096 MB is 0.00% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
此处是为了对比写入前后信息的不同。
3.在SQL*Plus中实现向alert日志中写入信息的目的
$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.3.0 - Production on Thu Dec 15 06:24:33 2010
Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
sys@ora10g> exec SYS.DBMS_SYSTEM.KSDWRT(2, 'Alert message writed by Secooler.');
PL/SQL procedure successfully completed.
sys@ora10g> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
4.查看alert日志中写入的内容
$ tail -10 alert_ora10g.log
QMNC started with pid=32, OS id=31597
Thu Dec 15 06:23:57 2010
Completed: ALTER DATABASE OPEN
Thu Dec 15 06:23:57 2010
db_recovery_file_dest_size of 4096 MB is 0.00% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
Thu Dec 15 06:24:39 2010
Alert message writed by Secooler.
可见alert日志中的最后两行记录了这条写入的信息(第一行表示写入的时间,第二行便是写入信息的内容)。
5.知识扩展
1)DBMS_SYSTEM的参数信息
sys@ora10g> desc SYS.DBMS_SYSTEM
……
PROCEDURE KSDWRT
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
DEST                           BINARY_INTEGER          IN
TST                            VARCHAR2                IN
……
从参数信息上可以看到KSDWRT这个PROCEDURE有两个参数。第二个参数TST便是写入的信息内容;那么第一个参数都有几种可用的值呢?具体有如下三种可取的值:
“1”: Write to the standard trace file(向标准Trace文件中写入信息)
“2”: Write to the alert log(向alert日志文件中写入信息)
“3”: Write to both files at once(同时向Trace文件和alert日志文件中写入信息)
本例中我们用到了“2”这个选项实现的向alert日志文件中写入信息。
如果使用“1”或“3”,我们也可以实现向Trace文件中写入信息,该标准trace文件位于“$ORACLE_BASE/admin/$ORACLE_SID/udump”目录中。
6.小结
注意,使用“SYS.DBMS_SYSTEM.KSDWRT”实现向alert文件和trace文件中写入信息的方法并未经过Oracle验证和支持!请评估并测试后慎用。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

沙发
 楼主| 发表于 2019-5-9 12:15:39 | 只看该作者
一个例子:限制某个ip的访问,往日志中写信息

create or replace trigger chk_ip
  after logon on database
declare
  ipaddr VARCHAR2(30);
  e_integrity exception;
  pragma exception_init(e_integrity,-913);
begin
  select sys_context('userenv', 'ip_address') into ipaddr from dual;
  if ipaddr not in ('83.16.16.201') then
    SYS.DBMS_SYSTEM.KSDWRT(2,TO_CHAR(SYSDATE, 'yyyymmdd hh24:mi:ss') ||' ORA-02000 user: ' || USER||' IP: '||ipaddr);
    dbms_lock.sleep(3600*100);
  end if;
end chk_ip;

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-11-27 05:24 , Processed in 0.089037 second(s), 19 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表