요즘 DB가 거의 매일 문제를 일으켜서 성능관련 문서들을 많이 찾아보며 분석중에 있습니다. 그러다보니 wait event에 많은 시간을 투자하고 있죠.

OTN에는 많은 Oracle 관련 문서들이 있는걸 아시죠. 그중에서 이번에 찾은 [Oracle Wait Event 모니터링]이라는 문서가 눈에 띄더군요.

원문보러가기~!
(주)웨어벨리의 책임 컨설턴트인 안진철님이 2003년경에 작성한 문서로 순서는 아래와 같습니다.

 이 글을 읽으면서 맘에 와닿았던 글귀가 있습니다.

흔히 DBA를 3D업종이라고 부르는 이유 가운데 하나는 몸은 고달픈데 반해 그 성과가 별로 티가 나지 않는다는 사실 때문일 것이다. 실제로, DBA가 수행해야 하는 일상적인 관리 업무들은 몸은 다소 피곤하게 만들지 몰라도 어느 정도 경험이 쌓이면 그리 부담을 주는 일은 아니다. 우리가 한단계 업그레이드된 전문가로서 인정 받는 DBA가 되기 위해서는 장애상황 혹은 유사 장애 상황에서 DB 모니터링 작업을 수행하고 분석할 수 있어야 한다. 시스템이 갑자기 느려지고 업무가 마비되는 상황에 맞닥뜨렸을 때 문제의 원인이 무엇인지를 집어낼 수 있는 능력이 있어야 하며 최소한 오라클의 문제인지 아닌지를 판단할 수는 있어야 몸으로 야간작업이나 때우는 DBA가 아니라 조직에 없어서는 안될 전문가로서의 나의 존재가치를 인정 받을 수 있을 것이다.


다음은 시중에 나와있는 OWI(Oracle Wait Interface) 관련 책들입니다.
오라클 진단 & 튜닝
카테고리 컴퓨터/IT
지은이 RICHMOND SHEE (엑셈, 2005년)
상세보기

OWI Advanced Oracle Wait Interface in 10g
카테고리 컴퓨터/IT
지은이 조동욱 (엑셈, 2006년)
상세보기

PRACTICAL OWL IN ORACLE 10G
카테고리 컴퓨터/IT
지은이 엑셈 (엑셈, 2007년)
상세보기

ADVANCED OWI INTERNALS AND PERFORMANCE IN...
카테고리 컴퓨터/IT
지은이 조동욱 (엑셈, 2007년)
상세보기


 DB가 log file sync 메세지를 앞세우고 버벅거리는 현상이 발생했네요... 그것도 거의 매일 퇴근시간 쯤에요.
이곳 저곳 뒤지다가 발견한 문서입니다.
엑셈에서 운영하는 Oracle관련 위키같네요.


원문보러가기~!



Eclipse에서 Oracle 개발할때 사용하는 플러그인이네요.

영문으로 된 아래의 소개글을 대~충 읽어보니 웹로직에서 개발할때 사용하는 이클립스 플러그인이라고 하네요.
아직 써보지는 않아서 어떨지는 모르겠네요. 좋겠죠???

This certified set of Eclipse plug-ins is designed to help develop, deploy and debug applications for Oracle WebLogic Server. It installs as a plug-in to your existing Eclipse, or will install Eclipse for you, and enhances Eclipse's capabilities for Java, Java EE, Spring, ORM and WebServices.

Plugin to Eclipse today for free.


플러그인 홈페이지 보기

다운로드 하기
 기존에 AIX 서버에서 Oracle DB를 운영중이었는데, 여기에 개발용으로 Instance를 하나 추가하는 작업을했습니다. 여러가지 작업이 필요하지만 CREATE DATABASE 명령을 실행하기 전에 해야하는 작업 내용을 정리해보려합니다. 사전 작업 때문에 사실 고생을 좀 했거든요.

