1. 背景
一个朋友找我,说他的一个老朋友的一个PostgreSQL数据库的服务器被勒索病毒攻击了,后续找解密公司把数据解密了,但是连接这个数据库实例中的某个重要的数据库,报错误:
“could not open critical system index 2662”。
2. 分析和修复过程
开始时以为是pg_class的索引pg_class_oid_index损坏。
这个数据库在windows下。开始尝试psql用参数ignore-system-indexes=on连接上去,发现不行。然后想是不是用单用户模式下以参数ignore-system-indexes=on下,看是否可以连接到这个坏的数据库上。windows server由于是管理员登陆的机器,管理员是无法运行单用户模式的,需要一个普通用户。于是在windows中建了一个普通用户,然后使用runas /user:machine/newuser cmd.exe
开一个普通用户的窗口,然后再用postgres.exe --single xxxx
运行发现还是不行。
这时想到了是不是文件损坏太严重了,于是用ultraedit打开了这个数据库的1259文件,发现全是零。看来pg_class表的内容完全丢失了。
于是和朋友商量,问他们需要恢复的表有几张,是否有这几张表的表结构的ddl语句,他们说有。于是我们在这个实例的另一个database建立一个相同表结构的表。然后让朋友到那个坏掉的数据目录下去看,看哪个文件是我们要恢复的表(根据大小),然后覆盖掉我们新建的表的数据文件,然后再查一下,看是否可以查,如果可以不能查,说明不是这个数据文件,然后再试下一个文件。运气不错,试过第二个文件后,数据就查出来了。 至此恢复的主要工作就完成了。
本站文章,未经作者同意,请勿转载,如需转载,请邮件customer@csudata.com.
0 评论
添加一条新评论