토토 캔쓰기를 지우는 것 로그 (WAL) 및 선택적으로 다른 제어 정보를 재설정합니다 에 저장PG_CONTROL파일. 이것 이러한 파일이 발생하면 기능이 필요합니다 부패했다. 그것은 최후의 수단으로 만 사용해야합니다. 그러한 부패로 인해 서버가 시작되지 않습니다.
이 명령을 실행 한 후 서버이지만 데이터베이스에 포함될 수 있음을 명심하십시오. 부분적으로 커밋 된 트랜잭션으로 인한 일관성없는 데이터. 너 즉시 데이터를 덤프해야합니다. runinitdb및 다시로드. 다시로드 후 확인하십시오 필요에 따라 불일치 및 수리.
이 유틸리티는 설치 한 사용자 만 실행할 수 있습니다. 데이터에 대한 읽기/쓰기 액세스가 필요하기 때문에 서버 예배 규칙서. 안전상의 이유로 데이터를 지정해야합니다 명령 줄의 디렉토리.토토 캔환경 변수를 사용하지 않습니다pgdata.
if토토 캔이를 불평합니다 에 대한 유효한 데이터를 결정할 수 없습니다.PG_CONTROL, 어쨌든 진행하도록 강요 할 수 있습니다 지정-f(힘) 스위치. ~ 안에 이 사례는 그럴듯한 값이 누락 된 것으로 대체됩니다. 데이터. 대부분의 필드는 일치 할 것으로 예상 될 수 있지만 매뉴얼 다음 OID, 다음 거래 ID, 다음 Multitransaction ID 및 오프셋, WAL 시작 주소 및 데이터베이스 로케일 필드. 이 중 처음 5 개는 사용하여 설정할 수 있습니다 아래에서 논의 된 스위치.토토 캔의 자체 환경이 소스입니다 로케일 필드에서의 추측; 조심하세요Lang등은 환경과 일치합니다initdb가 실행되었습니다 이 모든 필드에 대한 올바른 값을 결정하려면-f복구 된 데이터베이스는 여전히 사용될 수 있습니다 평소보다 더 많은 의심으로 치료해야합니다. 즉시 덤프 및 재 장전이 필수적입니다.do not데이터 수정을 실행합니다 덤프하기 전에 데이터베이스의 작업; 그러한 행동과 마찬가지로 부패를 악화시킬 가능성이 높습니다.
the-o, -x, -m, -o및-l스위치는 다음 OID를 허용합니다 트랜잭션 ID, 다음 Multitransaction ID, 다음 Multitransaction 오프셋 및 WAL 시작 주소 값이 수동으로 설정됩니다. 이것들 만 필요합니다토토 캔IS 읽어서 적절한 값을 결정할 수 없습니다PG_CONTROL. 안전한 값은 다음과 같이 결정될 수 있습니다 다음은 다음과 같습니다.
다음 거래 ID (의 안전한 값-x)를 찾아 결정할 수 있습니다 디렉토리에서 숫자로 가장 큰 파일 이름PG_CLOG데이터 디렉토리 아래, 하나 추가, 그런 다음 1048576을 곱합니다. 파일 이름은 16 진수. 일반적으로 스위치를 지정하는 것이 가장 쉽습니다 16 진수의 가치도 있습니다. 예를 들어, if0011에서 가장 큰 항목입니다PG_CLOG, -x 0x1200000작동합니다 (5 개의 후행 제로가 제공합니다 적절한 승수).
다음 multitransaction id (의 안전한 값-m)를 찾아 결정할 수 있습니다 디렉토리에서 숫자로 가장 큰 파일 이름pg_multixact/오프셋데이터에 따라 디렉토리, 하나를 추가 한 다음 65536을 곱합니다 위의 파일 이름은 16 진수이므로 가장 쉬운 방법 이를 위해서는 스위치 값을 16 진수로 지정하는 것입니다. 네 개의 0을 추가하십시오.
다음 Multitransaction Offset의 안전한 값 (-o)는보고에 의해 결정될 수 있습니다 디렉토리의 수치 적으로 가장 큰 파일 이름PG_MULTIXACT/회원데이터에 따라 디렉토리, 하나를 추가 한 다음 65536을 곱합니다 위의 파일 이름은 16 진수이므로 가장 쉬운 방법 이를 위해서는 스위치 값을 16 진수로 지정하는 것입니다. 네 개의 0을 추가하십시오.
WAL 시작 주소 (-l) 현재 존재하는 파일 이름보다 커야합니다. 예배 규칙서PG_XLOG데이터에 따라 예배 규칙서. 이 이름은 또한 16 진수이며 세 가지가 있습니다 부분품. 첫 번째 부분은입니다."타임 라인 ID"일반적으로 동일하게 유지해야합니다. 선택하지 마십시오 255보다 큰 값 (0xff) 세 번째 부분; 대신 두 번째 부분을 증가시키고 재설정하십시오 세 번째 부분은 0입니다. 예를 들어, if000000010000320000004A가장 큰 항목입니다 안에PG_XLOG, -l 0x1,0x32,0x4b작동 할 것입니다. 하지만 가장 큰 항목이0000000100003A000000ff, 선택-l 0x1,0x3b, 0x0또는 그 이상.
다음 OID를 결정할 수있는 쉬운 방법은 없습니다. 그것은 데이터베이스에서 가장 큰 것 이상이지만 다행히도 다음 설정을 얻는 것은 중요하지 않습니다. 오른쪽.
the-n(작동 없음) 스위치 지시토토 캔인쇄하려면 에서 재구성 된 값PG_CONTROL그런 다음 아무것도 수정하지 않고 종료하십시오. 이것은 주로 a입니다 디버깅 도구이지만 이전의 정신 점검으로 유용 할 수 있습니다. 허용토토 캔진짜.