데이터이야기

DB 노하우, 데이터직무, 다양한 인터뷰를 만나보세요.

단무지 시즌 IV: 단무지의 DB 운영 이야기(3회) : 무뎌진 도끼날을 갈자, DB 일일점검의 실전(1)

데이터 이야기
작성자
dataonair
작성일
2016-08-02 00:00
조회
5511


단무지 시즌 IV: 단무지의 DB 운영 이야기(3회)

무뎌진 도끼날을 갈자, DB 일일점검의 실전(1)



[필자 소개] 서윤식은 외환신용카드에서 DBA 12년, 현대하이카다이렉트에서 DA로 10년을 일했다. 금융권 데이터 분야에서 22년간을 보내며, DBMS 운영 및 튜닝, SQL 튜닝, 데이터 모델링, 데이터 품질관리 영역 등 DB의 전 영역을 고루 경험하였다. 이학사(전자계산학과), 경영학 석사를 거쳐 2015년 8월 IT 정책경영학과 박사 과정을 수료하였다. 2016년 3월부터 데이터와사람들의 대표로 있으며, 한국데이터베이스진흥원의 산업체 전문 강사로서 데이터 모델링 및 SQL 튜닝 강의를 하고 있다. 또한 ‘데이터와사람들(http://cafe.naver.com/dbstudydapsqlp)’이란 네이버 카페를 운영하며,데이터 영역에 지식이 필요한 사람들과 다양한 방법으로 소통하고 있다.



들어가면서

단무지는 머나먼 대리를 훌륭한 DA로 키우려 하고 있습니다. 그러기 위해 일일점검이라는 명목 하에 머나먼에게 숙제를 내 주었습니다. 일일점검 항목을 적어주고, 점검할 수 있는 SQL을 작성해 오라고 한 것입니다. 엄청난 양에 놀란 머나먼이 과연 단무지의 숙제를 어느 정도나 해올 수 있을까요 단무지는 본인이 할 수 있을 만큼만 해오라 했으나, 머나먼이 받아 들이기에는 부담감 백배였을 텐데요. 자 이제부터 보시죠.



머나먼의 ‘멘붕’

머나먼은 직장생활을 시작한 지 4년 5개월 만에 가장 어려운 숙제를 받았다. 모두지 무슨 소리인지 하나도 모를 이야기만 A4 한 장을 써 주고 그걸 SQL로 번역해서 오라니 나더러 어쩌란 말인가 어쨌든 단 팀장이 추천해 준 책을 사서 펴보았다.

책을 대충 훑어본 머나먼은 결론을 내렸다. 단무지 팀장은 제 정신이 아닌 것 같다. 작성해 준 내용도 그렇고, 추천해 준 책도 그렇고, 말만 한글이지 이건 예전에 붕괴되었던 국가 소련에서 사용하는 말과 다르지 않았다.

아니 지금 인류가 사용하지 않는 라틴어일지도 모른다고 생각했다. 이게 도대체 무슨 이야기란 말인가 책을 보면 하얀 것은 종이이고 검은 것은 글씨라는 말밖에는 도저히 알 길이 없었다. 머나먼은 일주일이란 짧은 기간 동안 숙제를 할 수 있는 방법은 네이버 아저씨에게 물어보는 것이 가장 빠를 것 같았다. 네이버 아저씨가 알려준 방법대로 몇 가지 항목에 대해 SQL을 작성하고 단 팀장에게 제출했다.



단무지: 머 대리!! 일주일 동안 고민하고 뭐 느낀 것 있나머나먼: 네. 팀장님, 확실히 알 수 있었습니다.단무지: 아~~ 그래. 뭘 확실히 알 수 있었나머나먼: (당신이 제 정신이 아니라는 것을요…) 제가 DB와 관련해 아는 것이
없다는 것과 해야 할 것이 많다는 것을 느꼈습니다.단무지: 허~~~ 이거 처음부터 배째라 나오는 구만. 하하 모르니 알려 달라
머나먼: (죽이든 살리든 맘대로 하시죠) 열심히 배우겠습니다.단무지: 머 대리는 앞으로 오전은 무조건 DB 공부를 해. 일단 한 시간은 나한테 교육을 받고,
나머지 시간은 혼자 학습하는 방식이며, 오전에 밀린 일은 오후에 처리를 하고,
DBA는 개발자와 같이 항상 바쁘게 일해야 하는 보직은 아니니 가능할 거야. 어때머나먼: (이 자가 이제 회사를 아예 공부방으로 만들려 하는 구만. 뭐 내 입장에서 나쁠 것 없겠지) 네. 알겠습니다.단무지: 그럼 오늘은 백업부터 이야기 해 보자.



단무지는 이야기를 이어 나갔다.



1. 백업 실행 여부

DBA가 가장 먼저 신경 써야 할 것은 백업이다. 개발자가 요청한 것보다 우선순위가 되야 할 일이다.
DBA는 최악의 상황에도 대비해야 하기에 백업을 최우선 순위로 둬야 한다. 백업 점검 방법은 다음과 같다.

백업 대상: control file, data file, archive log file

[스크립트]
select to_char(time, 'yyyymmdd') , status
from v$backup
group by status, to_char(time, 'yyyymmdd');

status: 백업 중일 경우 "ACTIVE" 이며, 백업이 종료되었을 경우 "NOT ACTIVE"다.
time: begin backup 및 end backup이 실행된 일자와 시간, 이 두 항목이 중요하다.

DATA FILE 백업은
ALTER TABLESPACE [TABLESPACE-NAME] BEGIN BACKUP ;

OS 상에서 파일 복사 또는 테이프 백업
ALTER TABLESPACE [TABLESPACE-NAME] END BACKUP ;

즉 v$backup.status 칼럼의 상태는 "Begin Backup"을 만나면 "Active"가 되며, "End Backup"을 만나면 "NOT ACTIVE" 상태다.
만약 일일점검 시에 "ACTIVE" 상태로 남아 있다면 아직 백업이 종료되지 않았다는 이야기다.
이때는 백업 시작 시간을 당겨서, 일과시간 전에 종료될 수 있도록 조정해야 한다.
또한 "time" 칼럼이 그제 날짜가 존재한다면 전일자 백업이 진행되지 않은 것이다.



머나먼: 아~~~ 그런 의미가 있었군요. DBA가 백업 담당자가 아닌데 어떻게 백업 점검을 해야 하나 고민했었습니다.
이제 알겠습니다. DB에서 이 정도 확인 후 이상이 발견되면 백업 담당자에게 이야기 해야겠습니다.
물론 백업 담당자도 아침에 출근해서 확인을 할 테니, 2중으로 확인이 되겠군요.단무지: 그렇지. 그런데 DBA는 백업에 대해 한 가지 확인을 더 해야 해.머나먼: 어… 그게 뭐죠단무지: 일단 백업은 정상적으로 되었다 치자고. 하지만 정작 장애가 나서 백업 본으로
복원하려고 할 때 (복원이) 안 될 수도 있잖아. 그럼 그때는 치명적이지.머나먼: 아~~ 그렇겠군요. 그럼 어떻게 확인할 수 있죠단무지: 일단 테이프에 백업된 자료를 개발장비에 Restore하여 Recovery 해 보는 거야.머나먼: 팀장님. Restore와 Recovery의 차이점이 뭐죠단무지: 좋은 질문이야. Restore는 테이프에 저장된 파일을 OS상의 파일로 복원해 놓는 거야.
하지만 이 상태가 DB는 아니야. 이 상태에서 DB를 살리려 해도 살아나지 않거든.
그럼 DBA가 정상적인 상태의 DB로 복원하는 것을 Recovery라고 하지.머나먼: 아~~~ 그렇군요. 그럼 백업 담당자가 Restore를 하고, DBA가 Recovery를 하는 거겠네요.단무지: 빙고! 정확히 이해했어. 백업본을 이용하여 개발장비에서 실제 DB를 살려내는 방법은
내용이 엄청 많으니, 나중에 그 부분만 따로 놓고 설명을 하자고. 그리고 지금은
"2. Archive Log 디렉터리 여유 여부" 점검하는 것을 보자고.머나먼: 팀장님, 그런데요. controle file, data file, archive log 파일을 백업해야 한다고 했습니다.
그런데 오늘은 data file 이야기만 해 주셨어요. 나머지는 어떻게 확인하죠단무지: 하하. 머 대리 학구열이 대단하군. 나머지 파일은 어차피 나중에 백업 본을
살려내는 것을 소개할 때 자세히 할 테니 오늘은 다음 이야기로 넘어가자고.머나먼: 네. 알겠습니다.



2. Archive Log 디렉터리 여유 여부

[스크립트]
OS명령어) df -k



