OTN(한국 Oracle Technology Network)에 올라온 문서인데, Oracle 9i RAC을 Linux, FireWire 환경에 설치하는 방법을 설명하는 문서입니다. 기본적으로 개발 및 테스트 용도의 시스템으로 사용하는데 무리가 없다고 합니다. 저는... 아직 구축해보지 못 했구요. ㅡ.ㅡ (이놈의 게으름은...)
 OTN의 화면상에서는 이미 링크가 없어진 상태입니다. 속 내용을 전부 넣으려다 저작권 문제가 생길것 같아서 링크를 걸고, 서문에 해당하는 내용만 가져왔습니다. 개요와 구축에 사용사는 기술 소개 정도는 복사해와도 되겠죠?? 출처도 명확히 표시했으니...
 물론 해당 사이트에서 관련 링크가 삭제된 문서라 내용은 상당히 오래전에 작성된 글임을 짐작하실 수 있을겁니다. 하지만 아직가지 Oracle 9i를 사용하는 업체가 제법있구요. 개인적으로 구성한다면 이런것도 가능하다는걸 습득하는걸로도 도움이 될거 같습니다.
음... 이 문서의 최근 버전에서는 OacleVM을 이용하더군요. 아무래도 이 문서는 실제로 적용해보지는 않고 최근 버전의 문서를 이용해서 RAC 구축을 연습해볼것 같습니다. 그게 좀더 편할거 같아요. ^^; 암튼... RAC 구축에 성공하는 날 다시 글을 올리겠습니다.

원문 보기(링크)


목차

개 요
Oracle9i Real Application Cluster(RAC) 소개
RAC에 필요한 소프트웨어
공유 스토리지 개요
FireWire 기술
하드웨어 및 비용
간단한 프로세스 설명
Red Hat Linux(Fedora Core 1) 설치
네트워크 구성
적합한 Linux 커널 얻기 및 설치
"oracle" 사용자 및 디렉토리 생성
공유 FireWire 스토리지 장치에 분할 영역 생성
RAW 바인딩 생성
RAW 볼륨에서 심볼 링크 생성
Linux 서버 구성
hangcheck-timer 커널 모듈 구성
원격 액세스를 위한 RAC 노드 구성
각 RAC 노드에 대한 모든 시작 명령
Red Hat Linux 시스템(Oracle Metalink Note 252217.1) 갱신
Oracle9i 설치 파일 다운로드/압축 풀기
Oracle9i Cluster Manager 설치
Oracle9i RAC 설치
Oracle Database 생성
TNS 네트워킹 파일 생성
RAC 클러스터/데이타베이스 구성 확인
클러스터 시작 및 중지
TAF(Transparent Application Failover) 


개요

Oracle Real Application Clusters(RAC) 기술에 익숙해질 수 있는 가장 효율적인 방법은 실제 Oracle RAC 클러스터를 사용해보는 것입니다. 이 새로운 기술을 학습해보면 결함 허용, 새로운 보안 수준, 로드 밸런싱 및 쉬운 업그레이드 성능 등과 같은 Oracle RAC의 장점을 빨리 파악하게 될 것입니다. 하지만 이렇게 하는 데에는 전형적인 프로덕션 RAC 구성을 갖추기 위해 필요한 하드웨어 구입 비용이 문제입니다. 예를 들어 노드 두 개의 소규모 클러스터를 구축하는 데에도 10,000달러에서 20,000달러의 비용이 듭니다. 하지만 이 비용에는 프로덕션 RAC 환경의 핵심인 공유 스토리지 비용은 포함되지도 않았습니다.

단순히 Oracle RAC 기능을 배우려는 독자를 대상으로 하여 본 문서에서는 저렴한 비용으로 일반 판매 제품과 다운로드 가능한 소프트웨어를 사용하여 Oracle9i RAC 시스템을 구성하는 방법을 설명합니다. 이 구성을 위해서는 대략 1,000달러에서 1,500달러 정도의 비용이 듭니다. 이 시스템은 Linux를 사용하는 이중 노드 클러스터로 구성되며 IEEE1394 (FireWire) 드라이브 기술 기반의 공유 디스크 어레이가 포함됩니다.

