TSM恢复时报错ANS1314E

来源:互联网 发布:一搜同志个人网络东北 编辑:程序博客网 时间:2024/05/16 23:39

前段时间,在进行泰国的某数据库的容灾测试,大致的步骤是先在容灾机器上恢复操作系统,包括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。

原文地址:http://www.oracleblog.org/its-my-life/deal-with-tsm-error-ans1314e/

 

原创粉丝点击