DBAtlas · 데이터베이스 운영 아틀라스

ERR DISCARD without MULTI: DISCARD without MULTI

Redis

의미

열린 MULTI 블록이 없는 상태에서 DISCARD를 보냈다. DISCARD는 진행 중인 트랜잭션을 취소할 때만 사용하며, 취소할 것이 없으면 이 오류를 반환한다.

원인

MULTI 없이 DISCARD를 호출했거나, 트랜잭션이 이미 EXEC/DISCARD로 닫힌 후 다시 호출했거나, 오류 처리 코드에서 무조건 DISCARD를 호출했거나, 연결 상태가 예상과 다른 경우다(풀에서 가져온 연결에 MULTI가 열려 있지 않음).

해결 방법

실제로 MULTI가 열려 있을 때만 DISCARD를 호출하고 코드에서 트랜잭션 상태를 추적한다. 오류 핸들러에서는 DISCARD 호출 전에 트랜잭션이 열려 있는지 확인한다. 라이브러리의 트랜잭션 래퍼를 사용해 상태를 자동으로 관리한다. 커넥션 풀의 상태가 깨끗하도록 보장한다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목