数据库恢复顾问

Data Recovery Advisor的命令行选项

1. 启动 RMAN 进程并连接到目标
$ rman target=/

2. 假设发生了某个错误,希望找出原因,使用 list failure 命令:

RMAN> list failure;

如果没有错误,该命令将返回以下消息:
no failures found that match specification

如果有错误,将显示如下更具说明性的消息:
142 HIGH OPEN 15-JUL-07 One or more non-system datafiles are missing
该消息表明某些数据文件已丢失,由于这些数据文件属于 SYSTEM 以外的表空间,该表空间脱机。该错误相当严重,因此优先级设为 HIGH,每个故障都有一个故障 ID,以方便各个故障的识别和解决,例如,可以发出以下命令来了解故障 142 的详细信息:

RMAN> list failure 142 detail;

该命令将向您显示错误的确切原因

3. 向Data Recovery Advisor 寻求帮助:

RMAN> advise failure;

以上命令的响应将对错误进行详细的解释,并说明如何纠正该错误:
首先,该 Advisor 对错误进行了分析,在以上的例子中,错误很明显数据文件丢失,接下来,Advisor 建议了一个策略在该案例中,这也是相当简单的:还原和恢复文件(V$IR_MANUAL_CHECKLIST 也显示了该信息)

4. 预览修复任务将执行的操作:

RMAN> repair failure preview;

5. 发出以下命令来执行实际的修复:

RMAN> repair failure;

Do you really want to execute the above repair (enter YES or NO)?
输入YES,操作将继续执行:

如果不希望提示;而是希望继续进行并修复,没有任何提示,在RMAN 提示符下使用 repair failure noprompt 即可

RMAN> repair failure noprompt;

处理坏块

1. 安装bbed

11g安装OracleDatabase 11g中缺省的未提供BBED库文件,但是可以用10g的文件编译出来
需要先从10g中复制如下文件到相应目录然后再执行连接命令:

复制Oracle 10g库文件

cp $ORA10g_HOME/rdbms/lib/ssbbded.o $ORA11g_HOME/rdbms/lib
cp $ORA10g_HOME/rdbms/lib/sbbdpt.o $ORA11g_HOME/rdbms/lib cp $ORA10g_HOME/rdbms/mesg/bbedus.msb to $ORA11g_HOME/rdbms/mesg
cp $ORA10g_HOME/rdbms/mesg/bbedus.msg to $ORA11g_HOME/rdbms/mesg su - oracle11g
cd $ORACLE_HOME/rdbms/lib
chown oracle11g:oinstall ssbbded.o
chown oracle11g:oinstall sbbdpt.o
chmod ssbbded.o
chmod sbbdpt.o cd $ORACLE_HOME/rdbms/mesg
chown oracle11g:oinstall bbedus.msb
chown oracle11g:oinstall bbedus.msg
chmod bbedus.msb
chmod bbedus.msg

编译安装bbed

cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed

做个链接到oracle二进制命令目录里:

ln ./bbed $ORACLE_HOME/bin/bbed

2. 模拟坏块

SQL> create tablespace test01 datafile '/u02/app/oracle11g/oradata/orcl11g/test01.dbf' size 1m;
SQL> create table test(id number,name varchar2(30)) tablespace test01;
SQL> insert into test select rownum,object_name from dba_objects where rownum<10000;
SQL> insert into test select rownum,object_name from dba_objects where rownum<10000;
SQL> commit; SQL> select count(*) from test;
SQL> select segment_name,file_id,block_id from dba_extents where segment_name='TEST';

使用rman对其进行备份:

rman target /

RMAN> backup tablespace test01 format='/u01/app/oracle/backup/rmanbk/%d_%s.dbf';
RMNA> shutdown immediate

然后使用bbed工具编辑数据文件,修改里面的部分内容

查看test01.dbf的大小:

ls -l /u01/app/oracle/oradata/orcl/test01.dbf 

vi /u01/app/oracle/temptest/filelist.txt

加入以下内容:

 /u01/app/oracle/oradata/orcl/test01.dbf

vi /u01/app/oracle/temptest/par.bbd

加入以下内容:

blocksize=
listfile=/u01/app/oracle/temptest/filelist.txt
mode=edit

bbed parfile=/u01/app/oracle/temptest/par.bbd

Password:

BBED: Release 2.0.0.0.0 - Limited Production on Sat Nov 27 23:34:25 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

************* !!! For Oracle Internal Use only !!! ***************

BBED> set file 1
BBED> show
BBED> modify 1000 file 1 block 17-----------------破坏块
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
BBED> verify
BBED> quit

查看破坏结果:

