-
3D Cloud
asm mount asm恢复 bbed bootstrap$ dmp损坏 dul In Memory kccpb_sanity_check_2 kfed MySQL恢复 ORA-00312 ORA-00607 ORA-00704 ORA-01110 ORA-01190 ORA-01555 ORA-01578 ORA-08103 ORA-600 2662 ORA-600 3020 ORA-600 4000 ORA-600 4137 ORA-600 4193 ORA-600 4194 ORA-600 16703 ORA-600 kccpb_sanity_check_2 ORA-15042 ORACLE 12C oracle dul ORACLE PATCH oracle异常恢复 ORACLE恢复 Oracle 恢复 ORACLE数据库恢复 oracle 比特币 redo异常 undo异常 YOUR FILES ARE ENCRYPTED _ALLOW_RESETLOGS_CORRUPTION 勒索恢复 数据库恢复 比特币 比特币 oracle 比特币加密 比特币勒索
文章分类
- Others (2)
- 中间件 (2)
- WebLogic (2)
- 操作系统 (87)
- 数据库 (1,313)
- DB2 (22)
- MySQL (56)
- Oracle (1,199)
- Data Guard (39)
- EXADATA (7)
- GoldenGate (19)
- ORA-xxxxx (145)
- ORACLE 12C (71)
- ORACLE 18C (6)
- ORACLE 19C (8)
- Oracle ASM (56)
- Oracle Bug (7)
- Oracle RAC (40)
- Oracle 安全 (6)
- Oracle 开发 (25)
- Oracle 监听 (26)
- Oracle备份恢复 (392)
- Oracle安装升级 (54)
- Oracle性能优化 (62)
- 专题索引 (5)
- 勒索恢复 (42)
- PostgreSQL (10)
- SQL Server (26)
- SQL Server恢复 (7)
- TimesTen (7)
- 达梦数据库 (2)
- 生活娱乐 (2)
- 至理名言 (11)
- 虚拟化 (2)
- VMware (2)
- 软件开发 (23)
- Asp.Net (9)
- JavaScript (12)
- PHP (2)
- 小工具 (6)
-
最近发表
- Alpha865qqz.id 加密数据库恢复
- incaseformat 病毒删除文件恢复
- xfs文件系统mysql删库恢复
- 对恢复案例:因对工作调整不满,链家一员工删除公司 9 TB数据:被判7年事件有感
- Oracle Recovery Tools 解决ORA-01190 ORA-01248等故障
- Oracle Recovery Tools 12月份更新
- -bash: /bin/rm: Argument list too long
- ORA-27303: failure occurred at: skgpwinit6
- ORA-600 kffmLoad_1 kffmVerify_4
- ORA-00600 kfrHtAdd01
- ORA-00600 [2662]和ORA-00600 [4194]恢复
- 记录oracle安装的两个小问题(INS-30060和弹出子窗口异常)
- dblink会话引起library cache lock
- asm磁盘类似_DROPPED_0001_DATA名称故障处理
- 12C数据库报ORA-600 kcbzib_kcrsds_1故障处理
- 再次遇到ORA-600 kokasgi1故障恢复
- sysaux表空间不足—WRH$_ACTIVE_SESSION_HISTORY
- sql server 删除数据库恢复
- .eight加密数据库恢复
- xiaolinghelper@firemail.cc加密数据库恢复
友情链接
标签归档:oracle异常恢复
ORA-600 kccpb_sanity_check_2故障恢复
今天是有人在淘宝旺旺上找我,需要oracle数据库恢复支持
远程登录上去一看发现数据库mount的时候报ORA-600[kccpb_sanity_check_2]错误
C:\Documents and Settings\Administrator>sqlplus / as sysdba SQL*Plus: Release 10.2.0.3.0 - Production on Wed Jul 29 16:23:18 2015 Copyright (c) 1982, 2006, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production With the Partitioning, OLAP and Data Mining options SQL> alter database mount; alter database mount * ERROR at line 1: ORA-00600: internal error code, arguments: [kccpb_sanity_check_2], [14169], [14160], [0x0], [], [], [], []
尝试重建控制文件
SQL> shutdown immediate; ORA-01507: database not mounted ORACLE instance shut down. SQL> startup pfile='D:\database\m104\pfile\init.ora' nomount ORACLE instance started. Total System Global Area 444596224 bytes Fixed Size 1291072 bytes Variable Size 155192512 bytes Database Buffers 281018368 bytes Redo Buffers 7094272 bytes SQL> SHOW PARAMETER CONT; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_time integer 7 control_files string D:\DATABASE\M104\CTRL\CONTROL0 2.CTL global_context_pool_size string SQL> ALTER DATABASE MOUNT; ALTER DATABASE MOUNT * ERROR at line 1: ORA-00600: internal error code, arguments: [kccpb_sanity_check_2], [14169], [14160], [0x0], [], [], [], [] SQL> SQL> CREATE CONTROLFILE REUSE DATABASE "m104_db" NORESETLOGS FORCE LOGGING NOAR CHIVELOG 2 MAXLOGFILES 16 3 MAXLOGMEMBERS 3 4 MAXDATAFILES 100 5 MAXINSTANCES 8 6 MAXLOGHISTORY 2921 7 LOGFILE 8 GROUP 1 'D:\database\m104\log\redo01.log' SIZE 51200K, 9 GROUP 2 'D:\database\m104\log\redo02.log' SIZE 51200K, 10 GROUP 3 'D:\database\m104\log\redo03.log' SIZE 51200K 11 DATAFILE 12 'd:\database\m104\data\system01.dbf', 13 'd:\database\m104\data\sysaux01.dbf', 14 'd:\database\m104\data\USERS01.DBF', 15 'd:\database\m104\data\UNDOTBS01.DBF', 16 'd:\database\m104\data\INDX01.DBF' 17 CHARACTER SET WE8ISO8859P1 18 ; CREATE CONTROLFILE REUSE DATABASE "m104_db" NORESETLOGS FORCE LOGGING NOARCHIVE LOG * ERROR at line 1: ORA-01503: CREATE CONTROLFILE failed ORA-00600: internal error code, arguments: [kccsga_update_ckpt_4], [1], [8], [], [], [], [], [] SQL> SQL> CREATE CONTROLFILE REUSE DATABASE "m104_db" RESETLOGS FORCE LOGGING NOARCH IVELOG 2 MAXLOGFILES 16 3 MAXLOGMEMBERS 3 4 MAXDATAFILES 100 5 MAXINSTANCES 8 6 MAXLOGHISTORY 2921 7 LOGFILE 8 GROUP 1 'D:\database\m104\log\redo01.log' SIZE 51200K, 9 GROUP 2 'D:\database\m104\log\redo02.log' SIZE 51200K, 10 GROUP 3 'D:\database\m104\log\redo03.log' SIZE 51200K 11 DATAFILE 12 'd:\database\m104\data\system01.dbf', 13 'd:\database\m104\data\sysaux01.dbf', 14 'd:\database\m104\data\USERS01.DBF', 15 'd:\database\m104\data\UNDOTBS01.DBF', 16 'd:\database\m104\data\INDX01.DBF' 17 CHARACTER SET WE8ISO8859P1 18 ; CREATE CONTROLFILE REUSE DATABASE "m104_db" RESETLOGS FORCE LOGGING NOARCHIVELO G * ERROR at line 1: ORA-01503: CREATE CONTROLFILE failed ORA-00600: internal error code, arguments: [kccsga_update_ckpt_4], [1], [8], [], [], [], [], []
无论是使用noresetlogs还是resetlogs,重建控制文件都报ORA-600[kccsga_update_ckpt_4]错误.比较奇怪,无解指定控制文件新名称重建试试看
修改控制文件路径
SQL> SHUTDOWN ABORT ORACLE instance shut down. SQL> startup pfile='D:\database\m104\pfile\init.ora' nomount ORACLE instance started. Total System Global Area 444596224 bytes Fixed Size 1291072 bytes Variable Size 155192512 bytes Database Buffers 281018368 bytes Redo Buffers 7094272 bytes SQL> SHOW PARAMETER CONT; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_time integer 7 control_files string D:\DATABASE\M104\CTRL\CONTROL0 4.CTL global_context_pool_size string SQL> CREATE CONTROLFILE REUSE DATABASE "m104_db" RESETLOGS FORCE LOGGING NOARCH IVELOG 2 MAXLOGFILES 16 3 MAXLOGMEMBERS 3 4 MAXDATAFILES 100 5 MAXINSTANCES 8 6 MAXLOGHISTORY 2921 7 LOGFILE 8 GROUP 1 'D:\database\m104\log\redo01.log' SIZE 51200K, 9 GROUP 2 'D:\database\m104\log\redo02.log' SIZE 51200K, 10 GROUP 3 'D:\database\m104\log\redo03.log' SIZE 51200K 11 DATAFILE 12 'd:\database\m104\data\system01.dbf', 13 'd:\database\m104\data\sysaux01.dbf', 14 'd:\database\m104\data\USERS01.DBF', 15 'd:\database\m104\data\UNDOTBS01.DBF', 16 'd:\database\m104\data\INDX01.DBF' 17 CHARACTER SET WE8ISO8859P1 18 ; Control file created.
使用新的控制文件位置,这次终于数据库重建控制文件成功
尝试指定redo进行恢复,数据库正常打开
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL; ORA-00279: change 3643108240801 generated at 07/26/2015 20:15:22 needed for thread 1 ORA-00289: suggestion : D:\ORACLE\PRODUCT\10.2.0\DB_1\RDBMS\ARC00567_0866390669.001 ORA-00280: change 3643108240801 for thread 1 is in sequence #567 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} D:\database\m104\log\redo01.log ORA-00310: archived log contains sequence 566; sequence 567 required ORA-00334: archived log: 'D:\DATABASE\M104\LOG\REDO01.LOG' ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: 'D:\DATABASE\M104\DATA\SYSTEM01.DBF' SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL; ORA-00279: change 3643108240801 generated at 07/26/2015 20:15:22 needed for thread 1 ORA-00289: suggestion : D:\ORACLE\PRODUCT\10.2.0\DB_1\RDBMS\ARC00567_0866390669.001 ORA-00280: change 3643108240801 for thread 1 is in sequence #567 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} D:\database\m104\log\redo02.log Log applied. Media recovery complete. SQL> ALTER DATABASE OPEN RESETLOGS; Database altered.
数据库恢复完成。整个数据库恢复比较简单,但是注意这里的ORA-600[kccsga_update_ckpt_4]通过修改控制文件路径规避,具体原因待查。
知识点补充:ORA-600 [kccpb_sanity_check_2] [a] [b] {c}
VERSIONS: Versions 10.2 to 11.2 DESCRIPTION: This internal error is raised when the sequence number (seq#) of the current block of the controlfile is greater than the seq# in the controlfile header. The header value should always be equal to, or greater than the value held in the control file block(s). This extra check was introduced in Oracle 10gR2 to detect lost writes or stale reads to the header. ARGUMENTS: Arg [a] seq# in control block header. Arg [b] seq# in the control file header. Arg {c}
Oracle异常恢复前备份保护现场建议—ASM环境
在上一篇中写道了文件系统的库,在进行异常恢复前的备份方法(Oracle异常恢复前备份保护现场建议—FileSystem环境),对于asm库,因为asm 里面的数据文件无法直接dd文件头,因此备份方式也有所改变.对于asm是mount,但是数据库不能打开,使用rman或者asm的cp命令全部备份数据文件也来不及或者空间不足,这样的情况下,你可以考虑使用rman或者cp命令备份控制文件和system表空间文件,cp命令备份redo,dd命令备份文件头,来完成asm情况下数据库异常恢复前备份
控制文件备份
11.2及其以后版本使用asmcmd cp命令处理
select 'asmcmd cp '||name||' &&backup_dir/' from v$datafile where ts#=0 union all select 'asmcmd cp '||name||' &&backup_dir/crontrofile_'||rownum||'.ctl' from v$controlfile union all select 'asmcmd cp '||member||' &&backup_dir/'||thread#||'_'||a.group#||'_'||sequence#||'_'||substr(member, instr(member,'/',-1)+1) FROM v$log a, v$logfile b WHERE a.group# = B.GROUP#;
其他版本使用rman命令处理
--rman备份控制文件(/tmp目录自己修改) copy current controlfile to '/tmp/ctl.ctl'; --rman备份system表空间 select 'copy datafile '||file#||' to ''&backup_dir/system_'||file#||'.dbf'';' from v$datafile where ts#=0; --redo无法直接备份
备份文件头
[grid@xifenfei ~]$ ss SQL*Plus: Release 11.2.0.4.0 Production on Fri May 1 04:15:18 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Automatic Storage Management option SQL> set lines 150 SQL> select 'dd if='||c.PATH_KFDSK||' of=&&backup_path/'||a.GROUP_KFFXP||'_'||a.disk_kffxp||'_'|| 2 b.NUMBER_KFFIL||'.asm count=1 bs='|| d.AUSIZE_KFGRP||' skip='||a.au_kffxp backup_dd_cmd 3 FROM x$kffxp a, X$KFFIL b,X$KFDSK c,X$KFGRP d WHERE 4 a.GROUP_KFFXP=b.GROUP_KFFIL 5 and a.NUMBER_KFFXP=b.NUMBER_KFFIL 6 and b.FTYPE_KFFIL in(2,12) 7 and b.NUMBER_KFFIL>255 8 and a.xnum_kffxp=0 9 and a.GROUP_KFFXP=c.GRPNUM_KFDSK 10 and a.disk_kffxp=c.NUMBER_KFDSK 11 and a.GROUP_KFFXP=d.NUMBER_KFGRP; Enter value for backup_path: /tmp old 1: select 'dd if='||c.PATH_KFDSK||' of=&&backup_path/'||a.GROUP_KFFXP||'_'||a.disk_kffxp||'_'|| new 1: select 'dd if='||c.PATH_KFDSK||' of=/tmp/'||a.GROUP_KFFXP||'_'||a.disk_kffxp||'_'|| BACKUP_DD_CMD ------------------------------------------------------------------------------------------------------------------ dd if=/dev/asm-disk1 of=/tmp/1_0_256.asm count=1 bs=1048576 skip=29 dd if=/dev/asm-disk2 of=/tmp/1_1_257.asm count=1 bs=1048576 skip=404 dd if=/dev/asm-disk2 of=/tmp/1_1_258.asm count=1 bs=1048576 skip=641 dd if=/dev/asm-disk1 of=/tmp/1_0_259.asm count=1 bs=1048576 skip=648 dd if=/dev/asm-disk3 of=/tmp/2_0_256.asm count=1 bs=1048576 skip=51
还原文件头
SQL> set lines 150 SQL> select 'dd of='||c.PATH_KFDSK||' if=&&backup_path/'||a.GROUP_KFFXP||'_'||a.disk_kffxp|| 2 '_'||b.NUMBER_KFFIL||'.asm count=1 conv=notrunc bs='|| d.AUSIZE_KFGRP||' seek='||a.au_kffxp restore_dd_cmd 3 FROM x$kffxp a, X$KFFIL b,X$KFDSK c,X$KFGRP d WHERE 4 a.GROUP_KFFXP=b.GROUP_KFFIL 5 and a.NUMBER_KFFXP=b.NUMBER_KFFIL 6 and b.FTYPE_KFFIL in(2,12) 7 and b.NUMBER_KFFIL>255 8 and a.xnum_kffxp=0 9 and a.GROUP_KFFXP=c.GRPNUM_KFDSK 10 and a.disk_kffxp=c.NUMBER_KFDSK 11 and a.GROUP_KFFXP=d.NUMBER_KFGRP; old 1: select 'dd of='||c.PATH_KFDSK||' if=&&backup_path/'||a.GROUP_KFFXP||'_'||a.disk_kffxp|| new 1: select 'dd of='||c.PATH_KFDSK||' if=/tmp/'||a.GROUP_KFFXP||'_'||a.disk_kffxp|| RESTORE_DD_CMD ----------------------------------------------------------------------------------------------------------------- dd of=/dev/asm-disk1 if=/tmp/1_0_256.asm count=1 conv=notrunc bs=1048576 seek=29 dd of=/dev/asm-disk2 if=/tmp/1_1_257.asm count=1 conv=notrunc bs=1048576 seek=404 dd of=/dev/asm-disk2 if=/tmp/1_1_258.asm count=1 conv=notrunc bs=1048576 seek=641 dd of=/dev/asm-disk1 if=/tmp/1_0_259.asm count=1 conv=notrunc bs=1048576 seek=648 dd of=/dev/asm-disk3 if=/tmp/2_0_256.asm count=1 conv=notrunc bs=1048576 seek=51 SQL>
备份还原文件头测试–通过测试证明该方法备份文件头是ok的
关闭数据库,使用dd备份文件头
[oracle@xifenfei ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Fri May 1 04:21:49 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down.
dul查看当前dbname值为XIFENFEI
[oracle@xifenfei dul]$ ./dul Data UnLoader: 10.2.0.6.5 - Internal Only - on Fri May 1 04:37:43 2015 with 64-bit io functions Copyright (c) 1994 2015 Bernard van Duijnen All rights reserved. Strictly Oracle Internal Use Only Disk group DATA, dul group_cid 0 Discovered disk /dev/asm-disk1 as diskgroup DATA, disk number 0 size 3922 Mb File1 starts at 2, dul_disk_cid 0 Discovered disk /dev/asm-disk2 as diskgroup DATA, disk number 1 size 3922 Mb without File1 meta data, dul_disk_cid 1 Disk group XIFENFEI, dul group_cid 1 Discovered disk /dev/asm-disk3 as diskgroup XIFENFEI, disk number 0 size 4439 Mb File1 starts at 2, dul_disk_cid 2 DUL: Warning: Dictionary cache DC_ASM_EXTENTS is empty Probing for attributes in File9, the attribute directory, for disk group DATA attribute name "_extent_sizes", value "1 4 16" attribute name "_extent_counts", value "20000 20000 2147483647" Oracle data file size 775954432 bytes, block size 8192 Found db_id = 1495013434 Found db_name = XIFENFEI <-----db name DUL: Error: Filedir block not allocated, file does not exist DUL: Error: Could not load asm meta data for group XIFENFEI file 9 Probing for filenames in File6, the alias directory, for disk group XIFENFEI +XIFENFEI/XIFENFEI/DATAFILE/XIFENFEI.256.878397315 Probing for database datafiles in File1, the file directory, for disk group XIFENFEI File 256 datafile size 104865792, block size 8192 Disk group XIFENFEI has one file of type datafile
使用dd备份1文件头
[oracle@xifenfei tmp]$ dd if=/dev/asm-disk1 of=/tmp/1_0_256.asm count=1 bs=1048576 skip=29 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.0168209 seconds, 62.3 MB/s
尝试把dbname从XIFENFEI修改为ORCL
SQL> select dump('XIFENFEI',16) from dual; DUMP('XIFENFEI',16) ------------------------------------- Typ=96 Len=8: 58,49,46,45,4e,46,45,49 SQL> SELECT DUMP('ORCL',16) FROM DUAL; DUMP('ORCL',16) ------------------------- Typ=96 Len=4: 4f,52,43,4c SQL>
bbed修改XIFENFEI为ORCL
[oracle@xifenfei tmp]$ bbed filename='/tmp/1_0_256.asm' mode=edit Password: BBED: Release 2.0.0.0.0 - Limited Production on Fri May 1 04:24:06 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. ************* !!! For Oracle Internal Use only !!! *************** BBED> set blocksize 8192 BLOCKSIZE 8192 BBED> set block 1 BLOCK# 1 BBED> map File: /tmp/1_0_256.asm (0) Block: 1 Dba:0x00000000 ------------------------------------------------------------ Data File Header struct kcvfh, 860 bytes @0 ub4 tailchk @8188 BBED> p kcvfhhdr struct kcvfhhdr, 76 bytes @20 ub4 kccfhswv @20 0x00000000 ub4 kccfhcvn @24 0x0b200400 ub4 kccfhdbi @28 0x591c183a text kccfhdbn[0] @32 X text kccfhdbn[1] @33 I text kccfhdbn[2] @34 F text kccfhdbn[3] @35 E text kccfhdbn[4] @36 N text kccfhdbn[5] @37 F text kccfhdbn[6] @38 E text kccfhdbn[7] @39 I BBED> d seek 32 File: /tmp/1_0_256.asm (0) Block: 1 seeks: 32 to 63 Dba:0x00000000 ------------------------------------------------------------------------ 58494645 4e464549 12040000 00720100 00200000 01000300 00000000 00000000 <32 bytes per line>
dd把修改的block还原到asm中
[oracle@xifenfei dul]$ dd of=/dev/asm-disk1 if=/tmp/1_0_256.asm count=1 conv=notrunc bs=1048576 seek=29 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.00253244 seconds, 414 MB/s
dul验证dbname 修改为ORCL成功
[oracle@xifenfei dul]$ ./dul Data UnLoader: 10.2.0.6.5 - Internal Only - on Fri May 1 04:41:33 2015 with 64-bit io functions Copyright (c) 1994 2015 Bernard van Duijnen All rights reserved. Strictly Oracle Internal Use Only Disk group DATA, dul group_cid 0 Discovered disk /dev/asm-disk1 as diskgroup DATA, disk number 0 size 3922 Mb File1 starts at 2, dul_disk_cid 0 Discovered disk /dev/asm-disk2 as diskgroup DATA, disk number 1 size 3922 Mb without File1 meta data, dul_disk_cid 1 Disk group XIFENFEI, dul group_cid 1 Discovered disk /dev/asm-disk3 as diskgroup XIFENFEI, disk number 0 size 4439 Mb File1 starts at 2, dul_disk_cid 2 DUL: Warning: Dictionary cache DC_ASM_EXTENTS is empty Probing for attributes in File9, the attribute directory, for disk group DATA attribute name "_extent_sizes", value "1 4 16" attribute name "_extent_counts", value "20000 20000 2147483647" Oracle data file size 775954432 bytes, block size 8192 Found db_id = 1495013434 Found db_name = ORCL <----修改后的dbname DUL: Error: Filedir block not allocated, file does not exist DUL: Error: Could not load asm meta data for group XIFENFEI file 9 Probing for filenames in File6, the alias directory, for disk group XIFENFEI +XIFENFEI/XIFENFEI/DATAFILE/XIFENFEI.256.878397315 Probing for database datafiles in File1, the file directory, for disk group XIFENFEI File 256 datafile size 104865792, block size 8192 Disk group XIFENFEI has one file of type datafile
对于asm无法mount情况下备份asm disk header
asm磁盘的备份主要是备份磁盘头100M空间,使用dd命令直接备份
set lines 150 set pages 1000 select 'dd if='||path||' of=&asmbackup_dir/'||group_number||'_'||disk_number||'.asm bs=1048576 count=100' from v$asm_disk;
set lines 150 set pages 1000 select 'dd of='||path||' if=&asmbackup_dir/'||group_number||'_'||disk_number||'.asm bs=1048576 count=100 conv=notrunc' from v$asm_disk;
asmlib需要注意把ORCL:替换为/dev/oracleasm/disks/对应目录.
Oracle异常恢复前备份保护现场建议—FileSystem环境
无论是在各种会议上,还是在朋友/网友私下请教Oracle数据库恢复的问题之时,我都强调,如果你没有十足的把握,请你对您的现场进行备份,确保别对现场进行二次损坏。你不能恢复数据库,但绝对不能再次破坏数据库,给二次恢复增加难度.这里对恢复前备份提供一些指导思想和简单脚本,希望对大家有帮助.
哪些文件需要备份
熟悉数据库恢复的朋友可能都情况,Oracle在异常恢复的过程中主要修改的是system表空间里面数据,其他数据文件,redo数据,控制文件(当然由于redo,undo导致其他数据文件内部的block也可能发生改变)。在备份时间,备份空间允许的情况下,是对这些文件全部备份为好
完整备份文件
set lines 150 set pages 10000 select name from v$datafile union all select name from v$controlfile union all select member from v$logfile;
有些情况下:比如如果全部备份时间过长,备份空间不足等情况下,我们该如何备份,尽量减少因为异常恢复导致对原环境的损坏.备份最核心的system表空间,数据文件头,redo file,control file等数据,由于这个不是简单的拷贝操作,因此在生成备份语句同时,也生成还原语句,切不可生成了备份语句后,无恢复语句,导致后面还原故障现场难度增大.
无法全备情况下linux/unix数据库恢复前备份
set lines 150 set pages 10000 select 'dd if='||name||' of=&&back_dir/'||ts#||'_'||file#||'.dbf bs=1048576 count=10' from v$datafile where ts#<>0 union all select 'dd if='||name||' of=&&back_dir/'||ts#||'_'||file#||'.dbf' from v$datafile where ts#=0 union all select 'dd if='||name||' of=&&back_dir/control0'||rownum||'.ctl' from v$controlfile union all select 'dd if='||member||' of=&&back_dir/'||thread#||'_'||a.group#||'_'||sequence#||'_'||substr(member, instr(member,'/',-1)+1) FROM v$log a, v$logfile b WHERE a.group# = B.GROUP#;
无法全备情况下linux/unix使用备份还原
set lines 150 set pages 1000 select 'dd of='||name||' if=&&back_dir/'||ts#||'_'||file#||'.dbf bs=1048576 count=10 conv=notrunc' from v$datafile where ts#<>0 union all select 'dd if='||name||' if=&&back_dir/'||ts#||'_'||file#||'.dbf' from v$datafile where ts#=0 union all select 'dd of='||name||' if=&&back_dir/control0'||rownum||'.ctl' from v$controlfile union all select 'dd of='||member||' if=&&back_dir/'||thread#||'_'||a.group#||'_'||sequence#||'_'||substr(member, instr(member,'/',-1)+1) FROM v$log a, v$logfile b WHERE a.group# = B.GROUP#;
由于win路径斜杠不一样(/和\的区别),因此在无法全备情况下win备份语句
set lines 150 set pages 10000 select 'dd if='||name||' of=&&back_dir\'||ts#||'_'||file#||'.dbf bs=1048576 count=10' from v$datafile where ts#<>0 union all select 'dd if='||name||' of=&&back_dir\'||ts#||'_'||file#||'.dbf' from v$datafile where ts#=0 union all select 'dd if='||name||' of=&&back_dir\control0'||rownum||'.ctl' from v$controlfile union all select 'dd if='||member||' of=&&back_dir\'||thread#||'_'||a.group#||'_'||sequence#||'_'||substr(member, instr(member,'\',-1)+1) FROM v$log a, v$logfile b WHERE a.group# = B.GROUP#;
在无法全备情况下win还原语句
set lines 150 set pages 1000 select 'dd of='||name||' if=&&back_dir\'||ts#||'_'||file#||'.dbf bs=1048576 count=10 conv=notrunc' from v$datafile where ts#<>0 union all select 'dd if='||name||' if=&&back_dir\'||ts#||'_'||file#||'.dbf' from v$datafile where ts#=0 union all select 'dd of='||name||' if=&&back_dir\control0'||rownum||'.ctl' from v$controlfile union all select 'dd of='||member||' if=&&back_dir\'||thread#||'_'||a.group#||'_'||sequence#||'_'||substr(member, instr(member,'\',-1)+1) FROM v$log a, v$logfile b WHERE a.group# = B.GROUP#;
这里提供win环境下dd命令程序win环境dd命令工具
备注:对于asm情况异常情况恢复,备份情况请不要参考该文章,具体请见后续文章,具体见Oracle异常恢复前备份保护现场建议—ASM环境