본문의 내용 외에도 다양한 방식으로 저비용의 Oracle9i RAC 시스템을 구축할 수 있습니다. 예를 들어, 공유 스토리지를 FireWire 대신 SCSI를 사용하여 구현할 수도 있습니다. 일반적으로 SCSI 카드는 대략 70달러 정도이고 80GB 외장형 SCSI 드라이브가 700달러에서 1,000달러 정도라는 점을 감안하면 Firewire보다 SCSI에 더 많은 비용이 필요할 것입니다. 일부 메인보드에는 SCSI 컨트롤러가 내장되어 있을 수도 있습니다.

이러한 구성은 절대로 프로덕션 환경에서 실행될 수 없으며, 오라클 또는 기타 어떤 업체에서도 지원되지 않습니다. 광 채널은 포인트 투 포인트 또는 스위치 토폴로지 중 어떤 구성에서도 시스템과 스토리지 장치를 연결할 수 있는 고속 직렬 전송 인터페이스이기 때문에, 프로덕션 환경에서는 이러한 광 채널도 선택 대상으로 고려할 수 있습니다. FireWire는 테스트 및 개발 목적으로 광 채널에 대한 저비용의 대안이 될 수 있지만, 아직 프로덕션 환경에 사용할 수 있는 수준은 아닙니다.

참고: 본 문서를 작성한 시기에는 이러한 설명이 Oracle Database 10g에서 작동하는지 확인하지 않았습니다. 이에 대해서는 몇 개월이 지난 후에 개별 문서에서 10g를 사용한 유사 설치 방법을 설명할 예정입니다.


Oracle9i Real Application Clusters(RAC) 소개

Oracle Real Application Clusters(RAC)는 Oracle Parallel Server(OPS)의 후속 제품으로 개발되었습니다. RAC를 사용하면 동일 데이타베이스(스토리지)를 여러 인스턴스에서 동시에 액세스할 수 있습니다. RAC는 시스템 확장이 가능하기 때문에 결함 허용, 로드 밸런싱 및 향상된 성능을 제공합니다. 또한 모든 노드가 동일한 데이타베이스를 액세스하기 때문에 한 인스턴스에서 장애가 발생해도 데이타베이스에 대한 액세스가 손실되지 않습니다.

Oracle RAC의 핵심은 공유 디스크 하위 시스템입니다. 클러스터의 모든 노드는 클러스터 내의 모든 노드에 대한 데이타, 리두 로그 파일, 제어 파일 및 매개변수 파일을 액세스할 수 있어야 합니다. 데이타 디스크는 모든 노드가 데이타베이스를 액세스할 수 있도록 허용하기 위해 전역으로 사용할 수 있어야 합니다. 각 노드는 자신의 리두 로그 및 제어 파일이 있지만, 시스템 장애의 경우 특정 노드를 복구하기 위해 다른 노드에서도 이러한 파일을 액세스할 수 있어야 합니다.

일부 클러스터링 솔루션의 경우에는 공유 스토리지가 사용되지 않습니다. 일부 업체들은 데이타를 전체적으로 공유하는 대신 여러 시스템에 분산시켜두는 연합 클러스터(federated cluster)라는 이름의 방식을 사용합니다. 하지만 Oracle RAC에서는 여러 노드가 동일 디스크 세트를 사용하여 데이타를 저장합니다. Oracle RAC에서 데이타, 리두 로그, 제어 및 아카이브 로그 파일은 원시 디스크 장치의 공유 스토리지 또는 클러스터화된 파일 시스템에 보관됩니다. 오라클의 이러한 클러스터 방식은 클러스터의 모든 노드를 총체적으로 처리하는 능력을 활용하며 동시에 복구 보안 기능을 제공합니다.

절대적인 필수 사항은 아니지만 오라클은 Oracle Cluster File System(OCFS)을 설치할 것을 권장합니다. OCFS는 모든 노드에 동일한 파일 시스템을 작성함으로써 사용자의 디스크 관리 편의를 향상시켜줍니다. OCFS는 필수 요소가 아니지만 OCFS를 사용하지 않을 경우 모든 분할 영역을 수동으로 만들어야 합니다. (참고: 본 문서에서는 OCFS 설치 및 활용에 대해 자세히 다루지 않으며, 분할 영역을 작성하고 원시 장치를 이러한 분할 영역에 수동으로 바인드하는 작업을 설명합니다.)

Oracle RAC와 OPS의 가장 큰 차이는 새로 추가된 캐시 결합 기능입니다. OPS에서는 한 노드에서 다른 노드로 데이타를 요청할 경우 해당 데이타를 먼저 디스크에 기록한 다음에야 요청 노드에서 데이타를 읽을 수 있습니다. 하지만 캐시 결합 기능을 사용할 경우 데이타는 잠금 상태를 거치지 않고 바로 전송됩니다.

