AIX 上TSM備份DB2時報SQL2062N 總結

lenx2000發表於2009-12-11
AIX 上配置完成TSM API後,備份DB2時報SQL2062N錯誤
折騰了一天在高人指點下終於搞明白其原因了。
現總結如下:


$ db2 backup db TESTDB use tsm 
SQL2062N  An error occurred while accessing media 
"/db2home/db2admin/sqllib/adsm/libtsm.a".  Reason code: "138".

檢視日誌:/usr/tivoli/tsm/client/api/bin64/dsmierror.log如下

12/11/09   13:53:58 Unable to locate valid trusted communication agent.
12/11/09   13:53:58 tcaPath is >/usr/tivoli/tsm/client/api/bin64/dsmtca<. is="">
12/11/09   13:56:34 Unable to locate valid trusted communication agent.
12/11/09   13:56:34 tcaPath is >/usr/tivoli/tsm/client/api/bin64/dsmtca<. is="">
12/11/09   13:56:38 Unable to locate valid trusted communication agent.
12/11/09   13:56:38 tcaPath is >/usr/tivoli/tsm/client/api/bin64/dsmtca<. is="">
12/11/09   14:07:31 Unable to locate valid trusted communication agent.
12/11/09   14:07:31 tcaPath is >/usr/tivoli/tsm/client/ba/bin/dsmtca<. is="">

分析:SQL2062N  An error occurred while accessing media 
表示db2在做備份時,無法訪問與TSM相關的配置檔案。
主要是因為安裝配置TSM是以root執行的。
但備份時是DB2使用者執行的,往往存在如下許可權問題
1.沒有生成密碼檔案。
DB2在呼叫API與TSMserver通訊時要提交密碼,用如下方法生成密碼檔案。

以root使用者生成密碼:
cd /home/db2admin/sqllib/adsm
./dsmapipw  
密碼存放目錄:
cd /etc/security/adsm
TSM.PWD ( 此檔案需只有root可以讀)

當然有多個opt時可以指定./dsmapipw -optfile=/usr/tivoli/tsm/client/api/bin64/dsm.opt
生成密碼之前一定要設定環境變數:#TSM API
export DSMI_DIR=/usr/tivoli/tsm/client/api/bin64
export DSMI_CONFIG=/usr/tivoli/tsm/client/api/bin64/dsm.opt
export DSMI_LOG=/usr/tivoli/tsm/client/api/bin64
export PATH=$DSM_DIR:$DSMI_DIR:$PATH


2.日誌檔案許可權
DSMI_LOG變數設定的目錄及*.log檔案都要db2使用者寫許可權,
chmod 666 /usr/tivoli/tsm/client/api/bin64
chmod 666 /usr/tivoli/tsm/client/api/bin64/*.log
-rw-rw-rw-   1 root     system         5182 Dec 11 16:15 dsmsched.log (排程日誌)
-rw-rw-rw-   1 root     system         2629 Dec 11 16:15 dsmwebcl.log (web日誌)
-rw-rw-rw-   1 root     system          150 Dec 11 16:08 dsmierror.log (api錯誤日誌)


3.dsmtca程式S許可權
我今天的問題就出現這個問題上,經高人指點才得以過關。
原來db2使用者(一般為db2admin db2inst1)在備份時要去訪問root設定的TSM密碼,
但db2使用者又沒有許可權,怎麼辦呢。還記得unix系統都有個不常用的S許可權嗎。
附件中有說明。
由於之前我做過
chmod 777 /usr/tivoli/tsm/client/api/bin64/
所以/usr/tivoli/tsm/client/api/bin64/dsmtca檔案的S許可權丟了。
在dsmierror日誌中出現
12/11/09   13:56:38 tcaPath is >/usr/tivoli/tsm/client/api/bin64/dsmtca<. is="">
12/11/09   14:07:31 Unable to locate valid trusted communication agent.
這個錯誤。
解決辦法:
a.重灌TSM API (tsm在重灌過程中不會影響之前的配置,只會替換程式檔案)
b.chmod 4755 dsmsta 
ls -al
-rwsr-xr-x   1 root     system      5276923 Oct 31 2007  dsmtca



附件:檔案許可權詳解:

檔案許可權除了r、w、x外還有s、t、i、a許可權:

s:檔案屬主和組設定SUID和GUID,檔案在被設定了s許可權後將以root身份執行。
在設定s許可權時檔案屬主、屬組必須先設定相應的x許可權,否則s許可權並不能正真生效
(c h m o d命令不進行必要的完整性檢查,即使不設定x許可權就設定s許可權,
chmod也不會報錯,當我們ls -l時看到rwS,大寫S說明s許可權未生效)。
Linux修改密碼的passwd便是個設定了SUID的程式
普通使用者無讀寫/etc/shadow檔案的許可權確可以修改自己的密碼。

ls -al /usr/bin/passwd
-rwsr-xr-x 1 root root 32988 2008-12-08 17:17 /usr/bin/passwd
我們可以透過字元模式設定s許可權:chmod a+s filename,也可以使用絕對模式進行設定:
設定s u i d:將相應的許可權位之前的那一位設定為4;
設定g u i d:將相應的許可權位之前的那一位設定為2;
兩者都置位:將相應的許可權位之前的那一位設定為4+2=6。

如:chmod 4764 filename   //設定SUID
t :設定粘著位,一個檔案可讀寫的使用者並一定相讓他有刪除此檔案的許可權,
如果檔案設定了t許可權則只用屬主和root有刪除檔案的許可權,透過chmod +t filename 來設定t許可權。

i:不可修改許可權  例:chattr u+i filename 則filename檔案就不可修改,
無論任何人,如果需要修改需要先刪除i許可權,用chattr -i filename就可以了。
檢視檔案是否設定了i許可權用lsattr filename。

a:只追加許可權, 對於日誌系統很好用,這個許可權讓目標檔案只能追加,
不能刪除,而且不能透過編輯器追加。可以使用chattr +a設定追加權


# su - db2admin
$ db2 backup db RONEOLD  use tsm
SQL2062N  An error occurred while accessing media 
"/home/db2admin/sqllib/adsm/libtsm.a".  Reason code: "168".
已經配置好了幾臺。可這臺怎麼也過不去。報上面的錯,
突然想起來DB2例項是32位的.但我配置的是64們API。
暈!

$ db2 backup db CDBOLD  use tsm
SQL2062N  An error occurred while accessing media 
"/home/db2admin/sqllib/adsm/libtsm.a".  Reason code: "406"
更新DB2配置後得重啟資料庫。不然會報406
方法:
db2 force application all      #停掉應用
db2stop force
db2start

SQL2062N看來這個錯真是原因多啊!
NND每臺原因都不同。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11134849/viewspace-622179/,如需轉載,請註明出處,否則將追究法律責任。

相關文章