database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 10460 게시물 읽기
No. 10460
invalid page in block~ 오류 관련 문의 드립니다
작성자
ilyam(ilyam)
작성일
2024-02-14 14:59
조회수
216

 

안녕하세요.

invalid page in block~ 오류 관련해서 문의 드립니다.


현상

 - 특정 테이블 조회 시 invalid page in block xxxx of relation base/~ 오류 발생


대응

 1) 아래 쿼리 실행 후, 조회되는 pk 와 인덱스에 대해 reindex index 'pk명'/'인덱스명' 진행

SELECT pg_class.relfilenode, pg_namespace.nspname as schema_name, pg_class.relname, pg_class.relkind 

FROM pg_class

JOIN pg_namespace on pg_class.relnamespace = pg_namespace.oid

WHERE pg_class.relfilenode = 361204


1)번 진행 후, 정상적으로 진행되는 경우도 있으나 문제되는 내역이 테이블인 경우에는 

  - 해당 테이블에 존재하는 pk, index 에 대해 reindex index >> 오류 발생

  - vacuum full 테이블 >> 오류 발생

위 작업을 진행해도 invalid page in block~ 오류가 계속해서 발생합니다.


2) 

테이블에서 발생한 경우에는 SET zero_damaged_pages = on; 설정 후 vacuum full 테이블 진행

하면 다음과 같은 경고메세지가 뜬 후 vacuum 완료되며, 데이터도 조회가 됩니다.

"warinng: invalid page in block 18 of relation base/16395/361204; zeroing out page"

물론.. 데이터 손실이 발생합니다..


질문1.

invalid page in block xxxx~ 오류는 왜 발생하는 건가요?


질문2.

테이블에서 invalid page in block~ 이 발생했을 때, 데이터 손실 없이 복구하는 방법이 있을까요?


질문3.

invalid page in block~ 오류가 처음에는 한두곳에서 발생했는데, 점차 다른 테이블/인덱스 등으로 퍼져?나가는 것 같습니다.

다른 DBMS 같은 경우에는 DB가 깨졌을 경우, unload/reload 작업을 하고 나면 정상적으로 운영이 되는 것 같은데,

PostgreSQL 에서는 어떤 방법으로 대응을 해야하나요?


부가정보)

OS환경: Windows 11 Home

버전: PostgreSQL 14

DBSize: 약 15GB


답변 부탁 드립니다.

감사합니다.

 

이 글에 대한 댓글이 총 3건 있습니다.

DBMS 자체 문제일수도 있지만 메모리나 디스크의 물리적인 손상일 가능성도 있습니다.


다른 DBMS와 마찬가지로 백업본이 없다면 완전한 데이터 복구는 어렵습니다.

정상규(pajama)님이 2024-02-14 15:13에 작성한 댓글입니다.

1. 여러 원인이 있겠지만, 일반적으로 DB가 비정상 종료될 경우 발생합니다.

2. 인덱스면 인덱스를 버리고 다시 만들면 되고, 그 깨진 페이지가 데이터 페이지면, 방법이 없습니다.

3. 새 최신 버전에서 새롭게 시작하는게 좋아보입니다. pg_dump로 덤프에서 새 인스턴스에 넣어 사용해보세요. DB가 비정상종료된 적이 없는데, 디스크도 멀쩡한데, 그렇게 페이지가 깨지는 경우는 정말 드뭅니다. 이게 빈번하다면, 뭔가 결합 있는 버전을 사용하고 있거나, 자기도 모르게 그냥 DB를 강제 중지하고 있는 것은 아닌지 확인해 봐야 할 것 같습니다.

 

김상기(ioseph)님이 2024-02-14 16:20에 작성한 댓글입니다.

답변 감사 드립니다.


말씀주신 것 처럼, pg_dump 로 진행하려고 하니, 테이블과 sequence 등에서 invalid page in block ~ 오류가 발생합니다.

1) 이럴 경우, pg_dump 를진행하려면.. 문제되는 테이블을 drop 하고 진행해야 하는 걸까요?

2) drop 하지 않고, pg_dump 할 때 문제가 되는 테이블을 제외하고 하는 방법도 고민해 봤는데요. 

  문제가 있는 테이블을 확인할 수 있는 방법이 있을까요?

ilyam(ilyam)님이 2024-02-16 14:14에 작성한 댓글입니다.
이 댓글은 2024-02-16 14:59에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
10463삭제 구문시간 확인 방법 문의 [3]
뽀글러
2024-03-14
204
10462Tibero to PostgreSQL [1]
임한수
2024-02-26
263
10461파워빌더에서 bytea 타입 이미지 출력 [1]
piamail4z
2024-02-21
207
10460invalid page in block~ 오류 관련 문의 드립니다 [3]
ilyam
2024-02-14
216
10458oracle_fdw 테이블 select 관련 에러 도와주세요ㅜㅜ! [6]
chaney
2024-01-29
398
10457테이블 rename 관련 질문합니다 [1]
소라77
2024-01-26
358
10456(제발) ora2pg 사용 데이터 이관시 궁금증 [3]
chaney
2024-01-05
713
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다