Red Hat Linux에 OCFS를 사용하지 않기로 한 중요한 이유는 OCFS가 RPM 형식으로 제공되기 때문입니다. 모든 RPM 모듈과 선행 컴파일된 모듈은 Red Hat Enterprise Linux AS(1,200달러) 커널 이름 지정 표준과 연결되어 있으며 제공된 2.4.20 연결 커널에서 로드되지 않습니다.

미리 구성된 Oracle9i RAC 솔루션은 Dell, IBM 및 HP와 같은 업체에서 프로덕션 환경용으로 제공됩니다. 하지만 본 문서에서는 Linux 서버와 저렴한 공유 디스크 솔루션인 FireWire를 사용하여 개발 및 테스트 용도의 Oracle9i RAC 환경을 구성하는 방법을 중점적으로 설명할 것입니다.                    


RAC에 필요한 소프트웨어와 구입 정보

RAC는 Oracle9i Database Enterprise Edition 내에 포함되어 있습니다. (오라클은 최근 Oracle Database 10g Standard Edition에서도 RAC를 사용할 수 있다고 발표하였습니다.) 클러스터에 Oracle9i Enterprise Edition을 설치하면 Oracle Universal Installer(OUI)에서 클러스터가 인식되어 RAC 설치 옵션이 제공됩니다. 대부분의 UNIX 플랫폼에서는 필요한 클러스터웨어를 위한 OSD 설치가 필요합니다. Intel 플랫폼(Linux 및 Windows)을 위해, 오라클은 Oracle9i Enterprise Edition 릴리스에 OSD 소프트웨어를 함께 제공하고 있습니다.


공유 스토리지 개요

현재 광 채널은 가장 대중적인 공유 스토리지 솔루션 중 하나입니다. 앞서 언급한 바와 같이 광 채널은 포인트 투 포인트 또는 스위치 토폴로지 모두에서 시스템과 스토리지 장치를 연결하는 데 사용되는 고속 직렬 전송 인터페이스입니다. 광 채널에서 지원되는 프로토콜에는 SCSI와 IP가 포함됩니다. 광 채널 구성은 최대 127개의 노드를 지원할 수 있으며 초당 처리량은 최대 2.12GB입니다. 하지만 광 채널은 매우 비쌉니다. 광 채널 스위치 만으로도 1,000달러 정도의 비용이 소모될 수 있습니다. 이 외에도 광 채널 스토리지 어레이 및 고급 드라이브를 구입해야 하며, 드라이브는 36GB 용량의 경우 300달러의 비용이 필요합니다. 서버에 대한 광 채널 카드를 포함하는 전형적인 광 채널 설정의 기본 설정에는 대략 5,000달러의 비용이 들며 여기에 클러스터 구성 서버 비용은 포함되지 않습니다.

광 채널에 대해 비교적 저렴한 대안은 SCSI입니다. SCSI 기술은 공유 스토리지를 위한 적절한 성능을 제공합니다. 하지만 GPL 기반 Linux 가격에 익숙한 관리자 및 개발자에게는 SCSI도 비용 부담이 클 수 밖에 없습니다. SCSI 구성에서 이중 노드의 클러스터 비용은 1,000달러에서 2,000달러 정도입니다.

이 외에 자주 사용되는 솔루션은 Sun NFS(Network File System)입니다. Sun NFS는 공유 스토리지에 사용할 수 있지만 네트워크 기기나 기타 유사 장비를 사용할 경우에만 가능합니다. 특히 NFS 상의 직접 입출력이 보장되는 서버가 필요합니다.


FireWire 기술

Apple Computer 및 Texas Instruments에서 개발된 FireWire는 고속 직렬 데이타 버스에 대한 교차 플랫폼 구현 기술입니다. 고대역폭, 장거리(최대 100미터 길이) 및 고성능 버스 기능을 제공하는 FireWire는 디지털 비디오(DV), 전문 오디오, 하드 드라이브, 고급 디지털 스틸 카메라 및 홈 엔터테인먼트 장치와 같은 애플리케이션에 사용되고 있습니다. 현재 FireWire는 초당 800MB의 전송 속도로 운영되며, 차세대 FireWire의 경우에는 이론상 1,600Mbps의 비트 속도를 지원하고 그 이후에는 3,2000Mbps까지도 지원할 예정입니다. 즉, 초당 3.2기가비트의 성능을 제공할 수 있는 FireWire는 이러한 속도로 인해 대용량 데이타 파일을 전송 뿐만 아니라, 압축되지 않은 HD(high-definition) 비디오 또는 다양한 SD(standard-definition) 비디오 스트림 처리와 같은 가장 어려운 비디오 애플리케이션의 경우에도 꼭 필요한 기술입니다.

