RAC 관리 명령어

Oracle/RAC 2013. 9. 4. 15:19

RAC 관리 Oracle/MSSQL 

 

1) 관리 툴 : EM, CVU(Cluster Verification Utility, RAC 설치 후 검증 툴), srvctl(server control)
      - crsctl(cluster ready services control) : oracle cw 기동/중지 툴
      - oifcfg(oracle interface configuration tool) : 네트워크 인터페이스 할당/해제 툴
      - ocrconfig(OCR configuration tool) : ocr 관리 툴, ocrcheck, ocrdump 등의 유틸리티도 있음
      - vipca : vip 관리


2) Voting Disk 관리
      - voting disk 백업 : $[oratest] dd if=voting_disk_name of=backup_file_name
      - voting disk 복구 : $[oratest] dd if=backup_file_name of=voting_disk_name


      - Multiple voting disk path 추가
        #[root] crsctl stop crs (모든 노드에서)
        #[root] crsctl add css votedisk path -force


      - Multiple voting disk path 삭제
        #[root] crsctl delete css votedisk path


3) OCR 관리
      - OCR location 추가 : #[root] ocrconfig -replace ocr destination_file or disk
      - OCR mirror location 추가 : #[root] ocrconfig -replace ocrmirror destination_file or disk


      - OCR 교체
        . 교체할 OCR 외에 나머지 OCR이 online 상태인지 확인
        . Oracle CW가 해당 노드에서 작동 중인지 확인
        . 다음의 명령어로 OCR 교체
          # ocrconfig -replace ocr [dst file] or [disk]
          # ocrconfig -replace ocrmirror [dst file] or [disk]


        . 교체 작업 중 shutdown 상태였던 node가 있었다면, 해당 노드 restart 시에 다음의 명령어로 repair 작업 수행
          # ocrconfig -repair ocr [device_name]
          # ocrconfig -repair ocrmirror [dev_name]


      - OCR 복구
        # ocrconfig -repair ocrmirror [dev_name]


      - OCR 삭제
        . 제거할 OCR 외에 나머지 OCR이 online 상태 인지 확인
        . 다음의 명령어로 OCR 삭제
          # ocrconfig -replace ocr
          # ocrconfig -replace ocrmirror


      - OCR 백업
        . Oracle이 자동으로 백업 생성/관리
        . 백업 디폴트 위치 : CRS_home/cdata/cluster_name


      - OCR 백업 확인
        # ocrconfig -showbackup


      - OCR 복구
        . OCR 백업 확인
          # ocrconfig -showbackup
          # ocrdump -backupfile [file_name]
        . 모든 노드에서 ORACLE CW 중지
          # crsctl stop crs
        . 복구
          # ocrconfig -restore [file_name]
        . 모든 노드에서 Oracle CW 시작
          # crsctl start crs


      - OCR 내용 확인
        . ocrdump 이용하여 ocr의 내용을 파일로 출력해서 확인


      - OCR 체크 : $ ocrcheck


4) DB와 인스턴스(서버) 관리
      - DB와 인스턴스(서버) 시동 : $ srvctl start instance -d [dbname] -i [inst_name_list]
      - DB와 인스턴스(서버) 중지 : $ srvctl stop instance -d [dbname] -i [inst_name_list]


      - 모든 인스턴스 시작 : $ srvctl start database -d [dbname]
      - 모든 인스턴스 중지 : $ srvctl stop database -d [dbname]


      - DB policy 변경
        . policy 종류 : Automatic(Default), manual
        . 현재 policy 확인 : # srvctl config database -d [dbname] -a
        . Policy 변경 : # srvctl modify database -d [dbname] -y [policy name]
        . Database 추가 및 Policy 설정 : # srvctl add database -d [dbname] -y [policy name]


      - SPFILE 변경
        . 현재 spfile 설정 확인 : # srvctl config database -d [dbname] -a
        . spfile 변경 : # srvctl modify database -d [dbname] -p [spfile위치]


      - RAC NIC 관리
        . NIC 정의 : $ oifcfg setif -global eth0/139.185.141.0:cluster_interconnect
        . NIC 확인 : $ oifcfg iflist
                     $ oifcfg getif
        . NIC 삭제 : $ oifcfg delif -global eht0/139.185.141.0


      - CSS failover 파라메터 설정
        . CSS 파라메터 : Misscount, Disktimeout, Reboottime
        . CSS 파라메터 설정 확인
          $ crsctl get css misscount
          $ crsctl get css disktimeout
          $ crsctl get css reboottime


        . CSS 파라메터 설정 변경
          # crsctl set css misscount [value]
          # crsctl set css disktimeout [value]
          # crsctl set css reboottime [value]


        . CRS 재시작
          # crsctl stop crs
          # crsctl start crs


      - OCR 파일내의 CRS 파라메터 변경
        . VIP 의 CHECK_INTERVAL 값 변경
          # crs_stat -p XXX.vip > XXX.vip.cap
          생성한 XXX.vip.cap 파일을 열어서, CHECK_INTERVAL 값 변경
          crs를 내렸다 올림
          # crs_register -u XXX.vip (.cap는 자동으로 인식하므로, 생략함)
          # crsctl stop crs
          # crsctl start crs


      - 로그 레벨 변경
        . 관련 로그 및 위치
          = CRS Log : $ORA_CRS_HOME/log/hostname/crsd
          = CSS Log : $ORA_CRS_HOME/log/hostname/cssd
          = OCR Log : $ORA_CRS_HOME/log/hostname/client
          = EVM Log : $ORA_CRS_HOME/log/hostname/evmd


        . CSS 로그 레벨 변경
          # crsctl set trace [level] (default 1)
          # crsctl stop crs
          # crsctl start crs


        . OCR 로그 레벨 변경
          $ORA_CRS_HOME/srvm/admin/ocrlog.ini 의 mesg_logging_level 값 조정 (default 0)

 

RAC 인스턴스 개수 확인 : select count(*) from gv$instance;

 

RAC STOP => 역시 관리의 기본은 STOP/START/상태 확인이다.... ^^
  1) 리스너 종료 : $ lsnrctl stop
  2) RAC 의 모든 인스턴스 shutdown : $ srvctl stop database -d [db sid]
  3) ORACLE CW 종료 : # crsctl stop crs (root)

 

RAC START
  1) ORACLE CW 시작 : # crsctl start crs (root)
  2) RAC 의 모든 인스턴스 start : $ srvctl start database -d [db sid]
  3) RAC 관련 서비스 시작(옵션, ex:TAF) : $ srvctl start service -d [db sid]
  4) 리스너 시작 : $ lsnrctl start

 

CRS 상태 확인 : crs_stat -t => 가독성이 떨어짐
                       crsstat     => 가독성이 좋음

 

RAC 내의 DB 목록 확인
  $ srvctl config database
  oracl

 

RAC DB의 설정 확인
  $ srvctl config database -d [sid]
  linux1 orcl1 /u01/app/oracle/product/10.2.0.1/db_1
  linux2 orcl2 /u01/app/oracle/product/10.2.0.1/db_1 

 

RAC 관련 서비스 확인
  $ srvctl config service -d [sid]
  oracltest PREF: oracl2 oracl1 AVAIL

 

RAC 인스턴스 상태 확인
  $ srvctl status database -d [sid]

 

RAC 프로세스 확인
  ps -ef | grep d.bin
  => HP는 3개 있으면 OK(crsd, evmd, css), oprocd는 SGeRAC가 수행함.
     IBM은 4개 있으면 OK(crsd, evmd, css, oprocd)
 
RAC 프로세스 상태 확인
  crsctl check crs

 

crs_stop all  => CRS 부터 인스턴스까지 등록된 모든 것을 중지함(비 권장)
crs_start all => CRS 부터 인스턴스까지 등록된 모든 것을 시작함(비 권장)

crsctl disable crs * => rebooting 후 crs가 자동 시작되는 것을 disable
crsctl enable crs*   => rebooting 후 crs가 자동 시작되는 것을 enable

 

플랫폼 별 RAC 구동 순서

  1) HP : MCSG(SGeRAC) -> CFS -> CRS -> 각 노드의 DB 인스턴스 구동
  2) IBM : GPFS mount -> CRS -> 각 노드의 DB 인스턴스 구동 

 

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

RAC 구성 프로세스  (0) 2013.09.04
인스턴스 시작/종료 명령어  (0) 2013.09.04
단어 개념  (0) 2013.09.04
File System 과 Raw Device의 차이  (0) 2013.09.04
Posted by Any DB
,

단어 개념

Oracle/RAC 2013. 9. 4. 15:16

GRID COMPUTING 특징

분산 네티워크를 통해서 서버에서 감당해야 하는 부하를 분산시켜 사용자에게 원하는 데이터를 빠른속도로 처리할 수 있다는 장점이 있다.
기존의 서버 부하는 서버의 하드웨어적인 SPEC를 업그레이드하여 부하를 줄여야 했으므로 처음 서버의 구성에서 부터 하드웨어의 업그레이드를 고려하여
서버를 구성해야 했다면 분산 네트워크의 경우는 저급 SPEC의 서버라도 네트워크를 통해서 다수의 서버를 통합하여 자원 혹은 정보를 공급하므로
처음 서버의 구성을 할때 서버의 SPEC 고려사항이 상대적으로 줄어들었다.
만약, 부하가 걸린다면 네트워크를 통해서 서버를 붙여주기만 하면 그만이기 때문이다.

 

L2, L3, L4 스위치
두개의 서버를 클러스터링을 하여 운영을 할 경우 하나의 통신 회로에 집중되던 로드를 스위치를 통해서 이를 분산시키며 (Load Balancing) 예상치 못하게 하나의 서버가 shutdown 되었을 경우 정상적으로
가동되고 있는 서버로 이전시키는(FAILOVER) 역활을 하는것이다.
이는 WEB을 기준으로 했을 때 서블릿을 처리하는 WAS에 접근했을 때 두개의 WAS중 현재 로드가 덜한 곳으로 스위치가 유저의 요청을 WEB SERVER에 전달하고,
두개의 WEB SERVER중 로드가 덜한 곳에서 이미지나 음악파일등을 가져와 유저가 원하는 정보를 제공하여 현재 조금 더 여유로운 곳으로 분산시켜준다는 것이다.

 

RAC (Real Application Cluster)
DB 서버의 장애를 대비해서 DB서버를 2대 이상 설치하는 것. 2대의 DB서버의 내용은 반드시 같아야 한다.

 

Clusterware
DB 서버를 관리해주는 프로그램. RAC내에서 어떻게 작동하고 관리하는지 알아야 한다.
Clusterware를 관리하는 것이 어렵다.

 

CRS 프로그램
사용자가 DB에 접속을 할 경우 직접 DB로 접속되는 것이 아니라 CRS로 접속하여 CRS node1과 node2중 어느 node로 접속 할 지를 분배해 준다.
CRS 데몬은 어떠한 장비가 살아있고 죽어있는지의 상태를 모두 알고 있어야 한다. 그리고 자기가 관리하는 서버의 IP 및 서버가 몇대가 있는지를 알고 있어야 한다.
이러한 정보들을 OCR 이라는 파일에 저장되어 있다. Clusterware에 CRS프로그램이 포함되어 있는 것이다.
CRS는 엔진에 CRS라는 Directory가 생성되고 그 안에 설치가 된다.

 

OCR : 모든 자원(Insatance)들을 관리한다.

 

