티스토리 뷰

Linux 환경에서 오라클 데이터베이스를 설치, 운영, 유지보수 하는데 필요한 기본적인 bash 쉘 스크립트를 소개합니다


지금으로부터 7년 전, 오라클은 Linux 운영체제를 위한 최초의 상용 데이터베이스를 발표하였습니다. 그 이후로, Oracle, Red Hat, Novell/SUSE 등의 벤더가 서로 협력하며 데이터베이스 및 애플리케이션 성능을 최적화한 Linux 커널을 개발해 왔습니다. 이러한 이유로, Oracle Database 10g for Linux는 운영체제와 긴밀하게 연관된 개선 기능을 포함하고 있습니다. 이제 DBA들에게도 Linux 기반 시스템을 최적의 상태로 관리하기 위한 경험과 지식이 필요하게 되었습니다.

시스템 관리자와 DBA 사이에는 고전적인 역할의 구분이 이루어져 왔습니다. 하지만 실제 상황에서 이러한 구분이 항상 명확한 것은 아닙니다. 많은 IT 조직은 데이터베이스와 운영체제를 동시에 책임지는 직원들을 고용하기도 합니다. 또 오라클 데이터베이스 역시 운영체제의 리소스와 밀접한 연관성을 가지고 있으며, 주어진 환경과 긴밀한 통합을 이루도록 설계되어 있습니다.

또 많은 시스템 관리자와 DBA들은 자신들이 담당하는 업무를 자동화하기를 원하고 있습니다. 소프트웨어의 설치, 시스템 리소스의 모니터링, 시스템의 관리와 같은 반복적이고 오류 가능성이 높은 작업들은 자동화된 프로세스를 통해 처리하는 것이 훨씬 효율적입니다.

이러한 작업을 자동화하는 방법의 하나로 쉘 스크립팅을 활용할 수 있습니다. 시스템이 시작되고 셧다운 되는 과정에서 다양한 스크립트가 호출됩니다. 오라클 및 써드 파티 벤더가 제공하는 유틸리티들 역시 쉘 스크립트를 통해 호출됩니다. 쉘 스크립트는 쉽고 빠르게 개발할 수 있다는 장점 때문에 애플리케이션 프로토타입 개발을 위한 도구로 오랜 기간 활용되어 왔습니다. 시스템 관리자들은 쉘 스크립팅이 제공하는 기능들을 이용하여, 주어진 환경에 맞춤화된 솔루션을 개발하고 있습니다.

본 문서에서는, Linux 플랫폼에서 오라클 데이터베이스를 설치, 운영, 유지보수 하는데 필요한 기본적인 “bash” 쉘 스크립트를 소개합니다. 본 문서는 Linux 스크립트에 처음 입문하는 사용자, 또는 Linux를 처음 접하는 DBA를 대상으로 작성되었으므로, 경험이 많은 Linux 시스템 관리자들에게는 크게 도움이 되지 않을 수도 있음을 참고하시기 바랍니다.

쉘 스크립트란 무엇인가?

쉘 스크립트란 일련의 명령을 포함하는 텍스트 파일입니다. 사용자가 이 파일을 실행하면, 파일에 포함된 명령이 순서대로 실행되게 됩니다. (shell)이란 Linux 커널과의 커뮤니케이션을 위해 사용하는 커맨드라인 사용자 인터페이스를 지칭하는 용어로, C (csh), Korn (ksh), Bourne (sh), Bourne-Again (bash) 등이 널리 사용되고 있습니다. 쉘은 파일 또는 터미널로부터 입력된 라인을 읽어 해독 과정을 거친 후 커맨드를 실행하는 역할을 담당하며, 이러한 점에서 쉘 역시 커맨드의 일종으로 볼 수 있습니다. Bourne-Again (bash) 쉘은 위에서 언급된 쉘들의 기능을 대부분 포함하고 있으며, 본 문서에서도 bash 쉘을 이용하여 스크립트 작성 방법을 설명하게 될 것입니다.

스크립트 파일의 첫 번째 라인에는 스크립트를 실행할 때 어떤 쉘을 사용할 것인지 정의하게 됩니다. 그 예가 다음과 같습니다:

#!/bin/bash

       

쉘 스크립트를 사용하는 이유는 무엇인가?

