초보 DBA 삽질기 3

내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.

초보 DBA 삽질기 3

지난 번 사고 후 네 달 이상 장애가 발생하지 않았다. 처음에 조금 실수를 했지만 이제는 어느 정도 자리를 잡았다는 생각이 들었다. 그동안 많은 일을 했고, 특히 전산센터를 이전할 때 내가 작성한 데이터베이스 동기화 프로그램이 중요한 역할을 했다는 점에 자부심을 느꼈다. 몇 달 동안 사고 없이 데이터베이스를 운영하면서 감도 조금 생겼다. 하지만 실수는 방심할 때 찾아오는 법이다.

그날 할 일은 어려운 작업이 아니었다. 데이터베이스 동기화 도중 오류가 발생해 슬레이브 데이터베이스의 일부 데이터가 마스터 데이터베이스로 복제되지 않았다. 이런 데이터는 tx_log_error란 테이블에 쌓였는데, 이 데이터를 tx_log 테이블에 다시 넣는 작업이었다. insert ~ select로 데이터를 복사해 넣고 데이터가 동기화 된 것을 확인한 후 tx_log_error에서 해당 데이터를 삭제하면 되었다. 데이터는 80만 건 정도로 많은 양은 아니었다.

작업 전 전산센터에 연락해 작업 내용을 알려주었다. 특이사항이 있으면 바로 알려달라고 한 후, 작업을 시작했다. 그런데 공교롭게 작업 중 회의에 참석할 일이 생겼다. 회의는 내 자리와 가까운 회의실에서 진행되었다. 특별한 작업이 아니었기에 데이터베이스에 작업을 걸어 놓았다. 회의 도중 짬짬이 나와 진행상황을 확인할 요량이었다. 처음에는 문제가 없었다. 간단한 작업이라 하지 않았던가.

그런데 전산센터에서 나를 찾는 전화가 왔다. 센터에서 나를 찾을 이유는 뻔했다. 재빨리 자리로 달려가 데이터베이스를 확인했다. UNDO 테이블스페이스가 꽉 찼다.

'아아...'

탄식만 하고 있을 시간이 없었다. UNDO 테이블스페이스에 데이터 파일을 추가해 공간을 늘리고, 걸어두었던 작업은 중단했다.

약 4분동안 로컬 거래가 발생했다. 주 데이터베이스에 장애가 생긴 경우를 대비해 로컬DB란 이름의 임시 데이터베이스를 마련해 두었는데, 이쪽으로 거래가 발생했다는 뜻이다. 외부에서 봤을 때 장애는 아니지만 사내에서는 준 장애상황이라 할 수 있다.

'이 정도 작업은 그 동안 해온 일상적인 작업과 다를 게 없었는데... 회의만 아니었으면...'

그러나 이번 사고는 회의 때문이 아니라 내 방심 때문에 생긴 것이다. 좀더 조심스러웠다면 작업을 걸어놓고 회의에 들어가는 대신 회의가 끝난 다음으로 작업을 미루었을 것이다. 작업을 하면서 데이터베이스를 계속 확인했을 것이다. 익숙해졌다고 방심해서 생긴 사고였다.

벌써 세 번째 실수다. 내가 DBA로 와서 계속 사고만 치는게 아닌가 하는 생각이 들었다.