TSM恢复时报错ANS1314E(转)

· 作者 小荷||【转载时请务必以超链接形式标明文章原始出处和作者信息】
· 永久链接:
http://www.oracleblog.org/its-my-life/deal-with-tsm-error-ans1314e/


前段时间,在进行泰国的某数据库的容灾测试,大致的步骤是先在容灾机器上恢复操作系统,包括TSM的必要文件和TSM自身的数据库,再用TSM还原相应的文件,如oracle的软件,最后再用rman直接读取带库恢复数据库。在这里把遇到的报错做一记录,以备查验。

我们的环境是数据库服务器和客户端在同一个机器上。在恢复数据库的第一步,从磁带还原控制文件的时候,发生报错了:

RMAN> run {
2> allocate channel c1 type 'sbt_tape' parms 'ENV=(TDPO_OPTFILE=/usr/tivoli/tsm/client/oracle/bin64/tdpo_tstas015_d.opt)';
3> restore controlfile FROM 'ctrl_3897_1_747929350';
4> alter database mount;
5> release channel c1;
6> }

allocated channel: c1
channel c1: sid=12 devtype=SBT_TAPE
channel c1: Data Protection for Oracle: version 5.4.1.0

Starting restore at 11-APR-11

channel c1: restoring controlfile
released channel: c1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 04/11/2011 17:30:46
ORA-19501: read error on file "ctrl_3897_1_747929350", blockno 1 (blocksize=512)
ORA-27190: skgfrd: sbtread2 returned error
ORA-19511: Error received from media manager layer, error text:
ANS1314E (RC14) File data currently unavailable on server

RMAN>

这个报错最关键的一句是最后一句:ANS1314E (RC14) File data currently unavailable on server。它是个client message,大意是需要restore的文件在备份服务器端找不到,而引起这个文件在备份服务器端找不到的原因可能是以下:
(1)数据在备份服务器上丢失
(2)备份服务器读错误
(3)对应的文件正在备份服务器上正在做reclaim操作
(4)备份服务器要求的磁带已经被标注成unavaliable了。
我们顺着在rman环境变量的配置的TDPO_OPTFILE一路找下去(注:TDPO全称是Tivoli Data Protection for Oracle)。

ENV=(TDPO_OPTFILE=/usr/tivoli/tsm/client/oracle/bin64/tdpo_tstas015_d.opt),因此我们先去找/usr/tivoli/tsm/client/oracle/bin64/tdpo_tstas015_d.opt 这个opt文件(这个opt file位于客户端)在我们这个环境中,tdpo_tstas015_d.opt这个文件其实是一个合集,类似的,你在exp的时候,写一个par file是一样的道理。
如果你把tdpo_tstas015_d.opt中的内容放在rman的ENV一样可以:

run {
2> allocate channel c1 type 'sbt_tape' parms
'ENV=(
DSMI_ORC_CONFIG=/usr/tivoli/tsm/client/oracle/bin64/dsm_tdpo_day.opt,
TDPO_FS=ORACLEDB_TSTAS015,
TDPO_NODE=tstas015_d_oracle
)';

这样也是一样效果的。

我们来看一下这个文件的内容:

[oracle@tstas020:/bustools/oracle/xxx]# cat /usr/tivoli/tsm/client/oracle/bin64/tdpo_tstas015_d.opt
***************************************************************************
* IBM Tivoli Storage Manager for Databases
* Data Protection for Oracle
*
* Sample tdpo.opt for the AIX Data Protection for Oracle 64bit
*********************************************************************

*DSMI_ORC_CONFIG /usr/tivoli/tsm/client/oracle/bin64/dsm.opt
*DSMI_LOG /home/
< oracle >

*TDPO_FS adsmorc
*TDPO_NODE
< hostname >
*TDPO_OWNER
< username >
*TDPO_PSWDPATH /usr/tivoli/tsm/client/oracle/bin64

*TDPO_DATE_FMT 1
*TDPO_NUM_FMT 1
*TDPO_TIME_FMT 1

*TDPO_MGMT_CLASS_2 mgmtclass2
*TDPO_MGMT_CLASS_3 mgmtclass3
*TDPO_MGMT_CLASS_4 mgmtclass4


DSMI_ORC_CONFIG /usr/tivoli/tsm/client/oracle/bin64/dsm_tdpo_day.opt
TDPO_FS ORACLEDB_TSTAS015
TDPO_NODE tstas015_d_oracle
[oracle@tstas020:/bustools/oracle/xxx]#