Vote : Instance의 활성, 비활성 상태를 저장하고 있는 파일. CRS가 이 파일을 보고 정보를 얻는다.

 

Publick IP : 외부에서 관리자가 접속하는 IP

Private IP ( Inter Connect) : Instance끼리 정보를 주고 받는다. 이때 사용하는 IP가 private IP이다.

Node1과 Node2가 통신할 때만 사용되는 IP이다. 사용자가 쓰는 것이 아니라 CRS가 Instance끼리 통신하는데 사용한다.

외부에서 접근이 되지 않는다. 그렇기 때문에 private IP는 사설 IP를 많이 부여해 준다.

virtual IP : CRS가 로드밸런싱 할 떄 쓰는 IP

한 서버에 LAN카드가 총2개이다.

 

 

 

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

RAC 구성 프로세스  (0) 2013.09.04
인스턴스 시작/종료 명령어  (0) 2013.09.04
RAC 관리 명령어  (0) 2013.09.04
File System 과 Raw Device의 차이  (0) 2013.09.04
Posted by Any DB
,

 

File system                                    

 

- File system이란?

 

파일시스템(filesystem)이란 운영체제가 파티션이나 디스크에 파일들이 연속되게 하기 위해 사용하는 방법이고 자료구조이다. , 파일들이 디스크상에서 구성되는 방식이다. 파일시스템이라는 말은 파일을 저장하는데 사용되는 파티션이나 디스크를 가리킬 때나, 파일 시스템의 형식을 가리킬 때 사용되기도 한다. file system mount란 단계를 거쳐서 특정 block device를 사용할 수 있게 해주는 것입니다.

 

 

- File system의 구조

 

partition

partition

partition

Disk drive

 

 

Boot block

Super block

Inode list

Data block

File system

 

boot block : file system의 처음에 위치. operation system이 초기화되거나 부팅될 때, 필요한 bootstrap 코드를 포함하고 있다. 시스템이 부팅되기 위해서는 단지 하나의 부트 블록이 필요하며, 모든 시스템에는 부트 블록이 있어야 한다.

super block : filesystem에 대한 모든 중요한 정보를 저장하는 곳이다. file system이 얼마나 큰지, 얼마나 많은 파일을 저장할 수 있는지, 자유 저장공간을 어디에서 찾아야 하는지 등의 다양한 정보를 포함하고 있다. 여기에 들어가는 정보는 파일시스템에 의존한다.

inode list : 파일 시스템이라는 것은 inode(index node)라는 형태의 정보로 저장된다. inode는 항목(파일, 디렉토리, 심볼릭 링크) 자체의 이름을 제외하고는 다른 모든 파일시스템을 저장한다. 파일이름은 디렉토리에 저장되며 이는 inode의 포인터로 이용된다. Inode list inode들의 리스트이며, 관리자에 의해 그 크기가 변경될 수 있다. 파일 시스템의 모든 파일이나 디렉토리는 각기 단 하나의 inode에 의하여 표현된다. 리스트에서 한 inode root inode file system mount 시킨 이후에 접근 가능하게 된다.

data block : 파일 데이터와 관리 데이터를 저장하고 있는 부분이다. 각각의 데이터 블록은 한번에, 단지 하나의 파일에만 할당될 수 있다.

 

 

 

Raw Device                                    

- Raw Device?

 

Raw device file system set up 되지 않은 disk drive이다. Raw Device는 데이터베이스와 같이 주로 자신들의 캐싱 시스템을 갖고 있는 경우에 서비스 프로그램에서 많이 사용한다. 운영체제의 캐싱 시스템은 일반적인 상황에서는 성능에 지대한 영향을  미치지만 데이터베이스 등에서는 이미 자신의 방식으로 캐싱을 하기 때문에 두번의 캐싱으로 인해 부하가 생길 수 있다. 그러므로 운영체제가 지원하는 부분을 사용하지 않게 하기 위해서 raw device를 사용한다. 또한 두 대 이상의 machine과 이 machine들이 공유하고 있는 disk로 구성되는 OPS의 경우, shared disk os file system으로 구성하면 한쪽에서만 이를 볼 수 있고 동시에 access하는 것이 불가능하다. 그러므로 raw device를 사용해야 하며, raw device를 사용하면 os를 거치지 않으므로 보다 빠른 access를 기대할 수 있다.

 

 

장점

1. Raw Device os mount되지 않은 디스크이므로 os kernel에 의해 buffering이 되지 않고 user buffer device간에 직접 data가 전송되므로 disk I/O 성능이 향상되고 cpu overhead가 감소된다.

2. os file system overhead를 피할 수 있다.

3. os buffer size를 줄일 수 있다.

 

 

단점

1. setup 하기 어렵고 backup 절차가 file system 보다 복잡하다.

2. raw device os file을 혼합하여 사용할 경우 os file ulimit parameter size 보다 작아야 한다. 따라서 ulimit를 초과하는 table들은 raw device를 사용하여야 한다.

3. os cylinder 0을 보호하지 못하기 때문에 cylinder 0에서 시작하면 안된다.

 

  

- raw device 운영시 주의사항

² raw device/dev directory 밑에 c type (character special file)으로 나타난다. 
>
crw-rw----   1 oraerp01   dba         64 0x090001 May 15 14:07 rlvabmd01.dbf
crw-rw----   1 oraerp01   dba         64 0x090002 May 15 14:07 rlvabmx01.dbf
crw-rw----   1 oraerp01   dba         64 0x090003 May 15 14:07 rlvahld01.dbf

 

² logical volume 확인

lvdisplay v lvpath

> THVSD01:/dev/vgdbmst2> lvdisplay -v lvctrl1

 

² partitoin 개수 및 size 결정

oracle data file : device = 1 : 1

device size = oracle file size + a (a : 대략 1M 정도. header 정보 보관)

향후 DB가 늘어날 것을 감안하여 size raw device를 미리 생성해둔다.

 

 

² file system file raw device 로 옮기는 방법 : dd if = file of = raw device>
dd bs=20480 if=/DBMS/orarac/oradata/RAC/rlvsystem01.dbf  of=/dev/vgdbmsg1/rlvsystem01.dbf

dd bs=20480 if=/DBMS/orarac/oradata/RAC/rlvtemp01.tmf  of=/dev/vgdbmsg1/rlvtemp01.tmf

dd bs=20480 if=/DBMS/orarac/oradata/RAC/rlvtools01.dbf  of=/dev/vgdbmsg1/rlvtools01.dbf

 

² raw device file copy하는 방법 : dd if = raw device of = file>
dd bs=20480 if=/dev/vgdbmsg1/rlvsystem01.dbf  of=/DBMS/orarac/oradata/RAC/rlvsystem01.dbf

dd bs=20480 if=/dev/vgdbmsg1/rlvtemp01.tmf  of=/DBMS/orarac/oradata/RAC/rlvtemp01.tmf

dd bs=20480 if=/dev/vgdbmsg1/rlvtools01.dbf  of=/DBMS/orarac/oradata/RAC/rlvtools01.dbf

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

RAC 구성 프로세스  (0) 2013.09.04
인스턴스 시작/종료 명령어  (0) 2013.09.04
RAC 관리 명령어  (0) 2013.09.04
단어 개념  (0) 2013.09.04
Posted by Any DB
,

전략적 dba 만들기

Oracle 2013. 9. 4. 12:19

전략적 DBA 만들기 

* 데이터베이스 관리자의 역할

전통적인 의미의 데이터베이스 관리자는 업무적인 지식이나 경험을 바탕으로 특정 DBMS의 기술력을 갖춘 자를 말한다. 그러나 90년대 초부터 국내에 자리잡기 시작한 RDBMS의 경우, 기존 관리 요원들이 새로운 기술을 미처 익히기도 전에 클라이언트/서버 환경과 새로운 전산 환경을 원하던 사용자들의 요구 사항에 의해 빠른 속도로 IT 분야에 파고들었고, 이에 맞춰 클라이언트/서버와 RDBMS에 적응한 신진 전산인력들도 대거 투입되었다.



그러나 이로 인해 업무적인 지식이나 경험을 갖춘 인력들이 대부분 도태되거나 주도적인 역할에서 밀려나게 되었다. 따라서 이후에는 기술력 위주의 인력들이 데이터베이스 관리를 주도하게 되어, 결과적으로 데이터베이스의 소극적인 사용 등 적지 않은 부작용을 낳음으로써 많은 기업들에게 새로운 전산 환경의 장점을 고려할 수 있는 기회를 박탈하게 되었다. 아직까지도 적지 않은 기업들이 데이터베이스 관리자의 역할을 잘못 이해하여 본의 아니게 기술적인 부분으로만 축소하여 관리함으로써 조직의 사업 활성화에 많은 지장을 초래하고 있는 것이 사실이다.

데이터베이스 관리자의 역할에서 업무적인 지식이나 경험을 바탕으로 한 기술적인 관리는 결코 간과할 수 없는 중요한 부분이다. 데이터는 생명력을 가지고 끊임없이 변화하고 있으므로 업무적인 지식이나 경험이 바로 이에 대한 이해를 도울 수 있다. 이러한 이해 없이는 아무리 뛰어난 기술력을 갖추고 있어도 다양한 사업 변화에 적응할 수 없어 전산 환경이 사업 활성화 및 다양화를 저해하는 결과로 이어진다.

가까운 미래의 전산 환경은 이미 예견되고 있는 것처럼 현실 세계의 대부분이 전산 환경내에서 관리될 것이며, 종전의 일정 업무 부분에 특정 소프트웨어를 사용하던 시대와는 분명 차별화될 것이다. 종합적인 사업 전략과 기획하에 이를 구현하는 방편으로서 IT 솔루션들을 경쟁적으로 도입하는 추세가 보편화될 것인데, 이는 이미 많은 분야에서 나타나고 있는 현상이기도 하다.

이러한 현실 내지는 미래의 세계에 적응하기 위해서는 위에서 말한 데이터베이스 관리자로서의 필요충분 조건이 더더욱 강조될 수밖에 없다. 또한 간과할 수 없는 부분은 EC, ERP, KMS, DW 등 이미 여러 분야에 적용되고 있는 IT 솔루션들의 기본이 되고 있는 것이 바로 데이터베이스라는 것이다. 이는 어느 분야에서 어떠한 일을 하더라도 미래의 산업사회에서 경쟁력을 가진 전문인력으로 인정받기 위해서는 적어도 데이터베이스에 대한 지식과 관리 측면을 이해하고 있어야 하며 두 말할 나위 없이 데이터베이스 관리자는 데이터베이스를 기본으로 특정 IT 솔루션에 대한 기술력 또한 갖추어야 할 것이다.

우리는 이미 부지불식간에 많은 부분에서 데이터베이스를 접하고 있다는 것이 이를 반증하고 있다. 가장 비근한 예로, 하루에도 적지 않은 시간을 투자하고 있는 인터넷에도 많은 사이트들이 데이터베이스를 근간으로 회원 관리나 전자상거래에 필요한 상품, 물류 정보들을 관리하고 있다. 보다 쉽고 편한 일상 생활에 데이터베이스라는 것이 매개가 되어 있는 것은 주목할 만하다.


* 효율적인 데이터베이스 관리자 양성 방안

그렇다면, 이러한 데이터베이스 관리자는 어떻게 양성하는 것이 가장 효율적인지 생각해 보도록 하자.

