pg_resetwal

pg_resetwal — PostgreSQL 데이터베이스 클러스터의 미리-쓰기 로그와 기타 제어 정보를 재설정함.

요약

pg_resetwal [ -f | --force ] [ -n | --dry-run ] [옵션...] [ -D | --pgdata ]데이터디렉터리

설명

pg_resetwal 명령은 미리-쓰기 로그를 깨끗하게 정리하고, 더불어 pg_control 파일에 저장된 여러 제어 정보를 재설정한다. 이 작업은 앞에서 설명한 파일들이 깨졌을 때, 복구하기 위해서 필요하다. 이 명령은 서버를 실행 할 수 없을 때, 마지막 조치로 사용되어야 한다.

이 명령을 사용하고 난 뒤, 서버가 잘 실행 된다고 해도, 트랜잭션 처리의 불완전한 복구로 자료 정합성이 맞지 않을 가능성이 높다. 그래서, 서버가 실행 되면, 모든 자료를 덤프하고, initdb 명령으로 새 클러스터를 만들어, 그곳에 다시 복원해서, 필요하다면, 자료 정합성을 맞추는 작업을 해야 한다. (공식 설명서에서는 이렇게 권고한다. - 옮긴이)

이 명령은 서버가 다루는 파일을 다루기 때문에, 서버를 실행한 OS 사용자 계정으로 실행해야 한다. 안전상 pg_resetwal 명령은 PGDATA 환경 변수를 사용하지 않는다. 반드시 데이터 디렉터리를 지정해야 한다.

pg_resetwal 명령을 실행할 때, pg_control 파일에 저장된 정보가 바르지 않다고, 오류 메시지를 보게 된다면, 이런 오류를 무시하고, 강제로 작업을 진행할 수 있다. 이때는 -f (force) 옵션을 사용한다. 이렇게 하면, 그 잘못된 정보를 고치는데, 그럴싸한 값을 사용한다. 이렇게 사용하는 그럴싸한 값은 대부분의 경우 정확한 값이겠지만, 다음 OID, 다음 트랜잭션 ID, 다음 시간, 다음 다중 트랜잭션 ID, WAL 시작 위치 값은 사용자가 직접 그 값을 지정해야 하는 경우도 있다. 이런 값들은 아래에서 설명하는 옵션으로 지정한다. 이런 값들을 모두 정확하게 알지 못한다면, 결국 -f 옵션을 사용할 수 밖에 없다. 이렇게 되면, 복구된 데이터베이스 서버가 완벽하게 정상 상태일 가능성이 적다. 그렇기 때문에, 이 상태의 데이터베이스 서버에 자료 조작 명령을 내리는 것은 아주 위험하다. 서버가 실행되면, 즉시 자료 덤프를 하고, 그 덤프한 것을 복원해서 사용하는 것이 안전하다. -f 옵션을 사용해서 복구 하고 그냥 그 서버를 사용하는 것은 자료를 더 손상시키는 결과를 만들 수 있다.

옵션

-f
--force

pg_control 파일에 저장된 정보가 바르지 않은 경우에도 강제로 작업을 진행한다. 위에서 자세히 설명했다.

-n
--dry-run

pg_control 파일의 정보를 어떻게 바꿀 것인지, 작업 계획만 보여주고, 실제 작업은 하지 않는다. (no operation) 이 옵션은 문제점 추적용으로 사용되지만, pg_resetwal 명령을 실행해서 어떤 일이 생길지 확인하는 용도로도 유용하게 사용된다.

-V
--version

버전을 보여주고 마친다.

-?
--help

도움말을 보여주고 마친다.

다음 옵션들은 pg_resetwal 명령을 사용할 때 pg_control 파일의 정보가 올바르지 않을 때 사용하는 옵션이다. 안전한 값은 아래에서 설명하는 것처럼 결정될 수 있다. 옵션 값으로 숫자를 지정하는 경우, 0x 문자로 시작하면, 16진수로 간주한다.

-c xid,xid
--commit-timestamp-ids=xid,xid

직접 제일 오래된 트랜잭션 ID, 가장 최신의 트랜잭션 ID를 지정한다.

안전한 값은 데이터 디렉터리 안 pg_commit_ts 디렉터리 안에 있는 그 파일 이름 기준으로 가장 오래된 파일의 트랜잭션 ID를 제일 오래된 트랜잭션 ID로 사용하며, 가장 최신의 트랜잭션 ID는 반대로 그 디렉터리에 있는 가장 최근의 파일에 있는 트랜잭션 ID를 사용한다. 파일 이름은 16진수로 되어있다.

-e xid_epoch
--epoch=xid_epoch

다음 트랜잭션ID epoch(유닉스 타임스탬프값)를 지정한다.