在这个文件中,有几个针对oracle的非常重要的环境变量的配置:
DSMI_ORC_CONFIG:它指向API option file(dsm.opt)的路径,(这个参数如果备份DB2就是DSMI_CONFIG了,ORC代表oracle),这个API option file中会设置相关的Servername。
DSMO_FS:它包括了TSM服务器端filespace的名字,默认的名字是/adsmorc.

在这里,我找了DSMI_ORC_CONFIG 配置文件是/usr/tivoli/tsm/client/oracle/bin64/dsm_tdpo_day.opt,它属于user option file(以opt结尾):

[oracle@tstas020:/bustools/oracle/xxx/product/9.2.0.5/network/admin]# cat /usr/tivoli/tsm/client/oracle/bin64/dsm_tdpo_day.opt
SErvername tsm_oracle_daily

我们看到了SErvername是tsm_oracle_daily。
因此,我们要继续从user option file,去找system option file。而这个file,就是dsm.sys。
大致的途径,如下图:

dsm.sys文件通过在api路径下,在我们的环境中,即/usr/tivoli/tsm/client/api/bin64中,不过我发现他不在这个目录下,但做了个软链:

[root@tstas015:/usr/tivoli/tsm/client/api/bin64]# ls -l
total 21240
-rw-r--r-- 1 root system 29 Dec 22 2008 dsm.opt
-rw-r--r-- 1 root system 782 Mar 29 2009 dsm.opt.smp
lrwxrwxrwx 1 root system 20 Aug 07 2008 dsm.sys -> ../../ba/bin/dsm.sys
-rw-r--r-- 1 root system 971 Mar 29 2009 dsm.sys.smp
-rwsr-xr-x 1 root system 5085448 Apr 22 2009 dsmtca
lrwxrwxrwx 1 root system 33 Jul 15 2009 en_US -> /usr/tivoli/tsm/client/lang/en_US
-rw-r--r-- 1 root system 5769233 Apr 22 2009 libApiTSM64.a
drwxr-xr-x 2 root system 4096 Apr 22 2009 sample

ok,我们去找/usr/tivoli/tsm/client/ba/bin/dsm.sys,并且,在TSM的dsm.sys配置文件中,我们去找对应Servername为tsm_oracle_daily节点的信息:

[root@tstas020:/usr/tivoli/tsm/client/ba/bin]# cat dsm.sys
************************************************************************
* Tivoli Storage Manager *
* *
* Sample Client System Options file for AIX and SunOS (dsm.sys.smp) *
************************************************************************

* This file contains the minimum options required to get started
* using TSM. Copy dsm.sys.smp to dsm.sys. In the dsm.sys file,
* enter the appropriate values for each option listed below and
* remove the leading asterisk (*) for each one.

* If your client node communicates with multiple TSM servers, be
* sure to add a stanza, beginning with the SERVERNAME option, for
* each additional server.

************************************************************************
SErvername tsm_daily
COMMMethod TCPip
TCPPort 1500
TCPServeraddress 10.76.48.140
TCPClientaddress 10.76.48.140
Nodename tstas015_d
Passwordaccess Generate
Schedmode prompt
TCPClientport 1501
Schedlogname /tsm/logs/dsmsched_daily.log
ERRORLOGNAME /tsm/logs/dsmerror_daily.log
Passworddir /usr/tivoli/tsm/client/ba/bin/pwd/daily
SCHEDLOGRETENTION 7 D
ERRORLOGRETENTION 7 D
HTTPPORT 1581
exclude "/busdata/rfyt/tst0/_lgi/oracle/vol1/.../*"
exclude "/busdata/rfyt/tst0/_lgi/oracle/vol2/.../*"

SErvername tsm_monthly
COMMMethod TCPip
TCPPort 1500
TCPServeraddress tstas015.tst.mycompan.com
TCPClientaddress tstas015.tst.mycompan.com
Nodename tstas015_m
Passwordaccess Generate
Schedmode prompt
TCPClientport 1502
Schedlogname /tsm/logs/dsmsched_monthly.log
ERRORLOGNAME /tsm/logs/dsmerror_monthly.log
Passworddir /usr/tivoli/tsm/client/ba/bin/pwd/monthly
SCHEDLOGRETENTION 12 D
ERRORLOGRETENTION 12 D
HTTPPORT 1582
exclude "/busdata/rfyt/tst0/_lgi/oracle/vol1/.../*"
exclude "/busdata/rfyt/tst0/_lgi/oracle/vol2/.../*"