먼저 조직 측면에서 데이터베이스 관리자의 양성 방안을 살펴보면, 최선책으로 해당 조직이나 동종 업계에서 다년간 근무한 경험이 있는 자로 해당 조직의 전체적인 데이터의 흐름을 이해하고 있어야 하며, 사업 분야가 다양하거나 방대한 경우 2인 이상의 데이터베이스 관리자도 고려할 수 있을 것이다. 이에 더하여 전산에 대한 기본적인 지식을 갖춘 인력에게 선택한 DBMS에 대한 집중적인 교육으로 기술력을 갖추는 것이 가장 효율적인 데이터베이스 관리자를 양성하는 길이다. 그러나 현실적으로 개인의 비전이나 관심 분야 등을 추가적으로 고려하면 위와 같은 데이터베이스 관리자를 양성해내기란 쉽지 않다.

차선책으로는 기존 인력 중 업무 이해도가 높은 자와 필요한 기술력을 고루 갖추고 있는 신입 사원급을 선발하여 조화를 이루는 것도 고려할 수 있다. 이 경우의 장점으로는 장기적인 안목에서 미리 위에서 말한 최선책의 데이터베이스 관리자를 현업을 운영하면서 양성할 수 있다는 것이다.


* 개인적 데이터베이스 관리자 준비

이제 본론으로 들어가서 각 개인으로서는 어떠한 자질을 갖추어야 하며 이를 위한 준비는 어떻게 해야 하는지에 대해 알아보자.

이에 앞서 근래 OCP(Oracle Certified Professional)를 준비하는 바람직하지 않은 사례가 있어 언급하려 한다. 모든 자격증이 그렇듯이 자격증은 취득 자체의 의미보다는 충실한 기본을 바탕으로 하는 기술력을 우선해야 한다. 기술력을 쌓아 가는 과정에 부산물로 얻어지는 것이 바로 자격증인 것이다. 그럴 때에만 자격증은 개인의 상품 가치를 높이는 가장 이상적인 포장이 되는 것이다. 그러나 극히 일부분의 몰지각한 사람들이 상업적 또는 비상업적 개인 목적으로 기출 문제를 불법 유포시키는 행위에 현혹되어 단지 아주 국한된 일부분의 지식을 기출 문제를 통해 암기함으로써 개인의 비용과 시간을 낭비하고 있는 사례가 적지 않다. 다시 한번 강조하지만 자격증만의 취득은 아무 의미가 없을 뿐더러 개인에게 있어서는 많은 손해가 있을 뿐이다.

자, 다시 본론으로 돌아와서 데이터베이스 관리자가 되기 위해 개인이 갖추어야 할 자질과 준비를 알아보자. 일단 데이터베이스 관리자는 기술적인 측면에서 누구나 할 수 있는 것은 아니라는 것이다. 현재 4년제 대학 전산학과에서도 학부에서는 데이터베이스 개론 정도를 교육하고 있으며 데이터베이스 관리자가 되기 위해 준비해야 하는 수준은 대학원에서나 전공할 수 있다. 물론 이는 아주 일반적인 얘기일 뿐이며 개인의 능력과 열정에 따라 누구나 할 수 있을 수도 있다.

여기서는 정보통신에 대한 기본 지식이 없는 사람을 기준으로 준비해야 하는 내용과 방법을 소개한다.

정보 통신에 관련한 기본 지식들로는 최소한 1) 소프트웨어가 하드웨어와 결합하여 어떻게 처리되는지에 대한 것과 2) 하나 이상의 사용 가능한 컴퓨터 언어, 3) 기본적인 자료구조 지식, 4) 네트워크 구성과 개념에 대한 이해, 5) 업계에서 가장 많이 사용되는 적절한 OS에 대한 기술 등이 있다.
개인에 따라 기술/지식의 차이는 있을 수 있으나 앞에서 말한 부분만큼은 갖추어져야 하며 이를 위한 준비는 다음과 같이 하는 것이 바람직하다.

1) 번은 특별히 교육을 받지 않아도 본인의 관심만으로도 충분히 소화해 낼 수 있다. 시중서점에 가면 일반적으로 가장 이해하기 쉬운 PC에 대한 아키텍처와 이에 대한 상세한 설명이 나와 있는 책들이 많다. 이 중 본인의 취향에 맞는 것을 골라 1개월에 90%의 이해도를 목표로 시작하면 된다. 이때 반드시 모르는 부분을 알려줄 수 있는 친구나 선후배가 있다면 중도에 포기하는 일은 없을 것이다.

2) 번은 학원 등에서 교육을 통해 습득하는 것이 일반적이나 학원에서 가르치는 것이 컴퓨터 언어의 신택스(syntax)에서 조금 벗어난 수준이므로 이 또한 자가 학습이 가능하며 바람직하다. 단, 시간적인 투자는 본인의 노력 여하에 따라 다를 수 있으나 일반적으로 2개월에서 3개월 정도이면 학원에서 배우는 정도 이상을 습득할 수 있다. 컴퓨터 언어 학습에 있어서 가장 중요한 것은 언어의 선택이다. 추천 언어로는 C, C++, Java 세 가지 중에 하나 정도는 반드시 익혀두는 것이 바람직하다. 다음으로는 2∼3개월에 걸친 언어 학습 후 반드시 자기 주변에서 실제 필요한 부분을 프로그래밍해 보는 것이다. 되도록이면 아주 간단한 것이 좋으며 전화번호 관리나 조금 복잡하지만 일정 관리가 좋을 것이다. 이 과정에서 체크해야 하는 것은 완벽한 프로그램이 아니라 진행 중 본인이 무엇을 모르고 있는지에 대한 확인이다. 이에 대한 답은 본인 스스로 책, 인터넷, 친구, 선후배 등을 통해 알아내야 한다.

3) 번은 시중에 자료구조에 대한 많은 책들이 나와 있으나 일반적인 자료구조에 대한 책보다는 컴퓨터 언어로 구현할 수 있도록 소스가 기술되어 있는 자료구조 책이 바람직하다. 자료구조에 대한 개념을 파악한 후 2)번에서 습득한 언어로 구현해 보는 것이다. 이러한 것들이 정보통신의 기본이 되는 것이다.

4) 번 또한 자가 학습이 가능하며 네트워크에 대한 기본 지식과 개념을 책을 통해 습득한 후 2)번에서 익힌 언어로 네트워크 프로그램을 설명한 책들을 읽는 것이다. 이 부분은 실습을 해 보기가 쉽지 않다는 단점이 있으나 소스 리딩만으로도 소기의 목적은 달성했다고 보면 된다. 단, 네트워크 전문가를 원하지 않는 이상 너무 깊이 들어갈 필요는 없다. 이 분야만 해도 본인들이 감당하기에는 벅찰 수 있다.

5) 번은 가장 중요한 요소 지식 중의 하나로 일반적으로 UNIX를 많이 선호하며 접하기가 어려운 경우 LINUX 등을 통해 학습하는 것도 바람직하다. 필요한 기술은 UNIX에 대한 일반적인 컨피규레이션과 셸 프로그래밍이다. 이 부분은 전문교육기관을 찾아 수강하는 것을 권하고 싶다.

* 데이터베이스 관리자가 갖추어야 할 기술 요소

자, 이제 정보통신에 대한 기본 지식이라고 할 수 있는 부분에 대해 언급했으므로 이제부터는 데이터베이스 관리자가 갖추어야 할 기술적인 요소들을 알아보자.

- 데이터베이스 입문

첫째는, 데이터베이스 입문으로 DBMS의 필요성, 관련 용어, 기본적인 관계형 데이터 모델링(Relational Data Modeling) 등을 학습하는 것이며 이는 대학 교재나 시중 서적을 이용할 수 있다.

- SQL 학습

둘째, SQL(Structured Query Language)에 대한 학습이다. 우리가 미국 사람과 대화를 하기 위해서는 영어를 할 줄 알아야 하는 것처럼 DBMS와 커뮤니케이션하면서 데이터베이스를 관리하기 위해서는 반드시 SQL을 활용할 줄 알아야 한다. 더불어 Oracle의 경우 거의 대부분의 프로그램 인터페이스가 SQL에 프로시저(Procedural) 개념을 추가한 PL/SQL이라는 언어로 되어 있으므로 반드시 습득해야 하나, SQL을 학습하고 다른 컴퓨터 언어 정도를 준비한 사람이라면 아주 쉽게 이해할 수 있을 것이다.

그러나 이 부분에서 가장 간과하기 쉬운 부분이 SQL 튜닝에 대한 부분이다. 같은 데이터를 가지고도 SQL문장을 어떻게 작성했느냐에 따라 결과 도출 시간은 어마어마한 차이를 보인다. 이러한 이유로 튜닝의 많은 부분이 SQL이 들어 있는 애플리케이션 튜닝에 집중되어 있다. 그러므로 SQL 학습시 데이터 처리의 논리적인 부분에 대한 학습을 우선한 후 반드시 SQL 문장 내부 처리에 대해 이해해야 한다.

- Oracle Administration

다음으로는 Oracle Administration에 대한 부분으로 먼저 버전을 선택해야 하는데, 처음 시작하는 분이라면 Oracle10g를 권하고 싶으며 어느 정도 Oracle 경험이 있는 사람이라면 Oracle11g를 준비하는 것이 좋다.

이 부분은 데이터베이스 관리자에게 가장 중요한 부분으로 어느 한 부분도 놓치지 말고 완벽하게 이해해야 한다. 학습 방법으로는 시중에 나와 있는 책자나 또는 스터디 그룹 등을 활용할 수 있으나 이 부분부터는 바람직하지 않은 방법이다. 우선 책자의 경우 한글본인 경우 번역 상태가 좋지 않으며 내용 또한 수준을 고려하지 않아 쉬운 부분과 어려운 부분이 뒤엉켜 있는 것이 대부분이다. 그리고 인터넷을 통한 스터디 그룹이나 질의 응답은 정확히 이해하고 있는 전문가가 동참하고 있거나 지도한다면 별 문제가 없으나 비슷한 수준의 사람끼리 어림짐작으로 학습하는 것은 도리어 해가 될 것이다.

앞에서 말한 절차대로 학습한 자라면 비용을 들여서라도 전문교육기관을 찾아 수강하는 것이 시간과 노력을 줄여 빠른 시간 내에 전문가의 길로 접어 들 수 있는 지름길이다.

- 백업/복구 및 성능 튜닝

다음으로는 백업/복구와 성능 튜닝 과정으로 이 부분들 또한 전문교육기관에서 학습을 받는 것이 바람직하며 학습중 이해도가 떨어진다면 Oracle Administration 부분을 다시 학습할 필요가 있다.

Oracle Administration이 데이터베이스 관리자의 기본 지식이라고 한다면 이 두 부분은 데이터베이스 관리자가 해야 할 가장 중요한
Action들에 대한 가이드라인과 처리 절차를 학습하는 부분이라고 이해하면 된다.

- 개발 툴 익히기

이외에 데이터베이스 관리자로서 조직이나 기업에서 가장 많이 사용되는 개발 툴 하나 정도는 익혀두어야 한다. 되도록이면 인터넷 프로그래밍을 겸할 수 있는 것이 바람직하며 앞에서 배운 기술/지식을 병합하여 관련 Table 5∼10 정도의 시스템을 개발해 보는 것이 좋다. 이때 개발 툴과 DBMS와의 네트워크 관리에 필요한 Network Administration 부분에 대한 학습도 이루어져야 한다.

