系统崩溃了Postgres(RAID是原因),没有任何备份。
尝试使用Postgres将数据放到另一台计算机上(然后备份)。
但是当我设置数据目录并运行postgres时,我总是有消息
GET FATAL: database files are incompatible with server
2012-08-15 19:58:38 GET DETAIL: The database cluster was initialized with BLCKSZ 16777216, but the server was compiled with BLCKSZ 8192.
2012-08-15 19:58:38 GET HINT: It looks like you need to recompile or initdb.
这是非常奇怪的数字16777216(2到24的权力 - 到大)。
但是编译时我无法重置默认值8192(使用--with-blocksize =不起作用; BLCKSZ - 我在头文件中找不到它)
)。
以任何方式提取数据?
这是环境和环境:
harddrive:RAID 1,阵列中有3个SAS磁盘
操作系统:ubuntu 10.04.04 amd64
Postgres:9.1(通过apt-get(我们将存储库链接更改为更高版本的Ubuntu))
系统崩溃了 - 经过一段时间后
AAC:主机适配器BLINK LED 0x56
AACO:适配器内核恐慌56
(文件系统或硬件错误)
不知怎的,我们得到了数据目录。 pg_conroldata显示:
pg_control版本号:903
目录版本号:201105231
数据库系统标识符:5714530593695276911
数据库集群状态:关闭
pg_control最后修改时间:2012年8月15日星期二11:50:50
最新检查站位置:1B595668 / 2000020
先前检查站位置:0/0
最新检查站的REDO位置:1B595668 / 2000020
最新检查点的TimeLineID:1
最新检查点的NextXID:0/4057946
最新检查站的NextOID:40960
最新检查点的NextMultiXactId:1
最新检查点的NextMultiOffset:0
最新检查站最古老的XID:670
最新检查点的最早的XID数据库:1344846103
最新检查点的最早的ActiveXID:0
最新检查站时间:2012年8月15日星期二11:50:50
最小恢复结束位置:0/0
备份开始位置:0/0
当前wal_level设置:最小
当前max_connections设置:100
当前max_prepared_xacts设置:0
当前max_locks_per_xact设置:64
最大数据对齐:8
数据库块大小:16777216
每段大关系块:131072
WAL块尺寸:8192
每个WAL段的字节数:16777216
标识符的最大长度:64
索引中的最大列数:2387576020
TOAST块的最大尺寸:0
日期/时间类型存储:浮点数
Float4参数传递:通过引用
Float8参数传递:通过引用
首先,我努力在Ubuntu服务器中使用DB(硬盘 - 简单串行2,Ubuntu 10.04 i386,Postgres 9.1)并获得相同的异常(使用BLCKSZ)。
这就是为什么我在虚拟机中部署了Ubuntu 10.04 amd64和英文Postgres 9.1(因为在前一步中错误日志中有'?'而不是俄语符号) 得到了相同的例外(使用BLCKSZ)。
Ather已经删除了apt-get postgres版本并按照文档http://www.postgresql.org/docs/9.1/static/installation.html中的描述进行了编译。
玩configure --with-blocksize=BLOCKSIZE
没有任何效果 - 得到相同的错误
pg_contol被一些操纵打破了。
Sow,pg_resetxlog通过初始数据成功恢复了集群。
答案 0 :(得分:0)
有关配置内核资源的详细信息,请参阅here。也许这个新操作系统的默认/当前设置不允许postmaster启动。
Here详细介绍了BLCKSZ参数的含义和背景。运行64位构建的PostgreSQL失败的系统和新系统是32位构建吗?如果可能的话,尝试获取失败系统PostgreSQL的版本信息可以解决问题。让我们知道使用的版本,构建和操作系统。是自定义构建吗?
答案 1 :(得分:0)
16Mb的块大小将非常奇怪,因为这两个值看起来也完全是虚假的:
Maximum columns in an index: 2387576020 Maximum size of a TOAST chunk: 0
...您可能想在花时间编译非标准块大小的postgres之前质疑这些数据的完整性。
如果查看与关系对应的文件大小,它们是16Mb还是8Kb的倍数?
如果数据库有几千兆字节的表,那么磁盘上的截止大小(postgres将数据分成几个文件的大小)是什么?这应该等于data block size
* Blocks per segment of large relation
。在默认安装中,它是1Gb。