oracle怎么更改历史记录,oracle查询表数据修改记录

如何获取oracle中的数据修改历史记录

可以通过sql语句跟踪oracle数据库中的操作状态: (1)select * from v$sqlarea; 可以跟踪sql语句的执行过程,如果想跟踪某个时间点前后的语句,可以通过first_load_time时间进行控制。 select * from v$sqlarea where first_load_time

创新互联公司长期为上千多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为景洪企业提供专业的网站设计、成都做网站,景洪网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。

oracle 如何查询表的修改历史记录,没有创建触发器,也没有日志操作表,这个表已经修改了

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

-- create table

CREATE table ddl_event (

timestamp date,

user_name varchar2(30),

os_user varchar2(30),

machine varchar2(20),

ip_addr varchar2(20),

program VARCHAR2(30),

event varchar2(20),

Object_name varchar2(30),

object_type varchar2(30),

object_owner varchar2(30),

statement varchar2(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_osuser varchar2(30);

v_machine varchar2(20);

v_ip_addr varchar2(20);

v_program VARCHAR2(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

oracle如何将表的历史数据归档

归档日志(ArchiveLog)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档日志中.当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库.

日志操作模式:ARCHIVELOGNOARCHIVELOG

1,改变日志操作模式:

检查当前日志操作模式

SELECTlog_modefromv$database;

关闭数据库,然后装载数据库

SHUTDOWNIMMEDIATE

STARTUPMOUNT

改变日志操作模式,然后打开数据库

ALTERDATABASEARCHIVELOG;

ALTERDATABASEOPEN;

2,执行手工归档

从oracledatabase10g开始,当将日志操作模式转变未ARCHIVELOG模式时,oracle会自动启动ARCH进程.如果要使用手工归档.那么在改变日志操作模式时必须使用命令ALTERDATABASEARCHIVELOGMANUAL.

需要注意,使用手工归档方式,数据库管理员必须手工执行归档命令.如果没有执行手工归档命令,日志组的原有内容将不能被覆盖.ALTERDATABASEARCHIVELOGMANUAL命令是为了与先前的版本兼容而保留的,.将来的oracle版本会淘汰该命令,使用手工归档方式是,数据库管理员可以执行以下命令归档重做日志:

SLTERSYSTEMARCHIVELOGALL;

3,配置归档进程

初始化参数LOG_ARCHIVE_MAX_PROCESSES用于指定例程初始启动的最大归档进程个数,当将数据库转变为ARCHIVELOG模式时,默认情况下oracle会自动启动两个归档进程.通过改变初始化参数LOG_ARCHIVE_MAX_PROCESS的值,可以动态地增加或降低归档进程的个数:

ALTERSYSTEMSETLOG_ARCHIVE_MAX_PROCESSES=3;

配置归档位置和文件格式

当数据库处于ARCHIVELOG模式时,如果进行日志切换,后台进程将自动生成归档日志,归档日志的默认位置为%oracle_home%rdbms,在oracledatabase10g中,归档日志的默认文件格式为ARC%S_%R.%T.为了改变归档日志的位置和名称格式,必须改变相应的初始化参数,

1,初始化参数LOG_ARCHIVE_FORMAT用于指定归档日志的文件名格式,设置该初始化参数时,可以指定以下匹配符:

%s:日志序列号:

%S:日志序列号(带有前导0)

%t:重做线程编号.

%T:重做线程编号(带有前导0)

%a:活动ID号

%d:数据库ID号

%rRESETLOGS的ID值.

从10g开始,配置归档日志文件格式时,必须带有%s,%t和%r匹配符,配置了归档文件格式后,必须重启数据库.

2,使用LOG_ARCHIVE_DEST配置归档位置

如果不使用备用数据库,只需要将归档日志存放到本地目录.配置本地归档位置可以使用初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST,其中,第一个参数用于设置第一个归档位置,第二个参数用于指定第二个归档位置.

ALTERSYSTEMSETlog_archive_dest=’d:demoarchive1’;

ALTERSYSTEMSETlog_archive_duplex_dest=’d:demoarchive2’;

3,使用LOG_ARCHIVE_DEST_n配置多个归档位置.

初始化参数LOG_ARCHIVE_DEST_n用于指定多个归档位置,该参数最多可以指定10个归档位置.通过使用初始化参数LOG_ARCHIVE_DEST_n,不仅可以配置本地归档位置,还可以配置远程归档位置.

如果既要在主节点上生成归档日志,又要将归档日志传递到备用节点,那么必须使用参数LOG_ARCHIVE_DEST_n.该参数与LOG_ARCHIVE_DEST具有如下区别;

初始化参数LOG_ARCHIVE_DEST_n可以配置本地归档位置和远程归档位置,而初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST只能配置本地归档位置.

初始化参数LOG_ARCHIVE_DEST_n可以配置多达10个归档位置,而初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST最多只能配置两个归档位置.

初始化参数LOG_ARCHIVE_DEST_n不能与初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同时使用.

因为初始化参数LOG_ARCHIVE_DEST_n不能与初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同时使用,所以必须禁用初始化参数LOG_ARCHVE_DEST和LOG_ARCHIVE_DUPLEX_DEST.当使用初始化参数LOG_ARCHIVE_DEST_n配置本地归档位置时,需要指定LOCALTION选项.当配置远程归档位置时,需要指定SERVICE选项.

示例如下:

ALTERSYSTEMSETlog_archive_duplex_dest=’’;

ALTERSYSTEMSETlog_archive_dest=’’;

ALTERSYSTEMSETlog_archive_dest_1=’location=d:demoarchive1’;

ALTERSYSTEMSETlog_archive_dest_2=’location=d:demoarchive2’;

ALTERSYSTEMSETlog_archive_dest_3=’location=d:demoarchive3’;

ALTERSYSTEMSETlog_archive_dest_4=’service=standby’;

配置远程归档位置时,SERVICE选项需要指定远程数据库的网络服务名(在tnsnames.ora文件中配置)

4,使用LOG_ARCHIVE_DEST_n选项

使用初始化参数LOG_ARCHIVE_DEST_n配置归档位置时,可以在归档位置上指定OPTIONAL或MANDATORY选项.指定MANDATORY选项时,可以设置REOPEN属性.

OPTIONAL:该选项是默认选项.使用该选项时,无论归档是否成功,都可以覆盖重做日志.

MANDATORY:强制归档.使用该选项时,只有在归档成功之后,重做日志才能被覆盖.

REOPEN:该属性用于指定重新归档的时间间隔,默认值为300秒,必须跟在MANDATORY后.

例:

Altersystemsetlog_archive_dest_1=’location=d:demoarchive1mandatory’;

Altersystemsetlog_archive_dest_2=’location=d:demoarchive2mandatoryreopen=500’;

Altersystemsetlog_archive_dest_3=’location=d:demoarchive3optional’;

5,控制本地归档成功的最小个数.

使用初始化参数LOG_ARCHIVE_MIN_SUCCEED_DEST控制本地归档的最小成功个数

Altersystemsetlog_archive_min_succeed_dest=2;

6,使用初始化参数LOG_ARCHIVE_DEST_STATE_n控制归档位置的可用性.设置该参数为ENABLE(默认值),表示会激活相应的归档位置;设置该参数为DEFER,表示禁用相应归档位置.当归档日志所在磁盘损坏或填满时,DBA需要暂时禁用该归档位置.

Altersystemsetlog_archive_dest_state_3=defer;(禁用)

Altersystemsetlog_archive_dest_state_3=enable;(启用)

显示归档日志信息

1,使用ARCHIVELOGLIST命令可以显示日志操作模式,归档位置,自动归档机器要归档的日志序列号等信息.

2显示日志操作模式

SELECTname,log_modeFROMv$database;

3,显示归档日志信息.

Colnameformata40

Selectname,swquence#,first_change#FROMv$archived_log;

Name用于表示归档日志文件名,sequence#用于表示归档日志对应的日志序列号,firs_change#用于标识归档日志的起始SCN值.

4执行介质恢复时,需要使用归档日志文件,此四必须准确定位归档日志的存放位置.通过查询动态性能视图v$archive_dest可以取得归档日志所在目录.

SELECTdestinationFROMv$archivedest;

5,显示日志历史信息

SELECT*FROMv$loghist;

THREAD#用于标识重做线程号,SEQUNCE#用于标识日志序列号,FIRST_CHANGE#用于标识日志序列号对应的起始SCN值,FIRST_TIME用于标识起始SCN的发生时间.SWICTH_CHANGE#用于标识日志切换的SCN值.

6.显示归档进程信息.

进行日志切换时,ARCH进程会自动将重做日志内容复制到归档日志中,为了加快归档速度,应该启用多个ARCH进程.通过查询动态性能视图V$ARCHIVE_PROCESSES可以显示所有归档进程的信息!

SELECT*FROMv$archive_processes;

Porcess用于标识ARCH进程的编号,status用于标识ARCH进程的状态(ACTIVE:活动,STOPPED:未启动),log_sequence用于标识正在进行归档的日志序列号,state用于标识ARCH进程的工作状态

ORACLE数据库中,对表记录的修改用什么方法好?

select * from 表名 where 条件 for update

-----这样会一直占有这张表的修改权限,不能进行其他的操作

select t.* ,rowid from 表名 t

-----这个是以修改方式开启表,进行修改

update....set ..

-----这是对表进行更新操作


分享标题:oracle怎么更改历史记录,oracle查询表数据修改记录
文章地址:http://cdiso.cn/article/dsdppdg.html

其他资讯