이상으로 오라클 데이터베이스 관리자가 되기 위한 가장 효율적인 방법과 절차를 적어 보았으나 워낙 개인들마다의 차이가 심하여 되도록이면 전문가를 통해 본인의 상태를 확인받고 적합한 학습 방법을 충고받는 것이 좋다. 마지막으로 여러분 모두가 많은 IT 솔루션 분야의 전문가로서 우뚝 설 수 있기를 바란다.


오라클 데이터베이스와 관련된 단체 및 개인 교육 필요 시
이메일로 요청해 주시면 연락 드리겠습니다. 
감사합니다.
(주)월드빛 대표 황순신 배상
Email : barexem@gmail.com

Posted by Any DB
,


$ ./runInstaller
Starting Oracle Universal Installer...

Checking installer requirements...

Checking operating system version: must be enterprise-4, enterprise-5, redhat-3, redhat-4,

redhat-5, redhat-5.1, SuSE-9, SuSE-10, UnitedLinux-1.0, asianux-1 or asianux-2
                                      Passed

All installer requirements met.

Preparing to launch Oracle Universal Installer from /tmp/OraInstall2009-11-05_04-52-10PM.
 
Please wait ...[oracle@jptyooravmd2 agent]$ Exception in thread "main"

java.lang.UnsatisfiedLinkError: /tmp/OraInstall2009-11-05_04-52-
 
10PM/jre/1.4.2/lib/i386/libawt.so: libXp.so.6: cannot open shared object file:

No such file or directory
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at sun.security.action.LoadLibraryAction.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.awt.NativeLibLoader.loadLibraries(Unknown Source)
        at sun.awt.DebugHelper.<clinit>(Unknown Source)
        at java.awt.Component.<clinit>(Unknown Source)
        at oracle.sysman.emgc.oneclick.OneClickWizard.getGuiDefaults(OneClickWizard.java:239)
        at oracle.sysman.emgc.oneclick.OneClickWizard.<init>(OneClickWizard.java:205)
        at oracle.sysman.emgc.oneclick.OneClick.<init>(OneClick.java:236)
        at oracle.sysman.emgc.oneclick.OneClickInstaller.<init>(OneClickInstaller.java:116)
        at oracle.sysman.emgc.oneclick.OneClickInstaller.process(OneClickInstaller.java:268)
        at oracle.sysman.emgc.oneclick.OneStartup.startup(OneStartup.java:383)
        at oracle.sysman.emgc.oneclick.OneArgs.main(OneArgs.java:700)
        at oracle.sysman.emgc.oneclick.OneStartup.main(OneStartup.java:391)

에러나면


이것은 OUI를 기동하기 위해 필요한 몇몇 package가 install이 되지 않았기 때문에

발생한 것으로, 다음과 같이 해당 RPM을 install하면 문제는 해결된다.

 


패키지설치

rpm -Uvh libXp-1.0.0-8.1.el5.i386.rpm

rpm -Uvh libXau-1.0.1-3.1.i386.rpm

 

반드시 필요한 package는 libXp 하나뿐이지만,
libXau와 의존관계가 있기 때문에 libXau도 함께 install해주었다.

여기서 주의할 점이 있는데, 운영체제의 bit수와 관계없이 32bit의 libXp가 필요하다는 것이다.

 

Posted by Any DB
,

Oracle의 version이 올라감에 따라 새로운 initialization parameters도 생기지만,

제거되는(deprecate) initialization parameters도 계속 생겨납니다.

 

deprecate parameters가 specify된 상태에서 instance를 기동하면,

다음과 같은 warning message가 출력되게 됩니다.

 

 SQL> startup;

 ORA-32004: obsolete and/or deprecated parameter(s) specified
 ORACLE instance started.

 Total System Global Area 1068937216 bytes
 Fixed Size                           2166536 bytes
 Variable Size                    754974968 bytes
 Database Buffers              306184192 bytes
 Redo Buffers                       5611520 bytes

 

 

여기서는 어떤 parameters가 deprecate되었는지 살펴보려고 합니다.

다음의 SQL문을 통해 11.1.0.7.0부터 deprecated parameters를 확인할 수 있습니다.

SQL> select name from v$parameter where isdeprecated = 'TRUE' order by 1;

name

background_dump_dest

buffer_pool_keep

buffer_pool_recycle

commit_write

cursor_space_for_time

drs_start

fast_start_io_target

global_context_pool_size

instance_groups

lock_name_space

log_archive_local_first

log_archive_start

max_commit_propagation_delay

max_enabled_roles

parallel_automatic_tuning

parallel_server

parallel_server_instances

plsql_debug

plsql_v2_compatibility

remote_os_authent

resource_manager_cpu_allocation

serial_reuse

sql_trace

sql_version

standby_archive_dest

user_dump_dest

 

 

26 rows selected.

 

이제 parameter 하나하나에 대해 의미 및 용도,

그리고 deprecate된 이유에 대해서 설명하고자 합니다.

 

1. background_dump_dest

 

    ●  의미 용도

           LGWR, DBWR등의 background process들이 활동을 하면서 발생되는 trace files

           저장되는 곳으로, alert_SID.log 이곳에 저장됩니다.

 

    ●  deprecate 이유

           Oracle11g부터는 새로운 diagnosability infrastructure 제공하는데,

           이것은 "diagnostic_dest"라는 initialization parameter 지정하는 directory

           trace and core files 저장하도록 합니다.

           background_dump_dest initialization parameter file 기술되어 있어도 무시됩니다.

 

2. buffer_pool_keep

 

    ●  의미 용도

           keep buffer 사이즈(blocks) 결정합니다.

 

    ●  deprecate 이유

           Oracle9i부터는 db_keep_cache_size 대신할 있게 되어서 deprecate되었습니다.

 

3. buffer_pool_recycle

 

    ●  의미 용도

           recycle buffer 사이즈(blocks) 결정합니다.

 

    ●  deprecate 이유

           Oracle9i부터는db_recycle_cache_size 대신할 있게 되어서 deprecate되었습니다.

 

4. commit_write

 

    ●  의미 용도

           asynchronous commit 허용할지 여부를 정합니다.

 

           parameter 의미를 설명하기 위해서는

           transaction commit되는 과정을 설명할 필요가 있습니다.

 

           일반적인 transaction 다음과 같은 과정을 거쳐서 처리됩니다.

           (1) user transaction 수행한다

           (2) user 수행하는 DMLs 관련된 data changes log buffer(memory) 담는다.

           (3) user commit 실행하는 순간, 즉시 해당 transaction 관련된 내용을

                log buffer로부터 online redo logs(disk) write한다.

           (4) online redo logs에의 write 끝난 이후에야 user 응답한다.

                (SQL*Plus 경우에는 "Commit complete."라는 message 반환됩니다)

 

           위는 transaction commit되는 동안 발생하는 default과정으로,

           (3)에서는 commit순간에 즉시(immediate) redo logs(disk) write 하고 있으며,

           (4)에서는 redo logs write 끝날 때까지 기다린(wait) 후에 user 응답하도록

           되어 있습니다.

 

           default과정 대신에

           commit되는 타이밍과 관계없이 redo logs를 적당한 timing에 모아서(batch) write하고,

           redo logs에 write가 끝날 때까지 기다리지 않고(nowait) 바로 user에 응답하도록

           설정을 변경할 수도 있습니다.

 

           위와 같이 설정을 변경하는 방법에는 2가지가 있는데,

           하나는 "commit" command option 통해 statement level에서 수행하는 것이며,

           다른 하나는 "commit_write"라는 parameter 사용해서

           instance level에서 적용되도록 하는 것입니다.

 

           일반적으로 SQL*Plus에서 commit 실행하는 것은,

           "commit write immediate wait;" (immediate wait 순서가 바뀌어도 상관없다)

           실행하는 것과 같습니다.

 

           만약 아래와 같은 command 실행하게 된다면,

           commit write batch nowait;   

           transaction 관련된 changes redo log files(disk) 바로 쓰여지지 않을 것이며,

           바로 user에게 "Commit complete."라는 message 반환하게 됩니다.

           설정을 instance level에서 적용시키고자 한다면,

           alter system set commit_write = 'batch,nowait';

           이라고 실행하면 됩니다.

 

           만약 아래와 같은 command 실행하게 된다면,

           commit write immediate nowait;            

           transaction 관련된 changes redo log files 바로 쓰여지게 되지만,

           redo log files에의 write 끝날 때까지 기다리지 않고

           바로 user에게 "Commit complete."라는 message 반환하게 됩니다.

 

           만약 parameter default값에서 다른 값으로 변경하는 경우,

           commit performance 좋아진다는 장점이 있지만,

           redo log files changes disk 저장되지 않은 상태에서 media failure 발생하는 경우,

           disk 저장되지 않은 transactions 대해서는

           instance recovery 통해서 복구할 없다는 단점이 있습니다.

 

    ●  deprecate 이유

           Oracle11g부터는 "commit_logging" "commit_wait"이라는 2개의 parameters 분리시켜서

           동일한 기능을 하도록 바뀌었기 때문에, "commit_write" deprecate되었습니다.

 

5. cursor_space_for_time

    ●  의미 용도

           하나의 SQL문이 실행되기 위해서는 parse execute단계를 거치게 됩니다.

           instance 기동된 , 처음으로 실행된 SQL문에 대해 parse 결과는 

           shared pool 저장되며, 이후에 실행되는 동일한 SQL문에 대해서는 parse 수행하지 않고

           shared pool 저장된 parsed 정보를 이용해서 execute하게 됩니다.

 

           새로운 정보를 shared pool(library cache) 기록하려는 순간에

           shared pool 있게 되면 우선 closed cursor정보를 제거하고,

           다음은 LRU(Least Recently Used) algorithm 따라 낡은(aged) 정보를 제거합니다.

           만약 open cursors shared pool 꽉찬 경우에는

           open cursor parsed 정보가 shared pool에서 제거되기도 합니다.

 

           그러므로 다량의 SQL문이 빈번하게 발행되는 환경에서는

           open cursor 대해, parse단계에서 존재했었던 parsed정보가

           execute단계에서 없어져 버리는 경우가 간혹 발생하게 됩니다.

           결국 다시 parse(hard parse)해야 하므로 performance 떨어지는 원인이 됩니다.

           하지만 "cursor_space_for_time" true 설정하게 되면,

           open cursor parsed정보가 제거되지 않게 됩니다.

 

           그런 의미에서 "cursor_space_for_time" 통해

           경우에 따라서는 약간의 성능향상을 기대할 있습니다.

 

    ●  deprecate 이유

           위에서 언급한 것처럼 open cursors shared pool 꽉차는 경우는

           shared pool 굉장히 작은 경우에나 발생하며,

           Oracle10g이후에는 Automatic Memory Management기능을 통해

           자동으로 shared pool 크기가 관리되기 때문에

           parameter 성능향상에 기여하는 경우는 거의 없어지게 되었습니다.

           initialization parameter수의 증가는 DB관리자를 피곤하게 뿐이므로,

           거의 활용도가 없는 parameter deprecate 것은 매우 긍정적이라고 생각됩니다.

 