1. Parameter file 생성
 $ORACLE_HOME/dbs 디렉토리에 보면 기존 DB에서 사용하는 Parameter file이 있다. 이 파일을 수정해서 init[SID].ora라는 이름으로 파일을 생성한다. 이 작업은 oracle 계정(UNIX 계정)에서 수행해야한다.
 파일 내용중에서 SID, DBNAME, Control file의 위치 및 이름 그리고 디렉토리 이름등을 수정해야한다.
예를 들어 새로 만들 개발DB의 SID를 NEWDEV라고 하면.
수정해줘야 할 부분은 아래와 같다. 음... 그외에도 손볼곳을 손본뒤에 저장한다.
###########################################
# Database Identification
###########################################
db_domain=""
db_name=NEWDEV

###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=/oracle/dbms/admin/NEWDEV/bdump
core_dump_dest=/oracle/dbms/admin/NEWDEV/cdump
timed_statistics=TRUE
user_dump_dest=/oracle/dbms/admin/NEWDEV/udump

###########################################
# File Configuration
###########################################
control_files=("/db1/NEWDEV/control01.ctl","/db2/NEWDEV/control02.ctl")

###########################################
# Instance Identification
###########################################
instance_name=NEWDEV

###########################################
# MTS
###########################################
dispatchers="(PROTOCOL=TCP) (SERVICE=NEWDEVXDB)"

###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
undo_retention=3600
undo_tablespace=UNDOTBS1   <= 이 부분은 CREATE DATABASE 명령을 실행할때와 이름을 맞춰줘야한다.


2. Password file을 생성한다.
 Parameter file과 마찬가지로 $ORACLE_HOME/dbs 디렉토리에서 아래 명령을 실행한다.
# orapwd file=orapwNEWDEV password=비밀번호

그리고 중요한거... 기존의 oracle이라는 UNIX 계정이 아닌 다른 계정에서 oracle이 실행되므로 password file은 oracle 계정(UNIX 계정)에서 생성하고, chmod 명령을 이용하여 권한을 777로 만들어 줘야한다. 근데 instance를 추가하고 난뒤에 DB를 생성하면 이게 원상태로 돌아가버리던데... 이건 뭐가 문제인지...

 요즘엔 Oracle 11g가 출시되고 RAC, GRID 등의 다양한 기능을 제공하지만 아직까지 Oracle 9i를 고집하는 시스템도 있다. 특히나 지금 근무중인 곳은 대형 시스템이다보니 한꺼번에 10g나 11g로 옮겨가는 것을 꺼려하고 있다. 이곳만해도 "만약 작업 소요 시간이 지금보다 느리게 나오면 어떻할거냐"는 문제와 함께 "여러대의 DB를 동시에 옮기는데 따른 서비스 중지 시간" 등의 문제로 인해서 쉽게 결정을 못하는 상태이다. 이런저런 문제가 있긴하지만 예산과 인력만 투입된다면 처리될 문제이다. 적어도 내가 보기엔...

물론 DataStage나 기타 관제 소프트웨어, 백업 구성 등등 신경쓸 문제가 너무 많다는것도 맘에 걸리긴 한다. 이런 문제를 한방에 해결하려면 도데체 몇군데 업체가 회의에 참가해야 할런지... 막막하기만 하다. 그래서 일단 Oracle 9i와 9i RAC 설치 연습을 하려고한다.

 운영체제로는 Linux를 선택했다. 앞으로 Linux를 사용하는 곳이 점점 늘어날거라 생각하고 있고(지난번에 소개한 HP Oracle ExaData라는 제품이 Linux 기반이다. 앞으로 이런 제품이 더 많아질거라 생각한다.), 고가의 UNIX 장비를 소유하지 못한 중소기업체에서도 Oracle에 대한 수요가 늘어날거라 생각하기에 Linux에 Oracle 9i를 설치하려고 마음먹었다.

 DB를 선택했고 Linux라는 운영체제를 선택했으니 이제 Linux 배포판을 선택해야겠다. Oracle에서 배포하는 Oracle Unbreakable Linux(다운로드 링크에는 Oracle Enterprise Linux라는 이름으로 되어있다.)를 사용할까 했으나 업데이트에 문제가 있어서 CentOS 4.7을 선택했다. 현재 CentOS는 5.x 버전이 있으나 Oracle 9i 관련 설치 문서는 RedHat Enterprise Linux 4 기반의 문서가 많기에 CentOS도 4.x 버전대를 선택했다. (CentOS는 RedHat Enterprise Linux의 클론이다.)



