NBU在备份一台AIX服务器上的DB2数据库时,报6号错误。
报错截图:
在AIX服务器上运行备份脚本,具体报错信息如下:
Executing: db2 BACKUP DATABASE BJMOA4 ONLINE LOAD /usr/openv/netbackup/bin/nbdb2.sl64 OPEN 4 SESSIONS BUFFER 1024
SQL2071N An error occurred while accessing the shared library
"/usr/openv/netbackup/bin/nbdb2.sl64". Reason code: "2".
一、分析检查
1、检查SQL2071N
$ db2 ? SQL2071N
SQL2071N An error occurred while accessing the shared library
"<shr-lib-name>". Reason code: "<reason-code>"
Explanation:
An unexpected error occurred while accessing a vendor shared
library during the processing of a database utility. The
following is a list of reason codes:
1 An invalid shared library path was encountered.
2 An attempt to load the backup shared library failed.
3 An error was encountered while unloading the shared library.
The utility stops processing.
User Response:
Ensure the shared library provided is valid and resubmit the
utility command or use another supported media.
2、分析共享库的载入
# ldd /usr/openv/netbackup/bin/nbdb2.sl64
/usr/openv/netbackup/bin/nbdb2.sl64 needs:
/usr/openv/lib/libxbsa64.so
/usr/openv/lib/libVcvcomb64_noul.so
/usr/lib/libc.a(shr_64.o)
/usr/lib/libdl.a(shr_64.o)
/unix
/usr/lib/libcrypt.a(shr_64.o)
使用LDD命令可显示所依赖的动态连接库的尽可能的详细信息
根据提示去检查列出的文件是否都存在,如果不存在可以从其他正常可备份的机器上拷贝。
3、分析CODE 2
#cat /usr/include/sys/errno.h
#define EPERM 1 /* Operation not permitted */
#define ENOENT 2 /* No such file or directory */
#define ESRCH 3 /* No such process */
#define EINTR 4 /* interrupted system call */
#define EIO 5 /* I/O error */
#define ENXIO 6 /* No such device or address */
#define E2BIG 7 /* Arg list too long */
#define ENOEXEC 8 /* Exec format error */
#define EBADF 9 /* Bad file descriptor */
#define ECHILD 10 /* No child processes */
#define EAGAIN 11 /* Resource temporarily unavailable */
#define ENOMEM 12 /* Not enough space */
#define EACCES 13 /* Permission denied */
#define EFAULT 14 /* Bad address */
#define ENOTBLK 15 /* Block device required */
根据提示,可推断没有找到相关文件或路径不正确
4、分析DB2diag.log文件
DATA #3 : String, 265 bytes
0509-022 Cannot load module /usr/openv/netbackup/bin/nbdb2.sl64(shr.o).
0509-153 File /usr/openv/netbackup/bin/nbdb2.sl64 is not an archive or
the file could not be read properly.
FUNCTION: DB2 UDB, database utilities, sqlubcka, probe:140
MESSAGE : Backup Terminated.
根据以上的分析,可确知归档目录读取不正确
5、检查当前数据库是否开启归档
$ db2 get db cfg for bjtt4|grep -i log
Log retain for recovery enabled (LOGRETAIN) = RECOVERY
User exit for logging enabled (USEREXIT) = OFF
HADR log write synchronization mode (HADR_SYNCMODE) = NEARSYNC
First log archive method (LOGARCHMETH1) = LOGRETAIN
发现设置了归档,但归档目录没指定
二、解决问题
First log archive method (LOGARCHMETH1) =DISK:/archivelog/db2log/
这个参数修改后,需要重启数据库才能生效。
重启后,发现问题已解决,可以重新正常备份了。
另外如果你是在做数据库恢复时,遇到这样的问题
例如:RESTORE DATABASE EPD FROM /db2 TAKEN AT 20130525112121 TO /db2/EPP INTO EPP NEWLOGPATH /db2/EPP/log_dir/ WITH 2
BUFFERS BUFFER 1024 REDIRECT
SQL2529W Warning! Restoring to an existing database that is different from the backup image database, and the alias name "EPP" of the existing database does not match the alias name "EPD" of the backup image, and the database name "EPP" of the existing database does not match the database name "EPD" of the backup image. The target database will be overwritten by the backup version. The Roll-forward recovery logs associated with the target database will be deleted.
Do you want to continue ? (y/n) y
SQL2071N An error occurred while accessing the shared library
"/db2/EPP/db2EPP/NODE0000/SQL00001/libdb2compr.a". Reason code: "2".
可以在恢复脚本上增加以下参数即可:
COMPRLIB /db2/db2EPP/sqllib/lib/libdb2compr.a
补充:
SQL2071N An error occurred while accessing the shared library
"/usr/openv/netbackup/bin/nbdb2.sl64". Reason code: "2".
这个问题的另外一种原因就是你的服务器如果装的是32位的NBU客户端,则不能使用nbdb2.sl64这个文件,而应该在脚本中指明使用nbdb2.sl这个32位的文件。这个问题跟你的服务器是64位的无关。
(# Change MY_LIB to the correct NetBackup library name for your host:
# Solaris or Linux 32-bit = nbdb2.so
# Solaris 64-bit = nbdb2.so64
# AIX or HPUX 32-bit = nbdb2.sl
# AIX or HPUX 64-bit = nbdb2.sl64)
本文出自 “滴水穿石孙杰” 博客,谢绝转载!