6. drs_start

 

    ●  의미 용도

           DMON(Data Guard Broker)이라는 background process를 기동할 지 여부를 정합니다.

           Data Guard Broker란, Data Guard환경을 감시, 관리할 수 있도록 해주는 framework로,

           DGMGRL이라는 command-line interface(dgmgrl 이라는 binary file이 존재함)

           혹은 Enterprise Manager를 통해 Data Guard Broker기능을 이용할 수 있습니다.

           drs_start라는 parameter를 true로 설정해야만

           Data Guard Broker가 제공하는 기능을 이용할 수 있습니다.

           drs_start를 true로 설정하지 않고 Data Guard Broker를 활용하려고 하는 경우,

           다음과 같이 error가 발생하게 됩니다.

DGMGRL> create configuration 'DRSolution' as primary database is 'North_Sales' connect identifier is North_Sales.foo.com;
Error:
ORA-16525: the Data Guard broker is not yet available
...

 

 

    ●  deprecate 이유

           Oracle9iR2부터 dg_broker_start라는 parameter로 대체되면서 deprecate되었는데,

           drs_start라는 parameter명이 Data Guard Broker를 떠올릴 만한 이름이 아닌 관계로,

           보다 구체적이고 합리적인 parameter명으로 대체된 듯 합니다.

 

7. fast_start_io_target

 

    ●  의미 용도

           이 parameter에 대해 설명하기 전에

           data가 변경되는 과정에 대해서 간단히 언급하고자 합니다.

 

           Oracle에서는 transaction을 통해 변경된 data정보를 바로 disk에 기록하지 않고,

           SGA의 buffer cache에 저장한 후, Oracle 스스로 system의 부하를 고려하여

           적당하다고 판단되는 타이밍에 몰아서(batch) disk에 기록을 하도록 되어 있습니다.

 

           그러므로 buffer cache상에는 memory상의 정보는 변경되었지만

           disk에는 아직 반영되지 않은 상태의 block이 항상 존재하게 됩니다.

           이런 block을 Oracle에서는 "dirty block"이라고 부릅니다.

           이 dirty block은 checkpoint가 발생하는 타이밍에 disk에 쓰여지게 됩니다.

 

           fast_start_io_target는 dirty blocks의 수를 제한하기 위한  parameter로,

           만약 1,000이라는 값을 설정했다면, dirty blocks가 1,000개를 넘기 전에

           dirty blocks를 disk에 write하게 됩니다.

 

           그러므로 이 fast_start_io_target를 보다 작은 값으로 설정할수록,

           checkpoint에 소요되는 시간이 줄어들며,

           roll forward할 양이 적어지므로 instance recovery에 걸리는 시간도 줄어들게 됩니다.

           참고로, "0"으로 설정하면 이 기능이 disable됩니다.

 

    ●  deprecate 이유

           10.1.0.4부터 fast_start_mttr_target parameter로 대체되면서 deprecate되었는데,

           그 이유는 fast_start_io_target를 잘못 설정할 경우,

           지나친 부하로 system이 다운될 수 있기 때문입니다.

 

8. global_context_pool_size

 

    ●  의미 용도

           지금까지 들어 본 적도 없는 parameter인데,

           조사해 보니, Oracle9i의 신기능과 더불어 등장한 parameter라고 합니다.

 

    ●  deprecate 이유

           10.1.0.4부터 deprecate되었는데, Oracle10g부터 Automatic Memory Management가

           주류가 되면서 이 parameter의 설정이 불필요해 진 것 같습니다.

 

 

9. instance_groups

 

 

    ●  의미 용도

           RAC환경에서만 의미를 가지는 parameter로,

           각각의 instance에 대해 자신이 속할 instance_group을 설정할 수 있으며,

           comma(,)로 구분하여 복수의 groups에 속하도록 설정할 수도 있습니다.

 

           여기서 설정되는 instance group은 parallel execution을 수행할 때만 의미를 가지므로,

           반드시 parallel_instance_group이라는 parameter와 함께 사용되어야 합니다.

           (이상하게도 parallel_instance_group parameter는 아직 deprecate되지 않았습니다.)

 

           예를 들어, instance 4개로 구성된 RAC이 있고,

           instance 1,2에 대해서만 instance_groups의 값을 sales라고 설정하고,

           parallel_instance_group값을 sales라고 설정한 후에 parallel execution을 실행하게 되면,

           sales group에 속하지 않은 instance 3,4는 parallel execution에 관여하지 않고

 

           오직 instance 1,2만 parallel execution에 참여하여 관련 processes가 발생하게 됩니다.

 

           사실 저 역시도 이 parameter를 사용해 보지 않아서 충분히 이해가 되지는 않습니다.

 

    ●  deprecate 이유

           11.1.0.6부터 deprecate되었는데, 정확한 이유는 모르겠지만,

           아마도 이 parameter의 사용법이 어려워서 

           제대로 활용하기가 힘들기 때문이 아닐까 싶습니다.

 

10. lock_name_space

 

    ●  의미 용도

           DLM(Distributed Lock Manager)가 lock이름을 생성하기 위해 사용하는 namespace를

           지정하는 parameter라고 하는데 잘 이해가 안되네요.

           (LOCK_NAME_SPACE specifies the namespace that the distributed lock manager (DLM)

           uses to generate lock names)

           이 parameter는, primary database와 동일한 host상에 standby database 혹은

           동일한 db_name을 가지는 clone database를 생성하고자 하는 경우에

           반드시 값을 설정해야 합니다.

 

           제가 혼자 Oracle을 공부하던 시절에 하나의 PC에

           primay 뿐만 아니라 standby database까지 생성한 적이 있습니다.

           이 당시에 lock_name_space를 설정하지 않으면 error가 발생했던 기억이 납니다.

 

    ●  deprecate 이유

           10.1.0.4부터는 db_unique_name이라는 새롭게 등장한 parameter가

           lock_name_space의 역할을 대신하게 되면서 deprecate되었습니다.

11. log_archive_local_first

 

    ●  의미 용도

           Data Guard환경에서만 의미를 가지는 parameter로,

           (=true) primary host상의 local destination에 archiving을 반드시 끝낸 이후에,

           standby host에 archiving을 수행할지, 아니면

           (=false) primary 및 standby host상에서 동시에 archiving을 수행할지를

           정하는 parameter입니다.

 

           전자의 경우에는, local에 archiving이 끝난 archived redo log를 standby host에 전송하는

           형태를 가지기 때문에 log transport service를 archiver process(ARCn)가 담당하게 되며,

           후자의 경우에는, standby destination에 동시에 redo data를 전송하기 때문에 

           log writer process(LGWR)가 log transport service를 담당하게 됩니다.

           그러면 standby host상의 archiver process는 전송받은 redo data를 가지고

           archived redo log를 생성하게 됩니다.

 

           이 parameter는 Oracle10g부터 등장했으며, 그 이전 version에서는,

           LGWR을 사용해서 동시에 archiving을 수행하는 것이 default설정이었습니다.

           하지만 Oracle10g이후부터는 "log_archive_local_first"의 default값이 "true"로,

           즉, local에 archiving이 끝난 이후에 standby host에 전송하는 방식이 default설정입니다.

 

    ●  deprecate 이유

           Oracle11g부터 deprecate되었으며, 정확한 이유는 모르겠지만, 아마도           

           "log_archive_local_first"값을 "false"로 설정할 필요가 있는 경우가 거의 없고,

           설정해도 큰 메리트가 없기 때문으로 보입니다.

 

12. log_archive_start

 

    ●  의미 용도

           ARCHIVELOG mode상태의 database가 online redo log가 full되는 시점에

           자동으로 archiving을 하도록 하기 위해 필요한 설정입니다.

 

    ●  deprecate 이유

           Oracle10g부터 deprecate되었는데,

           Oracle9i까지는 ARCHIVELOG mode상태의 database에 대해

           이 parameter값을 "true"로 설정함으로서 자동으로 archiving이 수행되게 할 수도 있고,

           이 parameter값을 "false"로 설정해서 수동으로만 archiving을 할 수 있도록

           설정할 수도 있었습니다.

           하지만 실제로 수동 archiving기능은 거의 사용되지 않았기 때문에,

           Oracle10g부터는 ARCHIVELOG mode로 설정을 하게 되면

           그 순간부터 자동 archiving이 수행되도록 바뀌었습니다.

           그 결과, "log_archive_start"라는 parameter는 쓸모가 없게 되었습니다.

 

13. max_commit_propagation_delay

 

    ●  의미 용도

           RAC환경에서만 적용되는 parameter인데,

           한 번도 본 적도 없고 사용한 적도 없는 parameter라 잘 모르겠네요.

           아래의 페이지에 잘 설명되어 있는 것 같습니다.

           http://wiki.ex-em.com/index.php/MAX_COMMIT_PROPAGATION_DELAY

 

    ●  deprecate 이유

           10.2.0.3부터 deprecate되었습니다.

 

 

14. max_enabled_roles

 

 

    ●  의미 용도

           한 user에 grant할 수 role의 개수의 최대치를 정하는 parameter입니다.

           예를 들어 이 값이 "10"인 경우, 10개의 roles까지만 grant할 수 있습니다.

           (이 "10"개의 role에, 실제 자신의 schema내의 objects에 접근할 수 있는 role과

           public objects에 접근할 수 있는 role, 이 2가지 role은 포함되지 않습니다)

 

    ●  deprecate 이유

           Oracle10g부터 deprecate되었으며, 148개까지의 roles를 grant할 수 있습니다.

           처음에는 이 parameter가 왜 생겨났는지 도무지 이해가 안되었는데,

           이 parameter를 적은 값으로 설정하면 할수록 

           resource(특히 memory)를 절약할 수 있는 잇점이 있는 것 같습니다.

           하지만 Oracle10g가 등장한 시절부터는 memory값이 많이 저렴해졌기 때문에,

           이 parameter의 설정을 통해 얻을 수 있는 잇점이 거의 없어진 것 같습니다.

 

15. parallel_automatic_tuning

 

    ●  의미 용도

           PX(parallel execution)와 관련된 다음의 5개의 parameters의 설정에 대해,

           true인 경우에는 Oracle이 기존 설정치를 무시하고 자동으로 설정을 변경할 수 있게 하며,

           false인 경우에는 자동으로 tuning하지 못하도록 하는 parameter입니다.

           (1) parallel_execution_message_size

           (2) parallel_adaptive_multi_user

           (3) large_pool_size

           (5) parallel_max_servers

 

           이 parameter가 의미를 갖기 위해서는, 병렬처리를 하고자 하는 target tables에 대해

           "parallel" clause를 반드시 지정해야 합니다.

    

           (4) processes

    ●  deprecate 이유

           Oracle9i까지는 를 true로 설정함으로서 parallel execution의 성능향상이 있었는데,

           즉, 위의 5개의 parameters값의 새로운 default값이 의미가 있었지만, 

           Oracle10g부터는 이 default값이 오히려 성능을 떨어뜨리는 경우가 많아지면서

           deprecate되게 되었다고 합니다.

           Oracle10g부터 SGA까지도 Oracle이 자동으로 관리해 주는 방식으로 변하면서,

           이 parameter가 불필요해 진 것 같습니다.

16. parallel_server

 

    ●  의미 용도

           database를 Oracle Parallel Server(OPS)환경에서 구동시키기 위해서 필요한 parameter로,

           single-instance database에서는 "false"라는 값을 가지게 되며,

           multi-instance database(OPS)환경에서는 "true"값이 설정되어야 합니다.

 

    ●  deprecate 이유

           이 OPS는 Oracle8i 까지 존재했던 cluster환경을 일컫는 용어이며,

           Oracle9i 이후에는 OPS 대신에 RAC(Real Application Cluster)라는 용어가 사용되고 있습니다.

           물론 용어만 달라진 것은 아니며, 내부 메커니즘도 크게 달라졌습니다.

           Oracle9i 부터 "parallel_server"를 "cluster_database"라는 parameter가 대체하게 되면서,

           이 parameter는 deprecate되었습니다.

 