다른 UNIX 장비에 Oracle을 설치할때와 순서는 비슷하다.

1. 필수 Software 설치 및 OS 환경 설정하기
2. oracle user 환경 설정하기
3. Oracle 9.2.0.4 설치하기
4. Oracle 9.2.0.8 Patch 설치하기
5. Oracle DB 생성하기


  이번에 새로 나온 따끈한 제품입니다. HP의 하드웨어(DL360 G5)와 Oracle Database, Oracle Enterprise Linux가 결합된 제품입니다.

 나날이 늘어만가는 데이터 때문에 DW 시스템 운영자에게는 커다란 고민거리죠.  그래서일까요. HP와 Oracle이 손잡고 Exadata라는 제품이 나왔습니다.

 
 Oracle에서 공개한 문서를 보면요, Oracle Enterprise Linux 기반의 Oracle 11g Real Application Cluster 제품이네요. 단순히 스토리지라고 생각을 했었는데...

 DataWarehouse를 위해서 익스트림!!!한 성능을 보여준다고합니다.
가격도 익스트림하면 도입하기 힘들지 않을까합니다만...

 그래도 리눅스 기반의 제품이 나오니 반갑네요.
아직까지 공개된 정보가 별로 없어서 리눅스 기반의 RAC 제품이며, 소프트웨어와 하드웨어가 결합된 형식의 제품으로 판매할 계획이라는 것만 아는 상태입니다.

Tablespace의 크기를 MB 단위로 조회하고, 관련 정보를 조회하는 쿼리입니다.

select
ts.status
, data.name
, ts.contents
, extent_management
, data.Mbytes "SPACE(MB)", free.free "FREE(MB)"
, trunc((data.Mbytes-free.free)/data.Mbytes*100,2) "Used(%)"
from (select tablespace_name name, trunc(sum(bytes/1024/1024)) Mbytes
from dba_data_files
group by tablespace_name) data,
(select free.tablespace_name, trunc(sum(free.bytes)/1024/1024,1) free
from dba_free_space free
group by free.tablespace_name) free,
dba_tablespaces ts
where data.name = free.tablespace_name
and data.name = ts.tablespace_name
;


select
ts.status
, data.file_name
, data.name
, data.Mbytes "SPACE(MB)", free.free "FREE(MB)"
, trunc((data.Mbytes-free.free)/data.Mbytes*100,2) "Used(%)"
from (select tablespace_name name, file_name, file_id, trunc(bytes/1024/1024) Mbytes
from dba_data_files) data,
(select tablespace_name, file_id, trunc(bytes/1024/1024,1) free
from dba_free_space free) free,
dba_tablespaces ts
where data.name = free.tablespace_name
and data.name = ts.tablespace_name
and data.file_id = free.file_id
and data.name not in ('UNDOTBS1', 'SYSTEM')
;

위의 회색 박스안의 쿼리를 실행하면 아래와 같은 결과가 나옵니다.
사용자 삽입 이미지




참고 자료
Littleworld Encylopedia
오라클 정보공유 커뮤니티 oracleclub
정보문화사에서 출판된 "Perfect! 오라클 실전 튜닝"이라는 책의 16장에 소개된 내용이며, 오라클 DW Guide문서에도 소개된 내용입니다. 물론 DW Guide는 영문입니다. 그래서 "Perfect! 오라클 실전 튜닝"을 구매하려 했으나 절판되었네요. 아직까지 재고가 있는 곳이 있는지 알아봐야 겠습니다.

