重庆思庄技术分享——确认oracle中表被truncate的具体时间

确认oracle中表被truncate的具体时间

文档课题:确认oracle中表被truncate的具体时间.

数据库:oracle11.2.0.4

1、场景准备

SYS@orcl>创建表leo.tspitr_emp表空间leo_ts作为从 scott.emp 中选择 *;

表已创建。

SYS@orcl10:19:45> 从 v$log 中选择 *;

组# 线程# 序列# 字节块大小成员 弧状态 FIRST_CHANGE# FIRST_TINEXT_CHANGE# NEXT_TIM

-------------------- ---------- ---------- ---------- ---------- --- ----------------------------- -------- ------------ --------

1 1 74 52428800 512 1 是 活跃3234061 09:45:08 3235739 10:19:30

2 1 72 52428800 512 1 是 非活动 3229699 09:19:29 3234056 09:44:59

3 1 73 52428800 512 1 是 非活动 3234056 09:44:59 3234061 09:45:08

11 1 75 52428800 512 2 无电流 323573910:19:30 2.8147E+14

12 1 68 52428800 512 2 是 非活动 3193114 11:27:02 3200620 14:51:46

13 1 69 52428800 512 2 是 非活动 3200620 14:51:46 3206240 17:16:24

14 1 70 52428800 512 2 是 非活动 3206240 17:16:24 3206704 17:29:54

15 1 71 52428800 512 2 是 非活动 3206704 17:29:54 3229699 09:19:29

已选择 8 行。

SYS@orcl10:19:55> 截断表leo.tspitr_emp;

平板电脑运行。

2、截断时间确认2.1、logminer方案

说明:由于测试库redo较少,从v$log判断truncate操作在75号日志中.此处采用logminer找回truncate误操作的具体时间.生产环境恢复时需确认到准确的时间点,以减少数据的丢失.

--确认该时间段的归档日志,其实此处可以直接分析redo日志,并不一定非要分析归档日志.

SYS@orcl10:47:57> 选择序列#,to_char(first_time,'yyyy-mm-dd hh24:mi:ss') asTIME,round(sum(blocks*block_size)/1024/1024) 作为“Size(M)”,NAME fromv$archived_log 其中first_time介于 to_date('2022-12-24 10','yyyy-mm-ddhh24') 和 to_date('2022-12-24 11','yyyy-mm-dd hh24') 和 dest_id=1 组byfirst_time,名称,序列# 顺序为 1 desc;

未选择任何行

SYS@orcl10:56:34> 更改系统切换日志文件;

系统改变。

SYS@orcl10:57:03> A60 的列名称

SYS@orcl10:57:28> 选择序列#,to_char(first_time,'yyyy-mm-dd hh24:mi:ss') asTIME,round(sum(blocks*block_size)/1024/1024) 作为“Size(M)”,NAME fromv$archived_log 其中first_time介于 to_date('2022-12-24 10','yyyy-mm-ddhh24') 和 to_date('2022-12-24 11','yyyy-mm-dd hh24') 和 dest_id=1 组byfirst_time,名称,序列# 顺序乘以 1 位;

序列# 时间大小 (M) 名称

----------------------------- ----------------------------------------------------------------------

75 2022-12-24 10:19:30 1/u01/app/oracle/oradata/archivelog/1_75_1122831323.dbf

--进行归档日志分析.

SYS@orcl10:57:29> executedbms_logmnr.add_logfile('/u01/app/oracle/oradata/archivelog/1_75_1122831323.dbf',dbms_logmnr.new);

PL/SQL过程成功完成。

SYS@orcl11:03:41> execdbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

PL/SQL过程成功完成。

SYS@orcl11:06:57> sql_redo 为 A50

SYS@orcl11:07:12> 从 v$中选择 a.scn,a.timestamp,a.sql_redo logmnr_contents a wheretable_name='TSPITR_EMP' 和操作='DDL' 顺序由 a.scn;

SCN TIMESTAM SQL_REDO

------------------ --------------------------------------------------

3235800 10:20:54 截断tableleo.tspitr_emp;

说明:由此确认到执行truncate的时间为10:20:54.

2.2、dba_objects方案

也可以通过视图dba_objects中的LAST_DDL_TIME字段来确认截断时间,如下所示:

SYS@orcl10:39:07> 从 dba_objectswhere object_name='TSPITR_EMP'中选择所有者,object_name,object_type,to_char(创建,'yyyy-mm-ddhh24:mi:ss'),to_char(last_ddl_time,'yyyy-mm-dd hh24:mi:ss');

所有者OBJECT_NAME OBJECT_TYPE TO_CHAR(已创建),'YYTO_CHAR(LAST_DDL_TI

------------------------- ------------------- ------------------- -------------------

狮子座TSPITR_EMP表 2022-12-24 09:51:32 2022-12-2410:20:54

2.3、跟踪日志

--也可以在trace日志中查看到具体的截断时间.

周六 12月24日 10:20:54 2022

可截断leo.tspitr_emp

相关视图:

dba_tab_modifications中时间戳字段.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值