2013-11-04 5 views
1

PostgreSQL 8.0 데이터베이스에서 "오류 : 관계 1663/17269/16691을 열 수 없습니다 : 해당 파일이나 디렉토리가 없습니다"라는 메시지가 나타나고 이제는 내 데이터에 액세스 할 수 없습니다. 적어도 일부 데이터를 복구하는 방법에 대한 아이디어가 있으십니까? 전문 지원은 옵션입니다.PostgreSQL 8.0 데이터베이스를 복구하는 방법

감사합니다.

+0

첫 번째 단계 : 즉시 종료하고 모든 postgresql 관련 디렉토리의 파일 시스템 수준 복사본을 가져옵니다. – bma

+0

그랬어. 데이터 폴더를 오프라인 상태로 만듭니다. –

+0

이미 파일 시스템 복사본을 다른 서버에 복사하고 클러스터를 시작 했습니까? 시작 됐어? – bma

답변

2

다시 서둘러 데이터를 원하는 당신에게 가치가 뭔가, 다음 전문 지원 옵션 충분히 간단해야이 있다면 RP.

몇 가지 사항을 확인하십시오. 이제 모든 데이터베이스 (base, pg_clog, pg_xlog 및 해당 레벨의 다른 모든 폴더)의 전체 백업을 얻었습니다.

  1. 실제로 해당 파일이 있습니까? 실제로 파일이 누락되는 것보다는 권한 문제 일 수 있습니다.

  2. 바이러스 백신/보안 패키지를 검사하여 실수로 파일을 격리 했습니까? PostgreSQL의 데이터베이스 디렉토리를 검사/활성 검사에서 제외시킬 수 있다면 그것도 가치가 있습니다.

  3. 언제 이런 일이 있었는지 기억해 낼 수있는 모든 것을 기록해 두십시오. 이는 귀하 또는 컨설턴트의 문제 해결에 도움이됩니다.

  4. 마찬가지로 로그를 확인하십시오.이 오류가 기록되며, 첫 번째 발생을 찾아서 이상한 것이 있는지 먼저 확인하십시오.

  5. 기존의 모든 파일을 실제로 백업했는지 다시 확인하고 PostgreSQL을 다시 시작하십시오.

  6. 데이터베이스 postgres 또는 데이터베이스 template1에 사용자 postgres로 연결을 시도하십시오. 그런 다음 파일이 작동하면 전역 사용자 목록 또는 일부 데이터베이스 파일이 아닌 데이터베이스 파일 중 하나입니다.

  7. 올바른 이름 (및 권한 - 다른 파일 확인)으로 빈 파일을 만들어보십시오. 운이 좋다면 그것은 단지 색인 일뿐입니다. 그렇지 않으면 당신이없이 살 수있는 데이터 테이블이 될 수 있습니다. 그런 다음 다른 테이블을 개별적으로 덤프 할 수 있습니다.

  8. OK - 여기 있으면 DB에 연결할 수 있습니다. 파일 경로의 숫자는 시스템 객체를 식별하는 PostgreSQL의 OID입니다. 여기에 몇 가지 유용한 검색어를 사용할 수 있습니다. 이 두 개의 쿼리는 데이터베이스 ID와 누락 된 파일이있는 개체 ID를 제공해야합니다. 이것은 당신의 전문가들에게도 유용한 정보입니다.

    SELECT oid, datname, dattablespace FROM pg_database; SELECT * FROM pg_class 여기서 relfilenode = 16691;

당신이을 땜질하기 전에 파일 시스템 백업이 있는지 확인을 기억하십시오.

+0

고마워, Richard! 그냥 몇 가지 발언 : 나는 무슨 일이 일어 났는지 모르지만, 정전 일 수 있습니다. 두 데이터베이스 (template1과 손상된 데이터베이스) 모두에 연결할 수 있습니다. 로그에 이상한 것은 없지만 가장 큰 버그는 파일/디렉토리 (1663/17269/16691)가 존재하지 않는다는 것입니다. 전문가의 지원을받을 것입니다. –

+0

그들은 당신이 8.0에 있다는 말을들은 후에 울게 될 것입니다 - 그것은 2005 년에 발표되었습니다! 저는 데이터베이스가 있어야하는 디렉토리 (특히 1663)가 존재하지 않는다는 것에 놀랍니다. 나는 당신이 할 수있는 좀 더 문제 해결을 해답을 편집했다. –

관련 문제