SQL>startup
SQL>select count(*) from test; --error

主动的运行状况检查
在 Oracle 数据库 11g 中,RMAN 中的一个新命令VALIDATE DATABASE 检查数据库块中的物理损坏操作,如果检测到损坏,将记录到自动诊断信息库中,然后,RMAN 将生成输出:

RMAN> validate database;

vi /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_7885.trc

发现17号块发生损坏

3. 使用rman进行恢复:

RMAN> list failure;
RMAN> advise failure;
RMAN> repair failure preview;
RMAN> repair failure noprompt; sqlplus / as sysdba
SQL> select count(*) from test;

还可以验证特定的表空间,数据文件,以及数据文件中的一个块:

RMAN> validate tablespace users;
RMAN> validate datafile 1;
RMAN> validate datafile 4 block 56;

VALIDATE 命令的验证范围远远不只是数据文件,您可以验证 spfile、controlfilecopy、恢复文件快速恢复区,等等

ADR:自动诊断资料库

1. ADR目录设置:通过参数diagnostic_dest设置
如果设置了ORACLE_BASE,diagnostic_dest设置为ORACLE_BASE的值
如果没有设置ORACLE_BASE,diagnostic_dest默认设置为$ORACLE_HOME/log

SQL> show parameter diagnostic_dest;

2. ADR目录结构:

ADR_BASE/diag/product_type/product_id/instance_id

3. ADR中的子目录:

alert:包含实例的预警日志(XML格式)
cdump:包含核心文件
hm:包含Health Monitor报表
incident:包含每个意外事件的子目录,每个意外事件的子目录中还包含该意外事件的所有跟踪转出
incpkg:包含你为传到Oracle Support而创建的意外事件包
ir:包含为每个实例创建的意外事件报表
trace:存储用户会话跟踪文件

通过查询V$DIAG_INFO视图,找出所有与ADR有关的位置:

SQL> select name, value from v$diag_info;

4. 如何查看和解决ADR中的问题

可以通过命令行工具adrci和database control中的support workbench来访问ADR中的数据

adrci:通过adrci工具可以查看数据库的诊断数据,还可以把意外事件和问题信息打包成ZIP文件发送给Oracle Support,诊断数据包括跟踪和转储文件,预警日志文件以及oracle database 11g的新Health Monitor报表等数据,可以使用交互式和脚本方式使用adrci

以命令行方式使用adrci:

[root@oracle ~]# su - oracle
[oracle@oracle ~]$ adrci

输入help可以查看帮助

在命令行中执行adrci命令:
为了在命令行中执行adrci命令,可以使用参数exec,调用adrci时,必须在脚本中使用以下的语法:
adrci exec="command[;command]...."

例如,如果想要在一个命令行中使用两条adrci命令:show homes和show incident,可以使用以下的语法:

adrci exec="show homes; show incident"

例如,使用命令行功能查看告警日志:

adrci exec="set homepath diag/rdbms/orcl/orcl; set editor vi; show alert -V"

使用脚本:

adrci<<eof
  set homepath diag/rdbms/orcl/orcl
  show alert -p "message text like '%ORA-%'"
eof

设置homepath
当我们在adrci发出命令时,这些命令都将在ADR的根目录下运行,show base命令可以查看ADR的根目录的位置:

adrci> show base

如果没有明确设置homepath(根目录路径),则ADR根目录下的所有ADR主目录都是当前的,ADR命令总是在当前ADR主目录中的诊断数据上运行,因此,如果执行一条命令,如show tracefile,adrci将显示当前的每个ADR目录中的所有跟踪文件,show homes显示所有可用的ADR主目录

设置ADR主目录的路径:

adrci> set homepath diag/rdbms/orcl/orcl;
adrci> show homepath;

当有多个当前主目录的情况下执行ips命令(创建一个意外事件包)将报错,所以必须用set homepath命令设置单个ADR主目录路径,才能用ips命令创建意外事件包

查看命令列表
可以在adrci命令行上输入help命令查看可以使用那些adrci命令

查看预警日志
在11G中,预警日志文件以文本格式和XML格式的文件存储,分别在ADR的主目录下,和trace目录下,可以使用adrci命令来查看XML格式的告警日志如

adrci> show alert;

adrci将当前的日志文件的完整内容传输到/tmp目录中,可以使用-tail选项的show alert命令查看预警日志文件的20到30条消息,如

adrci> show alert -tail 100

查看告警日志中是否存在ORA-600错误:

adrci> show alert -p "MESSAGE TEXT LIKE %ORA-600%"

adrci中可以使用spool例如:

adrci> spool /u01/app/oracle/temptest/strip_alert.log
adrci> show alert
adrci> spool off