다음 표는 여러 디스크 인터페이스 간의 속도를 비교한 것입니다. 각 인터페이스에는 초당 최대 전송 속도가 kb(킬로비트), KB(킬로바이트), Mb(메가비트) 및 MB(메가바이트) 단위로 표시되어 있습니다. 표에서 알 수 있듯이 IEEE1394 기능은 다른 사용 가능한 디스크 인터페이스 기술과 비교할 때 적정 성능을 제공합니다.

디스크 인터페이스 속도
직렬 115 kb/s - (.115 Mb/s)
병렬(표준) 115 KB/s - (.115 MB/s)
USB 1.1 12 Mb/s - (1.5 MB/s)
병렬(ECP/EPP) 3.0 MB/s
IDE 3.3 - 16.7 MB/s
ATA 3.3 - 66.6 MB/sec
SCSI-1 5 MB/s
SCSI-2 (Fast SCSI / Fast Narrow SCSI) 10 MB/s
Fast Wide SCSI (Wide SCSI) 20 MB/s
Ultra SCSI (SCSI-3 / Fast-20 / Ultra Narrow) 20 MB/s
Ultra IDE 33 MB/s
Wide Ultra SCSI (Fast Wide 20) 40 MB/s
Ultra2 SCSI 40 MB/s
IEEE1394(b) 100 - 400Mb/s - (12.5 - 50 MB/s)
USB 2.x 480 Mb/s - (60 MB/s)
Wide Ultra2 SCSI 80 MB/s
Ultra3 SCSI 80 MB/s
Wide Ultra3 SCSI 160 MB/s
FC-AL Fiber Channel 100 - 400 MB/s

 오랫만에 AIX에 Oracle Database client를 설치할 일이 생겼습니다. 그런데, X window로 원격 접속을 하려는데 너무 느려서 화면이 뜨지를 않더군요. telnet으로만 접속해서 작업을 해야할 상황이 되었습니다. 근데 telnet 접속도 아주 느리네요.
 그래서 Oracle client를 설치하는 것 보다는 Instant client를 설치하는 것이 적절할거 같아서 Instant client를 다운 받았습니다. 용량도 적당하고, 설치도 쉽고... 이렇게 진행을 했죠. ORACLE_HOME, TNS_ADMIN, ORACLE_BASE, PATH와 LD_LIBRARY_PATH 등을 설정을 하고 sqlplus를 실행시켰더니 오류가 발생하더군요.

Message file sp1<lang>.msb not found

 우잉 이건 뭐지??? 구글님께 여쭤보니 환경 변수를 설정하라는 내용의 글들이 많이 보이더군요.
그중에서 OTN에서 찾은 아래의 두 글에 해답이 있었습니다.
Message file sp1 lang .msb not found
AIX instantclient "Message file sp1<lang>.msb not found"

AIX에서는 LIBPATH를 설정해줘야 하는데, 제가 이건 쏙 뺐더군요.
아... 그리고 결정적으로 제가 설치 관련 내용을 잘 따르지 않았다는걸 알게 된게요.
바로 아래의 링크를 클릭하시면 나오는 인스턴트 클라이언트 다운로드 웹 페이지 하단에 있는 영문 설명이더군요.

Instant Client Downloads for AIX5L (64-bit)

내용은 아래와 같습니다.

Installation Steps:

1. Download the appropriate Instant Client packages for your platform. All installations REQUIRE the Basic package.


2. Unzip the packages into a single directory such as "instantclient".

3. Set the library loading path in your environment to the directory in Step 2 ("instantclient"). On AIX, LIBPATH is the appropriate environment variable.