DBA 경험이 어느 정도 있는 사용자라면 쉘 스크립팅이 갖는 가치에 대해 이미 잘 알고 있을 것입니다. 하지만 UNIX 시스템의 경험이 없는 사용자에게, 암호처럼 얽힌 쉘 커맨드는 무척 어지럽고 성가시게 보일 수도 있습니다. 또 한편으로, Oracle 10g가 데이터베이스 외부의 운영체제 레벨에서 데이터를 처리하기 위한 안정적인 플랫폼을 함께 제공하고 있기도 합니다.

하지만 쉘 스크립트를 사용해야 할 이유는 여러 곳에서 찾아볼 수 있습니다. 그 몇 가지 예가 아래와 같습니다:

  • 이미 구현된 스크립트를 관리해야 하는 경우.
  • 오라클 소프트웨어를 설치하기 전에 수행되는 시스템 셋업 작업을 자동화하고자 하는 경우: 예를 들어, OS의 초기 상태를 점검하고 소프트웨어 설치 이전에 필요한 조치사항을 리포트하는 스크립트를 작성할 수 있습니다. 또 오라클 데이터베이스에 필요한 OS 사용자/그룹을 생성하고 환경 변수를 설정해 줄 수도 있습니다.
  • 스크립트 대신 오라클 데이터베이스를 이용하여 스케줄 기반의 작업을 실행할 수도 있습니다. 하지만 데이터베이스가실행 중이지 않은상태에서 실행되어야 할 작업이 있을 수도 있습니다. 데이터베이스(또는 리스너, 데이터베이스 관련 프로세스 등)를 시작하거나 중단하는 스크립트를 작성할 수도 있습니다. 이러한 작업은 데이터베이스 내부적으로는 처리가 불가능한 것들입니다.
  • 데이터베이스의 상태를 모니터링하기 위한 메커니즘이 필요한 경우(: 데이터베이스가 쿼리를 처리할 수 있는 상태인지 확인해야 하는 경우): 예를 들어 오라클과 직접적으로 연관되지 않은 프로세스와 리소스를 모니터링하는 스크립트를 작성하여 시스템의 상황을 보다 폭넓게 확인할 수 있습니다.
  • 백업의 자동화: Oracle Recovery Manager(RMAN)는 백업 스크립트의 개발을 위한 플랫폼 중립적인 유틸리티입니다. 쉘 스크립트에서 Oracle Recovery Manager를 호출하고 백업 및 복구 작업을 위해 활용할 수 있습니다.
  • 다양한 데이터베이스 제품을 동시에 지원해야 하는 환경: 여러 종류의 데이터베이스를 동시에 운영할 필요가 있을 수 있습니다. 단일 데이터베이스 제품으로 모든 요구사항을 만족하기 어려울 수도 있고, 특정 제품에 관련한 보안 관련 이슈가 제기될 수도 있습니다. 이러한 상황이라면, 특정 데이터베이스에 종속되지 않은 쉘 스크립팅을 활용하여 요구사항을 해결하는 것이 바람직할 것입니다.

쉘 스크립트의 적용이 바람직하지 않은 경우

오라클 데이터베이스에는 고전적인 RDBMS의 한계를 뛰어넘는 다양한 기능이 포함되어 있습니다. 다른 소프트웨어와 마찬가지로, 오라클 데이터베이스는 운영체제에서 제공되는 리소스를 사용합니다. 하지만 주변 환경을 인지하고 변경하는 능력은 다른 소프트웨어의 수준을 훨씬 뛰어넘습니다. SQL과 오라클의 고정 뷰(fixed view)를 이용하면 데이터베이스 내부로부터 시스템 전체를 조망하는 것이 가능합니다. 이에 반해, 쉘 스크립트는 데이터베이스 외부에서 바라본 시스템 뷰를 제공합니다. 쉘 스크립팅이 만병통치약이 될 수 없는 이유가 여기에 있습니다.

먼저, 운영체제 환경의 대부분을 데이터베이스 내부에서 모니터링하거나 변경하는 것이 가능하다는 사실을 인지할 필요가 있습니다. 오라클의 고정 뷰(fixed view, v$ 접두어를 가진 뷰)를 이용하면 서버(v$instance) 또는 데이터베이스가 실행중인 플랫폼(v$database)의 정보를 확인할 수 있습니다. 데이터베이스에 관련된 파일의 위치 및 속성도 같은 방법으로 확인이 가능합니다. 데이터파일(v$datafile, dba_data_files), temp 파일(v$tempfile, dba_temp_files), 리두 로그(v$logfile), 아카이브 로그(v$archived_log), 컨트롤 파일(v$controlfile) 등의 위치와 기타 속성을 데이터베이스로부터 직접 쿼리할 수도 있습니다. Flash Recovery Area($recovery_file_dest)에 대한 정보, 또는 init.ora 매개변수(db_recovery_file_dest, db_recovery_file_dest_size), 프로세스(v$process), 메모리(v$sga, v$sgastat) 등에 관련한 정보 역시 쉽게 확인이 가능합니다. 그 밖에도 다양한 PL/SQL 패키지가 제공되며, 하부 OS에 대한 액세스를 지원하는 Java/C 데이터베이스 오브젝트의 개발이 가능합니다.