列出跟踪文件以及查看意外事件:

adrci> show tracefile
adrci> show incident
adrci> show incident -mode detail -p "incident_id=113769"

show incident命令有两个选项,分别是谓词串-p和方式-mode,可以使用谓词串来指定各字段名,可在谓词中使用的所有的字段名的列表通过describe incident来显示:

sdrci> describe incident

主动的运行状况检查

虽然数据库自动进行激活检查,但最好是定期主动运行检查器,检测至今尚未影响数据库的潜在故障激活检查只在故障影响数据库时才执行,比如说在用户试图从某个讹误数据块中检索数据时才执行激活检查,但是,如果用户没有在数据块讹误后访问它,则该讹误的数据块不会自动导致数据库的故障预警,手动检查有助于捕捉这种可能在某个繁忙时间发作,潜在地降低数据库可用性的隐蔽故障

可使用Database Control或PL/SQL程序包dbms_hm来进行手动数据库检查,此外,还可以用新的RMAN命令validate进行数据库讹误检查

1.用dbms_hm程序包进行手动检查

Oracle通过dbms_hm程序包来进行Health Monitor,使用dbms_hm程序包的run_check过程进行主动健康检查
desc dbms_hm

下面列出run_check过程的不同参数所代表的含义
check_name:数据库检查名,这是一个必需的参数,而且一定要与v$hm_check视图中的检查名匹配
run_name:这是一个可选的参数,它允许指定检查运行名
timeout:可选,可以用检查能运行的时间长度设置限制
input_params:这是一个输入参数,控制检查的运行,可查询v$hm_check_param视图查看各种类型的输入

实验:使用dbms_hm来进行数据文件完整性的检查:

(1). 使用rman对数据库进行备份:
rman target /
backup database format='/u02/backup/rmanbk/%d_%s.dbf';

(2). 删除users01.dbf:
cd $ORACLE_BASE/oradata/orcl11g
rm -rf users01.dbf

(3). 使用dbms_hm进行检测:
exec dbms_hm.run_check('DB Structure Integrity Check', 'testrun1');

Health Monitor在此数据库实例的ADR主目录中保存其所有数据库检查的报告,show hm_run命令显示ADR中登记的所有检查器运行的摘要,它们是可以从v$hm_run视图看到的相同的检查器运行,给出show hm_run命令的样例结果:
adrci> show hm_run

可使用adrci命令show report查看Health Monitor执行的一个特定检查的详细报告:
adrci> show report hm_run testrun1

所有Health Monitor报告都存储在v$hm_run视图中,使用dbms_hm程序包首先生成报告:

var v_output clob
begin
  :v_output := dbms_hm.get_run_report('testrun1');
end;
/

打印报告:

set long 100000
set pages 0
print :v_output

可以直接查询v$hm_run视图获得检查的信息:
select name, check_name, run_mode, status from v$hm_run;

2.使用Database Control进行手动检查

可以按照下面的步骤通过Database Control进行Health Monitor检查:
(1) 单击Database主页上的Advisor Central(顾问中心);
(2) 单击Checkers(检查器)转到Checkers子页;
(3) 单击你想运行的检查器;
(4) 为检查器运行输入每个参数的值;
(5) 单击Run(运行),在确认你的选择后,再次单击Run开始检查

3.用RMAN命令validate进行手动检查

在以前的Oracle数据库版本中,可以使用backup … validate命令检验备份,本质上,这条命令帮助检查数据文件中的逻辑和物理块内讹误(intrablock corruption),同时还检查数据文件是否可以被RMAN备份,这条命令并不执行实际的备份,它只是检验数据库文件,使你在用RMAN备份这些数据文件时保证具有可用的合法的备份

Oracle Database 11g有一条名为validate的新命令,它在语义上与旧的backup … validate命令具有类似的选项,但可以进行更细粒度的检验。backup … validate命令只能在数据库层面上使用,而validate命令可以在备份集、表空间、数据文件的层面上完成相同的工作,甚至可以在数据块层次上使用,甚至可以用它来检查闪回恢复区或所有恢复文件的完整性

可以使用RMAN中的Data Recovery Advisor的list failure、advise failure和repair failure命令查看故障并处理它们

实验:

rman target /
RMAN> validate database;
RMAN> list failure;
RMAN> advise failure ;
RMAN> repair failure;

