토토 캔미리 쓰기를 지웁니다. 로그(WAL)를 기록하고 선택적으로 다른 제어 정보를 재설정합니다. 에 저장됨pg_control파일. 이 이러한 파일이 다음과 같은 경우 기능이 필요할 수 있습니다. 손상되었습니다. 다음과 같은 경우 최후의 수단으로만 사용해야 합니다. 이러한 손상으로 인해 서버가 시작되지 않습니다.
이 명령을 실행한 후 다음을 시작할 수 있습니다. 하지만 데이터베이스에는 다음이 포함될 수 있다는 점에 유의하세요. 부분적으로 커밋된 트랜잭션으로 인해 데이터가 일치하지 않습니다. 당신 즉시 데이터를 덤프하고 실행해야 합니다.initdb하고 다시 로드하세요. 새로고침한 후 확인하세요. 불일치 및 필요에 따라 수리합니다.
이 유틸리티는 다음을 설치한 사용자만 실행할 수 있습니다. 서버(데이터에 대한 읽기/쓰기 액세스가 필요하기 때문) 디렉토리. 안전상의 이유로 데이터를 지정해야 합니다. 명령줄의 디렉터리입니다.토토 캔환경 변수를 사용하지 않습니다PGDATA.
만약토토 캔그렇다고 불평합니다 유효한 데이터를 확인할 수 없습니다.pg_control, 어쨌든 강제로 진행하도록 할 수 있습니다. 를 지정-f(강제) 스위치. 에서 이 경우 그럴듯한 값이 누락된 값으로 대체됩니다. 데이터. 대부분의 필드가 일치할 것으로 예상할 수 있지만 수동으로 다음 OID, 다음 거래 ID, 다음 다중 트랜잭션 ID 및 오프셋, WAL 시작 주소 및 데이터베이스 로케일 필드. 이들 중 처음 5개는 다음을 사용하여 설정할 수 있습니다. 아래에 설명된 스위치입니다.토토 캔자신의 환경이 소스입니다. 로케일 필드에서의 추측; 조심해랭등이 환경과 일치합니다.initdb실행되었습니다. 실행할 수 없는 경우 이 모든 필드에 대한 올바른 값을 결정하려면,-f계속 사용할 수 있지만 복구된 데이터베이스 평소보다 훨씬 더 의심스러운 태도로 치료해야 합니다. 덤프하고 다시 로드하는 것이 필수적입니다.하지 마세요모든 데이터 수정 실행 덤프하기 전에 데이터베이스 작업; 그런 행동이 그렇듯 부패를 더욱 악화시킬 가능성이 있습니다.
그-o, -x, -m, -O및-l스위치는 다음 OID, 다음을 허용합니다. 거래 ID, 다음 다중 거래 ID, 다음 다중 거래 오프셋 및 WAL 시작 주소 값을 수동으로 설정합니다. 이것들 다음 경우에만 필요합니다.토토 캔입니다 읽어서 적절한 값을 결정할 수 없습니다.pg_control. 안전한 값은 다음과 같이 결정될 수 있습니다. 다음과 같습니다:
다음 거래 ID의 안전한 값(-x)는 다음을 찾아 결정될 수 있습니다. 디렉토리에서 숫자로 가장 큰 파일 이름pg_clog데이터 디렉토리 아래에 하나를 추가하고, 그런 다음 1048576을 곱합니다. 파일 이름은 다음과 같습니다. 16진수로. 일반적으로 스위치를 지정하는 것이 가장 쉽습니다. 값도 16진수로 표시됩니다. 예를 들어, 만약0011다음에서 가장 큰 항목입니다.pg_clog, -x 0x1200000작동합니다(뒤에 0이 5개 있으면 적절한 승수).
다음 다중 트랜잭션 ID의 안전한 값(-m)은 다음을 찾아 결정될 수 있습니다. 디렉토리에서 숫자로 가장 큰 파일 이름pg_multixact/오프셋데이터 아래 디렉터리에 1을 더한 다음 65536을 곱합니다. 위에서는 파일 이름이 16진수이므로 가장 쉬운 방법은 이를 수행하려면 스위치 값을 16진수로 지정하고 4개의 0을 추가하세요.
다음 다중 트랜잭션 오프셋을 위한 안전한 값 (-O)는 다음을 통해 결정될 수 있습니다. 디렉토리에서 수치적으로 가장 큰 파일 이름에 대해pg_multixact/members데이터 아래 디렉터리에 1을 더한 다음 65536을 곱합니다. 위에서는 파일 이름이 16진수이므로 가장 쉬운 방법은 이를 수행하려면 스위치 값을 16진수로 지정하고 4개의 0을 추가하세요.
WAL 시작 주소(-l) 현재 존재하는 파일 이름보다 커야 합니다. 디렉토리pg_xlog데이터 아래 디렉토리. 이 이름도 16진수로 되어 있으며 세 개의 이름이 있습니다. 부품. 첫 번째 부분은"타임라인 아이디"일반적으로 동일하게 유지되어야 합니다. 선택하지 마세요 255보다 큰 값(0xFF) 세 번째 부분; 대신 두 번째 부분을 증가시키고 재설정하십시오. 세 번째 부분을 0으로 바꿉니다. 예를 들어 다음과 같습니다.00000001000000320000004A가장 큰 항목입니다. 에서pg_xlog, -l 0x1,0x32,0x4B작동합니다; 하지만 가장 큰 항목이 다음과 같은 경우000000010000003A000000FF, 선택-l 0x1,0x3B,0x0또는 그 이상.
다음 OID를 결정하는 비교적 쉬운 방법은 없습니다. 이는 데이터베이스에서 가장 큰 것보다 크지만 다행히 다음 OID 설정을 얻는 것은 중요하지 않습니다. 그렇죠.
그-n(작동 없음) 스위치 지시한다토토 캔인쇄하려면 다음에서 재구성된 값pg_control그런 다음 아무것도 수정하지 않고 종료합니다. 이는 주로 디버깅 도구이지만 이전에 온전한지 확인하는 데 유용할 수 있습니다. 허용토토 캔계속하다 진짜.