오라클 실전 튜닝 상세보기
권순용 지음 | 정보문화사 펴냄
데이터베이스 성능 데이터 수집부터 튜닝까지, 데이터베이스 튜닝을 위한 지침서. 이 책은 데이터베이스의 원리를 파헤치고 실무 중심의 예제를 수록해 데이터베이스의 모든 작업을 최적화하는 방법을 수록하고 있다. 이 책은 튜닝 관련 항목을 체계적으로 기록하였다. 특히 Join, Partition, Cluster Factor, Index 선정 및 튜닝, Application 분석 및 튜닝 등은 독창적이며 시스템의 성능 향상에 많은 효과를 기대할 수 있는 튜



Analytic Function
 Analytic Function은 오라클 8i 버전부터 본격적으로 제공되었다.

 특징
 - 주기적인 데이터 분석 작업에 이용
 - SQL 양의 감소로 인한 운영의 용이
 - 성능 향상
 - Group By 사용 감소
 SQL> SELECT DEPTNO, 이름, SAL COUNT(DEPTNO) OVER (PARTITION BY DEPTNO ORDER BY SAL) FROM 사원;

 10 김희진 250 3
 10 선애란 300 3

 Syntax ~ 함수명 OVER (PARTITION BY 컬럼명 ORDER BY 컬럼명) 함수

 LAG(컬럼명, 숫자, NULL일때 값) OVER (PARTITION BY 컬럼명 ORDER BY 컬럼명)
 LAG(컬럼명, 숫자) OVER (PARTITION BY 컬럼명 ORDER BY 컬럼명)
 숫자에 해당하는 만큼 이전 ROW의 값
 10 김희진 250
 20 선애란 300 250
 30 홍길동 400 300

 LEAD(컬럼명, 숫자) OVER (PARTITION BY 컬럼명 ORDER BY 컬럼명)
해당하는 값 만큼 다음 ROW의 값을 가져온다.
 10 김희진 250 300
 20 선애란 300 500
 30 홍길동 500 400
 40 이산 400 340

 AVG COUNT MIN MAX RANK FIRST_VALUE LAST_VALUE ROW_NUMBER ~ ROW_NUMBER() OVER(PARTITION BY 컬럼명 ORDER BY 컬럼명)

IBM 홈페이지에서 서핑하다 찾은 글입니다. 원문 보기


Solaris에 Oracle 설치 준비