4. Start your application and enjoy.


 요즘 이기종 DBMS간의 Data 동기화에 대해서 많은 고민을 하고 있습니다. 지금 근무하는 직장에 입사하기 전, DW 구축 업무를 했을 때에는 Data 동기화보다는 정해진 시간내에 통계 Data 구축을 마치는데에 신경을 썼지 실시간 동기화는 큰 필요성을 느끼지 못했었죠. ETL Tool을 이용하면 여러 시스템에서 Data를 가져오거나, 보내주는 Data file 등을 가공하는데 불편함이 없었으니까요. DataStage가 좋더군요. (비싼게 좋네요. ㅡㅡ)
 고사양, 대용량 시스템에서 DW 구축할때와는 달리 소규모 DB를 여러대 사용하는 환경으로 바뀌게 되니까 여러가지 제약과 마주치게 되었습니다. 예산이 적다보니 편리한 ETL Tool은 쓸 수 없고, 기준 정보를 동기화 해야한다던지(꼭 실시간을 원하더군요.), 서로 다른 서비스/업무 시스템에서 서로 다른 DBMS를 사용하는 경우가 많네요.
 Oracle을 사용하던 중에 MS-SQL이 도입되었고, 이제는 TmaxData의 Tibero까지 도입되었습니다. ㅜㅜ
TmaxData의 ProSync, Tibero와 MS-SQL 등과 씨름하던 중에 Oracle의 Golden gate에 대해서 듣게 되었고, 01월 12일(화)에 세미나를 한다는 정보를 접하게 되었습니다. 월차를 내고 거기에 갔었죠. 이 글은 Oracle Data Integration Day에 참석한 DBA의 소감입니다.

 아래 사진은 코엑스 인터컨티넨탈 호텔 지하1층 다이아몬드홀 앞에 준비되어있던 참석자를 위한 휴식 공간에 비치된 의자들입니다. 편안하게... 거의 누워있는듯한 자세로 앉게 되는 빈백(이름이 맞는지 모르겠네요?)과 영화 감독님 의자(낚시 의자 같은)입니다. 편하더군요.



















































 늦게 도착해서 첫번째 세션인 [[Keynote] Real Time Enterprise를 위한 혁신 : Data Integration]은 듣지 못했고, 두번째 세션인 [Real Time Data Integration 고객 사례 : 현대증권]부터 들었습니다.

 Golden gate
 Exadata 소개 세션을 제외한 세션들은 저마다 차이는 있으나 Golden gate를 이용한 고객 사례 소개와 이번에 새로 나온 제품이 아닌 기존에 여러 기업에서 사용하고 있던 좋은 솔루션이라는 점을 강조하고 있었습니다.
 일단 제가 봐도 좋아보이는 점은 다양한 이기종 DBMS간의 Data 동기화를 가능하게 해준다는 점과 단방향 및 양방향 동기화까지 지원해준다는 점입니다. 실시간 동기화는 현대증권에서 이미 구축 사례가 있으니 신뢰가 가네요.
 저희 회사처럼 세 가지 이상의 DBMS를 사용하는 곳이라면 적절한 솔루션이 아닐까요? 음... 가격을 모르니까 좀 걱정이 되긴 하네요.

 Exadata V2
 Exadata는 하드웨어와 소프트웨어를 통합한 제품으로 DW에 초첨이 맞춰져있었던 Exadata V1때부터 관심이 있던 제품인데, V2는 정말 맘에 드는 제품으로 변해있더군요. SUN을 인수 이후 가장 눈에 띄는 제품이라고 생각합니다. 두 회사의 강점이 모여서 나온 이 제품은 SUN의 Flash fire 및 하드웨어 노하우와 Oracle의 DBMS, Storage 관리 기능이 한데 묶여서 DW와 OLTP를 모두 지원하는 하이브리드 장비이면서 기존의 Exadata V1보다 월등히 빠른 제품이 되었습니다.
 강력한 Data 압축 기능(Exadata Hybrid Columnar Compression라고 하던데... 정확한 명칭인지는 확인을 못했습니다.)을 지원하는... 좀 아쉬운점은 일반 Oracle 11g에서도 지원하는 기능인데, Exadata에서만 작동 가능하도록 설정되어 있다고 합니다. 음...
 Exadata의 핵심은 SUN의 Flash Fire 카드를 장착하고 Oracle Storage Software를 설치한 SUN Oracle Exadata Storage Server인것 같습니다. Flash Fire 카드의 캐쉬 기능을 이용하여  반응 속도를 빠르게 하고, 강력한 압축 기능을 이용하여 Storage 효율을 높인 점, 그리고 SUN Oracle Exadata Storage Server가 자체적으로 Query 문장을 인식하여 처리가 가능하여 더욱 빠른 Data 처리가 가능하도록 만들어져있더군요. 언젠가 여건이 된다면 Exadata를 도입한 회사에서 근무해보고 싶네요. 음... 한번 만져보고 싶은...