17. parallel_server_instances

 

    ●  의미 용도

           database를 Oracle Parallel Server(OPS)환경에서 구동시키기 위해서 필요한 parameter로,

           OPS환경에 참가한 instances의 수가 설정됩니다.

           single-instance database에서는 당연히 "1" 이라는 값을 가지게 되며

           multi-instance로 구성된 OPS환경에서는 1보다 큰 값을 가지게 됩니다.

 

    ●  deprecate 이유

           앞의 "parallel_server"과 마찬가지로 

           "parallel_server_instances"는 OPS환경에서 사용되던 parameter로,

           Oracle9i 부터는 "cluster_database_instacnes"로 대체되면서 deprecate되었습니다.

 

18. plsql_debug

 

    ●  의미 용도

           PL/SQL의 debug를 돕기 위한 parameter입니다.

           programming을 마치고 debugging과정에 들어가게 되면,

           어디에서 문제가 발생하고, 특정 변수에 어떤 값이 들어가는지, 등등을 알기 위해,

           program 내부에 debug관련 code를 넣고,

           monitor등의 standard output에 debug관련 문자열을 출력시켜 가면서

           debugging하는 경우가 많이 있습니다.

           이 debug용 code는 debug가 끝나면 지워야 하는데, 또 다른 bug가 발생하게 되면

           다시 debug용 code를 입력해야 하는 번거로운 일이 생기게 됩니다.

 

           이 번거로운 과정을 줄이기 위해, 등장한 parameter가 plsql_debug입니다.

           아래의 예와 같이, 이 parameter값을 통해 debug문의 출력여부를 제어할 수 있습니다.

SQL> show parameter plsql_debug

name

type

value

plsql_debug

boolean

false

 

SQL> create or replace function sample_plsql return date

    2   is

    3     currentDate date;

    4   begin

    5     $if $$plsql_debug $then

    6       dbms_output.put_line('debug point----------1');

    7     $end

    8     select sysdate into currentDate from dual;

    9     return currentDate;

  10   end sample_plsql;

  11   /

 

Function created.

 

SQL> select sample_plsql from dual;

sample_plsql

2010/02/25 16:20:36

 

-- 아래에서는 session level에서 "plsql_debug" parameter값을 변경했지만

-- system level에서 변경도 가능합니다

SQL> alter system set plsql_debug = true;

Session altered.

 

-- 아래의 결과를 보면 이상하게도 "plsql_debug"값을 "true"로 변경했지만

-- debug문이 출력되지 않았습니다

SQL> select sample_plsql from dual;

sample_plsql

2010/02/25 16:21:06

 

SQL> alter function sample_plsql compile;

Function altered.

 

-- recompile하고 나서야 비로서 변경된 "plsql_debug"값이 반영되어

-- debug문이 출력되는 것을 알 수 있습니다.

SQL> select sample_plsql from dual;

sample_plsql

2010/02/25 16:20:36

 

debug point----------1

 

SQL> alter system set plsql_debug = false;

Session altered.

 

SQL> alter function sample_plsql compile;

Function altered.

 

-- "plsql_debug"를 "false"로 설정한 뒤 compile했더니 예상대로

-- debug문이 출력되지 않았습니다

SQL> select sample_plsql from dual;

sample_plsql

2010/02/25 16:21:06

 

 

SQL> alter function sample_plsql compile debug;

Function altered.

 

-- debug option을 붙여서 compile하게 되면, 아래의 결과와 같이

-- "plsql_debug"값과 관계없이 debug문이 출력됩니다.

SQL> select sample_plsql from dual;

sample_plsql

2010/02/25 16:20:36

 

 

debug point----------1

 

            ※ 위의 결과는 Oracle10gR2 환경에서 실행한 결과로서 다른 version에서는

                다른 결과가 나타날 수 있습니다.

 

    ●  deprecate 이유

           이 parameter는 Oracle11g부터 deprecate되었는데,

           위에서처럼, Oracle10gR2부터는 alter...comple문에 debug option이 사용가능해 지면서

           구태여 "plsql_debug" parameter를 설정할 필요가 없어지게 되었습니다.

 

19. plsql_v2_compatibility

 

    ●  의미 용도

           Oracle이 제공하는 PL/SQL에는 여러 가지 version이 있습니다.

           Version 1.0 부터 시작해서 1.1(Oracle6)→2.0(Oracle7.0)→2.1(Oracle7.1)→2.2(Oracle7.2)

           →2.3(Oracle7.3)→8.0(Oracle8.0)→... 으로 계속 version이 증가하고 있으며.

           2.3에서 8.0으로 갑자기 크게 증가한 이유는 PL/SQL에 엄청난 성능향상이 있어서 라기 보단

           PL/SQL version을 database version에 일치시키는 편이 좋다고 판단했기 때문입니다.

 

           PL/SQL 2.x version에는 PL/SQL 8 이후의 version에서 허용하지 않는 기능이 몇가지 있는데,

           이 "plsql_v2_compatibility" parameter를 "true"로 설정하게 되면,

           PL/SQL library 및 compiler가 2.x version에 기반해서 동작하게 됩니다.

           이 경우, PL/SQL 8 이후의 version에서만 허용하는 기능을 사용하면 error가 발생하게 됩니다.

 

    ●  deprecate 이유

           Oracle11g부터 이 parameter가 deprecate되었는데, 더 이상 Oracle7에 대한 compatibility를

           support하는 것은 의미없다고 Oracle이 판단한 것 같습니다.

 

           PL/SQL version은 아래와 같이 확인할 수 있는데, 보통 database version과 동일합니다.

SQL> select * from v$version;

 

banner

Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production

PL/SQL Release 11.1.0.7.0 - Production

CORE    11.1.0.7.0      Production

TNS for Linux: Version 11.1.0.7.0 - Production

NLSRTL Version 11.1.0.7.0 - Production

 

 

 

20. remote_os_authent

 

 

    ●  의미 용도

           "os_authent_prefix" parameter에 설정된 문자열을 prefix로 하는 O/S user에 대해

           remote host로부터 database에 access를 가능케 하기 위한 parameter입니다.

           거의 사용할 일이 없기 때문에 자세한 설명은 생략합니다.

 

    ●  deprecate 이유

           Oracle11g부터 deprecate되었으며, 그 이유는

           잘 사용되지도 않을 뿐더러 보안상의 약점이 될 수 있기 때문인 것 같습니다.

21. resource_manager_cpu_allocation

 

    ●  의미 용도

           Resource Manager 이용할 있는 CPU수를 제한하는 parameter입니다.

           Resource Manager 설정된 Resource Plan 따라 database 연결된 sessions 대해

           CPU 배분하는데, 보통 해당 server 모든 physical CPUs 활용됩니다.

           하지만, parameter값을 실제 CPU수보다 적은 값으로 설정하게 되면,

           설정된 CPU만이 database sessions handling 사용됩니다.

 

           예를 들어, physical CPUs "4"이고, 값으로 "3" 설정했다면,

           3개의 CPUs만이 database session handling 관여하고 1개의 CPU 관여하지 않게 됩니다.

 

    ●  deprecate 이유

            parameter 역사는 무척 짧습니다.

           11.1.0.6.0, 즉 11g에서 처음 등장했으며, 11.1.0.7.0에서 deprecate되었습니다.

           deprecate 정확한 이유는 모르겠습니다만,

           아마 값을 적절하게 설정하는 것이 무척 어렵고,

           설정했더니 오히려 performance 떨어지는 경우가 많았던 같습니다.

 

22. serial_reuse 

 

    ●  의미 용도

           어떤 종류의 cursor 대해 serial-reusable memory영역에 저장되도록 하여,

           재활용(reuse) 가능하게 정하는 parameter입니다.

           물론 동일한 cursor(동일한 SQL, PL/SQL block) 대해서만 재활용이 가능하며,

           여기서 말하는 "재활용"이란, 동일한 cursor 대해, SGA 저장되어 있는 parse 정보를

           재활용하는 것으로 다시 parse 하지 않도록 하는 것을 말합니다.

 

           값으로는, select, dml, plsql, all, disable 이라는 5가지 값을 설정할 있습니다.

           "select", select문에 대해서만 parse정보를 serial-reusable memory 저장한다는 것이며,

           "all", "select, dml, plsql" 모든 종류의 parse정보를 저장한다는 것을 말합니다.

 

    ●  deprecate 이유

            parameter 8.1.7.4.0에서 처음 등장했으며, 10g에서 deprecate되었습니다.

           deprecate 정확한 이유는 모르겠습니다만,

           metalink 확인해 결과, serial_reuse 설정하는 것과 관련해서

           여러 가지 bugs 보고되고 있습니다.

           , parameter 세밀하게 설정함으로서 얻는 성능향상의 효과보다는

           bug 때문에 얻게 되는 손실이 크다고 판단되어 deprecate 같습니다.

 

           그리고 parameter memory 부족하던 시절에 보다 효율적으로

           memory 활용하고자 하는 목적에서 등장했기 때문에,

           Oracle10g 등장한 시절은 SGA 여유도 많이 생겼고,

           결과 이렇게까지 세심한 tuning 필요없어 졌다고 보입니다.

 

23. sql_trace 

 

    ●  의미 용도

           SQL trace 가능여부를 정하는 parameter입니다.

           유명한 parameter이므로 자세한 설명은 생략하겠습니다.

 

    ●  deprecate 이유

 

            sql_trace라는 initialization parameter값을 SQL Trace 하기 위해 true 설정하게 되면

           해당 database상에서 발생하는 모든 SQL 대해 trace정보가 수집됩니다.

           사용자가 발행하는 SQL 제외하고도 그런 SQL 처리하기 위해 내부적으로

           data dictionary 참조하는 SQL문이 다량으로 발행되는데 이것까지 수집됩니다.

           이런 모든 SQL 대해 trace정보를 수집하는 것은 system 부하가 걸리게 됩니다.

           자칫하면 trace file 인해 disk full 발생 수도 있습니다.

           이런 배경에서 initialization parameter level에서 sql_trace true 설정하지 못하도록

           deprecate시킨 것으로 보입니다.

 

           (dbms_monitor database_trace_enable database_trace_disable 사용해서

           database level에서 SQL trace 활성화시킬 있습니다.)

           

            parameter Oracle10gR2부터 deprecate되었으며,

           session level에서 SQL trace기능을 enable/disable하는 것은

           dbms_monitor dbms_session package session_trace_enable

           session_trace_disable함수가 대신하게 되었습니다.

 

           dbms_monitor package의 관련 함수의 경우에는 별도의 권한이 필요하지만,

           dbms_session의 경우에는 별도의 권한없이 실행할 수 있습니다.

           두 함수다 다음과 같이 parameter없이 실행할 수 있으며,

           그 경우 접속중인 session에 대해서 SQL trace를 enable/disable시킵니다.

 

SQL> execute dbms_session.session_trace_enable();

PL/SQL procedure successfully completed.

 

SQL> select count(*) from emp;

 

SQL> execute dbms_session.session_trace_disable();

