S-오라클 600 에러 트러블 슈팅(한글 인코딩)

개요

5. SQL 기본을 공부하던 중 처음으로 문제 발생.
조인 실습을 하던 차에 에러가 발생했다.
일단 조인을 거는 상황에서, where 절에 조건이 두개 들어갈 때부터 문제가 발생하는 것으로 확인했다.
Pasted image 20241109130045.png
특히, 이 테이블 쪽에 where가 두개 들어가면 문제 생기는 것 같다.
다른 한 테이블은 그런 문제가 발생하지 않았다.
다른 부분들을 다 지우면서 테스트해봤는데 해당 부분이 없을 때만 에러가 발생하지 않았다.

SQL Error [600] [60000]: ORA-00600: 내부 오류 코드, 인수: [qctchr : bfl], [2], [768], [192], [1], [846], [1], [0], [846], [0x794924F755B8], [], []

Error position: line: 10 pos: 263

슈팅

dbeaver에서도 표기가 같았다.
https://ogu-dev.tistory.com/283
600에러는 다양한 이슈로 발생할 수 있다고 하는데,
디비 파일이 손상되었을 수도 있다고 한다..
Pasted image 20241109131936.png
로그가 있는 것을 확인했다.
Pasted image 20241109132608.png
세부 트레이싱 파일 내용은 이랬다.
다른 파일도 확인해봤는데, 해당 파일에는 내가 보낸 쿼리 내용이 담겨있었다.
정확한 에러 상황은 아직 보이지 않지만 몇가지 단서는 보이는 것 같다.
flood.
정확하게 이유는 파악하지 못했다.
테이블을 전부 날리고 다시 설치도 해봤으나, 문제는 여전했다.
디비까지 전부 날려보고 다시 진행해봤으나, 상황은 동일했다.

다시 한번 더 도전

6. SQL 활용을 정리하다가 다시 한번 더 도전했다.

디비 날려먹고, 다시 한번만 더 에러를 해결하기 위해 노력해본다.
누군가 문자열 관련한 문제인 것 같다는 단서만 날려준 상태이다.
이게 정답인지는 모르겠지만, 시도는 해보는 게 좋을 것 같다.

UPDATE sys.props$ SET value$='AL32UTF8' WHERE name='NLS_CHARACTERSET';
UPDATE sys.props$ SET value$='AL16UTF16' WHERE name='NLS_NCHAR_CHARACTERSET';
COMMIT;
Shutdown immediate;
Startup mount;

ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;
SHUTDOWN IMMEDIATE;
STARTUP;

이전에 이 세팅을 전부 win949로 했었다.
이번에는 작정하고 utf8로 고쳐본다.

중요한 것 중 하나는, 데이터베이스를 바꾸는 것이기도 하지만 테이블을 집어넣을 때 사용하는 컨테이너의 환경변수에도 사용하는 문자값 정보가 담겨야 한다는 것이다.
일단 일차적으로 이것은 sqlplus를 실행할 때 영향을 끼친다.
그러니 당연히 sqlplus를 이용해 스크립트를 넣을 때도 영향을 끼치게 된다.

만약 본인이 sqlplus가 아니라 그냥 디비 연결해주는 gui툴을 활용하고 싶다면 그것에서 설정을 해서 알아서 하면 되는 부분이긴 할 것 같다.

Pasted image 20241111010851.png
흑흑...
나 이거 너무 보고 싶었다..

정리해보자면, 일단 문자열을 바꿔주니 문제가 해결됐다.
그렇다면 왜 문자열은 문제가 되었던 것일까?
mswin949친구는 뭐하는 놈이길래 문제를 일으켰던 것일까..?
한글 데이터에만 최적화된 놈이라고 들었는데 설마 영어도 못받아들이는 놈이었던 거야..?

정리

사실 문제의 원인을 정확하게 파악하지는 못했다.
왜인지는 모르겠지만, 데이터를 저장할 때 문자열 인코딩 방식을 KO16MSWIN949에서 UTF-8로 바꿔주자 해결이 됐다.

다만 조금 의심가는 것을 조금만 생각해봤다.

해결이 됐으니 다행이지만, 언젠가 이 인코딩 관련 이슈는 또 발생할 수도 있을 것 같다.

참고