oracle如何查询坏块,oracle 逻辑坏块
oracle 表空间磁盘逻辑坏块怎么处理?
有2种通用的办法:
成都创新互联公司是一家专业提供孝感企业网站建设,专注与做网站、网站设计、H5页面制作、小程序制作等业务。10年已为孝感众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
1 blockrecover
2 dbms_repair
注意:第二种办法会丢弃坏块中的所有数据。
所以事先确定逻辑坏块中是否有数据,数据是否有备份。
ORACLE使用dbv工具检验数据文件是否有坏块
dbv工具可以用来验证数据文件的有效性,在数据库恢复之前可以使用该命令对备份文件进行有效性检查,
防止因备份文件本身的问题导致数据库无法恢复。
当然,dbv命令也可以对在线的数据文件进行检查。
注意,dbv工具只可以对数据文件进行检查,无法使用它完成控制文件和日志文件的检查。
1.dbv命令语法
dbverify ::=
dbv [ USERID=username/password ]
FILE = filename
| { START = block_address | END = block_address }
| BLOCKSIZE = integer
| HIGH_SCN = integer
| LOGFILE = filename
| FEEDBACK = integer
| HELP = { Y | N }
| PARFILE = filename
End of description.
参考自Oracle官方文档
2.查看帮助文档
从语法定义中我们看到“HELP = { Y | N }”选项,我们可以使用它查看dbv的帮助信息。
ticket@secDB /home/oracle$ dbv help=y
DBVERIFY: Release 11.2.0.1.0 - Production on Wed Mar 31 19:47:36 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Keyword Description (Default)
----------------------------------------------------
FILE File to Verify (NONE)
START Start Block (First Block of File)
END End Block (Last Block of File)
BLOCKSIZE Logical Block Size (8192)
LOGFILE Output Log (NONE)
FEEDBACK Display Progress (0)
PARFILE Parameter File (NONE)
USERID Username/Password (NONE)
SEGMENT_ID Segment ID (tsn.relfile.block) (NONE)
HIGH_SCN Highest Block SCN To Verify (NONE)
(scn_wrap.scn_base OR scn)
帮助信息中描述了dbv命令的使用方法,不赘述。
3.体验dbv工具的效果
1)查看系统中的数据文件名称
sys@ticket col name for a60
sys@ticket select name from v$datafile;
NAME
------------------------------------------------------------
/oracle/ora11gR2/oradata/ticket/system01.dbf
/oracle/ora11gR2/oradata/ticket/sysaux01.dbf
/oracle/ora11gR2/oradata/ticket/undotbs01.dbf
/oracle/ora11gR2/oradata/ticket/users01.dbf
2)使用dbv工具对users01.dbf进行检查
(1)使用最简单的参数
sys@ticket !dbv file=/oracle/ora11gR2/oradata/ticket/users01.dbf
DBVERIFY: Release 11.2.0.1.0 - Production on Wed Mar 31 19:50:59 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : FILE = /oracle/ora11gR2/oradata/ticket/users01.dbf
DBVERIFY - Verification complete
Total Pages Examined : 35520
Total Pages Processed (Data) : 33029
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 20
Total Pages Failing (Index): 0
Total Pages Processed (Other): 402
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 2069
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 9291961 (0.9291961)
在实际使用中重点关注以下信息:
Total Pages Failing (Data) : 0
Total Pages Failing (Index): 0
Total Pages Failing (Seg) : 0
Total Pages Marked Corrupt : 0
如果以上信息返回结果不为0,需要重点关注!及时排查原因。
(2)如果指定logfile参数,检查结果将只记录在日志文件中,屏幕上不显示
sys@ticket !dbv file=/oracle/ora11gR2/oradata/ticket/users01.dbf logfile=dbv_users01.log
DBVERIFY: Release 11.2.0.1.0 - Production on Wed Mar 31 19:52:20 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
此时可以使用SQL*Plus的edit命令查看生成的日志文件内容。
sys@ticket ed dbv_users01.log
oracle 物理坏块 怎么不trace
如果数据库是归档方式下,并且有完整的物理备份,就可以使用此方法来恢复。
步骤如下:
1) 先offline受影响的数据文件,执行以下的语句:
ALTER DATABASE DATAFILE 'name_file' OFFLINE;
2) 保留有坏块的数据文件,然后拷贝备份的数据文件。如果恢复的数据文件要求路径不同,执行以下的语句:
ALTER DATABASE RENAME FILE 'old_name' TO 'new_name';
3) 恢复数据文件,执行以下语句:
RECOVER DATAFILE 'name_of_file';
4) Online恢复后的数据文件,执行以下的语句:
ALTER DATABASE DATAFILE 'name_of_file' ONLINE;
Ø 只恢复坏的block(9i以上版本可用)
使用这种方法要求数据库版本是9.2.0以上,要求配置了Rman的catalog数据库,数据库为归档方式,并且有完整的物理备份。
步骤如下:
使用RMAN的BLOCKRECOVER命令 :
Rmanrun{blockrecover datafile 5 block 11,16;}
也可以强制使用某个SCN号之前的备份,恢复数据块。
Rmanrun{blockrecover datafile 5 block 11,16 restore until sequence 8505;}
Ø 通过ROWID RANGE SCAN 保存数据
1) 先取得坏块中ROW ID的最小值,执行以下的语句:
SELECT dbms_rowid.rowid_create(1,OBJ_ID,RFN,BL,0) from DUAL;
2)取得坏块中的ROW ID的最大值,执行以下的语句:
SELECT dbms_rowid.rowid_create(1,OBJ_ID,RFN,BL+1,0) from DUAL;
3)建议一个临时表存储那些没有坏块的数据,执行以下的语句:
CREATE TABLE salvage_table AS SELECT * FROM corrupt_tab Where 1=2;
4)保存那些不存在坏块的数据到临时表中,执行以下的语句:
INSERT INTO salvage_table SELECT /*+ ROWID(A) */ * FROM owner.tablename A WHERE rowid 'low_rid';
INSERT INTO salvage_table SELECT /*+ ROWID(A) */ * FROM owner.tablename A WHERE rowid = 'hi_rid‘;
5) 根据临时表中的数据重建表,重建表上的索引,限制。
Ø 使用10231诊断事件,在做全表扫描的时候跳过坏块
可以在session级别设定:
ALTER SESSION SET EVENTS '10231 TRACE NAME CONTEXT FOREVER, LEVEL 10';
也可以在数据库级别上设定,在初始化参数中加入:event="10231 trace name context forever, level 10" ,然后重启数据库。
然后从存在坏块的表中取出不存在坏块的数据,执行以下的语句:
CREATE TABLE salvage_emp AS SELECT * FROM corrupt_table;
最后rename生成的corrupt_table为原来表的名字,并重建表上的索引和限制。
Ø 使用dbms_repair包进行恢复
使用dbms_repair标记有坏块的表,在做全表扫描的时候跳过坏块,执行以下的语句:
Execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('schema','tablename');
然后使用exp工具或者createtable as select的方法取出没有坏块数据,然后重建表,表上的索引和限制。
如何使用rman 检查oracle数据库坏块
如何使用rman 检查oracle数据库坏块
oracle检测坏块的方式:
1、利用oracle的RMAN工具
2、利用dbv工具检测
3、利用 exp/imp工具检测
Oracle 数据库中的出现坏块问题,该如何处理
oracle数据库的坏块问题是个让人比较头痛的问题,主要分为逻辑坏块和物理坏块,逻辑坏块就是数据文件里的逻辑关系出现的混乱,这一般是由于数据库的BUG导致的。物理坏块就是数据文件中的数据不存在任何意义,没有任何逻辑和结构,造成物理坏块多因为服务器IO系统故障导致的。
标题名称:oracle如何查询坏块,oracle 逻辑坏块
链接URL:http://azwzsj.com/article/dsepcoj.html