PL/SQL procedure successfully completed.

 

 

 

24. sql_version (생략)

 

25. standby_archive_dest

 

    ●  의미 용도

           Data Guard상에서 standby host가 primary host로부터 전송된 archived redo logs를

           저장하는 directory를 지정하는 parameter입니다.

 

           기본적으로 primary host로부터 전송된 archived logs는 "log_archive_dest_n" parameter의

           "location" attribute에 명시된 directory에 저장되는데,

           이것과 다른 directory에 저장하고자 하는 경우에 "standby_archive_dest"를 설정합니다.

           그러므로 이 2 parameters가 모두 설정된 경우에는 "standby_archive_dest" parameter에

           설정된 값이 "log_archive_dest_n" parameter의 값을 override합니다.

 

           참고로, standby host상에 archived logs가 저장되는 directory를 정리하면,

           다음과 같은 rule에 따라 결정됩니다.

           (1) "standby_archive_dest"값이 설정되어 있으면 그 곳에 저장됩니다.

           (2) "standby_archive_dest"값이 설정되어 있지 않으면,

                "valid_for=(standby_logfile, *)"를 포함하는 "log_archive_dest_n"의 "location"

                attribute에 명시된 directory에 저장됩니다.

           (3) "standby_archive_dest"값이 설정되어 있지 않으며,

                "valid_for=(standby_logfile, *)"를 포함하는 "log_archive_dest_n"이 없는 경우,

                "compatibility" parameter값이 10.0 이상인 경우에는,

                유효한 값이 설정된 "log_archive_dest_n"의 "locationattribute에 따라 결정됩니다.

           (4) 위의 조건 중 어느 것에도 해당하지 않는 경우에는,

                "standby_archive_dest" parameter의 default값(default location)에 저장됩니다.

                이 default값은 "show parameter standby_archive_dest"가 아닌,

                다음의 SQL을 통해 확인할 수 있습니다.

                (Oracle11g에서는 "standby_archive_dest" parameter의 default값은,

                 "log_archive_dest_n"의 "locationattribute에 명시된 directory와 동일합니다)

SQL> show parameter log_archive_dest_1

name

type

value

log_archive_dest_1

string

location=/oradata/DTMRTCN/archivelog valid_for=(all_logfiles, all_roles) db_unique_name=DTMRTCN

 

SQL> show parameter standby_archive_dest

name

type

value

standby_archive_dest

string

?/dbs/arch

 

SQL> select dest_name, destination from v$archive_dest

  2  where dest_name = 'STANDBY_ARCHIVE_DEST';

 

dest_name

destination

STANDBY_ARCHIVE_DEST

/oradata/DTMRTCN/archivelog

    ●  deprecate 이유

           이 parameter는 Data Guard의 개념이 등장한 8.1.7에 처음 등장하였고,

           Oracle11g부터 deprecate되었습니다.

 

           위에서 설명한 것 처럼, standby_archive_dest값이 설정되어 있지 않은 경우에는, 

           log_archive_dest_n이 가리키는 directory에 archived redo logs가 저장되므로

           standby_archive_dest가 반드시 필요한 것은 아닙니다.

           보통 standby_archive_dest parameter자체를 설정하지 않는 경우가 많으며,

           값을 설정하는 경우에는 일반적으로 log_archive_dest_n과 동일한 값을

           설정하는 경우가 많습니다.

 

           즉, 혼란만 부추길 뿐 반드시 필요한 parameter가 아니기 때문에 deprecate되었습니다.

           

26. user_dump_dest

 

 

    ●  의미 용도

           user process와 관련된 debugging trace files이 저장되는 directory를 가리킵니다.

 

    ●  deprecate 이유

           Oracle11g부터는 새로운 diagnosability infrastructure 제공하는데,

           이것은 "diagnostic_dest"라는 initialization parameter 지정하는 directory

           trace and core files 저장하도록 합니다.

           user_dump_dest initialization parameter file 기술되어 있어도 무시됩니다.

 

 

Posted by Any DB
,

 

'Oracle > Trouble Shooting' 카테고리의 다른 글

ORA-01455  (0) 2013.09.04
Runinstaller 시 자바 에러  (0) 2013.08.27
ORA-19809, ORA-19804, ORA-19815  (0) 2013.08.14
ORA-02097, ORA-00439 ERROR  (0) 2013.08.08
ORA-4031 unable to allocate %s bytes of shared memory  (0) 2013.08.01
Posted by Any DB
,

이 경우는 대부분이 데이터 입력, 삭제 또는 복구 작업시에 일어나며, Archive Mode 운
영중일때 발생한다.

[운영 로그 확인]

c:\> type C:\oracle\product\10.2.0\SID\alert_SID

; 오류가 발생하면 위와 같은 로그 파일을 생성한다.

Thu Apr 06 21:45:55 2006
Errors in file c:\oracle\product\10.2.0\admin\oradb\bdump\oradb_arc0_3556.trc:

ORA-19815: 경고: db_recovery_file_dest_size/2147483648바이트는 100.00%가 사용 중이므로, 나머지 0바이트를 사용할 수 있습니다.

; 위의 로그를 확인 한 결과 dest_size가 full이 되어서 발생한 행걸림 현상을 확인.

[로그 확인]

sql> archive log list;

데이터베이스 로그 모드 아카이브 모드
자동 아카이브 사용
아카이브 대상 USE_DB_RECOVERY_FILE_DEST
가장 오래된 온라인 로그 순서 1
아카이브할 다음 로그 1
현재 로그 순서 3

sql> show parameter archive;

NAME TYPE VALUE
-------------------------- ------------------------- -------------------------------
archive_lag_target integer 0
log_archive_config string
log_archive_dest string
log_archive_dest_1 string

; 위의 내용을 보면 log_archive_dest에 보면 Value가 없다. 진행이 안된 상태이다.

sql>show parameter dest;

; dest에 관련된 파라메터를 확인한다.


 

[해결방안1]
DB를 Shutdown immediate를 한다.
initSID.ora 파일 내용중 dest_size line을 주석처리한다.
DB를 Startup 한다

[해결방안2]
sql> alter system set db_recivery_file_dest_size=3000M;
운영중인 DB에서 dest_size를 늘려준다.


alert.log파일에 이런 에러가 떴거든요...

ORA-19815: 경고: db_recovery_file_dest_size/2147483648바이트는 85.28%가 사용 중이므로,
나머지 316203008바이트를 사용할 수 있습니다.


Thu Jul 13 10:54:55 2006
************************************************************************
You have following choices to free up space from flash recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
system command was used to delete files, then use RMAN CROSSCHECK and
DELETE EXPIRED commands.
************************************************************************



가장 많이 발생하는 원인은 아카이브 로그 파일이 계속 쌓일 경우입니다.

OS 상에서 아카이브 로그 파일을 삭제하였을 경우에도 RMAN 상에서는 삭제한 걸 인식하지 못합니다.

해결 방법으로는

1) db_recovery_file_dest_size의 크기를 늘려 준다.

2) 필요 없는 아카이브 파일 OS에서 삭제후 RMAN에서 삭제

- OS 상에서 아카이브 삭제

- RMAN> crosscheck archivelog all;

RMAN> delete expired archivelog all;

3) 백업 정책 확인

Posted by Any DB
,

Unable to restore resource manager plan to '':
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00439: feature not enabled: Database resource manager

 

 

오라클 Bug 4343398.

Oracle 10g SE버전에서 RMAN을 사용할 수 없어서 발생하는 Alert Msg.

그냥 무시해도 무방하며, 10.2.0.3에서 Fix되었다.

보기 싫은 사람은 10.2.0.3이상으로 패치를 해주면 해결된다

Posted by Any DB
,

9I) 자동 SQL 실행 메모리 : PGA_AGGREGATE_TARGET, WORKAREA_SIZE_POLICY
   

제품 : ORACLE SERVER



(9I) 자동 SQL 실행 메모리 : PGA_AGGREGATE_TARGET, WORKAREA_SIZE_POLICY
======================================================================

PURPOSE
-------

Oracle 9i의 새 기능인 자동화된 SQL 실행 메모리 관리(Automated SQL Execution
Memory Management) 기능에 대하여 알아본다.


Explanation
-----------

한 프로세스 당 하나만 할당되는 PGA 메모리 영역은 SGA 영역과는 달리
다른 프로세스와 공유되지 않는, 각 프로세스가 독립적으로 사용하는
non-shared 메모리 영역이다.
PGA 메모리에는 다음과 같은 정보를 저장한다.

- session의 variable, array
- cursor 실행 메모리
- persistent 영역
- run-time 영역

특히, run-time 영역에는 SQL 문을 실행하는 중에 사용하는 정보를 포함하게
되는데, SQL 문의 복잡도, 처리해야 할 데이타의 양 등에 따라 이 영역의
크기가 달라진다. 이 영역은 SQL 문의 수행이 끝나면 OS로 메모리가 반환된다.

DSS(Decision Support System) 분야에서 사용되는 복잡한 SQL 문의 경우, 이
runtime 영역의 많은 부분이, 메모리를 많이 필요로 하는 row source들에 의해
사용된다. 이러한 row source의 예로는 sort row source, hash-join row source
등을 들 수 있다. 일반적으로 이 row source들을 위한 메모리가 많이 할당될 수록
질의 처리 속도가 현저히 빨라진다.

Oracle 8i 버젼까지는 DBA가 sort_area_size, hash_area_size, bitmap_merge_area_size,
create_bitmap_area_size 등의 다양한 initSID.ora 파라미터를 이용해서 이들
run-time 영역의 메모리를 제어할 수 있었다.

그런데, 현재 버젼(8i)까지의 방식은 다음과 같은 문제점이 있다.

1) 이들 파라미터는 관련 SQL 문들의 수행 빈도와 동시성 등에 의존하기 때문에
경험이 풍부한 DBA라 하더라도 이들 파라미터를 튜닝하기가 쉽지 않다.

2) 현재 방식은 특정 질의가 사용할 최대 메모리 크기를 제어하지 않기 때문에
특정 사용자가 메모리를 과다하게 사용하게 되므로 오히려 성능 저하를 유발할 수
있다.

3) 필요 이상으로 과다하게 할당된 파라미터의 경우 메모리 낭비를 일으킨다.

이러한 이유로 인하여 Oracle 9i에서는 자동화된 SQL 실행 메모리 관리 기능이
새롭게 추가되었다.

Oracle 9i에서 자동화된 SQL 실행 메모리 관리
-------------------------------------------
이와 같은 Oracle 8i에서 SQL 실행 메모리 관리의 문제점을 극복하기 위해서
Oracle 9i부터는 자동화된 SQL 실행 메모리 관리 기능을 제공한다.
즉, SQL 실행 메모리의 크기를 DBA가 initSID.ora 파라미터로 지정하는 대신에,
질의 수행 시에 Oracle 서버가 자동적으로, 그리고 동적으로 조절하는 기능을
제공한다.

이와 같이 자동화된 SQL 실행 메모리 관리 기능은 다음과 같은 장점을 제공한다.

1) 메모리 튜닝의 편이성
2) 메모리 튜닝에 사용되는 시간의 단축
3) 메모리 사용 효율성 증대로 인한 시스템 throughput 향상
(특히 동시 사용자가 많을 때)
4) 개별 질의에 대한 response time 향상

이 문서에서는 자동화된 SQL 실행 메모리 관리와 개념에 대하여 알아보기로 한다.


