标签云
asm恢复 bbed bootstrap$ dul In Memory kcbzib_kcrsds_1 kccpb_sanity_check_2 MySQL恢复 ORA-00312 ORA-00607 ORA-00704 ORA-00742 ORA-01110 ORA-01555 ORA-01578 ORA-01595 ORA-08103 ORA-600 2131 ORA-600 2662 ORA-600 3020 ORA-600 4000 ORA-600 4137 ORA-600 4193 ORA-600 4194 ORA-600 16703 ORA-600 kcbzib_kcrsds_1 ORA-600 KCLCHKBLK_4 ORA-15042 ORA-15196 ORACLE 12C oracle dul ORACLE PATCH Oracle Recovery Tools oracle加密恢复 oracle勒索 oracle勒索恢复 oracle异常恢复 Oracle 恢复 ORACLE恢复 ORACLE数据库恢复 oracle 比特币 OSD-04016 YOUR FILES ARE ENCRYPTED 勒索恢复 比特币加密文章分类
- Others (2)
- 中间件 (2)
- WebLogic (2)
- 操作系统 (103)
- 数据库 (1,764)
- DB2 (22)
- MySQL (77)
- Oracle (1,605)
- Data Guard (52)
- EXADATA (8)
- GoldenGate (24)
- ORA-xxxxx (166)
- ORACLE 12C (72)
- ORACLE 18C (6)
- ORACLE 19C (15)
- ORACLE 21C (3)
- Oracle 23ai (8)
- Oracle ASM (69)
- Oracle Bug (8)
- Oracle RAC (54)
- Oracle 安全 (6)
- Oracle 开发 (28)
- Oracle 监听 (28)
- Oracle备份恢复 (588)
- Oracle安装升级 (97)
- Oracle性能优化 (62)
- 专题索引 (5)
- 勒索恢复 (86)
- PostgreSQL (30)
- pdu工具 (6)
- PostgreSQL恢复 (9)
- SQL Server (32)
- SQL Server恢复 (13)
- TimesTen (7)
- 达梦数据库 (3)
- 达梦恢复 (1)
- 生活娱乐 (2)
- 至理名言 (11)
- 虚拟化 (2)
- VMware (2)
- 软件开发 (39)
- Asp.Net (9)
- JavaScript (12)
- PHP (2)
- 小工具 (22)
-
最近发表
- 文件系统格式化MySQL数据库恢复
- .sstop勒索加密数据库恢复
- 解决一次硬件恢复之后数据文件0kb的故障恢复case
- Error in invoking target ‘libasmclntsh19.ohso libasmperl19.ohso client_sharedlib’问题处理
- ORA-01171: datafile N going offline due to error advancing checkpoint
- linux环境oracle数据库被文件系统勒索加密为.babyk扩展名溯源
- ORA-600 ksvworkmsgalloc: bad reaper
- ORA-600 krccfl_chunk故障处理
- Oracle Recovery Tools恢复案例总结—202505
- ORA-600 kddummy_blkchk 数据库循环重启
- 记录一次asm disk加入到vg通过恢复直接open库的案例
- CHECKDB 发现了 N 个分配错误和 M 个一致性错误
- 达梦数据库dm.ctl文件异常恢复
- Oracle Recovery Tools修复ORA-00742、ORA-600 ktbair2: illegal inheritance故障
- 可能是 tempdb 空间用尽或某个系统表不一致故障处理
- 11.2.0.4库中遇到ORA-600 kcratr_nab_less_than_odr报错
- [MY-013183] [InnoDB] Assertion failure故障处理
- Oracle 19c 202504补丁(RUs+OJVM)-19.27
- Oracle Recovery Tools修复ORA-600 6101/kdxlin:psno out of range故障
- pdu完美支持金仓数据库恢复(KingbaseES)
分类目录归档:Oracle备份恢复
使用flashback query恢复被删除plsql
今天一个朋友在11g中误删除生产中的一个过程,让他通过对dba_source视图的flashback query找回该过程.
从10g及其以后的版本中,如果被删除的plsql被及时发现(undo 未被覆盖掉)可以使用flashback query功能实现恢复.
创建plsql并删除
SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod PL/SQL Release 10.2.0.1.0 - Production CORE 10.2.0.1.0 Production TNS for Linux: Version 10.2.0.1.0 - Production NLSRTL Version 10.2.0.1.0 - Production SQL> create or replace PROCEDURE p_test_del(in_put varchar2) as 2 begin 3 dbms_output.put_line(in_put); 4 end; 5 / Procedure created. SQL> set serveroutput on SQL> exec p_test_del('www.xifenfei.com'); www.xifenfei.com PL/SQL procedure successfully completed. SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; TO_CHAR(SYSDATE,'YY ------------------- 2012-07-02 08:34:45 SQL> drop PROCEDURE p_test_del; Procedure dropped.
恢复plsql
SQL> set pagesize 0 SQL> column text format a4000 SQL> spool /tmp/get_delete_proc.xff SQL> SELECT text 2 FROM DBA_source AS OF TIMESTAMP TO_TIMESTAMP('2012-07-02 08:34:45', 'YYYY-MM-DD HH24:MI:SS') 3 WHERE OWNER = 'CHF' AND NAME = 'P_TEST_DEL' ORDER BY LINE; PROCEDURE p_test_del(in_put varchar2) as begin dbms_output.put_line(in_put); end; SQL> spool off; SQL> !more /tmp/get_delete_proc.xff SQL> SELECT text 2 FROM DBA_source AS OF TIMESTAMP TO_TIMESTAMP('2012-07-02 08:34:45', 'YYYY-MM-DD HH24:MI:SS') 3 WHERE OWNER = 'CHF' AND NAME = 'P_TEST_DEL' ORDER BY LINE; create PROCEDURE p_test_del(in_put varchar2) as begin dbms_output.put_line(in_put); end; SQL> spool off;
重建plsql
SQL> create PROCEDURE p_test_del(in_put varchar2) as 2 begin 3 dbms_output.put_line(in_put); 4 end; 5 / Procedure created. SQL> set serveroutput on SQL> exec p_test_del('惜分飞'); 惜分飞 PL/SQL procedure successfully completed.
发表在 Oracle备份恢复
3 条评论
dul 10 export_mode=true功能增强
在有次8i的库恢复中,因为硬盘损坏导致几个表出现很多诡异性坏块,尝试使用dul对其进行挖掘数据,当时使用dul 9 遇到一个难题:当一张表中有lob类型,同时又有varchar2类型,而且varchar2类型数据中包含回车键,使得解决起来很麻烦(因为export_mode=false支持lob,但是不支持字符串含回车;export_mode=true支持字符串含回车,但是不支持lob),最后放弃了对部分数据的挖掘.这个问题让我一直不甘心,今天测试dul 10 发现是用export_mode=true可以完美解决该问题
创建模拟表和插入数据
SQL> desc t_xff Name Null? Type ----------------------------------------- -------- ---------------------------- C_BLOB BLOB C_VARCHAR VARCHAR2(4000) SQL> declare 2 a_blob BLOB; 3 bfile_name BFILE := BFILENAME('ULTLOBDIR','awr_ora11g_2012-06-01_174_175.html'); 4 begin 5 insert into t_xff(C_BLOB,C_VARCHAR) values ( 6 empty_blob(), 7 'www.xifenfei.com 8 WWW.XIFENFEI.COM 9 惜分飞 10 欢迎访问惜分飞博客 11 提供数据库异常恢复技术支持') 12 returning C_BLOB into a_blob; 13 dbms_lob.fileopen(bfile_name); 14 dbms_lob.loadfromfile(a_blob, bfile_name, dbms_lob.getlength(bfile_name)); 15 dbms_lob.fileclose(bfile_name); 16 commit; 17 end; 18 / PL/SQL procedure successfully completed. SQL> select length(c_varchar),dbms_lob.getlength(c_blob) from t_xff; LENGTH(C_VARCHAR) DBMS_LOB.GETLENGTH(C_BLOB) ----------------- -------------------------- 61 4282573 SQL> select c_varchar from t_xff; C_VARCHAR --------------------------------------------------------------- www.xifenfei.com WWW.XIFENFEI.COM 惜分飞 欢迎访问惜分飞博客 提供数据库异常恢复技术支持
dul 挖数据
[oracle@xifenfei dul]$ ./dul Data UnLoader: 10.2.0.5.13 - Internal Only - on Mon Jul 2 04:29:10 2012 with 64-bit io functions Copyright (c) 1994 2012 Bernard van Duijnen All rights reserved. Strictly Oracle Internal Use Only DUL> bootstrap; DUL> desc chf.t_xff; Table CHF.T_XFF obj#= 51353, dataobj#= 51353, ts#= 4, file#= 4, block#=67 tab#= 0, segcols= 2, clucols= 0 Column information: icol# 01 segcol# 01 C_BLOB len 4000 type 113 BLOB LOB Segment: dataobj#= 51354, ts#= 4, file#= 4, block#=75 chunk=1 LOB Index: dataobj#= 51355, ts#= 4, file#= 4, block#=83 icol# 02 segcol# 02 C_VARCHAR len 4000 type 1 VARCHAR2 cs 852(ZHS16GBK) --export_mode=false DUL> unload table chf.t_xff; . unloading (index organized) table LOB01000053 65 rows unloaded Preparing lob metadata from lob index Reading LOB01000053.dat 65 entries loaded and sorted 65 entries . unloading table T_XFF 1 row unloaded --导出数据文件 -rw-r--r-- 1 oracle oinstall 6.1K Jul 2 04:15 LOB01000053.dat -rw-r--r-- 1 oracle oinstall 335 Jul 2 04:15 LOB01000053.ctl -rw-r--r-- 1 oracle oinstall 8.2M Jul 2 04:15 CHF_T_XFF.dat -rw-r--r-- 1 oracle oinstall 263 Jul 2 04:15 CHF_T_XFF.ctl ----export_mode=true DUL> unload table chf.t_xff; . unloading (index organized) table LOB01000053 DUL: Warning: Recreating file "LOB01000053.ctl" 65 rows unloaded Preparing lob metadata from lob index Reading LOB01000053.dat 65 entries loaded and sorted 65 entries . unloading table T_XFF 1 row unloaded --导出数据文件 -rw-r--r-- 1 oracle oinstall 6229 Jul 2 04:29 LOB01000053.dat -rw-r--r-- 1 oracle oinstall 335 Jul 2 04:29 LOB01000053.ctl -rw-r--r-- 1 oracle oinstall 4285027 Jul 2 04:29 CHF_T_XFF.dmp
导入数据测试
sqlldr导入
SQL> truncate table chf.t_xff; Table truncated. [oracle@xifenfei dul]$ sqlldr chf/xifenfei control=CHF_T_XFF.ctl SQL*Loader: Release 10.2.0.1.0 - Production on Mon Jul 2 04:23:18 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. SQL*Loader-510: Physical record in data file (CHF_T_XFF.dat) is longer than the maximum(1048576) SQL*Loader-2026: the load was aborted because SQL Loader cannot continue. [oracle@xifenfei dul]$ sqlldr chf/xifenfei control=CHF_T_XFF.ctl readsize=20971520 SQL*Loader: Release 10.2.0.1.0 - Production on Mon Jul 2 04:26:50 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. SQL> select length(c_varchar),dbms_lob.getlength(c_blob) from chf.t_xff; no rows selected --试验结果证明在出现表中同时有lob和varchar2列(含回车)时,export_mode=false不能正常工作
imp导入
SQL> drop table chf.t_xff; Table dropped. [oracle@xifenfei dul]$ imp chf/xifenfei file=CHF_T_XFF.dmp full=y Import: Release 10.2.0.1.0 - Production on Mon Jul 2 04:30:30 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options Export file created by EXPORT:V07.00.07 via conventional path Warning: the objects were exported by Bernard's DUL, not by you . importing Bernard's DUL's objects into CHF . importing Bernard's DUL's objects into CHF . . importing table "T_XFF" 1 rows imported SQL> select length(c_varchar),dbms_lob.getlength(c_blob) from t_xff; LENGTH(C_VARCHAR) DBMS_LOB.GETLENGTH(C_BLOB) ----------------- -------------------------- 61 4282573 SQL> select c_varchar from t_xff; C_VARCHAR --------------------------------------------------------------- www.xifenfei.com WWW.XIFENFEI.COM 惜分飞 欢迎访问惜分飞博客 提供数据库异常恢复技术支持 --试验结果证明在出现表中同时有lob和varchar2列(含回车)时,export_mode=true正常工作
undo segment header坏块异常恢复
alert日志报ORA-00600[4137]与ORA-00600 [4198]错误
数据库报如下错误,运行一段时间数据库自动down掉
Fri Jul 6 18:00:40 2012 SMON: ignoring slave err,downgrading to serial rollback Fri Jul 6 18:00:41 2012 Errors in file /usr/local/oracle/admin/techdb/bdump/techdb_smon_16636.trc: ORA-00600: internal error code, arguments: [4137], [], [], [], [], [], [], [] ORACLE Instance techdb (pid = 8) - Error 600 encountered while recovering transaction (3, 17). Fri Jul 6 18:00:41 2012 Errors in file /usr/local/oracle/admin/techdb/bdump/techdb_smon_16636.trc: ORA-00600: internal error code, arguments: [4137], [], [], [], [], [], [], [] Fri Jul 6 18:05:53 2012 SMON: Restarting fast_start parallel rollback Fri Jul 6 18:05:54 2012 Errors in file /usr/local/oracle/admin/techdb/bdump/techdb_p000_17124.trc: ORA-00600: internal error code, arguments: [4198], [9], [], [], [], [], [], [] ………… Wed Jul 6 18:50:38 2012 Errors in file /usr/local/oracle/admin/techdb/bdump/techdb_pmon_4473.trc: ORA-00474: SMON process terminated with error Wed Jul 6 18:50:38 2012 PMON: terminating instance due to error 474
从三个地方得出3号回滚段异常
1.trace文件
SMON: about to recover undo segment 3 Parallel Transaction recovery caught exception 12801 Parallel Transaction recovery caught error 30317 *** 2012-07-06 17:55:19.042 SMON: Restarting fast_start parallel rollback SMON: about to recover undo segment 3 SMON: mark undo segment 3 as available SMON: about to recover undo segment 3 SMON: mark undo segment 3 as available Parallel Transaction recovery caught exception 12801 Parallel Transaction recovery caught error 607 *** 2012-07-06 17:55:19.761 SMON: ignoring slave err,downgrading to serial rollback SMON: about to recover undo segment 3 XID passed in =xid: 0x0003.011.00003c2b XID from Undo block =xid: 0x0004.020.00002b35
2.alert中提示while recovering transaction (3, 17)
3.查询dba_rollback_segs发现_SYSSMU3$是NEED RECOVERY状态
尝试删除_SYSSMU3$
使用隐含参数_offline_rollback_segments= _SYSSMU3$
Fri Jul 6 18:16:19 2012 Completed: ALTER DATABASE OPEN Fri Jul 6 18:16:56 2012 drop rollback segment "_SYSSMU3$" Fri Jul 6 18:16:57 2012 Errors in file /usr/local/oracle/admin/techdb/udump/techdb_ora_17381.trc: ORA-00600: internal error code, arguments: [kddummy_blkchk], [2], [41], [38508], [], [], [], [] Fri Jul 6 18:16:57 2012 Doing block recovery for file 2 block 41 Block recovery from logseq 209591, block 183 to scn 7788878085 Fri Jul 6 18:16:57 2012 Recovery of Online Redo Log: Thread 1 Group 1 Seq 209591 Reading mem 0 Mem# 0 errs 0: /usr/local/oracle/oradata/techdb/redo01.log Block recovery completed at rba 209591.225.16, scn 1.3493910790 ORA-607 signalled during: drop rollback segment "_SYSSMU3$"... Fri Jul 6 18:16:57 2012 Corrupt Block Found TSN = 1, TSNAME = UNDOTBS1 RFN = 2, BLK = 41, RDBA = 8388649 OBJN = 0, OBJD = -1, OBJECT = _NEXT_OBJECT, SUBOBJECT = SEGMENT OWNER = SYS, SEGMENT TYPE = Invalid Type Fri Jul 6 18:16:57 2012 Errors in file /usr/local/oracle/admin/techdb/bdump/techdb_smon_17367.trc: ORA-00600: internal error code, arguments: [kddummy_blkchk], [2], [41], [38508], [], [], [], [] Doing block recovery for file 2 block 41 Block recovery from logseq 209591, block 183 to scn 7788878085 Fri Jul 6 18:17:46 2012 Errors in file /usr/local/oracle/admin/techdb/bdump/techdb_pmon_17355.trc: ORA-00474: SMON process terminated with error Fri Jul 6 18:17:46 2012 PMON: terminating instance due to error 474 Fri Jul 6 18:17:46 2012 Errors in file /usr/local/oracle/admin/techdb/bdump/techdb_dbw0_17361.trc: ORA-00474: SMON process terminated with error Fri Jul 6 18:17:46 2012 Errors in file /usr/local/oracle/admin/techdb/bdump/techdb_lgwr_17363.trc: ORA-00474: SMON process terminated with error Instance terminated by PMON, pid = 17355
这里可以看出在使用隐含参数删除异常回滚段的时候,因为该回滚段有坏块出现ORA-00600[kddummy_blkchk]使得数据库donw掉,重启过几次该库都因为这个错误直接down.
查看trace文件发现
SMON: about to recover undo segment 3 SMON: mark undo segment 3 as needs recovery *** 2012-07-06 18:16:57.734 Block Checking: DBA = 8388649, Block Type = System Managed Segment Header Block ERROR: SMU Segment Header Corrupted. Error Code = 38508 ktu4smck: starting extent(0x77) of txn slot #0x11 is invalid. valid value (0 - 0x76) TRN CTL:: seq: 0xed38 chd: 0x0020 ctl: 0x002a inc: 0x00000000 nfb: 0x0000 mgc: 0x8201 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe) uba: 0x00a6610a.ed38.1d scn: 0x0001.d030de86 Version: 0x01
因为该库是因为undo的3号回滚段的header出现坏块,即使使用了隐含参数屏蔽该回滚段恢复,smon进程依然会去读回滚段header,从而出现该错误导致直接down掉.
处理方案
1.使用隐含参数屏蔽异常回滚段_offline_rollback_segments= _SYSSMU3$
2.修改undo_tablespace=SYSTEM/undo_management=MANUAL
3.启动数据库,快速删除包含_SYSSMU3$ undo表空间
4.新建undo表空间
5.修改undo_tablespace=new_undo/undo_management=AUTO,除掉隐含参数
6.使用新参数文件重启数据库
7.建议:使用逻辑导出导入重建数据库