ORACLE 10g 生产表数据丢失处理实战
2011-01-05 11:30
411 查看
故障处理
一、故障现象
三张参数表数据丢失,一张一个字段变NULL
二、应急处理
1、 DG备库关闭并且启动到只读模式
2、 从DG库EXP相关表并且IMP到生产库(先EXP备份生产库相关表后DRPP掉相关表)
3、 确认数据已经恢复,处理过程5分钟
三、思考
其他处理方法:
1、10G的flashback功能
SQL> flashback table t to timestamp to_timestamp('2011-01-04 16:00:00','YYYY-MM-DD HH24:MI:SS');
*
第 1 行出现错误:
ORA-08189: 因为未启用行移动功能, 不能闪回表
SQL> alter table t enable row movement;
表已更改。
SQL> flashback table t to timestamp to_timestamp('2011-01-04 16:00:00','YYYY-MM-DD HH24:MI:SS');
2、logmnr分析归档日志的UNDO事件,获取INSERT和UPDATE语句
后续分析
一、从数据库视图角度分析
1、查询v$open_cursor视图,初步定位删除的语句:
select * from v$open_cursor Where sql_text Like 'delete from manage_%'
2、根据如下查询得到的SID,查询会话视图,可以看出SQL语句来源于的机器和操作系统用户。
二、从归档日志角度分析
1、分析一过程中我们已经获悉DELETE操作是在节点1上完成的,我们查询该时段的归档日志信息
$ cd /home/oracle/archlog/rac1
$ ls -ltra
total 657152
drwxr-xr-x 7 oracle dba 256 Oct 09 17:46 ..
-rw-rw---- 1 oracle dba 1024 Oct 10 04:54 2_15888_614088933.arc
-rw-rw---- 1 oracle dba 1024 Oct 10 05:59 2_15890_614088933.arc
-rw-rw---- 1 oracle dba 1024 Oct 10 06:01 2_15892_614088933.arc
-rw-r----- 1 oracle dba 3635200 Jan 03 23:42 1_24921_614088933.arc
-rw-r----- 1 oracle dba 101102080 Jan 04 08:28 1_24922_614088933.arc
-rw-r----- 1 oracle dba 51537408 Jan 04 10:40 1_24923_614088933.arc
-rw-r----- 1 oracle dba 81930240 Jan 04 15:09 1_24924_614088933.arc
-rw-r----- 1 oracle dba 98228736 Jan 04 18:16 1_24925_614088933.arc
分析:因为故障发现在16点-17点之间,我们要重点分析1_24925_614088933.arc
2、设定LINE和TIME
SET LIN 200
SET TIME ON
3、指定LogMiner要分析的重做日志文件
begin
dbms_logmnr.add_logfile(LogFileName=>'/home/oracle/archlog/rac1/1_24924_614088933.arc', options => dbms_logmnr.new);
dbms_logmnr.add_logfile(LogFileName=>'/home/oracle/archlog/rac1/1_24925_614088933.arc');
end;
/
4、启动LogMiner会话
BEGIN
SYS.DBMS_LOGMNR.start_logmnr
(options => SYS.DBMS_LOGMNR.dict_from_online_catalog);
END;
/
5、alter session set nlS_datE_format='YYYYMMDD HH24:MI:SS';
6、显示用于分析的日志列表信息
SELECT LOW_TIME,HIGH_TIME,LOW_SCN ,NEXT_SCN FROM v$logmnr_logs;
LOW_TIME HIGH_TIME LOW_SCN NEXT_SCN
----------------- ----------------- ---------- ----------
20110104 10:40:19 20110104 15:09:04 2903836753 2904342053
20110104 15:09:04 20110104 18:16:10 2904342053 2904789833
7、分析信息提取转储到临时表
create table tmp_logmnr11
Tablespace RAC_DATA
as
SELECT thread#,data_obj#,timestamp,seg_name,table_name,seg_owner,OPENDTEST,sql_redo,sql_undo
FROM v$logmnr_contents;
8、因为在应急恢复过程中对数据库6张表进行了删除重导,所以在tmp_logmnr11中提取信息时要进行表明“翻译”
----------------
--查出回收站表名
----------------
Select * From Dba_Recyclebin N
Where N.ORIGINAL_NAME='MANAGE_MENU' Or N.ORIGINAL_NAME='MANAGE_ROLE_RESOURCE' Or N.ORIGINAL_NAME='MANAGE_RESOURCE' Or N.ORIGINAL_NAME='MANAGE_RESOURCETYPE'
----结果如下:
BIN$mQKHlhIJcBbgQ6wQgAZwFg==$0 MANAGE_ROLE_RESOURCE
BIN$mQKHlhH+cBbgQ6wQgAZwFg==$0 MANAGE_RESOURCETYPE
BIN$mQKHlhH5cBbgQ6wQgAZwFg==$0 MANAGE_RESOURCE
BIN$mQKHlhH0cBbgQ6wQgAZwFg==$0 MANAGE_MENU
------------------------------------
--根据回收站表名查出删除操作的SQL语句
------------------------------------
Select * From Sys.tmp_logmnr11 t
Where (T.OPENDTEST='DELETE' Or T.OPENDTEST='UPDATE') And SEG_OWNER='OPENDTEST'
And SEG_NAME In(
Select OBJECT_NAME From Dba_Recyclebin N
Where N.ORIGINAL_NAME='MANAGE_MENU' Or N.ORIGINAL_NAME='MANAGE_ROLE_RESOURCE' Or N.ORIGINAL_NAME='MANAGE_RESOURCE' Or N.ORIGINAL_NAME='MANAGE_RESOURCETYPE'
)
------------------------------------
--再来看看删除语句条数
------------------------------------
Select Count(seg_name),seg_name From Sys.tmp_logmnr11 t
Where (T.OPENDTEST='DELETE' Or T.OPENDTEST='UPDATE') And SEG_OWNER='OPENDTEST'
And SEG_NAME In(
Select OBJECT_NAME From Dba_Recyclebin N
Where N.ORIGINAL_NAME='MANAGE_MENU' Or N.ORIGINAL_NAME='MANAGE_ROLE_RESOURCE' Or N.ORIGINAL_NAME='MANAGE_RESOURCE' Or N.ORIGINAL_NAME='MANAGE_RESOURCETYPE'
)
Group By seg_name
----结果如下(与现有数据库四张表数量相同):
COUNT(SEG_NAME) SEG_NAME
692 BIN$mQKHlhH0cBbgQ6wQgAZwFg==$0
1591 BIN$mQKHlhIJcBbgQ6wQgAZwFg==$0
732 BIN$mQKHlhH5cBbgQ6wQgAZwFg==$0
34 BIN$mQKHlhH+cBbgQ6wQgAZwFg==$0
9、提取到最终的DELETE和UPDATE语句
------------------------------------
--各类型删除语句摘录一条
------------------------------------
--------------------
--MANAGE_MENU
--------------------
Select * From Sys.tmp_logmnr11 t
Where (T.OPENDTEST='DELETE' Or T.OPENDTEST='UPDATE') And SEG_OWNER='OPENDTEST'
And SEG_NAME='BIN$mQKHlhH0cBbgQ6wQgAZwFg==$0'
----结果如下:总共692条,2011-1-4 16:09:13---2011-1-4 16:09:19
首条SQL_REDO:update "OPENDTEST"."BIN$mQKHlhH0cBbgQ6wQgAZwFg==$0" set "RESOURCE_ID" = NULL where "RESOURCE_ID" = '10800' and ROWID = 'AAARoIAAUAAABXmAAD';
翻译后的SQL语句:update "OPENDTEST"."MANAGE_MENU" set "RESOURCE_ID" = NULL where "RESOURCE_ID" = '10800' and ROWID = 'AAARoIAAUAAABXmAAD';
------------------------
--MANAGE_ROLE_RESOURCE
------------------------
Select * From Sys.tmp_logmnr11 t
Where (T.OPENDTEST='DELETE' Or T.OPENDTEST='UPDATE') And SEG_OWNER='OPENDTEST'
And SEG_NAME='BIN$mQKHlhIJcBbgQ6wQgAZwFg==$0'
----结果如下:总共1591条,2011-1-4 16:09:13---2011-1-4 16:09:19
首条SQL_REDO:delete from "OPENDTEST"."BIN$mQKHlhIJcBbgQ6wQgAZwFg==$0" where "RESOURCE_ID" = '10800' and "ROLE_ID" = '11600' and ROWID = 'AAARocAAYAAAA5XAAL';
翻译后的SQL语句:delete from "OPENDTEST"."MANAGE_ROLE_RESOURCE" where "RESOURCE_ID" = '10800' and "ROLE_ID" = '11600' and ROWID = 'AAARocAAYAAAA5XAAL';
10、经过与架构组协同分析代码和数据及表结构,确认WEB页面存在可疑风险
一、故障现象
三张参数表数据丢失,一张一个字段变NULL
二、应急处理
1、 DG备库关闭并且启动到只读模式
2、 从DG库EXP相关表并且IMP到生产库(先EXP备份生产库相关表后DRPP掉相关表)
3、 确认数据已经恢复,处理过程5分钟
三、思考
其他处理方法:
1、10G的flashback功能
SQL> flashback table t to timestamp to_timestamp('2011-01-04 16:00:00','YYYY-MM-DD HH24:MI:SS');
*
第 1 行出现错误:
ORA-08189: 因为未启用行移动功能, 不能闪回表
SQL> alter table t enable row movement;
表已更改。
SQL> flashback table t to timestamp to_timestamp('2011-01-04 16:00:00','YYYY-MM-DD HH24:MI:SS');
2、logmnr分析归档日志的UNDO事件,获取INSERT和UPDATE语句
后续分析
一、从数据库视图角度分析
1、查询v$open_cursor视图,初步定位删除的语句:
select * from v$open_cursor Where sql_text Like 'delete from manage_%'
[align=left][/align] | [align=left]SADDR[/align] | [align=left]SID[/align] | [align=left]USER_NAME[/align] | [align=left]ADDRESS[/align] | [align=left]HASH_VALUE[/align] | [align=left]SQL_ID[/align] | [align=left]SQL_TEXT[/align] |
[align=left]1[/align] | [align=left]0700000309706FF0[/align] | [align=right]1171[/align] | [align=left]OPENDTEST[/align] | [align=left]070000027DCDD4F0[/align] | [align=right]3705303229[/align] | [align=left]53u5x1zfdnw5x[/align] | [align=left]delete from manage_role_resource where RESOURCE_ID=:1[/align] |
[align=left]2[/align] | [align=left]0700000309706FF0[/align] | [align=right]1171[/align] | [align=left]OPENDTEST[/align] | [align=left]070000027BD82370[/align] | [align=right]425725875[/align] | [align=left]182dasccq03xm[/align] | [align=left]delete from manage_resource where ID=:1[/align] |
[align=left]3[/align] | [align=left]0700000309706FF0[/align] | [align=right]1171[/align] | [align=left]OPENDTEST[/align] | [align=left]070000027CBD8BE0[/align] | [align=right]2636928772[/align] | [align=left]dpmh3akfksps4[/align] | [align=left]delete from manage_resourcetype where ID=:1[/align] |
[align=left]4[/align] | [align=left]070000030A7438F8[/align] | [align=right]1294[/align] | [align=left]OPENDTEST[/align] | [align=left]070000027CBD8BE0[/align] | [align=right]2636928772[/align] | [align=left]dpmh3akfksps4[/align] | [align=left]delete from manage_resourcetype where ID=:1[/align] |
[align=left]5[/align] | [align=left]070000030971F140[/align] | [align=right]1243[/align] | [align=left]OPENDTEST[/align] | [align=left]070000027DCDD4F0[/align] | [align=right]3705303229[/align] | [align=left]53u5x1zfdnw5x[/align] | [align=left]delete from manage_role_resource where RESOURCE_ID=:1[/align] |
[align=left]6[/align] | [align=left]070000030971F140[/align] | [align=right]1243[/align] | [align=left]OPENDTEST[/align] | [align=left]070000027BD82370[/align] | [align=right]425725875[/align] | [align=left]182dasccq03xm[/align] | [align=left]delete from manage_resource where ID=:1[/align] |
[align=left]7[/align] | [align=left]070000030971F140[/align] | [align=right]1243[/align] | [align=left]OPENDTEST[/align] | [align=left]070000027CBD8BE0[/align] | [align=right]2636928772[/align] | [align=left]dpmh3akfksps4[/align] | [align=left]delete from manage_resourcetype where ID=:1[/align] |
[align=left]8[/align] | [align=left]070000030A7A28D0[/align] | [align=right]1578[/align] | [align=left]OPENDTEST[/align] | [align=left]070000027DCDD4F0[/align] | [align=right]3705303229[/align] | [align=left]53u5x1zfdnw5x[/align] | [align=left]delete from manage_role_resource where RESOURCE_ID=:1[/align] |
[align=left]9[/align] | [align=left]070000030A7A28D0[/align] | [align=right]1578[/align] | [align=left]OPENDTEST[/align] | [align=left]070000027BD82370[/align] | [align=right]425725875[/align] | [align=left]182dasccq03xm[/align] | [align=left]delete from manage_resource where ID=:1[/align] |
[align=left]10[/align] | [align=left]070000030A7A28D0[/align] | [align=right]1578[/align] | [align=left]OPENDTEST[/align] | [align=left]070000027CBD8BE0[/align] | [align=right]2636928772[/align] | [align=left]dpmh3akfksps4[/align] | [align=left]delete from manage_resourcetype where ID=:1[/align] |
[align=left]11[/align] | [align=left]070000030F72FA90[/align] | [align=right]1324[/align] | [align=left]OPENDTEST[/align] | [align=left]070000027DCDD4F0[/align] | [align=right]3705303229[/align] | [align=left]53u5x1zfdnw5x[/align] | [align=left]delete from manage_role_resource where RESOURCE_ID=:1[/align] |
[align=left]12[/align] | [align=left]070000030F72FA90[/align] | [align=right]1324[/align] | [align=left]OPENDTEST[/align] | [align=left]070000027BD82370[/align] | [align=right]425725875[/align] | [align=left]182dasccq03xm[/align] | [align=left]delete from manage_resource where ID=:1[/align] |
[align=left]13[/align] | [align=left]070000030F72FA90[/align] | [align=right]1324[/align] | [align=left]OPENDTEST[/align] | [align=left]070000027CBD8BE0[/align] | [align=right]2636928772[/align] | [align=left]dpmh3akfksps4[/align] | [align=left]delete from manage_resourcetype where ID=:1[/align] |
[align=left] [/align] | [align=left] [/align] | [align=left] [/align] | [align=left] [/align] | [align=left] [/align] | [align=left] [/align] | [align=left] [/align] | [align=left] [/align] |
二、从归档日志角度分析
1、分析一过程中我们已经获悉DELETE操作是在节点1上完成的,我们查询该时段的归档日志信息
$ cd /home/oracle/archlog/rac1
$ ls -ltra
total 657152
drwxr-xr-x 7 oracle dba 256 Oct 09 17:46 ..
-rw-rw---- 1 oracle dba 1024 Oct 10 04:54 2_15888_614088933.arc
-rw-rw---- 1 oracle dba 1024 Oct 10 05:59 2_15890_614088933.arc
-rw-rw---- 1 oracle dba 1024 Oct 10 06:01 2_15892_614088933.arc
-rw-r----- 1 oracle dba 3635200 Jan 03 23:42 1_24921_614088933.arc
-rw-r----- 1 oracle dba 101102080 Jan 04 08:28 1_24922_614088933.arc
-rw-r----- 1 oracle dba 51537408 Jan 04 10:40 1_24923_614088933.arc
-rw-r----- 1 oracle dba 81930240 Jan 04 15:09 1_24924_614088933.arc
-rw-r----- 1 oracle dba 98228736 Jan 04 18:16 1_24925_614088933.arc
分析:因为故障发现在16点-17点之间,我们要重点分析1_24925_614088933.arc
2、设定LINE和TIME
SET LIN 200
SET TIME ON
3、指定LogMiner要分析的重做日志文件
begin
dbms_logmnr.add_logfile(LogFileName=>'/home/oracle/archlog/rac1/1_24924_614088933.arc', options => dbms_logmnr.new);
dbms_logmnr.add_logfile(LogFileName=>'/home/oracle/archlog/rac1/1_24925_614088933.arc');
end;
/
4、启动LogMiner会话
BEGIN
SYS.DBMS_LOGMNR.start_logmnr
(options => SYS.DBMS_LOGMNR.dict_from_online_catalog);
END;
/
5、alter session set nlS_datE_format='YYYYMMDD HH24:MI:SS';
6、显示用于分析的日志列表信息
SELECT LOW_TIME,HIGH_TIME,LOW_SCN ,NEXT_SCN FROM v$logmnr_logs;
LOW_TIME HIGH_TIME LOW_SCN NEXT_SCN
----------------- ----------------- ---------- ----------
20110104 10:40:19 20110104 15:09:04 2903836753 2904342053
20110104 15:09:04 20110104 18:16:10 2904342053 2904789833
7、分析信息提取转储到临时表
create table tmp_logmnr11
Tablespace RAC_DATA
as
SELECT thread#,data_obj#,timestamp,seg_name,table_name,seg_owner,OPENDTEST,sql_redo,sql_undo
FROM v$logmnr_contents;
8、因为在应急恢复过程中对数据库6张表进行了删除重导,所以在tmp_logmnr11中提取信息时要进行表明“翻译”
----------------
--查出回收站表名
----------------
Select * From Dba_Recyclebin N
Where N.ORIGINAL_NAME='MANAGE_MENU' Or N.ORIGINAL_NAME='MANAGE_ROLE_RESOURCE' Or N.ORIGINAL_NAME='MANAGE_RESOURCE' Or N.ORIGINAL_NAME='MANAGE_RESOURCETYPE'
----结果如下:
BIN$mQKHlhIJcBbgQ6wQgAZwFg==$0 MANAGE_ROLE_RESOURCE
BIN$mQKHlhH+cBbgQ6wQgAZwFg==$0 MANAGE_RESOURCETYPE
BIN$mQKHlhH5cBbgQ6wQgAZwFg==$0 MANAGE_RESOURCE
BIN$mQKHlhH0cBbgQ6wQgAZwFg==$0 MANAGE_MENU
------------------------------------
--根据回收站表名查出删除操作的SQL语句
------------------------------------
Select * From Sys.tmp_logmnr11 t
Where (T.OPENDTEST='DELETE' Or T.OPENDTEST='UPDATE') And SEG_OWNER='OPENDTEST'
And SEG_NAME In(
Select OBJECT_NAME From Dba_Recyclebin N
Where N.ORIGINAL_NAME='MANAGE_MENU' Or N.ORIGINAL_NAME='MANAGE_ROLE_RESOURCE' Or N.ORIGINAL_NAME='MANAGE_RESOURCE' Or N.ORIGINAL_NAME='MANAGE_RESOURCETYPE'
)
------------------------------------
--再来看看删除语句条数
------------------------------------
Select Count(seg_name),seg_name From Sys.tmp_logmnr11 t
Where (T.OPENDTEST='DELETE' Or T.OPENDTEST='UPDATE') And SEG_OWNER='OPENDTEST'
And SEG_NAME In(
Select OBJECT_NAME From Dba_Recyclebin N
Where N.ORIGINAL_NAME='MANAGE_MENU' Or N.ORIGINAL_NAME='MANAGE_ROLE_RESOURCE' Or N.ORIGINAL_NAME='MANAGE_RESOURCE' Or N.ORIGINAL_NAME='MANAGE_RESOURCETYPE'
)
Group By seg_name
----结果如下(与现有数据库四张表数量相同):
COUNT(SEG_NAME) SEG_NAME
692 BIN$mQKHlhH0cBbgQ6wQgAZwFg==$0
1591 BIN$mQKHlhIJcBbgQ6wQgAZwFg==$0
732 BIN$mQKHlhH5cBbgQ6wQgAZwFg==$0
34 BIN$mQKHlhH+cBbgQ6wQgAZwFg==$0
9、提取到最终的DELETE和UPDATE语句
------------------------------------
--各类型删除语句摘录一条
------------------------------------
--------------------
--MANAGE_MENU
--------------------
Select * From Sys.tmp_logmnr11 t
Where (T.OPENDTEST='DELETE' Or T.OPENDTEST='UPDATE') And SEG_OWNER='OPENDTEST'
And SEG_NAME='BIN$mQKHlhH0cBbgQ6wQgAZwFg==$0'
----结果如下:总共692条,2011-1-4 16:09:13---2011-1-4 16:09:19
首条SQL_REDO:update "OPENDTEST"."BIN$mQKHlhH0cBbgQ6wQgAZwFg==$0" set "RESOURCE_ID" = NULL where "RESOURCE_ID" = '10800' and ROWID = 'AAARoIAAUAAABXmAAD';
翻译后的SQL语句:update "OPENDTEST"."MANAGE_MENU" set "RESOURCE_ID" = NULL where "RESOURCE_ID" = '10800' and ROWID = 'AAARoIAAUAAABXmAAD';
------------------------
--MANAGE_ROLE_RESOURCE
------------------------
Select * From Sys.tmp_logmnr11 t
Where (T.OPENDTEST='DELETE' Or T.OPENDTEST='UPDATE') And SEG_OWNER='OPENDTEST'
And SEG_NAME='BIN$mQKHlhIJcBbgQ6wQgAZwFg==$0'
----结果如下:总共1591条,2011-1-4 16:09:13---2011-1-4 16:09:19
首条SQL_REDO:delete from "OPENDTEST"."BIN$mQKHlhIJcBbgQ6wQgAZwFg==$0" where "RESOURCE_ID" = '10800' and "ROLE_ID" = '11600' and ROWID = 'AAARocAAYAAAA5XAAL';
翻译后的SQL语句:delete from "OPENDTEST"."MANAGE_ROLE_RESOURCE" where "RESOURCE_ID" = '10800' and "ROLE_ID" = '11600' and ROWID = 'AAARocAAYAAAA5XAAL';
10、经过与架构组协同分析代码和数据及表结构,确认WEB页面存在可疑风险
相关文章推荐
- Oracle数据文件转移和丢失处理
- ORACLE 回滚段表空间数据文件丢失或损坏处理方法(1)
- ORACLE 回滚段表空间数据文件丢失或损坏处理方法(2)
- ORACLE回滚段表空间数据文件丢失或损坏处理方法(转)
- ORACLE 数据文件丢失处理
- oracle 非关键数据文件丢失后的恢复处理
- Oracle数据文件转移和丢失处理
- oracle数据文件丢失处理方法一(测试)
- Oracle数据文件转移和丢失处理
- oracle 10g 导入到11g中会出现12899错误从而导致数据无法插入,进而数据丢失
- jdbc的Date类型处理,解决java.util.date与java.sql.date的时间数据丢失
- 浅入浅出Oracle Spatial GeoRaster 10g影像数据管理(1)
- Oracle 10g 常见问题处理
- 使用JDBC处理Oracle大数据
- Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
- Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
- Oracle实战——数据查询与更新
- ORACLE 大数据表Update处理
- 【ORACLE】spfile丢失的处理
- SQL2005导入数据到Oracle 10g