SErvername tsm_yearly
COMMMethod TCPip
TCPPort 1500
TCPServeraddress tstas015.tst.mycompan.com
TCPClientaddress tstas015.tst.mycompan.com
Nodename tstas015_y
Passwordaccess Generate
Schedmode prompt
TCPClientport 1503
Schedlogname /tsm/logs/dsmsched_yearly.log
ERRORLOGNAME /tsm/logs/dsmerror_yearly.log
Passworddir /usr/tivoli/tsm/client/ba/bin/pwd/yearly
SCHEDLOGRETENTION 10 D
ERRORLOGRETENTION 10 D
HTTPPORT 1583


SErvername tsm_oracle_daily
COMMMethod TCPip
TCPPort 1500
TCPServeraddress tstas015.tst.mycompan.com
TCPClientaddress tstas015.tst.mycompan.com
Nodename tstas015_d_oracle
Passwordaccess Prompt
Schedmode prompted
SCHEDLOGRETENTION 7 D
ERRORLOGRETENTION 7 D
Schedlogname /tsm/logs/dsmsched_oracle_daily.log
ERRORLOGNAME /tsm/logs/dsmerror_oracle_daily.log
Passworddir /usr/tivoli/tsm/client/oracle/bin64/pwd/daily

SErvername tsm_oracle_monthly
COMMMethod TCPip
TCPPort 1500
TCPServeraddress tstas015.tst.mycompan.com
TCPClientaddress tstas015.tst.mycompan.com
Nodename tstas015_m_oracle
Passwordaccess Prompt
Schedmode prompt
TCPClientport 1502
Schedlogname /tsm/logs/dsmsched_oracle_monthly.log
ERRORLOGNAME /tsm/logs/dsmerror_oracle_monthly.log
Passworddir /usr/tivoli/tsm/client/oracle/bin64/pwd/monthly
SCHEDLOGRETENTION 12 D
ERRORLOGRETENTION 12 D

SErvername tsm_oracle_yearly
COMMMethod TCPip
TCPPort 1500
TCPServeraddress tstas015.tst.mycompan.com
TCPClientaddress tstas015.tst.mycompan.com
Nodename tstas015_y_oracle
Passwordaccess Prompt
Schedmode prompt
TCPClientport 1503
Schedlogname /tsm/logs/dsmsched_oracle_yearly.log
ERRORLOGNAME /tsm/logs/dsmerror_oracle_yearly.log
Passworddir /usr/tivoli/tsm/client/oracle/bin64/pwd/yearly
SCHEDLOGRETENTION 12 D
ERRORLOGRETENTION 12 D
[root@tstas020:/usr/tivoli/tsm/client/ba/bin]#

我们看关于日备tsm_oracle_daily的那段:
第一行SErvername 表示定义的服务器端的名称tsm_oracle_daily,
第二行 COMMMethod TCPip表示客户端和服务器端的通讯方式
第三行 TCPPort 1500表示客户端和服务器端的通讯端口
第四行 TCPServeraddress 表示服务器的hostname为tstas015.tst.mycompan.com(这个可以配置IP地址,如果配的是hostname,需要在/etc/hosts中做解析)
第五行 TCPClientaddress 表示客户端的hostname为tstas015.tst.mycompan.com(这个可以配置IP地址,如果配的是hostname,需要在/etc/hosts中做解析)
第六行 nodename表示这台客户端的节点名称tstas015_d_oracle。该配置类似于第一行,不过这个是客户端的名称,第一行是服务器端的名称。

因此,这边的第四和第五行就有点问题了,由于进行容灾测试的时候,机器是另外一个台机器(tstas020),已经不再是tstas015这台server,因此,我们要更换成tstas020的IP(因为容灾测试机,没配hosts解析)。

因此,问题已经明确,修改TCPServeraddress和TCPClientaddress为容灾机的地址,再次尝试rmanrestore,成功。

综上所述,对于TSM中从rman脚本到tsm配置的查找路径为:rman环境变量中的tdpo.opt->TSM的bin下的dsm.opt->TSM的api下dsm.sys。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/70109/viewspace-702404/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/70109/viewspace-702404/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值