检测oracle数据库坏块的方法

检测oracle数据库坏块的办法:

1、使用DBV(DB File Verify)工具;

2、使用RMAN(Recovery Manager)工具;

DBV(DB File Verify)工具:

外部命令,物理介质数据结构完整性检查;

只能用于数据文件(offline或online),不支持控制文件和重做日志文件的块检查;

也可以验证备份文件(rman的copy命令备份或操作系统CP命令备份);

进入盘符,然后执行以下脚本:

D:\app\Administrator\oradata\orcl>dbv file=ZL9MTLBASE.DBF blocksize=8192;

RMAN(Recovery Manager)工具:

逻辑数据结构完整性检查;

在线使用Recovery Manager扫描坏块和备份时,需要数据库运行在归档模式(archive log),否则只能在数据库未打开(mount)的情况下进行;

RMAN>backup check logical validate datafile n ;

以上命令可以检查数据文件是否包含坏块,同时并不产生实际的备份输出。

而且当使用Recovery Manager进行实际的数据库备份时,同时也就进行了坏块检查。

直接使用RMAN的命令:backup validate check logical database;

结合V$DATABASE_BLOCK_CORRUPTION视图更方便。

1)、rman target / nocatalog

2)、RMAN> spool log to 'd:/dbbak/rmanlog.log';---指定输出rman日志文件

RMAN> run {
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
backup validate check logical database;
}; 

3)、select * from V$DATABASE_BLOCK_CORRUPTION;

4) 、--If V$DATABASE_BLOCK_CORRUPTION contains rows please run this query to find the objects that contains the corrupted blocks:

SELECT e.owner,
e.segment_type,
e.segment_name,
e.partition_name,
c.file#,
greatest(e.block_id, c.block#) corr_start_block#,
least(e.block_id + e.blocks - 1, c.block# + c.blocks - 1) corr_end_block#,
least(e.block_id + e.blocks - 1, c.block# + c.blocks - 1) -
greatest(e.block_id, c.block#) + 1 blocks_corrupted,
null description
FROM dba_extents e, v$database_block_corruption c
WHERE e.file_id = c.file#
AND e.block_id <= c.block# + c.blocks - 1
AND e.block_id + e.blocks - 1 >= c.block#
UNION
SELECT s.owner,
s.segment_type,
s.segment_name,
s.partition_name,
c.file#,
header_block corr_start_block#,
header_block corr_end_block#,
1 blocks_corrupted,
'Segment Header' description
FROM dba_segments s, v$database_block_corruption c
WHERE s.header_file = c.file#
AND s.header_block between c.block# and c.block# + c.blocks - 1
UNION
SELECT null owner,
null segment_type,
null segment_name,
null partition_name,
c.file#,
greatest(f.block_id, c.block#) corr_start_block#,
least(f.block_id + f.blocks - 1, c.block# + c.blocks - 1) corr_end_block#,
least(f.block_id + f.blocks - 1, c.block# + c.blocks - 1) -
greatest(f.block_id, c.block#) + 1 blocks_corrupted,
'Free Block' description
FROM dba_free_space f, v$database_block_corruption c
WHERE f.file_id = c.file#
AND f.block_id <= c.block# + c.blocks - 1
AND f.block_id + f.blocks - 1 >= c.block#
order by file#, corr_start_block#; 

5)、

SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents
WHERE file_id = &fileid
and &blockid between block_id AND block_id + blocks - 1;

告警日志中快速识别:

遇到坏块问题时,数据库的异常表现通常有:

报告ORA-01578错误。

报告ORA-1110错误。

报告ORA-00600错误。其中,第一个参数为2000-8000,Cache layer 2000 – 4000,Transaction layer 4000 – 6000,Data layer 6000 - 8000。

Trace文件中出现Corrupt block dba: 0x160c5958 . found。 分析对象失败。

后台进程,如DBWR,LGWR出现长时间异常等待,如LGWR wait for redo copy。

以上所述是小编给大家介绍的检测oracle数据库坏块的方法 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • oracle数据库导入导出命令使用方法

    最近做项目的时候遇到过oracle数据库导入导出,在这里我做下记录,防止自己忘记了,有什么不对或者不足的地方,欢迎广大博友拍砖,哈哈~导出命令:1)单表导出:exp 用户名/密码@服务器别名 tables=表名 file=d:\名称.dmp 复制代码 代码如下: exp jm110/jm110@120_2 tables=ajb file=d:\ajb.dmp 多张表: 复制代码 代码如下: exp jm110/jm110@120_2 tables=(ajb,jjdwb) file=d:\ajb2

  • oracle数据库tns配置方法详解

    TNS简要介绍与应用 Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器. TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC.如果通过TNS连接Oracle,那么客户端必须安装Oracle client

  • sqlserver、Mysql、Oracle三种数据库的优缺点总结

    一.sqlserver优点:易用性.适合分布式组织的可伸缩性.用于决策支持的数据仓库功能.与许多其他服务器软件紧密关联的集成性.良好的性价比等:为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势.从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要.作为一个完备的数据库和数据分析包,SQLServer为快速开发新一代企业级商业应用程序.为企业赢得核心竞争优势打开了胜利之门.作为重要的基准测试可伸缩性和速度奖的记录保持者,SQLServ

  • 登录oracle数据库时密码忘记的解决方法

    我们在通过http://localhost:1158/em进行登录oracle时,我们忘记密码时,应该怎么办? 运行sqlplus进入输入密码界面 用户名输入: connect as sysdba 密码:这边乱输就可以了 然后进行输入下面的命令: 修改密码命令 alter user system identified by 新密码; 成功后马上登陆发现登陆不了提示用户名被锁所以从新进入运行下面代码解锁 alter user myuser account unlock;

  • Linux oracle数据库自动备份自动压缩脚本代码

    复制代码 代码如下: #!#backup.sh##系统名称sysname=gzsyspath=/home/oracle/databak/$sysname/v_date=$(date '+%Y%m%d%H%M%S')logfile=$syspath/backup.$v_date.logecho backup_time>>$logfiledate '+%Y-%m-%d %H:%M:%S' >> $logfile#数据库使用情况echo "backup gznxt"&

  • 彻底删除Oracle数据库的方法

    1.关闭oracle所有的服务.可以在windows的服务管理器中关闭: 2.打开注册表:regedit 打开路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ 删除该路径下的所有以oracle开始的服务名称,这个键是标识Oracle在windows下注册的各种服务! 3.打开注册表,找到路径: HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 删除该oracle目录,该目录下注册着Oracle数据库的软件安装信

  • oracle数据库常用的99条查询语句

    1. select * from emp; 2. select empno, ename, job from emp; 3. select empno 编号, ename 姓名, job 工作 from emp; 4. select job from emp; 5. select distinct job from emp; 6. select distinct empno, job from emp;说明:因为雇员编号不重复, 所以此时证明所有的列没有重复,所以不能消除掉重复的列. 7. 查询

  • 检测oracle数据库坏块的方法

    检测oracle数据库坏块的办法: 1.使用DBV(DB File Verify)工具; 2.使用RMAN(Recovery Manager)工具; DBV(DB File Verify)工具: 外部命令,物理介质数据结构完整性检查: 只能用于数据文件(offline或online),不支持控制文件和重做日志文件的块检查: 也可以验证备份文件(rman的copy命令备份或操作系统CP命令备份): 进入盘符,然后执行以下脚本: D:\app\Administrator\oradata\orcl>d

  • oracle数据库导入TXT文件方法介绍

    客户端连接数据库导入 1. 安装有oracle客户端,配好监听. 2. 以oracle数据库app用户的表user_svc_info为例 <span style="color:#3333ff;">CREATE TABLE USER_SVC_INFO( PHONE varchar2(20) NOT NULL, SVC_ID varchar2(32) NOT NULL, P_USERNAME varchar2(100) NULL, USER_STATUS number NOT

  • Oracle数据库分页的集中方法(三种方法)

    在 做项目中用到了分页,下面说一下oracle分页的方法; 采用伪列 rownum 查询前10条记录 [sql] select * from t_user t where ROWNUM <10; 按照学生ID排名,抓取前三条记录 -- 不能对ROWNUM使用>(大于1的数值).>=(大于或等于1的数值).=(大于或等于1的数值),否则无结果 -- 所以直接用只能从1开始 -- rownum >10 没有记录,因为第一条不满足去掉的话,第二条的rownum又成了1,所以永远没有满足条

  • 修改ORACLE数据库密码有效期的方法

    修改方法 在程序运行过程中,常常会因为数据库密码过期而使程序无法正常访问.为解决这一问题,可采用如下方法: 1.查看用户的proifle是哪个,一般是default SELECT username,PROFILE FROM dba_users; 2.查看指定概要文件(如default)的密码有效期设置: SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME'; 3.

  • 在Linux系统上同时监控多个Oracle数据库表空间的方法

    一,设计背景   由于所在公司ORACLE数据库较多,传统人工监控表空间的方式较耗时,且无法记录历史表空间数据,无法判断每日表空间增长量,在没有gridcontrol/cloudcontrol软件的情况下,笔者设计如下表空间监控方案,大家也可以根据自己的实际情况对下面的方案进行修改. 二,设计思路 通过dblink将来查询到的表空间数据集中汇总到一张表里通过crontab跑定时任务从各台服务器获取表空间使用情况信息. 三,具体实施步骤   1.所在oracle数据库ip地址信息(下面为举例说明具

  • JDBC连接Oracle数据库常见问题及解决方法

    注:本文是斑竹从JDBC & Transaction版摘录广大站友的提问以及各种解答整理而来,如果您认为本文的内容已触犯了您的权益,请联系管理员进行修改. Jbuilder正确连接 oracle 9i需要注意的几个问题 oracle8以上的应该都使用classes12.jar文件作为jdbc驱动: 正确设置windows的classpath和jbuilder中的enterprise setup .configure libraries,将casses12.jar路径正确添加到上述需要设置的地方:

  • plsql 连接oracle数据库详细配置的方法步骤

    第一次用这种方式连接oracle数据库,自己百度搞了快两个小时才弄好,百度的资源也不靠谱,看了好多都不完整,搞完了报各种错误,各种连不上数据库,自己整理下资料,希望给其他的同行予以借鉴,不能保证每个人都能操作成功!毕竟有时真的得看人品了,呵呵! 第一步:先安装plsql客户端,plsql客户端是必须的,我的是同事给的plsql(英文版客户端)安装很简单(下一步下一步.......)就不做说明! 第二步:下载 oracle client我的是64位操作系附赠下载地址:https://www.jb5

  • 浅析新建Oracle数据库的三种方法

    1.通过运行Oracle Database Configuration  Assistant 创建.配置.或删除数据库(也可在命令行下输入dbca):2.用命令行的方式建立数据库3.通过运行自定义的批处理脚本(或create_ORACLE_SID.bat(create_ORACLE_SID.sql))来创建.配置.或删除数据库. 详述:1.通过运行Oracle Database Configuration Assistant 创建.配置.或删除数据库:建议不熟悉创建过程的DBA使用该方法,只需要

  • sqlplus 命令登录 Oracle数据库的多种方法

    目录 1 概述 2 三种登录方法 2.1 sqlplus / as sysdba 2.2 sqlplus username/password@ip:port/sid 2.3 sqlplus /nolog 3 备选命令 1 概述 sql*plus 通过命令行登录 Oracle 数据库有两种方法 方式1:通过 sql*plus 命令窗口(下载 Oracle 时,自带) 方式2:通过 cmd 窗口(即使忘记了密码,也可以登录) 2 三种登录方法 方式1: > sqlplus / as sysdba 方

  • ORACLE数据库日常维护知识点总结

    首先要说的是,不同版本数据库提供的系统表会有不同,你可以根据数据字典查看该版本数据库所提供的表 like this: select * from dict where table_name like '%SESSION% '; 就可以查出一些表,然后根据这些表就可以获得会话信息. 像这样就是 查询当前正在操作的会话: SELECT SID, SERIAL#, STATUS, USERNAME, SCHEMANAME, OSUSER,TERMINAL, MACHINE, PROGRAM, A.NA

随机推荐