그리고...
 세미나 참가자 기념품이 배송 사고로 인해서 추후 택배로 배송해준다고해서 회사 주소를 적어놓고 왔는데, 오늘 도착했습니다. 아래 사진에 보이는 제품입니다. ^^ 폰카로 찍어서 화질이 안 좋네요.

 회사에서 MS-SQL과의 Data 동기화에 누락된게 있다고 전화가 와서 경품 추첨을 뒤로한채 나와야 했었는데, 이날 경품 중에 순금이 있더군요. ㅜㅜ
꼭 받고 싶었는데... 우웅...
 드디어 Oracle database 11g의 Release 2가 홈페이지에서 다운로드 가능해졌습니다.
32비트, 64비트 버전의 리눅스용으로 나와있네요. 흠... 한번 설치해 볼까나...
오늘에야 알게된건데, Oracle database 11g에는 Warehouse builder가 내장되어 있다고 하네요.
음... 점점 모든 기능을 다 가지게 되네요.

다운로드 받으러 가기
 이번에 개발 장비의 Oracle DBMS를 9.2.0.4 버전에서 9.2.0.8로 패치했습니다. 패치 과정도 만만치 않았습니다. 패치후 Post patch 과정을 진행하는데, 운영하던 DB라서 그런건지, 일반 PC에 Linux를 설치해서 운영하는 서버라 성능이 좋지 않아서 인지, 예전에 IBM P 시리즈에서 패치하던때랑은 달리 시간이 많이 걸리더군요.
 암튼 이런 과정을 거친후에 문제가 발생했습니다. Pro*C로 서버 데몬을 개발하시던 분이 갑자기 오류가 발생한다고 하시더군요. 이런... 이제 문제 해결에 들어가야 겠죠.

 오류 메세지는 아래와 같았습니다.
PCC-02081: CMD-LINE: Unterminated option value list or value list was truncated.

 관련 문서를 찾아보니 아래와 같은 내용이 나왔습니다.
PCC-02081: CMD-LINE: Unterminated option value list or value list was truncated.
    Cause: An option that takes a list of values was entered. The value list did not have a closing parenthesis. This error may also occur if the list of values entered on a single line was too long and Pro*C truncated it.
    Action: Ensure that all value lists are terminated with a closing parenthesis. Split long value lists into individual entries.

내용인 즉슨... 옵션 값이 길어서 잘라서 읽어들였다... 뭐... 이런것 같네요. 그래서
/opt/oracle/product/9.2.0.4/precomp/admin/pcscfg.cfg 파일을 열어서는 지난번과는 달리 옵션으로 넘기는 데릭토리 이름중에서 현재 서버에는 존재하지 않는 디렉토리(예를 들어 CentOS인데 SUSE리눅스의 디렉토리 경로가 설정되어 있더군요.)들을 삭제해줬더니 컴파일 오류가 사라지더군요.
아... 겨우... 해결했네요. ^^

 Linux에 Oracle DBMS를 설치하고, Client를 설치하면서 Pro*C까지 설치를 했는데 막상 make 파일을 돌려보면 컴파일 오류가 발생하는 경우가 많죠. 저희 개발자분이 새로 설치한 개발 장비에서 설정이 안되어 있다고해서 거의 하루를 헤메다가 해결을 했습니다.
 저희 개발 장비의 문제는 기존에 설치된 GCC 버전이 Pro*C에 설정된 버전과 틀려서 헤더 파일들의 위치(디렉토리 이름)를 새로 설정해서 해결을 했습니다.

 [오라클 설치 위치/precomp/admin/pcscfg.cfg] 파일을 vi로 열어보면 아래와 같은 내용이 나옵니다.
[oracle@Test2 /opt/oracle/product/10g/precomp/admin]$ cat pcscfg.cfg
sys_include=(/ade_autofs/ade_linux/RDBMS_10.2.0.4.0_LINUX.rdd/080216/precomp/public,/usr/include,/usr/lib/gcc/i386-redhat-linux/4.1.1/include,/usr/lib/gcc/i386-redhat-linux/3.4.5/include,/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include,/usr/lib/gcc/i586-suse-linux/4.1.0/include)
ltype=short

 여기에 자신의 PC와 맞는 gcc-lib 관련 디렉토리가 설정되어 있는지 확인을 하고 없다면 추가해주면 됩니다.
 Oracle DBMS를 운영하다보면 전임자의 실수이거나, 게으른 본인의 생각없는 설치 및 운영으로 인해서 디스크 공간의 부족함으로 인해서 서비스가 중단되는 일이 생기기도 합니다. 본사 내에서 마구잡이로 사용하는 개발용 DB중에 그런 장비가 있었는데 /opt/oracle 디렉토리가 사용율 100%에 이르러서야 확인을 하게 되었습니다.
 문제는 현재 각종 로그가 쌓이는 디렉토리와 $ORACLE_HOME, 그리고 각종 시스템 관련 Datafile, redo log file 등이 같은 파티션에 저장이 되고 있더군요. 그래서 ... 서비스를 중지시키지 않고 작업을 해야겠다는 생각에 redo log file을 옮기기로 결정했습니다. 이게 제일 만만해보이더군요.