OCP读书笔记(9) - 诊断数据库的更多相关文章

  1. OCP读书笔记(14) - 管理数据库性能

    搜集统计信息 1. dbms_stats gather_schema_stats 1)option:有四个选项: a.gather empty:只分析目前还没有搜集过统计信息的表 SQL> co ...

  2. OCP读书笔记(20) - 复制数据库

    没有连接到target的复制 将orcl数据库的备份复制为orcl1 一.创建orcl的备份: run{ backup database plus archivelog;} 二.复制数据库为orcl1 ...

  3. OCP读书笔记(12) - 执行闪回数据库

    闪回数据库使用的是闪回日志,闪回日志存在于闪回目录(也就是快速闪回区中)闪回日志:就是数据块修改之前的镜像,简称前像 1.查看闪回目录的位置:show parameter recovery 如果闪回目 ...

  4. OCP读书笔记(19) - 数据库空间管理

    传输表空间:将linux下的数据库中的test表空间传输到windows平台下的数据库 在传输表空间前,先确定一下源库与目标数据库字符集一致: select * from nls_database_p ...

  5. OCA读书笔记(7) - 管理数据库存储结构

    7.Managing Database Storage Structures 逻辑结构 数据库的存储结构有物理结构和逻辑结构组成的 物理结构:物理上,oracle是由一些操作系统文件组成的 SQL&g ...

  6. 《SQL Server企业级平台管理实践》读书笔记——SQL Server数据库文件分配方式

    1.文件分配方式以及文件空间检查方法 最常用的检查数据文件和表大小的命令就是:sp_spaceused 此命令有三个缺陷:1.无法直观的看出每个数据文件和日志文件的使用情况.2.这个存储过程依赖SQL ...

  7. OCA读书笔记(4) - 管理数据库实例

    Objectives: •Start and stop the Oracle database and components •Use Oracle Enterprise Manager •Acces ...

  8. OCP读书笔记(16) - 管理资源

    使用者组 创建资源用户组OLTP_GRP,将用户HR,OE加入此组: BEGIN dbms_resource_manager.clear_pending_area(); dbms_resource_m ...

  9. OCP读书笔记(15) - 管理SQL性能调优

    SQL Tuning Advisor(STA): 使用oracle提供的程序包进行sql优化 SQL> conn scott/tiger SQL), name )); SQL> inser ...

随机推荐

  1. perl $d = encode_utf8($r); $f = decode_json($d)

    [root@dr-mysql01 ~]# cat a1.pl my $url="http://192.168.32.101:3000/api/getcode?env=zj&phone ...

  2. inner join、left join、right join中where和and的作用

    inner join.left join.right join中where和and的作用 .内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括  (1)左外连接 (左边的 ...

  3. Eclipse用法和技巧十三:自动生成的TODO注释1

    使用eclipse的快捷键自动生成的代码,经常有这样的注释. 一眼看上去这个注释和一般的注释并无什么差别,不过TODO这个字符串的颜色不一样,应该有些内容.TODO是eclipse中提供的一种任务标签 ...

  4. Axure基础系列教程

     Axure rp 6.5的软件安装.汉化与注册  认识Axure的软件界面 生成网页原型的三种方法 如何关闭IE浏览器在生成原型时候的安全警告 在chrome中使用axure生成原型的问题 站点地图 ...

  5. Round Numbers

    转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1301472836 大致题意: 输入两个十进制正整数a和b,求闭区间 [a ,b] 内有多少 ...

  6. EasyUI DataGrid 中字段 formatter 格式化不起作用

    今天用 EasyUI datagrid 来做列表,要对一些数据进行格式化,推断某字段状态时,发现 formatter 格式化相应的函数不起作用. <table id="list_dat ...

  7. try catch finally的执行顺序到底是怎样的?

    首先执行try,如果有异常执行catch,无论如何都会执行finally 一个函数中肯定会执行finally中的部分. 关于一个函数的执行过程是,当有return以后,函数就会把这个数据存储在某个位置 ...

  8. Python中的继承

    继承: 面向对象程序语言的一个重要特点是继承.继承提供了在已存在类的基础上创建新类的方法.继承的子类 拥有被继承的父类的所有方法,在此基础上,子类还可以添加自己的专有方法.继承是类的强有力的特点.一些 ...

  9. 修改进程占用内存SetProcessWorkingSetSize函数(多篇相关文章值得学习)

    物理内存和虚拟内存 物理内存,在应用中,自然是顾名思义,物理上,真实的插在板子上的内存是多大就是多大了.看机器配置的时候,看的就是这个物理内存. 如果执行的程序很大或很多,就会导致物理内存消耗殆尽.为 ...

  10. Atitit.软件仪表盘(2)--vm子系统--资源占用监測

    Atitit.软件仪表盘(2)--vm子系统--资源占用监測 1.  Jvisualvm.exe 2. jprofile 3. Heap //permgen   monitor 作者::老哇的爪子At ...