단무지: Archive log가 뭐하는 것인가는 머 대리 숙제로 남길 거야. 다음주까지 내게 이야기 해 줘야 해. 머나먼: 알겠습니다, 팀장님.단무지: Archive Log 디렉터리가 Full이 나면 DB는 사용자가 요청한 어떤 트랜잭션도 실행되지 않아.
그러다가 저 디렉터리에 여유가 생기면, 언제 그랬냐는 듯이 수행되지.
이 원리는 Archive Log 파일이 무엇인지 알고 나면 자동 이해가 될 거야. 그러니 자세한 설명은 필요 없을 거야.
대신 저 명령어는 OS 명령어로서 해당 장비의 file system별 사용량과 여유량을 보는 명령어야.
그러니 Archive log 파일이 존재하는 file system에 여유 공간이 얼마나 있는지 확인할 수 있을 거야.머나먼: 아... 알겠습니다. 하지만 팀장님, 파일은 계속 증가할 거구요.
무한정 저 공간을 늘려줄 수는 없을 것 같은데요.단무지: 맞아. 매일 백업하며, 백업된 파일은 삭제하여 저 공간을 할당해 줘야 해.
어차피 Archive log 파일은 복구할 때 필요한 파일이니, 정상적인 상황에서는 필요가 없거든.머나먼: 아~ 네. 그러면 어느 정도 공간을 유지해야 할까요단무지: Archive Log 파일은 해당 시스템에 트랜잭션이 많으면 많을수록 넓은 공간이 필요하지.
따라서 용량을 얼마를 정해줘야 한다는 규칙 같은 것은 없어. DBA가 상황을 확인해 가며
넉넉히 부여해 줘야 해. 나는 일주일간 지우지 않고 운영할 수 있을 정도의 넉넉한 용량을
최초 할당하고, 평상시는 오전에 50% 이상의 여유공간을 확보해 놓지. 머나먼: 아~ 50% 이상의 여유공간을 둔다는 것은 예상치 못한 배치 작업이 수행되어
Archive Log 파일이 급격히 증가했을 때를 대비하는 거겠군요.단무지: 맞아. 머 대리도 아침에 일일점검 할 때 저 공간을 50% 미만으로 확보해.
그러기 위해서는 확실히 OS 담당자가 백업되었는지 확인 후 오래된 파일 순으로 지워 나가면 될 거야.머나먼: 네. 알겠습니다, 팀장님. 그럼 이번엔 점검항목 No. 3에 대해 알려주시죠.단무지: 하하 잘 따라와 주니 내가 힘이 나는 걸. 하하



