ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
更多
查看: 5512|回复: 3

Rman操作简单分析 [复制链接]

版主

版主

精华贴数
32
技术积分
53884
社区积分
6677
注册时间
2001-12-18
论坛徽章:
48
2007年度最佳版主
日期:2008-04-03 16:46:152011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:42:48现任管理团队成员
日期:2011-05-07 01:45:08双黄蛋
日期:2011-06-15 17:03:342012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52ITPUB技术丛书作者
日期:2010-09-26 15:24:56
发表于 2004-7-21 11:36:56 |显示全部楼层
在我的上一篇文章中为大家演示了rman 备份恢复的一个特定例子。(参考:http://www.dbanotes.net/Oracle/R ... ntrolfile_howto.htm)

rman 对dbms_backup.restore 的一些特定调用完全可以通过 debug 分析出来。

通过设置debug 模式,我们可以跟踪到大量的Log,从而为分析提供一定的说明。假定我们提交如下的命令:

rman target / debug trace=d:/rman_trace.log

通过查看日志我们得之,rman 首先确定数据库状态:

DBGSQL: EXEC SQL AT TARGET select decode(status,'OPEN',1,0) into :b1  from v$instance
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = 1

判断数据库是否是在open 状态下。然后,要去获取数据库的compatible参数值。
接下来调用dbms_backup_restore确定rman 可用的版本信息。对应的一些参数如下:

protocol_version_number_min NUMBER := 8;
  protocol_release_number_min NUMBER := 0;
  protocol_update_number_min  NUMBER := 4;

  protocol_version_number_max NUMBER := 9;
  protocol_release_number_max NUMBER := 2;
  protocol_update_number_max  NUMBER := 0;

804-920 ,这个范围内可用,804 ? 920 ? 是不是很熟悉?

下面调用dbms_rcvman的getPackageVersion 函数
($ORACLE_HOME/rdbms/admin/recover.bsq创建dbms_rcvman ,并可以获得相关注释)获取package 的版本可用信息。

08.00.04到09.02.00

接下来rman 会查询V$database ,从中获取name ,resetlogs_time ,resetlogs_change# ,dbid 等信息。


下面这个比较重要, x$kcccp( Kernel Cache Checkpoint Progress)中获取检查点记录:

类似如下的SQL:
select nvl(max(cpmid),0) from x$kcccp where cpsta=2

这些操作完成后,rman 从v$option 中获取相关信息,包括:'Parallel backup and recovery','Incremental backup and

recovery','Duplexed backups','Block Media Recovery','Point-in-time tablespace recovery',通过这些来判断数据库是否具有这些

功能。

然后Log中显示连接到目标数据库。

分析过程并不复杂,不过在涉及到深入的命令的时候会产生大量的Log,要有一定的耐心才能继续下去。在rman 出现故障的时候,
设置Debug模式进行分析是一种非常有效的办法。如果可能得话,以后的文章中我会举几个例子来说明。



参考信息

dbmsbkrs.sql 和 prvtbkrs.plb 文件说明注释(可在你的系统 $ORACLE_HOME/rdbms/admin/中找到.)

《Oracle 9i RMAN备份与恢复技术》 清华出版社  2.12节 从开始到结束的rman进程 p41

Steve Adams's Q+A http://www.ixora.com.au/q+a/0102/06135327.htm

版主

版主

精华贴数
32
技术积分
53884
社区积分
6677
注册时间
2001-12-18
论坛徽章:
48
2007年度最佳版主
日期:2008-04-03 16:46:152011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:42:48现任管理团队成员
日期:2011-05-07 01:45:08双黄蛋
日期:2011-06-15 17:03:342012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52ITPUB技术丛书作者
日期:2010-09-26 15:24:56
发表于 2004-7-21 11:41:18 |显示全部楼层

数据库版本信息& 原始Log文件

[PHP]Recovery Manager: Release 9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

Windows 2000 Version 5.1 Service Pack 2, v.2149, CPU type 586
Starting with debugging set to level=9, types=ALL


DBGSQL: EXEC SQL AT TARGET select decode(status,'OPEN',1,0) into :b1  from v$instance
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = 1

DBGSQL: EXEC SQL AT TARGET select value into :b1:b2  from v$parameter where name='compatible'
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = "9.2.0.0.0"

DBGSQL: EXEC SQL AT TARGET declare dot1st number ; dot2nd number ; dot3rd number ; begin dot1st := instr ( :vcomp_txt , '.' , 1 , 1 ) ; dot2nd := instr ( :vcomp_txt , '.' , 1 , 2 ) ; if instr ( :vcomp_txt , '.' , 1 , 3 ) = 0 then dot3rd := length ( :vcomp_txt ) + 1 ; else dot3rd := instr ( :vcomp_txt , '.' , 1 , 3 ) ; end if ; :vcomp_txt := lpad ( substr ( :vcomp_txt , 1 , dot1st -1 ) , 2 , '0' ) || lpad ( substr ( :vcomp_txt , dot1st + 1 , dot2nd -dot1st -1 ) , 2 , '0' ) || lpad ( substr ( :vcomp_txt , dot2nd + 1 , dot3rd -dot2nd -1 ) , 2 , '0' ) ; :vcomp_ub4 := to_number ( :vcomp_txt ) ; end ;
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = "090200"
DBGSQL:       :b2 = 90200
DBGMISC: krmkpdbs(): vcomp_txt:090200 vcomp_ub4:90200 flags:1

DBGSQL: EXEC SQL AT TARGET begin :vsn_min := dbms_backup_restore . protocol_version_number_min ; :rel_min := dbms_backup_restore . protocol_release_number_min ; :upd_min := dbms_backup_restore . protocol_update_number_min ; :vsn_max := dbms_backup_restore . protocol_version_number_max ; :rel_max := dbms_backup_restore . protocol_release_number_max ; :upd_max := dbms_backup_restore . protocol_update_number_max ; kg_vsn := to_char ( :vsn_max , 'fm00' ) || '.' || to_char ( :rel_max , 'fm00' ) || '.' || to_char ( :upd_max , 'fm00' ) ; end ;
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = 8
DBGSQL:       :b2 = 0
DBGSQL:       :b3 = 4
DBGSQL:       :b4 = 9
DBGSQL:       :b5 = 2
DBGSQL:       :b6 = 0
DBGSQL:       :b7 = "09.02.00"

DBGSQL: EXEC SQL AT TARGET declare vsn varchar2 ( 20 ) ; begin vsn := dbms_rcvman . getPackageVersion ; kg_vsnkg_vsn_i := vsn ; if vsn is not null then kg_vsnub4 := to_number ( substr ( vsn , 1 , 2 ) || substr ( vsn , 4 , 2 ) || substr ( vsn , 7 , 2 ) ) ; end if ; end ;
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = "08.00.04"
DBGSQL:       :b3 = 80004

DBGSQL: EXEC SQL AT TARGET declare vsn varchar2 ( 20 ) ; begin vsn := dbms_rcvman . getPackageVersion ; kg_vsnkg_vsn_i := vsn ; if vsn is not null then kg_vsnub4 := to_number ( substr ( vsn , 1 , 2 ) || substr ( vsn , 4 , 2 ) || substr ( vsn , 7 , 2 ) ) ; end if ; end ;
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = "08.00.05"
DBGSQL:       :b3 = 80005

DBGSQL: EXEC SQL AT TARGET declare vsn varchar2 ( 20 ) ; begin vsn := dbms_rcvman . getPackageVersion ; kg_vsnkg_vsn_i := vsn ; if vsn is not null then kg_vsnub4 := to_number ( substr ( vsn , 1 , 2 ) || substr ( vsn , 4 , 2 ) || substr ( vsn , 7 , 2 ) ) ; end if ; end ;
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = "08.01.03"
DBGSQL:       :b3 = 80103

DBGSQL: EXEC SQL AT TARGET declare vsn varchar2 ( 20 ) ; begin vsn := dbms_rcvman . getPackageVersion ; kg_vsnkg_vsn_i := vsn ; if vsn is not null then kg_vsnub4 := to_number ( substr ( vsn , 1 , 2 ) || substr ( vsn , 4 , 2 ) || substr ( vsn , 7 , 2 ) ) ; end if ; end ;
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = "08.01.05"
DBGSQL:       :b3 = 80105

DBGSQL: EXEC SQL AT TARGET declare vsn varchar2 ( 20 ) ; begin vsn := dbms_rcvman . getPackageVersion ; kg_vsnkg_vsn_i := vsn ; if vsn is not null then kg_vsnub4 := to_number ( substr ( vsn , 1 , 2 ) || substr ( vsn , 4 , 2 ) || substr ( vsn , 7 , 2 ) ) ; end if ; end ;
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = "08.01.06"
DBGSQL:       :b3 = 80106

DBGSQL: EXEC SQL AT TARGET declare vsn varchar2 ( 20 ) ; begin vsn := dbms_rcvman . getPackageVersion ; kg_vsnkg_vsn_i := vsn ; if vsn is not null then kg_vsnub4 := to_number ( substr ( vsn , 1 , 2 ) || substr ( vsn , 4 , 2 ) || substr ( vsn , 7 , 2 ) ) ; end if ; end ;
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = "08.01.07"
DBGSQL:       :b3 = 80107

DBGSQL: EXEC SQL AT TARGET declare vsn varchar2 ( 20 ) ; begin vsn := dbms_rcvman . getPackageVersion ; kg_vsnkg_vsn_i := vsn ; if vsn is not null then kg_vsnub4 := to_number ( substr ( vsn , 1 , 2 ) || substr ( vsn , 4 , 2 ) || substr ( vsn , 7 , 2 ) ) ; end if ; end ;
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = "09.00.00"
DBGSQL:       :b3 = 90000

DBGSQL: EXEC SQL AT TARGET declare vsn varchar2 ( 20 ) ; begin vsn := dbms_rcvman . getPackageVersion ; kg_vsnkg_vsn_i := vsn ; if vsn is not null then kg_vsnub4 := to_number ( substr ( vsn , 1 , 2 ) || substr ( vsn , 4 , 2 ) || substr ( vsn , 7 , 2 ) ) ; end if ; end ;
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = "09.02.00"
DBGSQL:       :b3 = 90200

DBGSQL: EXEC SQL AT TARGET declare vsn varchar2 ( 20 ) ; begin vsn := dbms_rcvman . getPackageVersion ; kg_vsnkg_vsn_i := vsn ; if vsn is not null then kg_vsnub4 := to_number ( substr ( vsn , 1 , 2 ) || substr ( vsn , 4 , 2 ) || substr ( vsn , 7 , 2 ) ) ; end if ; end ;
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = NULL
DBGSQL:       :b3 = 90200

DBGSQL: EXEC SQL AT TARGET begin dbms_output . enable ( 1000000 ) ; dbms_rcvman . setDebugOn ; end ;
DBGSQL:    sqlcode=0

DBGSQL: EXEC SQL AT TARGET select name ,resetlogs_time ,resetlogs_change# ,dbid ,rpad(name,8,'x') into :b1:b2,:b3,:b4,:b5:b6,:b7  from v$database
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = "DEMO"
DBGSQL:       :b3 = "19-JUL-04"
DBGSQL:       :b4 = 264188
DBGSQL:       :b5 = -1022591970
DBGSQL:       :b7 = "DEMOxxxx"

DBGSQL: EXEC SQL AT TARGET select nvl(max(cpmid),0) into :b1  from x$kcccp where cpsta=2
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = -1018768655

DBGSQL: EXEC SQL AT TARGET select decode(value,'TRUE',1,0) into :b1  from v$option where parameter='Parallel backup and recovery'
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = 1

DBGSQL: EXEC SQL AT TARGET select decode(value,'TRUE',1,0) into :b1  from v$option where parameter='Incremental backup and recovery'
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = 1

DBGSQL: EXEC SQL AT TARGET select decode(value,'TRUE',1,0) into :b1  from v$option where parameter='Duplexed backups'
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = 1

DBGSQL: EXEC SQL AT TARGET select decode(value,'TRUE',1,0) into :b1  from v$option where parameter='Block Media Recovery'
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = 1

DBGSQL: EXEC SQL AT TARGET select decode(value,'TRUE',1,0) into :b1  from v$option where parameter='Point-in-time tablespace recovery'
DBGSQL:    sqlcode=0
DBGSQL:       :b1 = 1
connected to target database: DEMO (DBID=3272375326)[/PHP]

使用道具 举报

注册会员

宁静致远

精华贴数
0
技术积分
757
社区积分
99
注册时间
2004-3-8
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2007-10-11 17:52:042010新春纪念徽章
日期:2010-03-01 11:08:37
发表于 2004-9-11 23:30:02 |显示全部楼层
Oracle 9i RMAN备份与恢复技术

你有电子版的吗?

使用道具 举报

版主

版主

精华贴数
13
技术积分
64021
社区积分
4256
注册时间
2002-2-20
论坛徽章:
154
ITPUB元老
日期:2005-02-28 12:57:002010新春纪念徽章
日期:2010-03-01 11:06:28设计板块每日发贴之星
日期:2010-03-05 01:01:042010年世界杯参赛球队:科特迪瓦
日期:2010-06-17 10:26:542010年世界杯参赛球队:日本
日期:2010-06-17 17:27:47ITPUB技术丛书作者
日期:2010-09-26 15:24:562011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:08
发表于 2004-9-12 00:13:37 |显示全部楼层
最初由 wxhfriend 发布
[B]Oracle 9i RMAN备份与恢复技术

你有电子版的吗? [/B]


参考oracle文档
rman用户指南

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部