1. WORKAREA_SIZE_POLICY = AUTO

Oracle 9i에서는 자동화된 SQL 실행 메모리 관리 기능을 위해 PGA run-time 영역
할당을 하는 데 있어 automatic 모드와 manual 모드를 제공한다. 모드 선택은
WORKAREA_SIZE_POLICY 파라미터를 통해 지정할 수 있다. 이 파라미터는 세션 및
시스템 레벨에서 다음과 같이 동적으로 변경할 수 있다.

ALTER {SYSTEM|SESSION} SET WORKAREA_SIZE_POLICY={AUTO|MANUAL};

Manual 모드는 단지 Oracle 9i 이전 버젼과 호환을 위해 제공하는데, 이 모드가
default이다. 이 모드로 설정되면, *_area_size 파라미터들을 이용해서 메모리
튜닝이 가능하다.

Auto 모드에서는 SQL 실행 메모리 관리가 자동적으로 이루어지는데, 이 모드에서
Oracle 서버는 전체적인 시스템 성능을 극대화할 수 있도록 메모리 관리를 수행한다.

Note : WORKAREA_SIZE_POLICY 를 AUTO로 하기 위해서는 아래에 설명하게 될
PGA_AGGREGATE_TARGET 의 값을 반드시 먼저 지정해야 한다.


2. PGA_AGGREGATE_TARGET

자동화된 실행 메모리 관리 기능이 도입됨에 따라, PGA 메모리 영역은 크게
튜닝 가능 메모리와 튜닝 불가능 메모리로 구분할 수 있다. 튜닝 가능 메모리는
실제 SQL 실행 시 사용되는 메모리 영역이고, 튜닝 불가능 메모리는 PGA의 나머지
영역을 일컫는다. DSS와 같은 분야에서는 대용량의 데이타에 대한 sort, hash join,
bitmap index 관련 연산 등으로 인해 튜닝 가능 메모리가 PGA 영역의 대부분(90%
이상)을 차지하는 반면, OLTP 분야의 경우에는 일반적으로 PGA 메모리의 1% 이하가
튜닝 가능 메모리이다.

자동화된 SQL 실행 메모리 관리 기능과 관련해서 Oracle 9i에서는 PGA_AGGREGATE_TARGET
이라는 initSID.ora 파라미터를 제공해서 DBA가 전체 PGA 메모리를 명시적으로
제어할 수 있게 해준다. 즉, DBA가 PGA_AGGREGATE_TARGET을 설정하면,
Oracle 서버는 다음 조건을 만족시키는 범위에서 SQL 처리를 수행한다.
(참고로 DBA가 PGA_AGGREGATE_TARGET을 명시적으로 설정하면, default로 auto
모드로 동작한다.)

튜닝 가능 메모리 + 튜닝 불가능 메모리 <= PGA_AGGREGATE_TARGET

이 파라미터를 사용하게 되면 DBA가 PGA SQL 실행 영역의 *_area_size를 일일이
설정해줄 필요 없이 이 범위 내에서 메모리를 최대한 효율적으로 사용할 수 있도록
동작하게 된다.

Note : 이 파라미터는 ALTER SYSTEM을 이용해서 시스템 레벨에서 동적으로 변경할
수 있다.

SQL> alter system set pga_aggregate_target=20000000;

시스템이 변경되었습니다.

SQL> alter system set workarea_size_policy=AUTO;

시스템이 변경되었습니다.

SQL> show parameter pga;

NAME TYPE
------------------------------------ --------------------------------
VALUE
------------------------------
pga_aggregate_target big integer
20000000

SQL> show parameter workarea

NAME TYPE
------------------------------------ --------------------------------
VALUE
------------------------------
workarea_size_policy string
AUTO


3. Oracle 서버 튜닝 목표

DBA가 PGA_AGGREGATE_TARGET 값을 설정해서 auto 모드로 동작하는 경우, 오라클
서버는 내부적으로 다음과 같은 세 가지 목표를 달성할 수 있도록 튜닝 가능
메모리의 크기를 동적으로 조절하게 된다.

1) 튜닝 가능 메모리의 양을 조절해서 PGA 메모리의 크기가 PGA_AGGREGATE_TARGET을
넘지 않도록 한다.

2) 튜닝 가능 메모리의 양을 조절해서 특정 DB 프로세스가 out of memory 에러를
유발하지 않도록 한다.

3) 튜닝 가능 메모리의 양을 시스템 전체 throughput과 response time을 최적화할
수 있도록 조절한다.


4. 관련 V$ 뷰

자동화된 SQL 실행 영역 메모리 관리 기능과 관련해서 Oracle 9i에서는 DBA가
PGA 메모리의 사용 현황을 쉽게 파악할 수 있게 하기 위해 다음과 같은 기능이
추가되었다.
기존 V$SESSTAT과 V$SYSSTAT에 새로운 statistics를, V$PROCESS에 새로운 컬럼을
추가했고, 새로운 V$ 뷰 - V$SQL_WORKAREA, V$SQL_WORKAREA_ACTIVE - 를 제공한다.

1) 기존 뷰에 관련 row 및 column 추가

V$SESSTAT과 V$SYSSTAT 뷰에 다음 네 가지 statistics가 추가되었다.

- workarea memory allocated : 특정 세션이나 시스템에 할당된 전체 PGA 메모리
크기

- workarea executions - optimal :
SQL 실행 메모리가 최적의 크기를 가졌던 누적 횟수. 여기서 메모리가 최적의
크기를 갖는다는 것은 예를 들어, disk에 write하지 않고 sort 작업을 수행하는
경우를 의미한다.

- workarea executions - onepass :
SQL 실행 메모리가 1 pass의 크기를 가졌던 누적 횟수.
여기서 메모리가 1 pass의 크기를 갖는다는 의미는, 예를 들어 sort의 경우 disk에
임시 결과를 한번은 저장하고 결과를 merge해서 sort 작업을 마치는 경우를 의미한다.

- workarea executions - multipass :
SQL 실행 메모리가 2 pass 이상의 크기를 가졌던 누적 횟수.

이들 뷰를 이용해서 SGA가 아닌 PGA 메모리의 사용 현황을 모니터링할 수 있다.
예를 들어, 다음은 시스템 전체에 걸쳐 SQL 실행 영역이 최적의 크기를 가졌던
비율을 구하는 SQL 문이다.

SQL> SELECT
2 trunc (
3 sum(case when name like 'workarea executions - optimal'
4 then value else 0 end) * 100 /
5 (sum(case when name like 'workarea executions - optimal'
6 then value else 0 end)
7 +
8 sum(case when name like 'workarea executions - onepass'
9 then value else 0 end)
10 +
11 sum(case when name like 'workarea executions - multipass'
12 then value else 0 end)
13 )
14 ) optimal_percent
15 FROM v$sysstat
16 WHERE name like 'workarea executions - %';

OPTIMAL_PERCENT
---------------
100


그리고, V$PROCESS 뷰에는 다음 컬럼들이 추가되었는데, 이들 정보를 이용해서
할당된 PGA 메모리의 양과 실제로 Oracle 서버에 의해 사용된 메모리 양을
파악할 수 있다.

PGA_USED_MEM : 해당 프로세스에 의해 현재 사용되는 PGA 메모리 크기
PGA_ALLOC_MEM : 해당 프로세스에 의해 할당된 현재 PGA 메모리 크기
(OS에 return되지 않고 free 상태로 할당된 메모리 영역도 포함)
PGA_MAX_MEM : 해당 프로세스에 할당된 최대 PGA 메모리 크기


2) 새로 도입한 V$뷰

자동화된 SQL 실행 메모리 관리 기능을 위해 추가로 도입된 V$ 뷰는 V$SQL_WORKAREA,
V$SQL_WORKAREA_ACTIVE 등이 있다.

V$SQL_WORKAREA : 각 SQL 커서에 의해 사용되는 SQL 실행 영역 정보
V$SQL_WORKAREA_ACTIVE : 현재 시스템에 의해 할당되어 있는 SQL 실행 영역들 정보

아래의 예를 통해서 이들 각각의 뷰에서 유용한 정보를 추출하는 방법을 알아보기로
한다.

예) V$SQL_WORKAREA

V$SQL_WORKAREA 뷰를 통해서 다음과 같이 SQL 실행 메모리를 가장 많이 필요로 하는
top 10 실행 영역을 구할 수 있다.

SELECT *
FROM ( SELECT workarea_address, operation_type, policy, estimated_optimal_size
FROM v$sql_workarea
ORDER BY estimated_optimal_size DESC )
WHERE ROWNUM <= 10;


예) V$SQL_WORKAREA_ACTIVE

다음 SQL 문은 V$SQL_WORKAREA_ACTIVE, V$SQL_WORKAREA, V$SQL 뷰를 이용하여
현재 시스템에서 할당된 실행 영역 중 top 10 영역을 찾는 예를 보여준다.

SQL> SELECT c.sql_text, w.operation_type, top_ten.wasize
2 FROM ( SELECT *
3 FROM ( SELECT workarea_address, actual_mem_used wasize
4 FROM v$sql_workarea_active
5 ORDER BY actual_mem_used desc)
6 WHERE ROWNUM <= 10 ) top_ten,
7 v$sql_workarea w, v$sql c
8 WHERE w.workarea_address = top_ten.workarea_address
9 AND c.address = w.address
10 AND c.child_number = w.child_number
11 AND c.hash_value = w.hash_value;

SQL_TEXT
--------------------------------------------------------------------------------
OPERATION_TYPE WASIZE
---------------------------------------- ----------
SELECT c.sql_text, w.operation_type, top_ten.wasize FROM ( SELECT * FROM
( SELECT workarea_address, actual_mem_used wasize FROM v$sql_worka
rea_active ORDER BY actual_mem_used desc) WHERE ROWNUM <= :
"SYS_B_0" ) top_ten, v$sql_workarea w, v$sql c WHERE w.workarea_address =
top_ten.workarea_address AND c.address = w.address AND c.child_numb
er = w.child_number AND c.hash_value = w.hash_value
SORT 196608

<결론>
이 내용은 Oracle 9i에서 새로이 추가된 Automated SQL Execution Memory 기능에
대한 내용이다. PGA_AGGREGATE_TARGET 값을 적절한 값으로 정의하고,
WORKAREA_SIZE_POLICY를 AUTO로 지정하면 기존의 sort_area_size, hash_area_size,
bitmap_merge_area_size, create_bitmap_area_size 등의 값을 일일이 지정할
필요 없이 서버가 알아서 필요한 메모리를 할당하게 된다.
보통, DSS 환경에서 튜닝 가능 메모리 크기의 비율이 크기 때문에 OLTP 환경보다는
DSS 환경에서 튜닝 작업의 단순화, 메모리 사용 throughput 향상 등에 있어
더 큰 효과를 볼 수 있을 것이다.

V$SESSTAT과 V$SYSSTAT의 새로운 통계를 활용해서 가급적이면, workarea가
optimal한(disk i/o 없이) 상태 혹은 disk에 대한 1 pass만으로 가능하도록
PGA_AGGREGATE_TARGET 값을 지정하는 것이 바람직하며, V$SQL_WORKAREA_ACTIVE,
V$SQL_WORKAREA, V$SQL 뷰를 통해서 실제 사용된 메모리에 대한 top 10 SQL
문장 등을 알아볼 수 있다.


Example
-------
none


Posted by Any DB
,