3. Invalid Object 찾기

[스크립트]
select *
from dba_objects
where status = 'INVALID'
and owner in ('각시스템별DBUser1', '각시스템별DBUser2')
AND object_type in ('PACKAGE', 'PACKAGE BODY', 'VIEW', 'PROCEDURE', 'FUNCTION',
'TABLE', 'TRIGGER');



단무지: Object의 종류는 뭐가 있지머나먼: 어~~ 테이블, 인덱스가 있습니다.단무지: 그게 대표적이지. 하지만 테이블과 인덱스와 같이 데이터를 갖고 있는 것 말고 더 있을 텐데머나먼: 아. 맞습니다. 뷰, 프로시저, 펑션, 트리거 등이 있습니다.단무지: 맞아. Invalid가 되었다는 것은 Object가 정상적인 서비스를 할 수 없다는 이야기지.
뷰, 프로시저, 펑션, 트리거 등은 SQL 또는 PL/SQL로 구성되어 있는데, 참조하고 있는
테이블이 변경이 되었다면, 바로 Invalid로 빠지지. Application에서 호출할 경우 에러를
응답할 수밖에 없어. 즉, 장애가 발생하는 거지. DBA는 테이블 구조변경(주로 칼럼 Add) 요청을
개발자들에게 받아 처리해 주는데, 이때 가장 신경 써야 할 부분이 참조하고 있는
View, Procedure, Function, Trigger들이 있는지 확인하고, Invalid로 빠져있다면 다시 컴파일하여
정상적인 상황을 유지할 수 있도록 해야 해. 그리고 일일점검 시 반드시 Invalid Object에 대해
점검을 하고, 발견즉시 조치를 취해야 해.머나먼: 아~ 네. 알겠습니다, 팀장님. 그런데요, Procedure에서 참조하고 있는 칼럼을 삭제 요청하면
어떻게 되나요 해당 칼럼을 삭제했을 경우는 Procedure를 재 컴파일 하더라도 계속 에러가 발생할 텐데요. 단무지: 맞아. 좋은 질문이야. 그럴 경우는 개발자가 미처 생각지 못하고 놓친 부분이야.
운영 DB에 칼럼 삭제를 적용하는 시점에 DBA가 점검해야지. 그리고 바로 개발자에게
조치를 요청하여 이상이 없도록 해야 해. 사실 그런 경우가 종종 발생하거든. 머나먼: 네. 잘 알겠습니다. 이제 Top 100 SQL의 실행계획 변경 여부를 점검하는 것도 알려 주세요.단무지: 벌써 한 시간이 지난 것 같은데. 오늘은 여기까지 하고. 머 대리는 Archive Log 파일이
어떤 역할을 하는 것인지 공부해 오고, SQL 실행계획이 어떤 역할을 하는 것인지 알아봐.
그래야 또 내일 일일점검 4번째 항목을 이야기 할 수 있을 거야.머나먼: 네. 팀장님. 이 은혜는 열공으로 보답하겠습니다. 감사합니다.단무지: 하하하.