리두로그 그룹 및 파일 현황 확인
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#;

    GROUP# STATUS           TYPE      MEMBER
---------- ---------------- ------- ----------------------------------------
         1 CURRENT          ONLINE  /opt/oracle/oradata/edo01.log                                    
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log            
         3 INACTIVE         ONLINE  /opt/oracle/oradata/redo03.log 

네번째 리두로그 그룹 및 파일 추가

SQL> alter database add logfile group 4('/data/orasys/redo04.log') size 100M;

Database altered.

SQL>

리두로그 그룹 및 파일 추가 결과 확인
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#;

    GROUP# STATUS           TYPE    MEMBER                                                                              
---------- ---------------- ------- ---------------------------------------- 
         1 CURRENT          ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log           
         3 INACTIVE         ONLINE  /opt/oracle/oradata/redo03.log             
         4 UNUSED           ONLINE  /data/orasys/redo04.log

기존 리두로그 파일 그룹중 하나 삭제
SQL> alter database drop logfile group 3;
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#(+);

    GROUP# STATUS           TYPE    MEMBER
---------- ---------------- ------- ----------------------------------------   
         1 CURRENT          ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log            
         4 UNUSED           ONLINE  /data/orasys/redo04.log

리두로그 파일 그룹 3을 새로운 위치에 추가
SQL> alter  database add logfile group 3 ('/data/orasys/redo03.log') SIZE 100M;

Database altered.

리두로그 파일 그룹 3이 정상적으로 추가되었는지 확인
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#(+);

    GROUP# STATUS           TYPE    MEMBER
---------- ---------------- ------- ----------------------------------------   
         1 CURRENT          ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log            
         3 UNUSED           ONLINE  /data/orasys/redo03.log                    
         4 UNUSED           ONLINE  /data/orasys/redo04.log                             

SQL>

로그 스위치를 강재로 일으키며 상태값을 확인해본다.
SQL> alter system switch logfile;

System altered.

SQL>
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#(+);

    GROUP# STATUS           TYPE    MEMBER
---------- ---------------- ------- ----------------------------------------    
         1 ACTIVE           ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log              
         3 CURRENT          ONLINE  /data/orasys/redo03.log                    
         4 UNUSED           ONLINE  /data/orasys/redo04.log                            

SQL>
SQL>  alter system switch logfile;

System altered.

SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#(+);

    GROUP# STATUS           TYPE    MEMBER
---------- ---------------- ------- ----------------------------------------    
         1 INACTIVE         ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log             
         3 INACTIVE         ONLINE  /data/orasys/redo03.log
         4 CURRENT          ONLINE  /data/orasys/redo04.log

SQL>


Oracle을 이용하면서 자주 사용하는 기능 중의 하나인 TO_CAHR을 이용해서 원하는 형태의 날짜 정보를 보여주는 방법에 대해서 정리해봅니다.

TO_CHAR(날짜, '표현방식'[, 'NLS정보'])

SELECT
       TO_CHAR(SYSDATE, 'YYYY.MM.DD') D_YYYYMMDD,
       TO_CHAR(SYSDATE, 'Y','NLS_DATE_LANGUAGE=KOREAN') D_Y,
       TO_CHAR(SYSDATE, 'YEAR','NLS_DATE_LANGUAGE=KOREAN') D_YEAR,
       TO_CHAR(SYSDATE, 'Year','NLS_DATE_LANGUAGE=KOREAN') D_YEAR_1,
       TO_CHAR(SYSDATE, 'MON') D_MON,
       TO_CHAR(SYSDATE, 'Mon') D_MON_1,
       TO_CHAR(SYSDATE, 'MONTH') D_MONTH,
       TO_CHAR(SYSDATE, 'Month') D_MONTH_1,
       TO_CHAR(SYSDATE, 'D') D_D,
       TO_CHAR(SYSDATE, 'DD') D_DD,
       TO_CHAR(SYSDATE, 'DDD') D_DDD,
       TO_CHAR(SYSDATE, 'DAY') D_DAY,
       TO_CHAR(SYSDATE, 'Day') D_DAY_1,
       TO_CHAR(SYSDATE, 'DY','NLS_DATE_LANGUAGE=KOREAN') D_DY,
       TO_CHAR(SYSDATE, 'Dy') D_DY_1
  FROM DUAL
 UNION ALL