데이터베이스 액세스가 빈번하게 요구되는 작업이라면, 스크립팅이 최선의 대안이 되기 어려울 것입니다. 뒷부분에서 설명하겠지만, SQL*Plus를 이용하여 스크립트에서 데이터베이스에 액세스하는 것이 가능합니다. 하지만 다른 언어를 이용하여 문제를 해결하는 것이 더 쉬울 가능성이 높습니다.

아래 표는 데이터베이스 내부로부터 접근 가능한 정보의 목록을 요약하고 있습니다:

서버/OS 정보

서버 정보의 확인

쿼리

설명

인스턴스가 실행 중인 서버의 이름

select host_name
from v$instance;

bash에서 같은 정보를 얻기 위해 사용할 수 있는 명령이 아래와 같음:

hostname

or

uname –n

운영 체제 플랫폼

select platform_name from v$database –-(10g)

아래 명령을 사용하여 같은 정보를 확인할 수 있음

uname –s

파일 정보

오라클 파일의 위치

쿼리

설명

컨트롤 파일

select name
from v$controlfile;

데이터베이스 컨트롤 파일의 위치. init.ora 파일의 control_files 매개변수에도 같은 정보가 정의되어 있음.

데이터파일

select file_name
from Dba_data_files;

데이터베이스 데이터파일의 위치

Temp 파일

select file_name
from Dba_temp_files;

데이터베이스 임시 파일의 위치

로그 파일

select member
from v$logfile;

리두 로그의 위치

아카이브 로그

select name
from v$archived_log

아카이브 리두 로그의 위치. init.ora 파일의 log_archive_dest_n 매개변수에도 같은 정보가 정의되어 있음. 데이터베이스가 아카이브 모드로 설정되지 않은 경우에는 쿼리 결과가 반환되지 않음.

Flash recovery area

select name
from v$recovery_file_dest

Oracle 10g에서 Flash Recovery Area를 위해 사용하는 디렉토리의 위치. init.ora 파일의 db_recovery_file_dest 매개변수에도 같은 정보가 정의되어 있음.

기타 매개변수에 정의된 파일 시스템 접근 위치

select *
from v$parameter

where value like '%/%'

or

value like '%/%';

쿼리 결과는 오라클 데이터베이스 버전에 따라 크게 달라질 수 있음. 반환되는 매개변수 값이 아래와 같음:

spfile
standby_archive_dest
utl_file_dir
background_dump_dest user_dump_dest
core_dump_dest
audit_file_dest
dg_broker_config_file1
dg_broker_config_file2

파일시스템 관련 경로 정보 표시

select directory_path from dba_directories

표준 데이터베이스 기능으로 포함되지 않은 파일에 액세스하기 위해 Oracle UTL_FILE_DIR 매개변수와 DIRECTORY 데이터베이스 오브젝트를 사용할 수 있음.

프로세스 정보

프로세서/프로세스

쿼리

설명

세션 프로세스

select p.spid, s.username, s.program

from v$process p, v$session s

where p.addr=s.paddr order by 2, 3, 1

spid ps –ef 실행 결과를 조합하여, 특정 프로세스의 OS 정보와 데이터베이스 정보를 비교할 수 있음.

parallelism 관련 프로세스

select slave_name, status
from v$PQ_SLAVE

Parallelism을 이용하여 로드, 쿼리, 오브젝트 생성, 복구, 복제 등의 데이터베이스 작업 성능을 개선할 수 있음. parallel_threads_per_cpu 매개변수는 인스턴스의 디폴트 “degree of parallelism”을 정의하는데 사용됨.


'DB > Oracle' 카테고리의 다른 글

ResultApp  (0) 2016.05.04
OraCon  (0) 2016.05.04
JdbcTestSelectError  (0) 2016.05.04
InsertBatch  (0) 2016.05.04
ConnectApp  (0) 2016.05.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함