단무지는 머나먼 대리가 의욕적이라는 것이 마음에 들었다. 이야기 해 주는 것을 알아 듣는 다는 것은 오전 일과시간 학습뿐, 아니라 퇴근 시간 이후에도 개인시간을 할애해 공부하고 있다는 뜻이기도 했다. 단무지가 생각한 것보다 의외로 머나먼이 빨리 따라올 수도 있을 거라는 생각에 단무지는 왠지 흐뭇해 졌다.



에필로그

한 나무꾼이 있었습니다. 무딘 도끼로 땀을 뻘뻘 흘리며 나무를 패고 있었죠. 지나가던 사람이 물었습니다. 왜 도끼를 갈지 않느냐고 그 나무꾼 왈 "나무를 해야 하기 때문에 너무 바빠서 도끼를 갈 시간이 없습니다" 하고 대답했습니다. 참 안타깝죠

직장인은 항상 화장()을 하고 살아야 한다고 생각합니다. 여자가 화장을 하는 것은 본인을 더 돋보이게 하기 위해서입니다. 직장인은 자기를 더 돋보이게 하기 위해서는 무엇을 해야 할까요 자신의 능력에 대한 화장을 해야 합니다. 즉 자기계발을 하라는 말입니다. 꾸준한 자기계발을 통해 더 양질의 성과를 내야 합니다. 그것이 나의 가치를 높임과 동시에 회사에 높은 서비스를 하는 것입니다. 회사는 그런 사람을 높이 평가합니다. 자기계발은 나와 회사가 모두 윈-윈할 수 있는 길이죠. 여러분의 회사는 항상 날카로운 도끼를 가진 나무꾼을 원합니다. (다음 호에 계속)



출처 : 한국데이터베이스진흥원

제공 : 데이터 전문가 지식포털 DBguide.net