如何查看数据库数据表的修改记录 oracle

如何查看数据库数据表的修改记录 oracle,第1张

如何查看数据库数据表的修改记录 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,

1、打开PL/SQL Developer,输入正常的用户名密码后,选择数据库,然后正常连接。如下图

2、正常登录后,在PL/SQL Developer中打开一个sql执行窗口, *** 作如下图1中标红的位置,选择"SQL Window"。

3、在新出现的空白窗口中输入正确的sql语句,如下图。

2、在出现数据结果集后,点击上图2中标红的按钮,出现新的对话框。这是要将数据结果集导出成各个不同的格式。

3、选择第一个"CSV file",这样导出的就是excel格式的数据集。

4、打开指定的文件夹,就可以看到刚刚导出的文件,双击该文件就可以正常打开,结果和数据库中查询完出来的结果是一致的。

给你一个,你可以稍微修改一下

-- create table

CREATE table ddl_event (

timestamp date,

user_name varchar2(30),

os_uservarchar2(30),

machinevarchar2(20),

ip_addrvarchar2(20),

programVARCHAR2(30),

event varchar2(20),

Object_name varchar2(30),

object_type varchar2(30),

object_owner varchar2(30),

statementvarchar2(256) )

/

-- who changed what and when and how

create or replace trigger ddl_watcher

after ddl on database

when (user not in ('SYS', 'SYSTEM'))

declare

v_osuservarchar2(30)

v_machinevarchar2(20)

v_ip_addrvarchar2(20)

v_programVARCHAR2(30)

event varchar2(30)

obj_name varchar2(30)

obj_type varchar2(30)

obj_owner varchar2(30)

sql_text ora_name_list_t

stmt VARCHAR2(256)

n number

begin

select osuser,

machine,

nvl(program, 'sqlplus'),

sys_context('userenv','ip_address')

into

v_osuser,

v_machine,

v_program,

v_ip_addr

from v$session

where audsid = userenv('sessionid')

-- select sys_context('userenv','ip_address') into v_ip_addr from dual

-- v_ip_addr := ora_client_ip_address

event := ora_sysevent

obj_name := ora_dict_obj_name

obj_type := ora_dict_obj_type

obj_owner := ora_dict_obj_owner

n := ora_sql_txt(sql_text)

if n >256 then

n:= 256

end if

FOR i IN 1..n LOOP

stmt := stmt || sql_text(i)

END LOOP

insert into ddl_event (timestamp, user_name, os_user, machine, ip_addr,

program, event, object_name, object_type, object_owner, statement)

values (sysdate, user, v_osuser, v_machine, v_ip_addr, v_program,

event, obj_name, obj_type, obj_owner, stmt)

end

/

DDL trigger

Quite often, DBAs need to know what DDL operations the users have done in a test environment. Here is the way I can know what they did.

This table and the trigger (you may name them the way you like) should be in SYS, SYSTEM or an account with DBA role. It will store who did what, when and from where (machine and IP), by what method (sqlplus, toad, sql worksheet etc).

There is a limitation: when a DDL operation has more than 2000 characters, it won't go through. For example, when a user is trying to create a new or modify an existing stored procedure, s/he may be in trouble if the code has more than 2000 characters.

I have caught follwoing DDLs:

alter,

analyze,

comment,

create,

drop,

grant,

revoke,

truncate


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6828247.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-28
下一篇2023-03-28

发表评论

登录后才能评论

评论列表(0条)

    保存