트랜잭션 ID epoch 값은 데이터베이스 어디에도 저장되지 않는다. 즉 사용자가 지정하는 그 값을 그대로 사용한다. 이 옵션은 Slony-I 또는 Skytools 응용 프로그램이 바르게 작동하도록 하기 위해 사용하는 옵션이다.

-l walfile
--next-wal-file=walfile

다음 WAL 조각 파일의 이름을 지정해서 WAL 시작 위치를 임의로 지정한다.

여기서 지정하는 값은 pg_wal 디렉터리 내 있는 WAL 조각 파일의 이름보다 큰 값이어야 한다. 이 다음 WAL 조각 파일 이름은 세 부분으로 구성 되는데, 가장 앞부분은 타임라인ID이며, 이 부분은 그대로 사용한다. 예를 들어, 00000001000000320000004A 파일이 그 디렉터리에 있다면, 이 옵션 사용법은 -l 00000001000000320000004B 또는 이 보다 큰 값을 지정해야 한다.

Note that when using nondefault WAL segment sizes, the numbers in the WAL file names are different from the LSNs that are reported by system functions and system views. This option takes a WAL file name, not an LSN.

참고

pg_resetwal 명령은 특별한 경우가 아니면, -l 옵션을 기본적으로 사용하며, 그 값은 해당 디렉터리 안에 있는 파일을 찾아서 그 보다 큰 값을 사용한다. 따라서, 이 옵션을 의도적으로 쓰는 경우는 pg_wal 디렉터리 안에 있는 파일을 무시하고, 의도적으로 어떤 파일로 지정하려고 할 때 사용한다. 대표적인 경우가, 아카이브 파일을 다시 만들어야 하거나, pg_wal 디렉토리 내 특정 파일이 반드시 있어야 하는 경우다.

-m mxid,mxid
--multixact-ids=mxid,mxid

다음 멀티트랜잭션ID와 제일 오래된 멀티트랜잭션ID 지정.

-m 옵션값으로 쉼표로 구분한 두 16진수를 지정하는데, 앞부분은 다음 멀티트랜잭션ID, 뒷부분은 제일 오래된 멀티트랜잭션ID다. 각 값들은 pg_multixact/offsets 디렉터리 내 있는 파일을 참조해서, 가장 큰 값에 하나를 더해, 65536 (0x10000) 곱해서 앞부분에 사용하고, 가장 작은 값에 65536 곱해서 뒷부분에 사용한다. 이 값은 16진수를 사용하며, ffff 이하라면, 네자리로, 0을 앞에 채운다.

-o oid
--next-oid=oid

다음 OID 지정.

다음 작업에 사용할 OID가 뭔지를 구하는 작업은 쉽지는 않지만, 특별한 경우가 아니고서는 이 값은 특별한 문제 없이 자동으로 잘 구하기 때문에, 굳이 이 옵션을 사용할 필요는 없다.

-O mxoff
--multixact-offset=mxoff

다음 멀티트랜잭션 위치 지정.

안전한 값은 pg_multixact/members 디렉터리 안에 있는 파일들 가운데, 그 이름이 가장 큰 것을 찾고, 그 값에 1을 더하고, 52352 (0xCC80)를 곱한 값이다. 이 값은 16진수를 사용한다. There is no simple recipe such as the ones for other options of appending zeroes.

--wal-segsize=wal_segment_size

Set the new WAL segment size, in megabytes. The value must be set to a power of 2 between 1 and 1024 (megabytes). See the same option of initdb for more information.

참고

While pg_resetwal will set the WAL starting address beyond the latest existing WAL segment file, some segment size changes can cause previous WAL file names to be reused. It is recommended to use -l together with this option to manually set the WAL starting address if WAL file name overlap will cause problems with your archiving strategy.

-x xid
--next-transaction-id=xid

다음 트랜잭션 ID 지정.

안전한 값은 pg_xact 디렉터리 안에 있는 파일들 가운데, 그 이름이 가장 큰것을 찾아 그 값에 1을 더하고, 1048576 (0x100000)을 곱해서 사용한다. 파일 이름은 16진수를 사용한다. 예를 들어, 가장 큰 파일이 0011 이면, -x 0x1200000 옵션을 사용한다.

Environment

PG_COLOR

Specifies whether to use color in diagnostic messages. Possible values are always, auto and never.

참고

이 명령은 서버가 실행 중에 사용하면 안된다. 서버가 실행 중임을 알리는 잠금 파일을 데이터 디렉터리 안에서 찾으면, pg_resetwal 명령은 더 이상 작업을 진행하지 않는다. 이 잠금 파일을 남겨둔채 서버가 갑자기 중지되었다면, 이 잠금 파일을 지워야 계속 작업을 할 수 있다. 물론 정말 서버가 중지 되었는지, 서버 프로세스 확인을 하는 것을 잊지 말아야 한다.

pg_resetwal 명령은 같은 메이저 버전에서만 사용할 수 있다.

관련 항목

pg_controldata