扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
查看归档模式
创新互联公司是一家集网站建设,麻城企业网站建设,麻城品牌网站建设,网站定制,麻城网站建设报价,网络营销,网络优化,麻城网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
conn
/as
sysdba
archive
log
list
如果数据库为归档模式的话,可以通过logmnr来进行挖掘日志文件查看这些信息的。如果是非归档模式。对不起无法查看了
开启后台进程跟踪,
设置参数(initsid.ora)
.backgroudn_dump_dest=目录名
--
指定根踪文件存放的路径
.user_dmup_test=目录名
--指定用户信息跟踪文件的存放路径
.用户的跟踪文件(.trc),
用TKPROF
来格式化用户跟踪文件
SQL
语句跟踪即可。
.imed_statistics=true;
--设置启用
sql_trace
=true;
.user_dump_dest=目录
--指定跟踪文件的存放路径
.max_dump_file_size=5M
--指定跟踪文件最大尺寸
.SQL_TRACE=TRUE;
.动态改变
:alter
session
set
sql_trace=true;
或者打开生成的跟踪文件:
默认在..\oralce\admin\user\udump\*.trc,由于oralce
生成的*.trc
直接打开格式不规格,看得很累,可以用tkprof
gk
来格式化
:c:\tkprof
ora00001.trc
a.txt
没用,只想从后台数据库看对这个数据库执行的sql问题补充:unika_ly12 写道 那你直接查询 v$sqltext 和 v$session 好了 首先,你要以dba身份登陆数据库。 第二,为某个用户开启sql跟踪。那个用户就是你要跟踪的、正在执行sql语句的那个用户。命令如下: execute dbms_system.set_sql_trace_in_session(sid,serial#,true) 其中参数的意义是,sid-会话id,serial#-序列号,这两个参数可以从v$session中得到。 第三,上面的命令执行成功之后数据库就自动对该用户所发出的所有sql语句进行跟踪,并把结果写在用户跟踪文件里。用户跟踪文件存放在数据库服务器上,路径请参考init.ora文件中的udump参数值。文件名为ora_sid_xxxx.trc(for unix)或者oraxxxxx.trc(for NT),其中xxxx文件系统进程编号,这个编号可以从v$process和v$session两个表通过关联的方式查询得到。当然你也可以简单的查看一下哪个trc文件的日期最新,哪个文件就是你要的结果了。 首先,你要以dba身份登陆数据库。 第二,为某个用户开启sql跟踪。那个用户就是你要跟踪的、正在执行sql语句的那个用户。命令如下: execute dbms_system.set_sql_trace_in_session(sid,serial#,true) 其中参数的意义是,sid-会话id,serial#-序列号,这两个参数可以从v$session中得到。 第三,上面的命令执行成功之后数据库就自动对该用户所发出的所有sql语句进行跟踪,并把结果写在用户跟踪文件里。用户跟踪文件存放在数据库服务器上,路径请参考init.ora文件中的udump参数值。文件名为ora_sid_xxxx.trc(for unix)或者oraxxxxx.trc(for NT),其中xxxx文件系统进程编号,这个编号可以从v$process和v$session两个表通过关联的方式查询得到。当然你也可以简单的查看一下哪个trc文件的日期最新,哪个文件就是你要的结果了。
oracle对于数据库中的表信息,存储在系统表中。查询已创建好的表索引,可通过相应的sql语句到相应的表中进行快捷的查询:\x0d\x0a1. 根据表名,查询一张表的索引\x0d\x0a\x0d\x0aselect * from user_indexes where table_name=upper('表名');\x0d\x0a\x0d\x0a2. 根据索引号,查询表索引字段\x0d\x0a\x0d\x0aselect * from user_ind_columns where index_name=('索引名');\x0d\x0a\x0d\x0a3.根据索引名,查询创建索引的语句\x0d\x0a\x0d\x0aselect dbms_metadata.get_ddl('INDEX','索引名', ['用户名']) from dual ; --['用户名']可省,默认为登录用户\x0d\x0a\x0d\x0aPS:dbms_metadata.get_ddl还可以得到建表语句,如:\x0d\x0a\x0d\x0aSELECT DBMS_METADATA.GET_DDL('TABLE','表名', ['用户名']) FROM DUAL ; //取单个表的建表语句,['用户名']可不输入,默认为登录用户\x0d\x0aSELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u; //取用户下所有表的建表语句\x0d\x0a\x0d\x0a当然,也可以用pl/sql developer工具来查看相关的表的各种信息。
需要打开oracle审计功能才能记录,并且消耗一定性能。
简单打开审计如下
1、设置参数
alter system set audit_trail=db scope=spfile;
2、重启数据库
3、打开相应的审计(审计选项很多),如,对用户test对表操作的审计
audit table by test;
4、以dba查看审计记录
select * from dba_audit_trail;
我明白你的意思了,你是要看插入这个值的SQL语句是怎么样的;
都是在动态表里面存储的,v$session , v$sqlarea ,V$sqltext
以上三个表你查下吧,如果正在执行的语句,都能查到,如果已经执行完毕,建议从后两张表查询
查询Oracle正在执行和执行过的SQL语句
---正在执行的
select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT
from v$session a, v$sqlarea b
where a.sql_address = b.address
---执行过的
select b.SQL_TEXT,b.FIRST_LOAD_TIME,b.SQL_FULLTEXT
from v$sqlarea b
where b.FIRST_LOAD_TIME between '2009-10-15/09:24:47' and
'2009-10-15/09:24:47' order by b.FIRST_LOAD_TIME
(此方法好处可以查看某一时间段执行过的sql,并且 SQL_FULLTEXT 包含了完整的 sql 语句)
其他
select OSUSER,PROGRAM,USERNAME,SCHEMANAME,B.Cpu_Time,STATUS,B.SQL_TEXT
from V$SESSION A LEFT JOIN V$SQL B ON A.SQL_ADDRESS=B.ADDRESS AND A.SQL_HASH_VALUE=B.HASH_VALUE order by b.cpu_time desc
select address, sql_text, piece
from v$session, v$sqltext
where address = sql_address
-- and machine = you machine name
order by address, piece
1 audit
用审记来记录用户的操作信息
2 trigger
用系统触发器来记录用户登录
3 logmnr
从log文件中挖出用户登录信息
推荐使用第3种,不占用系统资源,而且很方便。
===============================
Oracle 中记录用户登录信息
我们可以使用 Oracle Audit 函数来记录用户登录信息,但是如果开放了 Audit 函数将会使Oracle 性能下降,甚至导致 Oracle 崩溃。那我们如何才能记录用户登录信息呢?其实我们可以通过建立触发器的方式来实现。方法如下:
1. 用 sys 用户登录 Oracle
2. 创建记录用户登录信息的表
CREATE TABLE LOG$INFORMATION
(
ID NUMBER(10),
USERNAME VARCHAR2(30),
LOGINTIME DATE,
TERMINAL VARCHAR2(50),
IPADRESS VARCHAR2(20),
OSUSER VARCHAR2(30),
MACHINE VARCHAR2(64),
PROGRAM VARCHAR2(64),
SID NUMBER,
SERIAL# NUMBER,
AUSID NUMBER
)
/
3. 创建一个 Sequence,作为登录信息的主键
CREATE SEQUENCE LOGIN_SEQ
minvalue 1
maxvalue 9999999999
start with 1
increment by 1
cache 20
/
4. 创建触发器,记录用户登录信息
CREATE OR REPLACE TRIGGER LOGIN_RECORD_TR
AFTER logon ON DATABASE
DECLARE
mtSession v$session%ROWTYPE;
CURSOR cSession(iiQuerySid IN NUMBER) IS
SELECT * FROM v$session
WHERE audsid = iiQuerySid;
BEGIN
OPEN cSession(userenv('SESSIONID'));
FETCH cSession INTO mtSession;
IF cSession%FOUND AND SYS_CONTEXT ('USERENV','IP_ADDRESS') IS NOT NULL THEN
INSERT INTO log$information(
id,
username,
logintime,
terminal,
ipadress,
osuser,
machine,
program,
sid,
serial#,
ausid
) VALUES(
login_seq.nextval,
USER,
SYSDATE,
mtSession.Terminal,
SYS_CONTEXT ('USERENV','IP_ADDRESS'),
mtSession.Osuser,
mtSession.Machine,
mtSession.Program,
mtSession.Sid,
mtSession.Serial#,
userenv('SESSIONID')
);
END IF;
CLOSE cSession;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
/
5. 将 SYS.LOG$INFORMATION 授权给需要查看登录记录的用户
Grant select on SYS.LOG$INFORMATION to XXX
/
=======================================
审计用户登录和登出
记录每个用户每次登录数据库和退出数据库的日期和事件。设置步骤如下:
1. 设置系统审计相关的参数
2. 重新启动数据库
3.以SYSTEM帐号登录数据库执行下列语句,设置CONNECT审计并检查是否设置成功:
SQL connect system/password
SQL audit connect
SQL col user_name format a11
SQL col audit_option format a14
SQL select user_name, audit_option, success, failure
from sys.dba_stmt_audit_opts;
USER_NAME AUDIT_OPTION SUCCESS FAILURE
----------- -------------- ---------- ----------
CREATE SESSION BY ACCESS BY ACCESS
4.查询 AUD$表就可以查看到审计结果了
SQL col userid format a8
SQL select sessionid, to_char(timestamp#,'DD-MON-YY:HH24:MI:SS') login,
userid, to_char(logoff$time,'DD-MON-YY:HH24:MI:SS') logoff
from sys.aud$ where userid='SCOTT';
SESSIONID LOGIN USERID LOGOFF
---------- ------------------ -------- ------------------
132 22-FEB-00:13:55:06 SCOTT 22-FEB-00:14:04:05
注意:不同的版本的ORACLE数据库AUD$字典会有所不同,实际情况请参照你当前版本的数据库的AUD$表。
1.4.11 审计SYS用户的操作(ORACLE 9i Release 2)
在ORACLE 9.2之前,SYS帐户是系统中的一个唯一不受审计的帐户。在ORACLE 9I Release 2和以后的版本中,通过一些设置就可以对SYS帐号进行审计。
在ORACLE 9.2以后的版本中,可以通过设置AUDIT_SYS_OPERATIONS可以实现对具有SYS/SYSDBA/SYSOPER权限的用户的审计。
1.4.12 使用WINDOWS 事件管理器来记录审计信息
和UNIX系统不同,WINDOWS的审计结果不是存储在操作系统文件中,而是直接存储在WINDOWS 事件日志中。本节介绍如何配置数据库审计,并用事件管理器来查看审计记录。
在WINDOWS下设置数据库审计,需要按照如下的步骤:
1、配置审计
首先要确认WINDOWS的事件日志(EVENTLOG)服务是否启动。可以通过“控制面板/管理工具/服务”工具来查看。
然后通过修改ORACLE的参数(参数修改方法参见前面的关于ORACLE参数文件的描述)AUDIT_TRAIL:
AUDIT_TRAIL=0S
在WINDFOWS平台下要注意的是:
不管AUDIT_TRAIL设置为什么值,有部分ORACLE的操作会记录在事件日志中
在WINDOWS下不支持AUDIT_FILE_DEST参数,如果设置了该参数,数据库会报错
LRM-00101: UNKNOWN PARAMETER NAME 'AUDIT_FILE_DEST'
ORA-01078: FAILURE IN PROCESSING SYSTEM PARAMETERS
在使用审计前,要确保事件日志有足够大的空间来存储审计信息
2、检查是否安装好AUDIT相关的对象
最简单的检查方法是看看AUD$是否存在。如果AUDIT相关对象安装不正确,可以通过%ORACLE_HOME%\rdbms\admin\cataudit.sql脚本来安装AUDIT相关对象。如果要删除审计,可以执行%ORACLE_HOME%\rdbms\admin\catnoaud.sql。
3、配置审计
在配置审计之前,首先要说明的是,审计是一种会带来额外开销的操作。因此在可能的情况下,尽量减少审计操作。另外,如果打开审计操作,那么对一些数据库事件的审计是缺省的,这些审计事件包括:
实例关闭
通过SYSOPER和SYSDBA连接数据库
在WINDOWS下配置审计的步骤和在UNIX下配置审计类似,这里就不再描述了。审计信息会自动写入WINDOWS的事件日志种,通过事件管理器可以查看日志。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流