磁盘空间不够,DB2数据库恢复出错。

bankcoder 2006-04-11 03:46:17
4月7日15点,发现数据库服务器空间使用了100%。
这是做了两个操作:(这里做这两部时,服务都没有停掉。)
1).全备数据库,联机。db2 backup database mydb online
2).取下db2inst2/NODE0000/SQL00001/SQLOGDIR/s0000***.LOG(全部),并删除

4月10日下午15点过,数据库突然报错。
连接数据库发现:
db2 => connect to mydb
SQL1036C 当存取数据库时发生 I/O 错误。 SQLSTATE=58030

restart DB2

db2 => connect to mydb
SQL1042C 发生意外的系统错误。 SQLSTATE=58004

重启数据库后:

$ db2 restore database mydb from /tmp/dbbacktmp taken at 20060407150620
SQL2539W 警告!正在复原至与备份映像数据库相同的现有数据库。数据库文件将被删除。
想要继续吗?(y/n) y
DB20000I RESTORE DATABASE 命令成功完成。


db2 => connect to mydb
SQL1117N 由于 ROLL-FORWARD PENDING,不能连接或激活数据库 "mydb"。
SQLSTATE=57019

将之前删除的db2inst2/NODE0000/SQL00001/SQLOGDIR/s0000***.LOG全部上传。(比较奇怪,删除后系统没有自动重新生成呢?)

db2 => rollforward database mydb to 2006-04-07-15.3000
SQL1262N 为前滚数据库 "mydb" 指定的时间点无效。
db2 => rollforward database mydb to 2006-04-07-15.0620
SQL1262N 为前滚数据库 "mydb" 指定的时间点无效。

db2 => restore database mydb from /tmp/dbbacktmp without rolling forward
SQL2537N “复原”后必需前滚。

$ db2 rollforward database mydb to end of logs and complete
SQL4970N 由于在节点 "0" 上丢失了日志文件,所以数据库 "mydb"
的前滚恢复不能达到指定的停止点(日志末尾或时间点)。
$ db2 rollforward database mydb to 2006-04-01-02.1302 and stop
SQL1262N 为前滚数据库 "mydb" 指定的时间点无效。
$ db2 rollforward database mydb to 2006-04-01-02.13.02.000000 and stop
SQL1274N 数据库 "mydb" 要求前滚恢复并且时间点必须到达日志末尾。

最后不得已,重新建了一个同样的数据库。导入了之前取下的数据。

经过检查,最后一个s0000***.LOG由于没有空间,只记到了4月7日早上7点多的数据。也就是本身s0000***.LOG日志可能就是不完整的。

我现在有几个疑问,想得到大家的帮助:
1). db2inst2/NODE0000/SQL00001/SQLOGDIR/s0000***.LOG日志可以联机删除吗?是不是最后一个日志应该保留呢?
2). 我在做恢复时,没有选择without rolling forward,这时恢复后必须要前滚。前滚是更具s0000***.LOG来的吗?
3). 在我删除db2inst2/NODE0000/SQL00001/SQLOGDIR/s0000***.LOG后,系统没有重新生成LOG。这时空间是足够的,为什么呢?
4). 会不会是我的最后一个s0000***.LOG日志只到了4月7日早上7点多的数据,而我全备的时间点是下午3点多,所以会有"SQL4970N 由于在节点 "0" 上丢失了日志文件,所以数据库 "mydb"的前滚恢复不能达到指定的停止点(日志末尾或时间点)。"这个错误?
5). 我有一个全备的文件,理论上应该可以恢复的,现在我做了一次恢复,现在需要前滚,但又无法前滚,请问有什么办法通过这个全备文件恢复吗?
6). 在现在这个情况下,能让数据库不需要回滚吗?
7). 为什么删除s0000***.LOG后将近几天数据库才出错呢?
...全文
1226 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
nttn 2006-04-24
  • 打赏
  • 举报
回复
1、如果是归档日志,日志应该是在后一个,循环日志就不一定了,可以查
2、如果你的full backup的时间和日志相差太远,roll forward可能会没有日志可用
3、restart db 日志会重建
4、如果这个时间段有大的trancation日志使用较多就可能发生,如load,生成报表等
5、我认为只能without rolling forward,然后尝试在尽可能的前滚

其他的问题由于对你的生产情况不太清楚不好妄加猜测!

另外,一般生产系统log和DB data最好在不同的filesystem或者是不同的disk里,这样便于系统规划并且性能也可以更好一点
askwho 2006-04-20
  • 打赏
  • 举报
回复
给出自己的一点看法,仅供参考!
1、可以联机删除日至,但是却不一定日志已经写到了最后一个文件,日志文件在开始的时候就已经创建了,你的文件系统满应该分析一下日志的序列号,也有可能是由于其他(load)临时文件造成的。
2、联机备份需要回滚,回滚得根据当然是参考日志。
3、这个我没有试验过,也没有经历过,不能乱说。
其他的问题都是比较少见的,可能帮不了楼主大忙了,虚心向楼下的请教!

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