Solaris 시스템에 Oracle을 설치하기 전에 다음 절차를 완료하십시오.

  1. Solaris 시스템에 root로 로그인하십시오.
  2. 시스템에 대해 설정된 커널 매개변수가 설치에 필요한 값을 충족시키거나 초과하는지 확인하십시오. 자세한 정보는 Oracle 8i 설치 안내서를 참조하십시오.
  3. Oracle 데이터베이스와 함께 사용할 마운트 위치를 작성하십시오.
    $ mkdir /u01
    $ mkdir /u02
  4. 다음 명령을 사용하여 콘솔에서 관리 도구 유틸리티를 시작하십시오.
    # admintool
  5. 관리 도구 창에서 찾아보기 -> 그룹을 누르십시오. 관리 도구:그룹 창이 열립니다.
  6. 관리 도구:그룹 창에서 편집 ->추가를 누르십시오. 관리 도구:그룹 추가 창이 열립니다.
  7. 두 개의 그룹, dbaoinstall 사용자 그룹을 작성하십시오.
  8. 관리 도구:그룹 창에서 찾아보기 ->사용자를 누르십시오. 관리 도구:사용자 창이 열립니다.
  9. 관리 도구를 사용하여 oracle이라는 새 사용자를 작성하십시오. 새 사용자 계정에 대해 다음 단계를 완료하십시오.
    1. 계정의 기본 그룹을 사용자가 작성한 oinstall 그룹으로 설정하십시오.
    2. 계정의 보조 그룹을 사용자가 작성한 dba 그룹으로 설정하십시오.
    3. 홈 디렉토리 작성 필드 옆에 있는 단일 선택 단추가 선택되었는지 확인하십시오. 경로 필드에서 oracle 사용자의 홈 디렉토리로 /export/home/oracle을 입력하십시오.
    4. 로그인 쉘을 /bin/sh로 설정하십시오.
    Oracle 설치 프로그램은 이 계정 아래에서 실행되어야 합니다. 이 계정은 Oracle 설치 및 유지보수용으로만 사용됩니다.
  10. Oracle 사용자로 시스템에 사인 온하십시오.
    # su - oracle
    Oracle 계정에 대한 umask 설정값을 보십시오.
    $ umask
    umask는 022로 설정해야 합니다. 계정의 umask가 022로 설정되어 있지 않은 경우, 다음 명령을 사용하여 설정하십시오.
    $ umask 022
    또한 .profile을 수정하여 변경을 적용하십시오.
  11. Oracle 계정용 /export/home/oracle/.profile에 다음을 추가하십시오.
    • Oracle 8i:
      ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
      ORACLE_HOME=$ORACLE_BASE/product/8.1.7; export ORACLE_HOME
      ORACLE_SID=or1; export ORACLE_SID
      ORACLE_DOC=$ORACLE_HOME/doc; export ORACLE_DOC
      ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33
      PATH=$ORACLE_HOME/bin:/usr/bin:/usr/local/bin:/usr/ccs/bin:/usr/ucb:/usr/openwin/bin:.
    • Oracle 9i:
      ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
      ORACLE_HOME=$ORACLE_BASE/product/9.2.0.0.0; export ORACLE_HOME
      ORACLE_SID=or1; export ORACLE_SID
      ORACLE_DOC=$ORACLE_HOME/doc; export ORACLE_DOC
      ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33
      PATH=$ORACLE_HOME/bin:/usr/bin:/usr/local/bin:/usr/ccs/bin:/usr/ucb:/usr/openwin/bin:.
    검색 경로에 /usr/ucb가 필요한 경우, 경로 설정에서 /usr/ccs/bin 뒤에 나열되어 있는지 확인하십시오.
  12. 다음 명령을 사용하여 프로파일의 소스를 지정하십시오.
    $ . ./.profile

이제 Oracle을 설치할 준비가 되었습니다. 해당 Oracle 문서를 참조하여 소프트웨어를 설치하십시오. 설치를 완료한 후 이 절에 포함된 구성 지시사항으로 돌아가십시오.

 곧 Solaris에 Oracle을 설치할 일이 있어서, 미리 연습을 해보고 있습니다. 제게 SUN 장비가 있으면 참 좋겠지만 여건이 안되어서 VMWare Server 버전을 설치하고는 Solaris10에 Oracle 9i를 설치하고 있습니다. 아직은 Solaris에 Oracle 계정 설정 중입니다.

그동안 써오던 Linux와 큰 틀에서는 같지만 실제 사용하게되면 작은 부분들은 조금씩 틀리더군요. 설정 파일이 저장되는 위치라던지... 후훗...

음... 한가지 걱정스러운건 Solaris x86용의 Oracle 9i가 다운로드 페이지에 없었다는 겁니다. VMWare Server에 Solaris로 설정하고 Solaris를 설치하면... 이게 Sparc버전과 같은건지...
아니... VMWare에 Solaris Sparc버전이 설치가 되는건지... 음... 한번 확인해봐야 겠네요.



다음은 oracle 계정의 설정파일 내용입니다.

# groupadd oinstall

# groupadd dba

# useradd -g oinstall -G dba -d /export/home/oracle -s /usr/bin/bash  oracle

# passwf oracle

# su - oracle

-bash-3.00 $ vi .bash_profile
PS1="\s-\v \T $ "
export ORACLE_BASE=/oracle/app
export ORACLE_HOME=$ORACLE_BASE/oracle9i
export ORACLE_SID=TEST1
export ORACLE_OWNER=oracle

export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORACLE_TERM=vt100
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/usr/lib:/usr/ccs/lib
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/usr/lib:/usr/ccs/lib


-bash-3.00 $


현재 여기까지 진행했습니다. ^^;
앞으로 갈길이 머네요.

+ Recent posts