李英杰
作者李英杰·2012-10-10 13:58
数据库技术专家·烁林软件

db2数据库sqldbdir目录丢失解决办法

字数 1967阅读 5736评论 4赞 1

今天一开发人员反应,说有一数据库连接不上,我试着连接,数据库报如下错误:

$ db2 connect to cbstest5
SQL1031N  The database directory cannot be found on the indicated file system.
SQLSTATE=58031

然后查看:

$ db2 list db directory

 System Database Directory

 Number of entries in the directory = 1

Database 1 entry:

 Database alias                       = CBSTEST5
 Database name                        = CBSTEST5
 Local database directory             = /cbstest5
 Database release level               = b.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =

此数据库在/cbstest5目录下,通过如下命令查看,居然报同样的错误

$ db2 list db directory on /cbstest5
SQL1031N  The database directory cannot be found on the indicated file system.
SQLSTATE=58031

看来问题出现在此目录,查看此目录下 文件发现sqldbdir目录不见了,看来只能想办法先生成此目录下的文件;

生成此目录过程:

1、UNCATALOG此数据库

$ db2 uncatalog db cbstest5

2、修改此库所在目录名为其他名称

$ mv db2inst1 db2inst1.liyj

3、在原路径创建与先前库名一样的数据库

$ db2 create database cbstest5 on /cbstest5 using CODESET gbk TERRITORY cn

4、拷贝sqldbdir目录至原来备份的路径

$ cp -r sqldbdir /cbstest5/db2inst1.liyj/*00/

5、删除新生成的库目录,然后复原先前备份的目录

$ mv db2inst1.liyj db2inst1

 

重新连接数据库成功,检查数据库表数据与结构一切正常;

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论4 条评论

itsbeginitsbegin软件开发工程师上海通联支付
2013-01-21 15:06
liyingjie99: sqllib下的东西全丢了也没关系,可以重新创建实例,编目数据库,只要数据库文件没有损坏
楼主说的是数据库的SQLDBDIR,同你理解的不一样。这种恢复方式是可行的。
weiruan85weiruan85数据库管理员ibm
2012-12-13 17:16
good
李英杰李英杰数据库技术专家烁林软件
2012-11-01 17:00
Meral: 我想sqllib下面的东西没有全部失去吧。
sqllib下的东西全丢了也没关系,可以重新创建实例,编目数据库,只要数据库文件没有损坏
MeralMeral数据库管理员GUOJI
2012-10-12 10:31
我想sqllib下面的东西没有全部失去吧。
Ctrl+Enter 发表

作者其他文章

X社区推广