undo表空间和快闪恢复区

参考文章:

http://blog.itpub.net/23135684/viewspace-1065601/

务必详细阅读


查看undo相关设置:

show parameter undo

查看undo表空间及其使用情况:

select tablespace_name,

      round(sum(decode(status, 'ACTIVE', bytes, 'UNEXPIRED', bytes, 0)) * 100 /

            sum(bytes),

            2) || '%' "used %"

  from DBA_UNDO_EXTENTS

group by tablespace_name

order by 1;

查看undo表空间数据文件位置:

select file_name,tablespace_name from dba_data_files where tablespace_name = 'UNDOTBS1';

查看undo表空间数据文件自动扩展情况:

select FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE,STATUS,MAXBYTES,USER_BYTES

from dba_data_files where tablespace_name like '%UNDO%';

查看回滚段信息:

select rownum,sys.dba_rollback_segs.segment_name Name,v$rollstat.extents Extents,

v$rollstat.rssize Size_in_Bytes,v$rollstat.xacts XActs,

v$rollstat.gets Gets,v$rollstat.waits Waits,v$rollstat.writes Writes,sys.dba_rollback_segs.status status

from v$rollstat,sys.dba_rollback_segs,v$rollname

where v$rollname.name(+) = sys.dba_rollback_segs.segment_name and v$rollstat.usn(+) = v$rollname.usn

order by rownum;

说明:

V$ROLLSTAT

只有在 automatic undo management mode 模式下有效,包含回滚段的一些行为。

V$UNDOSTAT

这个视图只在 automatic undo management mode 模式下才有意义。包含监控和调试 UNDO 表空间的信息,通过这个视图可以估计现有数据库所需的 UNDO 表空间的大小。

将期望的undo保留时间改大:

ALTER SYSTEM SET undo_retention=10800 SCOPE=BOTH;


查看当前闪回是否开启:

select flashback_on from v$database;

设置闪回目录:

alter system set db_recovery_file_dest='/flashback_area' scope=spfile;

设置闪回目录大小:

alter system set db_recovery_file_dest_size=30g scope=spfile;

设置闪回保留时间为7天:

alter system set db_flashback_retention_target=10080 scope=spfile;

重启数据库后检查:

show parameter db_recovery_file_dest;

show parameter db_flashback

检查完成后开启闪回:

alter database flashback on;

开启后检查:

select open_mode,flashback_on from v$database;

检查快闪恢复区的使用情况:

set linesize 200 pagesize 80;

select * from V$FLASH_RECOVERY_AREA_USAGE;

select sum(percent_space_used)*3/100 used from v$flash_recovery_area_usage;

归档日志检查:

select archiver from v$instance; 

select name from v$archived_log;

手动切换归档:

alter system switch logfile;


【实验】

直接用t1的数据来创建测试表(表中有3条数据):

create table flashback_table_test as select * from t1;

为flashback_table_test表创建索引:

create index ind_test on flashback_table_test(id);

为flashback_table_test表创建触发器(触发器为null,不做任何操作)

create or replace trigger tr_test

after update on flashback_table_test

for each row

begin

      null;

end

tr_test;

/

记录当时的时间点和SCN,试图恢复到该时间点:

select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') time, to_char(dbms_flashback.get_system_change_number) scn from dual;

2021-04-23 13:27:34 2125757

或通过如下语句获得SCN:

SELECT current_scn from v$database;

模拟误改flashback_table_test表中数据:

update flashback_table_test set SN='djb' where id =3;

commit;

模拟误删除flashback_table_test表中索引ind_test:

drop index ind_test;

更改tr_test触发器:

create or replace trigger tr_test

after insert on flashback_table_test

for each row

begin

      null;

end

tr_test;

/

确保该表中的行迁移(row movement)功能:

默认情况下,oracle数据块中的一行其生命周期内是不会发生移动的,即块的rowid不会发生改变.

但是在某些情景下,如分区表、闪回、收缩空间时,我们希望行的rowid可以发生变化,

这时候我们就需要启动表的row movement特性

启用row movement特性:

alter table flashback_table_test enable row movement;

恢复flashback_table_test表到刚记录的时间点(或scn),由于表中存在触发器,因此使用了关键字enable triggers:

flashback table flashback_table_test to timestamp to_timestamp('2021-04-23 13:27:34', 'yyyy-mm-dd hh24:mi:ss') enable triggers;

再检查数据:

select * from flashback_table_test;

发现数据已经还原:

检查索引:

select index_name from user_indexes where table_name = 'flashback_table_test';

发现索引未还原;

检查触发器:

select text from user_source t where t.name = 'TR_TEST';

发现触发器是修改后的而非之前的;

闪回查询:

select *

from flashback_table_test as of timestamp to_timestamp('2021-04-23 13:27:34', 'yyyy-mm-dd hh24:mi:ss')

where id = '3';

如果不加条件则查询结果为当时的全表数据;

闪回还原误删的行

insert into flashback_table_test

(select *

from flashback_table_test as of timestamp to_timestamp('2021-04-23 13:27:34', 'yyyy-mm-dd hh24:mi:ss')

where id = '3');

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容