SELECT
       TO_CHAR(SYSDATE, 'YYYY.MM.DD','NLS_DATE_LANGUAGE=AMERICAN') D_YYYYMMDD,
       TO_CHAR(SYSDATE, 'Y','NLS_DATE_LANGUAGE=AMERICAN') D_Y,
       TO_CHAR(SYSDATE, 'YEAR','NLS_DATE_LANGUAGE=AMERICAN') D_YEAR,
       TO_CHAR(SYSDATE, 'Year','NLS_DATE_LANGUAGE=AMERICAN') D_YEAR_1,
       TO_CHAR(SYSDATE, 'MON','NLS_DATE_LANGUAGE=AMERICAN') D_MON,
       TO_CHAR(SYSDATE, 'Mon','NLS_DATE_LANGUAGE=AMERICAN') D_MON_1,
       TO_CHAR(SYSDATE, 'MONTH','NLS_DATE_LANGUAGE=AMERICAN') D_MONTH,
       TO_CHAR(SYSDATE, 'Month','NLS_DATE_LANGUAGE=AMERICAN') D_MONTH_1,
       TO_CHAR(SYSDATE, 'D','NLS_DATE_LANGUAGE=AMERICAN') D_D,
       TO_CHAR(SYSDATE, 'DD','NLS_DATE_LANGUAGE=AMERICAN') D_DD,
       TO_CHAR(SYSDATE, 'DDD','NLS_DATE_LANGUAGE=AMERICAN') D_DDD,
       TO_CHAR(SYSDATE, 'DAY','NLS_DATE_LANGUAGE=AMERICAN') D_DAY,
       TO_CHAR(SYSDATE, 'Day','NLS_DATE_LANGUAGE=AMERICAN') D_DAY_1,
       TO_CHAR(SYSDATE, 'DY','NLS_DATE_LANGUAGE=AMERICAN') ADA,
       TO_CHAR(SYSDATE, 'Dy','NLS_DATE_LANGUAGE=AMERICAN') ADA
  FROM DUAL;

 실행해보시면 재미난 결과가 나옵니다.
NLS_DATE_LANGUAGE를 AMERICAN으로 해주면 대소문자를 가려서 나오네요.
아래가 결과값입니다.

1 : 2009.06.10    9    TWO THOUSAND NINE    Two Thousand Nine    6월     6월     6월     6월     4    10    161    수요일    수요일    수    수
2: 2009.06.10    9    TWO THOUSAND NINE    Two Thousand Nine    JUN    Jun    JUNE         June         4    10    161    WEDNESDAY    Wednesday    WED    Wed


 이곳저곳 돌아다니다가 알게된 링크들입니다.

AIX 5L에 Oracle 설치 문서 : http://download.oracle.com/docs/cd/B19306_01/install.102/b19075/toc.htm

일본어판 Oracle 10g 문서를 네이버 번역기로 번역한 문서 링크 : http://j2k.naver.com/j2k_frame.php/korean/otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/index.htm

Oracle RAC관련 Oracle Magazine 문서 : Oracle RAC, 메인스트림 제품으로 업그레이드

Oracle wait event 모니터링 : http://www.oracle.com/technology/global/kr/pub/columns/dbtuning02.html

OTN Blogs & Opinion, 칼럼 : http://www.oracle.com/technology/global/kr/community/opinion/index.html
 OracleBase라는 웹 사이트에 올라와있는 Oracle 9i Streams 구현 관련 문서입니다.
요즘 10g와 9i 사이에 Oracle Streams로 Data 공유하는 기능을 구현하는 중이라서 이곳 저곳 뒤지고 있는 중입니다.

원문 : ORACLE-BASE - Oracle9i Streams

 영문으로 되어있다는 점만 빼면 좋습니다. ^^;
9i랑 10g랑은 서로 좀 틀려서 그런지 설정하는게 만만치 않군요.

+ Recent posts