标签云
asm恢复 bbed bootstrap$ dul kcbzib_kcrsds_1 kccpb_sanity_check_2 kcratr_nab_less_than_odr MySQL恢复 obet ORA-00312 ORA-00704 ORA-00742 ORA-01110 ORA-01200 ORA-01555 ORA-01578 ORA-01595 ORA-600 2662 ORA-600 2663 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-600 kcratr_nab_less_than_odr 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 比特币加密文章分类
- MongoDB (1)
- MongoDB恢复 (1)
- Others (2)
- 中间件 (2)
- WebLogic (2)
- 操作系统 (112)
- 数据库 (1,882)
- DB2 (22)
- MySQL (82)
- Oracle (1,707)
- Data Guard (53)
- EXADATA (8)
- GoldenGate (24)
- ORA-xxxxx (168)
- ORACLE 12C (72)
- ORACLE 18C (6)
- ORACLE 19C (15)
- ORACLE 21C (3)
- Oracle 23ai (8)
- Oracle ASM (72)
- Oracle Bug (8)
- Oracle RAC (56)
- Oracle 安全 (6)
- Oracle 开发 (28)
- Oracle 监听 (29)
- Oracle备份恢复 (661)
- Oracle安装升级 (108)
- Oracle性能优化 (62)
- 专题索引 (5)
- 勒索恢复 (91)
- PostgreSQL (37)
- pdu工具 (7)
- PostgreSQL恢复 (13)
- SQL Server (34)
- SQL Server恢复 (14)
- TimesTen (7)
- 达梦数据库 (5)
- 达梦恢复 (3)
- 生活娱乐 (2)
- 至理名言 (11)
- 虚拟化 (2)
- VMware (2)
- 软件开发 (51)
- Asp.Net (9)
- JavaScript (12)
- PHP (2)
- 小工具 (34)
- MongoDB (1)
-
最近发表
- 断电引起ORA-600 3005故障处理
- 记录一次云存储资源到期之后引起的数据库恢复
- Firebird 损坏数据库数据抢救工具—firebirdext
- Oracle 19c 202610补丁(RUs+OJVM)-19.33
- 由于con$.con#值达到极限,触发数据库增加约束报ORA-600 12807错误
- MongoDB 离线提取工具—mongoext
- .bres勒索病毒加密数据库dmp文件可恢复
- ORA-600 krsm_mrp_rebuild_lf_list.lno_mismatch
- 记录一次0丢失的ORA-00354: 损坏重做日志块标头故障恢复
- 不当数据库恢复操作导致一个月数据丢失
- obet快速修复oracle 位图损坏块
- 不太常见的10.2.0.1的oracle redo损坏恢复
- obet forcecopy功能抢救硬件故障中的数据文件
- kcratr_nab_less_than_odr和system坏块故障处理
- 通过obet 恢复system坏块,打开数据库
- obet dbv功能完整说明
- 分享一例运行在aix上的sap系统数据库恢复过程
- OBET-Oracle Block Editor Tool使用说明
- 几乎动用了所有手段的Oracle故障恢复
- Oracle Block Edit Tool (obet) 功能增强–2026.07
月归档:五月 2013
shell脚本获得extents分布
比较深入看过dba_extents视图的朋友都知道,它得到extent的信息不是通过普通的存储在数据库中的基表获得,而是x$相关的表获得(x$表是数据库启动时候在内存中创建,不存在数据文件中),因为当数据库未正常启动,我们无法直接确定某个block是否在某个对象中.其实关于extent的信息都已经记录在了segment header的block中,通过dump该block记录的rdba信息,未转化为file_id和block_id,这里写shell脚本实现把segment header dump 内容转化为类似dba_extents记录,方便在某些不能open的库中分析某个异常block是否属于某个表
#! /bin/bash
dec2bin(){
val_16=$1
((num=$val_16));
val=`echo $num`
local base=$2
[ $val -eq 0 ] && bin=0
if [ $val -ge $base ]; then
dec2bin $val $((base*2))
if [ $val -ge $base ]; then
val=$(($val-$base))
bin=${bin}1
else
bin=${bin}0
fi
fi
[ $base -eq 1 ] && printf $bin
}
for i in `grep "length:" $1 |awk '{print $1 $3}'`;
do
rdba=`echo ${i:0:10}`
blocks=`echo ${i:10}`
echo -n "rdba:"$rdba" "
bin2=`dec2bin $rdba 1`
len=`expr length $bin2`
len_gd=22
len_jg=`expr $len - $len_gd`
file_no_2=`echo ${bin2:0:$len_jg}`
((file_no=2#$file_no_2))
echo -n "file_id:"$file_no" "
block_no_2=`echo ${bin2:$len_jg}`
((block_no=2#$block_no_2))
echo -n "block_id:"$block_no" "
echo "blocks:"$blocks
done;
trace文件中部分信息
----------------------------------------------------------------- 0x00400901 length: 7 0x00402e10 length: 8 0x00402e60 length: 8 0x00402e68 length: 8 0x00402ea0 length: 8 0x00402f20 length: 8 0x00402f48 length: 8 0x00403050 length: 8 0x00403180 length: 8 0x00403b38 length: 8 0x00404c48 length: 8 0x00404c78 length: 8 0x00404cf8 length: 8 0x00404da8 length: 8 0x00404db8 length: 8 0x00404de8 length: 8 0x00404e80 length: 128 0x00405900 length: 128 0x00406500 length: 128 0x00406980 length: 128 0x00407480 length: 128 0x00407500 length: 128 0x00407680 length: 128 0x00407800 length: 128 0x00407880 length: 128 0x00407a00 length: 128 0x00407a80 length: 128 0x00407c80 length: 128 …………
执行结果
[oracle@xifenfei tmp]$ ./get_extent.sh /u01/app/oracle/diag/rdbms/cdb/cdb/trace/cdb_ora_29565.trc rdba:0x00400901 file_id:1 block_id:2305 blocks:7 rdba:0x00402e10 file_id:1 block_id:11792 blocks:8 rdba:0x00402e60 file_id:1 block_id:11872 blocks:8 rdba:0x00402e68 file_id:1 block_id:11880 blocks:8 rdba:0x00402ea0 file_id:1 block_id:11936 blocks:8 rdba:0x00402f20 file_id:1 block_id:12064 blocks:8 rdba:0x00402f48 file_id:1 block_id:12104 blocks:8 rdba:0x00403050 file_id:1 block_id:12368 blocks:8 rdba:0x00403180 file_id:1 block_id:12672 blocks:8 rdba:0x00403b38 file_id:1 block_id:15160 blocks:8 rdba:0x00404c48 file_id:1 block_id:19528 blocks:8 rdba:0x00404c78 file_id:1 block_id:19576 blocks:8 rdba:0x00404cf8 file_id:1 block_id:19704 blocks:8 rdba:0x00404da8 file_id:1 block_id:19880 blocks:8 rdba:0x00404db8 file_id:1 block_id:19896 blocks:8 rdba:0x00404de8 file_id:1 block_id:19944 blocks:8 rdba:0x00404e80 file_id:1 block_id:20096 blocks:128 rdba:0x00405900 file_id:1 block_id:22784 blocks:128 rdba:0x00406500 file_id:1 block_id:25856 blocks:128 rdba:0x00406980 file_id:1 block_id:27008 blocks:128 rdba:0x00407480 file_id:1 block_id:29824 blocks:128 rdba:0x00407500 file_id:1 block_id:29952 blocks:128 rdba:0x00407680 file_id:1 block_id:30336 blocks:128 rdba:0x00407800 file_id:1 block_id:30720 blocks:128 …………
记录一次ORA-600 4000数据库故障恢复
ORA-600[4000]错误
一朋友数据库因为当前redo丢失,在恢复的过程中启动报ORA-600[4000]错误
SMON: enabling cache recovery Thu May 30 16:24:17 2013 Errors in file /u02/oracle/app/oracle/admin/xifenfei/udump/xifenfei1_ora_1458370.trc: ORA-00600: internal error code, arguments: [4000], [83], [], [], [], [], [], [] Thu May 30 16:24:19 2013 Errors in file /u02/oracle/app/oracle/admin/xifenfei/udump/xifenfei1_ora_1458370.trc: ORA-00704: bootstrap process failure ORA-00704: bootstrap process failure ORA-00600: internal error code, arguments: [4000], [83], [], [], [], [], [], [] Thu May 30 16:24:19 2013 Error 704 happened during db open, shutting down database USER: terminating instance due to error 704 Instance terminated by USER, pid = 1458370 ORA-1092 signalled during: alter database open resetlogs...
分析trace文件
*** 2013-05-30 16:24:17.979
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [4000], [83], [], [], [], [], [], []
Current SQL statement for this session:
select ctime, mtime, stime from obj$ where obj# = :1
--确定是obj$对象异常,通过某种手段找到obj$的objid和dataobjid均为16,对应16进制为12
Block header dump: 0x0040007a
Object id on Block? Y
seg/obj: 0x12 csc: 0xc1e.a329e76f itc: 1 flg: - typ: 1 - DATA
fsl: 0 fnx: 0x0 ver: 0x01
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0053.02a.000598bd 0x0d407e46.4f52.2f --U- 1 fsc 0x0000.a329e772
这里比较明显obj$对象在rdba为0040007a的block上,scn为0c1e.a329e76f(13325725984623)且未提交的事务,这样的现象就决定了处理的特殊性(不是因为块延迟清理导致访问undo现象,该现象直接推进scn解决,而该情况不行)
数据文件头scn
SQL> SELECT DISTINCT CHECKPOINT# FROM V$DATAFILE_HEADER;
CHECKPOINT_CHANGE#
-------------------------
13324676536960
bbed查看文件头scn
struct kcvfhckp, 160 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x649c9a80
ub2 kscnwrp @488 0x0c1e
这里看到的文件头scn也是为13324676536960(0c1e.649c9a80)和sql查询结果一致,也就是说数据库中的obj$的某个对象含有事务,且scn大于文件头scn(因为当前redo丢失,无法前滚,所以出现该情况),当数据库访问obj$的时候,为了事务的一致性,就需要访问undo(这里提示为83 回滚段),而undo异常,所以smon进程回滚失败,数据库无法正常启动
使用bbed提交事务
BBED> map
File: /oradata/sys/xifenfei/system01.dbf (1)
Block: 122 Dba:0x0040007a
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
struct ktbbh, 48 bytes @20
struct kdbh, 14 bytes @68
struct kdbt[1], 4 bytes @82
sb2 kdbr[108] @86
ub1 freespace[802] @302
ub1 rowdata[7084] @1104
ub4 tailchk @8188
BBED> p ktbbh
struct ktbbh, 48 bytes @20
ub1 ktbbhtyp @20 0x01 (KDDBTDATA)
union ktbbhsid, 4 bytes @24
ub4 ktbbhsg1 @24 0x00000012
ub4 ktbbhod1 @24 0x00000012
struct ktbbhcsc, 8 bytes @28
ub4 kscnbas @28 0xa329e76f
ub2 kscnwrp @32 0x0c1e
b2 ktbbhict @36 1
ub1 ktbbhflg @38 0x02 (NONE)
ub1 ktbbhfsl @39 0x00
ub4 ktbbhfnx @40 0x00000000
struct ktbbhitl[0], 24 bytes @44
struct ktbitxid, 8 bytes @44
ub2 kxidusn @44 0x0053
ub2 kxidslt @46 0x002a
ub4 kxidsqn @48 0x000598bd
struct ktbituba, 8 bytes @52
ub4 kubadba @52 0x0d407e46
ub2 kubaseq @56 0x4f52
ub1 kubarec @58 0x2f
ub2 ktbitflg @60 0x2001 (KTBFUPB)<--需要提交
union _ktbitun, 2 bytes @62
b2 _ktbitfsc @62 0
ub2 _ktbitwrp @62 0x0000
ub4 ktbitbas @64 0xa329e772
BBED> set count 32
COUNT 32
BBED> set offset 60
OFFSET 60
BBED> d
File: /oradata/sys/xifenfei/system01.dbf (1)
Block: 122 Offsets: 60 to 91 Dba:0x0040007a
------------------------------------------------------------------------
20010000 a329e772 0001006c ffff00ea 040c0368 03680000 006c1f7c 1f3c1efb
<32 bytes per line>
BBED> m /x 8001
File: /oradata/sys/xifenfei/system01.dbf (1)
Block: 122 Offsets: 60 to 91 Dba:0x0040007a
------------------------------------------------------------------------
80010000 a329e772 0001006c ffff00ea 040c0368 03680000 006c1f7c 1f3c1efb
<32 bytes per line>
BBED> sum apply
Check value for File 1, Block 122:
current = 0xafd6, required = 0xafd6
尝试open数据库ORA-600[2662]解决
Thu May 30 21:16:00 2013 Errors in file /u02/oracle/app/oracle/admin/xifenfei/bdump/xifenfei1_smon_819664.trc: ORA-00600: internal error code, arguments:[2662],[3102],[2737532996],[3102],[2745973074],[4194397],[],[] Non-fatal internal error happenned while SMON was doing non-existent object cleanup. SMON encountered 1 out of maximum 100 non-fatal internal errors. Thu May 30 21:16:01 2013 Trace dumping is performing id=[cdmp_20130530211601] Thu May 30 21:16:02 2013 Errors in file /u02/oracle/app/oracle/admin/xifenfei/bdump/xifenfei1_smon_819664.trc: ORA-00600: internal error code, arguments:[2662],[3102],[2737532997],[3102],[2745973074],[4194397],[],[] Thu May 30 21:16:03 2013 Non-fatal internal error happenned while SMON was doing logging scn->time mapping. SMON encountered 2 out of maximum 100 non-fatal internal errors. Thu May 30 21:16:05 2013 Errors in file /u02/oracle/app/oracle/admin/xifenfei/bdump/xifenfei1_smon_819664.trc: ORA-00600: internal error code, arguments:[2662],[3102],[2737532997],[3102],[2745973074],[4194397],[],[] Thu May 30 21:16:08 2013 Errors in file /u02/oracle/app/oracle/admin/xifenfei/bdump/xifenfei1_pmon_958764.trc: ORA-00474: SMON process terminated with error Thu May 30 21:16:08 2013 PMON: terminating instance due to error 474
数据库在open过程中遇到大量ORA-00600[2662],这个是因为数据库中文件头的scn小于访问的数据块scn导致该问题,解决方法推荐scn,如果数据库的scn本身就很大(和时间理论scn较接近),推进过程中可能遇到如下错误,这个时候就需要选择合适的方法/合适的值来推进scn
SQL> startup pfile=/home/oracle/pfile force ORACLE instance started. Total System Global Area 5.5835E+10 bytes Fixed Size 2177056 bytes Variable Size 3.2867E+10 bytes Database Buffers 2.2951E+10 bytes Redo Buffers 14598144 bytes Database mounted. ORA-01052: required destination LOG_ARCHIVE_DUPLEX_DEST is not specified
后面的工作因为没有redo前滚,而且该库故障时有大量事务在跑,现在无法前滚,导致大量的undo回滚段异常,index和data不一致等故障,需要做的就是屏蔽undo seg,重建undo,重建库
Viewing Information About CDBs and PDBs
在ORACLE 12C中引入了CDB和PDB的概念,实现了ORACLE数据库的可插拔,在一个CDB数据库中,有多个PDB,而每一个PDB又可以理解为一个独立的传统ORACLE 数据库,那为了能够通过一个sql查询获得整个CDB数据库的信息,ORALCE 引入了CDB_*开头的视图,该视图就是在传统的DBA_*视图基础之上增加了CON_ID,用来区分不同的PDB,从而实现了一个简单sql查询在有足够权限的情况下,可以查询所有PDB中信息
ORACLE 12C版本
SQL> select * from v$version; BANNER CON_ID -------------------------------------------------------------------------------- ---------- Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0 PL/SQL Release 12.1.0.1.0 - Production 0 CORE 12.1.0.1.0 Production 0 TNS for Linux: Version 12.1.0.1.0 - Production 0 NLSRTL Version 12.1.0.1.0 - Production 0
确定是否是CDB
SQL> SELECT CDB FROM V$DATABASE; CDB --- YES
YES表示该数据库是CDB,如果是NO表示是NO-CDB(普通数据库)
CDB中各容器信息
SQL> COLUMN NAME FORMAT A8
SQL> SELECT NAME, CON_ID, DBID, CON_UID, GUID FROM V$CONTAINERS ORDER BY CON_ID;
NAME CON_ID DBID CON_UID GUID
-------- ---------- ---------- ---------- --------------------------------
CDB$ROOT 1 1922813718 1 DB85A3D39F8E7703E0431CAAE80A8C44
PDB$SEED 2 4048821679 4048821679 D49B80694E4A449BE0430100007F906F
PDB1 3 3313918585 3313918585 D49BF37938FB4C10E0430100007F6CBD
PDB2 4 3872456618 3872456618 D49BFA33332F4C3EE0430100007FA059
SQL> select CON_NAME_TO_ID('PDB1') FROM DUAL;
CON_NAME_TO_ID('PDB1')
----------------------
3
SQL> SELECT CON_DBID_TO_ID(3313918585) FROM DUAL;
CON_DBID_TO_ID(3313918585)
--------------------------
3
SQL> SELECT CON_UID_TO_ID(3313918585) FROM DUAL;
CON_UID_TO_ID(3313918585)
-------------------------
3
PDB部分信息
SQL> COLUMN PDB_NAME FORMAT A15
SQL> SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;
PDB_ID PDB_NAME STATUS
---------- --------------- -------------
2 PDB$SEED NORMAL
3 PDB1 NORMAL
4 PDB2 NORMAL
SQL> COLUMN NAME FORMAT A15
SQL> COLUMN RESTRICTED FORMAT A10
SQL> COLUMN OPEN_TIME FORMAT A30
SQL> SELECT NAME, OPEN_MODE, RESTRICTED, OPEN_TIME FROM V$PDBS;
NAME OPEN_MODE RESTRICTED OPEN_TIME
--------------- ---------- ---------- ------------------------------
PDB$SEED READ ONLY NO 12-MAY-13 08.51.53.177 AM
PDB1 READ WRITE NO 12-MAY-13 09.35.48.646 AM
PDB2 MOUNTED 12-MAY-13 08.56.59.859 AM
CDB中查询对象信息
SQL> COLUMN PDB_NAME FORMAT A15
SQL> COLUMN OWNER FORMAT A15
SQL> COLUMN TABLE_NAME FORMAT A30
SQL> SELECT p.PDB_ID, p.PDB_NAME, t.OWNER, t.TABLE_NAME
2 FROM DBA_PDBS p, CDB_TABLES t
3 WHERE p.PDB_ID > 2
4 AND T.TABLE_NAME='COL$'
5 AND p.PDB_ID = t.CON_ID
6 ORDER BY p.PDB_ID;
PDB_ID PDB_NAME OWNER TABLE_NAME
---------- --------------- --------------- ------------------------------
3 PDB1 SYS COL$
4 PDB2 SYS COL$
查询在CDB中的PDB数据/临时文件信息
SQL> COLUMN PDB_ID FORMAT 999
SQL> COLUMN PDB_NAME FORMAT A8
SQL> COLUMN FILE_ID FORMAT 9999
SQL> COLUMN TABLESPACE_NAME FORMAT A10
SQL> COLUMN FILE_NAME FORMAT A45
SQL> SELECT p.PDB_ID, p.PDB_NAME, d.FILE_ID, d.TABLESPACE_NAME, d.FILE_NAME
2 FROM DBA_PDBS p, CDB_DATA_FILES d
3 WHERE p.PDB_ID = d.CON_ID
4 ORDER BY p.PDB_ID;
PDB_ID PDB_NAME FILE_ID TABLESPACE FILE_NAME
------ -------- ------- ---------- ---------------------------------------------
2 PDB$SEED 5 SYSTEM +DATA/pdb$seed_system01.dbf
2 PDB$SEED 7 SYSAUX +DATA/pdb$seed_sysaux01.dbf
3 PDB1 9 SYSAUX +DATA/pdb1_pdb$seed_sysaux01.dbf
3 PDB1 10 USERS +DATA/cdb/pdb1_users01.dbf
3 PDB1 8 SYSTEM +DATA/pdb1_pdb$seed_system01.dbf
4 PDB2 13 USERS +DATA/cdb/pdb2_users01.dbf
4 PDB2 12 SYSAUX +DATA/pdb2_pdb$seed_sysaux01.dbf
4 PDB2 11 SYSTEM +DATA/pdb2_pdb$seed_system01.dbf
8 rows selected.
SQL> COLUMN CON_ID FORMAT 999
SQL> COLUMN FILE_ID FORMAT 9999
SQL> COLUMN TABLESPACE_NAME FORMAT A15
SQL> COLUMN FILE_NAME FORMAT A45
SQL> SELECT CON_ID, FILE_ID, TABLESPACE_NAME, FILE_NAME
2 FROM CDB_TEMP_FILES
3 ORDER BY CON_ID;
CON_ID FILE_ID TABLESPACE_NAME FILE_NAME
------ ------- --------------- ---------------------------------------------
1 1 TEMP +DATA/cdb/temp01.dbf
2 2 TEMP +DATA/pdbseed_temp01.dbf
3 3 TEMP +DATA/pdb1_temp01.dbf
4 4 TEMP +DATA/pdb2_temp01.dbf
查询PDB的service信息
SQL> COLUMN NETWORK_NAME FORMAT A30 SQL> COLUMN PDB FORMAT A15 SQL> COLUMN CON_ID FORMAT 999 SQL> SELECT PDB, NETWORK_NAME, CON_ID FROM CDB_SERVICES 2 WHERE PDB IS NOT NULL AND 3 CON_ID > 2 4 ORDER BY PDB; PDB NETWORK_NAME CON_ID --------------- ------------------------------ ------ PDB1 pdb1 3 PDB2 pdb2 4
PDB中可以修改参数
SELECT NAME FROM V$SYSTEM_PARAMETER WHERE ISPDB_MODIFIABLE = 'TRUE' ORDER BY NAME;
查看PDB历史信息
SQL> COLUMN DB_NAME FORMAT A10 SQL> COLUMN CON_ID FORMAT 999 SQL> COLUMN PDB_NAME FORMAT A15 SQL> COLUMN OPERATION FORMAT A16 SQL> COLUMN OP_TIMESTAMP FORMAT A10 SQL> COLUMN CLONED_FROM_PDB_NAME FORMAT A15 SQL> SELECT DB_NAME, CON_ID, PDB_NAME, OPERATION, OP_TIMESTAMP, CLONED_FROM_PDB_NAME 2 FROM CDB_PDB_HISTORY 3 WHERE CON_ID > 2 4 ORDER BY CON_ID; DB_NAME CON_ID PDB_NAME OPERATION OP_TIMESTA CLONED_FROM_PDB ---------- ------ --------------- ---------------- ---------- --------------- SEEDDATA 3 PDB$SEED UNPLUG 29-APR-13 CDB 3 PDB1 CREATE 01-FEB-13 PDB$SEED CDB 3 PDB$SEED PLUG 01-FEB-13 PDB$SEED SEEDDATA 4 PDB$SEED UNPLUG 29-APR-13 CDB 4 PDB2 CREATE 01-FEB-13 PDB$SEED CDB 4 PDB$SEED PLUG 01-FEB-13 PDB$SEED 6 rows selected.
发表在 ORACLE 12C
一条评论

加我微信(17813235971)
加我QQ(107644445)

