초보 DBA 삽질기 1
그동안 SI 프로젝트에서 개발 DBA만 하다 처음으로 운영 DBA가 되었다. 그날도 뭘 해야 할지 몰라 데이터베이스 이곳 저곳을 들여다보며 일거리를 찾고 있었다. 모두들 바쁜데 나만 한가한 것 같았다.
생각해보니, 개발 프로젝트를 하던 때도 내가 정확히 뭘 해야 하는지 잘 알지 못했다. DBA는 뭘 해야 한다고 알려주는 사람도 없었고, 개발자처럼 명확한 일거리가 있는 것으로 보이지도 않았다. 프로젝트 초기에 데이터베이스 설치하고 개발자나 모델러가 만들어 온 데이터 모델을 물리적 관점에서 검토하고 나면 프로젝트 내내 특별히 바쁠 일은 없었던 것 같다. 가끔씩 개발자나 고객이 데이터베이스나 시스템 아키텍처에 대해 설명을 요청할 때 대답 잘 해주고, 필요한 데이터베이스 작업 잘 하고, 개발자가 작성한 느려터진 SQL을 번개처럼 빠르게 돌아가도록 튜닝해주면 전문가 소리를 들었다. 선배가 알려준 요령이라곤 '절대 모른다는 말을 하지 말라'는 정도였다. 모르는 게 있으면 잠시 확인한 다음 알려주겠다고 시간을 번 다음 공부해서 알려주라고 했다.
개발자였다가 회사를 옮기면서 뜻하지 않게 DBA가 되었다. 의도한 것은 아니었지만 싫지 않았다. 이미 회사를 옮겨버린 상태였기 때문에 거부할 수도 없었다. SQL에 대해 호감을 갖고 있었고 한때 SQL의 귀재란 소리도 들었기에 잘 몰랐지만 DBA도 재미있을 것 같았다. 그리고 막상 해보니 개발자보다 훨씬 편한 보직이었다. 처음 접한 분야여서 공부할 것이 많았고, 가끔씩 개발자가 모두 퇴근한 후 밤샘 작업을 하거나 개발자가 출근하지 않는 주말에 출근해야 하는 경우가 있었지만, 업무 부담은 대체로 적었던 것 같다.
밥 값을 해야겠다는 일념으로 데이터베이스를 둘러보다 이상한 테이블을 발견했다. 이름이 _fail
로 끝나는 테이블이었는데, 사람들에게 물어보니 실패 거래 로그용 테이블이라 했다. 중요 데이터는 아니고 혹시나 해서 쌓아두는 데이터라 했다.
데이터베이스 상황을 봤을 때 데이터는 계속 누적되고 있었고 디스크 공간은 충분하지 않은 것으로 보였다. 팀장에게 보고했더니 디스크를 확충하려 하고 있다는 답을 들었다. 불필요한 데이터를 삭제한다면 조금 더 시간을 벌 수 있을 것으로 보였다. 그래서 팀장에게 해당 데이터를 삭제 처리하겠다고 했고 승낙을 받았다.
결제 서비스의 데이터베이스였기 때문에 중단은 허용되지 않았다. 애플리케이션에서 해당 테이블을 어떻게 사용하고 있는지 알 수 없었기 때문에 조심스럽게 접근했다. 테이블의 모든 데이터를 날리기 보다는 오래되어 절대 사용할 일이 없을 것 같은 데이터만 삭제하기로 했다. 따라서 truncate table
은 사용할 수 없었다. 한꺼번에 삭제하면 DBMS에 무리가 갈 것 같아 조금씩 삭제하고 커밋하는 식으로 작업했다. delete from ... where ... and rownum < 10000
과 같은 식으로 삭제하면서 커밋하는 게 제일 안전해 보였다. 그렇게 작업을 계속 하고 있었는데 갑자기 여기 저기서 전화벨이 울렸다. 처음에는 '왜 그러지?' 하고 의아해 하면서 작업을 계속 했는데, 곧 여기 저기서 "거래가 안 된다!"는 말이 들렸고, 곧 전산센터에서 나를 찾는 전화가 왔다.
"혹시 DB 작업한 거 있어요?"
속으로 가슴이 철렁 했다. 내가 뭘 잘못했지? 특별히 잘못한 거 없는데...
"아... 저... 그게... 불필요한 데이터를 조금 삭제했는데요."
"archive_log 디렉터리가 꽉 찼어요. 데이터베이스에 데이터가 안 들어가요."
"헉..."
순간 머리가 먹통이 되었다. 아무것도 생각나지 않았다.
"아카이브 로그 파일을 옮겨도 되죠?"
"네..."
"다음부터는 작업 전에 센터에 알려주세요."
"네..."
일단 그렇게 아카이브 로그 파일을 다른 곳으로 옮겨 공간을 확보해 거래가 되게 했다. 약 5분 정도 거래가 중단됐다. 아마 그 시간 인터넷으로 결제를 시도하던 사용자는 '왜 안되지?'하고 의아해 했을 것이다.
이게 운영 DBA로서 처음 한 실수다. 변명을 하자면(변명이 소용 없다는 것도 알고 프로답지 못해 보인다는 것도 알지만) 아카이브 로그 디렉터리를 그렇게 빡빡하게 운영하는 곳은 처음이었다. 아니, 운영 DB를 직접 본 것도 처음이었다는 말이 더 정확하겠다. 그 전까지 나는 정말 좋은 하드웨어 환경에서만 작업했다. 디스크는 항상 남아돌 정도로 많았고 서버 사양도 빵빵해서 데이터베이스에 부하를 주기 전에 애플리케이션 서버가 모두 뻗어 버리는 환경에만 익숙해 있었다. 아카이브 로그 디렉터리가 꽉차 데이터가 들어가지 않는 상황이 발생하리라고는 상상도 하지 못했다. 물론 프로였다면 작업 전에 모든 사항을 확인했을 것이다. 나는 아마추어였나 보다.
회사에 들어간 지 한 달도 안돼 사고를 쳐 전문 DBA로서의 체면을 구겼다. 이 사고로 심한 질책을 받을 줄 알았는데, 의외로 그런 건 없었다. 오히려 고참 직원 한명이 '뭔가 해보려고 하니까 실수도 하는 것 아니겠냐'며 의기소침해 있던 나를 위로해 주었다.
그러나 이건 내가 친 사고 중 가장 가벼운 것이었다.