[oracle] Redhat AS4+ vmware server +oracle 10gr2=oracle 10g RAC
DBA: Linux
VMware Server를 이용하여 Oracle Enterprise Linux 기반 Oracle RAC 10g 설치하기
저자 ? Vincent Chan
가상 머신 테크놀로지를 이용하여 Oracle Enterprise Linux 운영 체제에 테스트용 Oracle Real Application Cluster 10g Release 2를 설치하는 방법을 설명합니다.
게시일: 2007년 1월
작년 10월 오라클 오픈월드 2006 행사에서, Red Hat Linux를 위한 엔터프라이즈급 기술 지원 서비스인 Oracle Unbreakable Linux 프로그램이 발표된 바 있습니다. 또 Red Hat Advanced Server Release 4(Update 4)를 기반으로 하는 오라클의 독자적인 Enterprise Linux 운영체제가 무료 다운로드 버전으로 공개되었습니다.
그 결과로, 전혀 비용을 들이지 않고도 VMware Server(VMware의 무료 가상화 소프트웨어)를 이용하여 일반 가정용 컴퓨터에 Red Hat Advanced Server 기반 Oracle Real Application Clusters (RAC) 10g 환경을 구현할 수 있게 되었습니다.
VMware Server는 하나의 물리적 머신에서 여러 개의 운영 체제를 동시에 실행할 수 있게 합니다. 각각의 가상 머신은 별도의 운영체제와 디스크, 프로세서, 메모리 등의 가상 컴포넌트를 갖습니다. 가상화 테크놀로지는 하나의 물리적 서버에서 다른 데이터 또는 소프트웨어에 영향을 주지 않고 개발/테스트 작업을 수행하기 위한 용도로 활용되고 있습니다. VMware 소프트웨어는 특히 개발/테스트 과정의 총소유비용을 절감하고 애플리케이션 개발 기간을 단축할 수 있는 솔루션으로 각광받고 있습니다.
본 가이드에서는 Enterprise Linux와 VMware Server를 기반으로 실행되는 2 노드 구성의 Oracle RAC 10g Release 2 환경을 설치하고 구성하는 방법을 설명하고 있습니다. 이 가이드는 교육/테스트용으로만 활용할 수 있으며, 오라클 및 다른 어떤 벤더도 이러한 구성에 대한 기술 지원을 제공하지 않고 있음을 참고하시기 바랍니다.
가이드의 목차가 아래와 같습니다:
- 하드웨어 요구사항 및 개요
- 첫 번째 가상 머신의 구성
- 첫 번째 가상 머신에 Enterprise Linux 설치하기
- 두 번째 가상 머신의 생성 및 설정
- Oracle Automatic Storage Management (ASM) 설정
- Oracle Cluster File System(OCFS2) 설정
- Oracle Clusterware 설치
- Oracle Database 10g Release 2 설치
- RAC 데이터베이스 환경 확인
- Transparent Application Failover(TAF) 테스트
- 데이터베이스 백업 및 복구
- Oracle Enterprise Manager(OEM) 데이터베이스 콘솔 사용
- 알려진 이슈
1. 하드웨어 요구사항 및 개요
본 가이드에서는 32 비트 게스트 Linux 운영 체제를 설치하여 사용합니다. 64 비트 게스트 운영 체제는 아래와 같은 64 비트 프로세서가 설치된 호스트 머신 환경만을 지원합니다:
- AMD Athlon 64, revision D 이상
- AMD Opteron, revision E 이상
- AMD Turion 64, revision E 이상
- AMD Sempron, 64 비트 지원 revision D 이상 또는 Intel EM64T VT 지원 프로세서
64 비트 운영 체제를 설치하여 사용하고자 하는 경우, 시스템의 프로세서가 위 조건을 만족하는지 먼저 확인하시기 바랍니다. 또 BIOS에서 Virtualization Technology(VT)가 활성화되어 있는지 확인해야 합니다. 일부 메인보드 제조업체의 경우 이 필드를 디폴트 설정에서 비활성화해 놓고 있기도 합니다. 프로세서 호환성에 대한 보다 자세한 정보는 이곳에서 확인하실 수 있습니다.
프로세서의 지원 여부를 확인하려면 VMware의 프로세서 점검 호환성 툴을 다운로드하시기 바랍니다.
각 가상 머신에 최소 700 MB의 메모리와 30 GB의 디스크 공간을 할당합니다.
운영 체제 환경의 개요가 아래와 같습니다:
호스트 네임 |
OS |
프로세서 |
메모리 |
디스크 |
네트워크 카드 |
pacu |
Windows XP Professional Service Pack 2 (32-bit) |
Intel Pentium 4 550, 3.4MHz, HT |
2 GB DDR2 SDRAM, 533 MHz |
250 GB, Ultra ATA/133, 7200 RPM |
Intel Pro/1000 MT |
게스트 운영 체제 환경의 개요가 아래와 같습니다:
호스트 네임 |
OS |
프로세서 |
메모리 |
rac1 |
Oracle Enterprise Linux 4 (32-bit) |
1 |
700 MB |
rac2 |
Oracle Enterprise Linux 4 (32-bit) |
1 |
700 MB |
가상 디스크 레이아웃의 개요가 아래와 같습니다:
호스트 가상 디스크 |
게스트 가상 디스크 |
가상 디바이스 노드 |
사이즈 (MB) |
설명 |
d:\vm\rac\localdisk.vmdk |
/dev/sda1 |
SCSI 0:0 |
20 |
“/” 마운트포인트 |
d:\vm\rac\sharedstorage\ocfs2disk.vmdk |
/dev/sdb |
SCSI 1:0 |
512 |
OCFS2 디스크 |
d:\vm\rac\sharedstorage\asmdisk1.vmdk |
/dev/sdc |
SCSI 1:1 |
3072 |
ASM disk group 1 |
d:\vm\rac\sharedstorage\asmdisk2.vmdk |
/dev/sdd |
SCSI 1:2 |
3072 |
ASM disk group 1 |
d:\vm\rac\sharedstorage\asmdisk3.vmdk |
/dev/sde |
SCSI 1:3 |
2048 |
ASM 플래시 복구 영역 |
(공유 스토리지를 설정하기 위해서는, 게스트 OS가 공유 스토리지와 동일한 SCSI 버스를 공유하고 있지 않아야 합니다. 게스트 OS를 위해서는 SCSI0을, 공유 디스크를 위해서는 SCSI1을 사용하도록 합니다.)
RAC 데이터베이스 환경의 개요가 아래와 같습니다:
호스트 네임 |
ASM 인스턴스 네임 |
RAC 인스턴스 네임 |
데이터베이스 네임 |
데이터베이스 파일 스토리지 |
OCR & Voting Disk |
rac1 |
+ASM1 |
devdb1 |
devdb |
ASM |
OCFS2 |
rac2 |
+ASM2 |
devdb2 |
devdb |
ASM |
OCFS2 |
이중화 구성을 위해 각 노드에 Oracle Home을 설치해야 합니다. ASM과 Oracle RAC 인스턴스는 각 노드의 동일한 Oracle Home을 공유합니다.
2. 첫 번째 가상 머신의 구성
첫 번째 가상 머신의 생성/설정을 위해 디스크, 프로세서와 같은 가상 하드웨어 디바이스를 추가합니다. 설치 작업을 시작하기 전에, 가상 머신과 공유 스토리지를 위치시킬 윈도우즈 폴더를 생성합니다.
D:\>mkdir vm\rac\rac1
D:\>mkdir vm\rac\rac2
D:\>mkdir vm\rac\sharedstorage
데스크탑의 VMware Server 아이콘을 더블 클릭하여 애플리케이션을 실행합니다:
- Ctrl-N을 눌러 새로운 가상 머신을 생성합니다.
- New Virtual Machine Wizard: Next를 클릭합니다.
- Select the Appropriate Configuration:
- Virtual machine configuration: Custom을 선택합니다.
- Select a Guest Operating System:
- Guest operating system: Linux를 선택합니다.
- Version: Red Hat Enterprise Linux 4를 선택합니다.
- Name the Virtual Machine:
- Virtual machine name: “rac1”을 입력합니다.
- Location: “d:\vm\rac\rac1.”을 입력합니다.
- Set Access Rights:
- Access rights: Make this virtual machine private를 선택합니다.
- Startup / Shutdown Options:
- Virtual machine account: User that powers on the virtual machine을 선택합니다.
- Processor Configuration:
- Processors: One을 선택합니다.
- Memory for the Virtual Machine:
- Memory: 700MB를 선택합니다.
- Network Type:
- Network connection: Use bridged networking을 선택합니다.
- Select I/O Adapter Types:
- I/O adapter types: LSI Logic을 선택합니다.
- Select a Disk:
- Disk: Create a new virtual disk를 선택합니다.
- Select a Disk Type:
- Virtual Disk Type: SCSI (Recommended)를 선택합니다.
- Specify Disk Capacity:
- Disk capacity: “20GB.”를 입력합니다.
- Allocate all disk space now의 선택을 해제합니다. 공간을 절약할 생각이라면, 굳이 지금 모든 디스크 공간을 할당할 필요가 없습니다.
- Specify Disk File:
- Disk file: “localdisk.vmdk.”를 입력합니다.
- Finish를 클릭합니다.
16 - 24 번 과정을 반복하여 4 개의 가상 SCSI 하드 디스크를 생성합니다 - ocfs2disk.vmdk (512MB), asmdisk1.vmdk (3GB), asmdisk2.vmdk (3GB), asmdisk3.vmdk (2GB).
- VMware Server Console: Edit virtual machine settings를 클릭합니다.
- Virtual Machine Settings: Add를 클릭합니다.
- Add Hardware Wizard: Next를 클릭합니다.
- Hardware Type:
- Hardware types: Hard Disk를 선택합니다.
- Select a Disk:
- Disk: Create a new virtual disk을 선택합니다.
- Select a Disk Type:
- Virtual Disk Type: SCSI (Recommended)을 선택합니다.
- Specify Disk Capacity:
- Disk capacity: “0.5GB.”을 입력합니다.
- Allocate all disk space now을 선택합니다. 공간을 절약할 생각이라면, 굳이 지금 모든 디스크 공간을 할당할 필요가 없습니다. 하지만 성능 문제를 고려하여, 각각의 가상 공유 디스크에 디스크 공간을 미리 할당해 주는 것이 바람직합니다. 흔한 일은 아니지만 오라클 데이터베이스 생성 과정에서, 또는 데이터베이스에 DML 작업이 과도하게 발생하여 공유 디스크의 사이즈가 급격히 증가하는 경우, 가상 머신의 동작이 잠시 멈추는 상황이 발생할 수도 있습니다.
- Specify Disk File:
- Disk file: “d:\vm\rac\sharedstorage\ocfs2disk.vmdk.”를 입력합니다.
- Advanced를 클릭합니다.
- Add Hardware Wizard:
- Virtual device node: SCSI 1:0을 선택합니다.
- Mode: 모든 공유 디스크에 대해 Independent, Persistent를 선택합니다.
- Finish를 클릭합니다.
마지막으로, 사설 인터커넥트를 위한 가상 네트워크 카드를 추가하고 플로피 드라이브를 제거합니다.
- VMware Server Console: dit virtual machine settings를 클릭합니다.
- Virtual Machine Settings: Add를 클릭합니다.
- Add Hardware Wizard: Next를 클릭합니다.
- Hardware Type:
- Hardware types: Ethernet Adapter.
- Network Type:
- Host-only: A private network shared with the host
- Finish를 클릭합니다.
- Virtual Machine Settings:
- Floppy를 선택하고 Remove를 클릭합니다.
- Virtual Machine Settings: OK를 클릭합니다.
가상 머신 설정 파일의 수정: 두 대의 가상 RAC 노드 간에 디스크를 공유하기 위해서는 추가로 매개변수를 설정해 주어야 합니다. "d:\vm\rac\rac1\Red Hat Enterprise Linux 4.vmx" 파일을 열고 아래 굵은 글씨체로 표시된 매개변수들을 추가해 줍니다.
config.version = "8"
virtualHW.version = "4"
scsi0.present = "TRUE"
scsi0.virtualDev = "lsilogic"
memsize = "700"
scsi0:0.present = "TRUE"
scsi0:0.fileName = "localdisk.vmdk"
ide1:0.present = "TRUE"
ide1:0.fileName = "auto detect"
ide1:0.deviceType = "cdrom-raw"
floppy0.fileName = "A:"
Ethernet0.present = "TRUE"
displayName = "rac1"
guestOS = "rhel4"
priority.grabbed = "normal"
priority.ungrabbed = "normal"
disk.locking = "FALSE"
diskLib.dataCacheMaxSize = "0"
scsi1.sharedBus = "virtual"
scsi1.present = "TRUE"
scsi1:0.present = "TRUE"
scsi1:0.fileName = "D:\vm\rac\sharedstorage\ocfs2disk.vmdk"
scsi1:0.mode = "independent-persistent"
scsi1:0.deviceType = "disk"
scsi1:1.present = "TRUE"
scsi1:1.fileName = "D:\vm\rac\sharedstorage\asmdisk1.vmdk"
scsi1:1.mode = "independent-persistent"
scsi1:1.deviceType = "disk"
scsi1:2.present = "TRUE"
scsi1:2.fileName = "D:\vm\rac\sharedstorage\asmdisk2.vmdk"
scsi1:2.mode = "independent-persistent"
scsi1:2.deviceType = "disk"
scsi1:3.present = "TRUE"
scsi1:3.fileName = "D:\vm\rac\sharedstorage\asmdisk3.vmdk"
scsi1:3.mode = "independent-persistent"
scsi1:3.deviceType = "disk"
scsi1.virtualDev = "lsilogic"
ide1:0.autodetect = "TRUE"
floppy0.present = "FALSE"
Ethernet1.present = "TRUE"
Ethernet1.connectionType = "hostonly"
3. 첫 번째 가상 머신에 Enterprise Linux 설치하기
오라클 웹사이트에서 Enterprise Linux를 다운로드하고 파일 압축을 풉니다:
- Enterprise-R4-U4-i386-disc1.iso
- Enterprise-R4-U4-i386-disc2.iso
- Enterprise-R4-U4-i386-disc3.iso
- Enterprise-R4-U4-i386-disc4.iso
- VMware Server 콘솔에서 오른쪽 패널의 CD-ROM 디바이스를 더블 클릭하고 disk 1을 위한 ISO 이미지(Enterprise-R4-U4-i386-disc1.iso)를 선택합니다.
- VMware Server console:
- Start this virtual machine을 클릭합니다.
- Enter를 눌러 그래픽 모드에서 설치하도록 선택합니다.
- 미디어 테스트를 생략하고 설치를 시작합니다.
- Welcome to enterprise Linux: Next를 클릭합니다.
- Language Selection: <사용할 언어를 선택합니다.>
- Keyboard Configuration: <사용할 키보드를 선택합니다>
- Installation Type: Custom.
- Disk Partitioning Setup: Manually partition with Disk Druid.
- Warning: Yes를 클릭하여 모든 디바이스(sda, sdb, sdc, sdd, sde)를 초기화합니다.
- Disk Setup: /dev/sda를 더블 클릭하여 sda 드라이브에 마운트 포인트(/, /u01)와 스왑 공간을 위한 디스크 공간을 할당합니다. OCFS2, ASM을 위한 드라이브 설정은 뒷부분에서 수행하게 됩니다.
- Add Partition:
- Mount Point: /
- File System Type: ext3
- Start Cylinder: 1
- End Cylinder: 910
- File System Type: Swap
- Start Cylinder: 911
- End Cylinder: 1170
- Mount Point: /u01
- File System Type: ext3
- Start Cylinder: 1171
- End Cylinder: 2610
- Boot Loader Configuration: 디폴트 /dev/sda1만을 선택하고 나머지는 선택되지 않은 상태로 둡니다.
- Network Configuration:
- Network Devices
- eth0을 선택합니다.
- Configure Using DHCP의 선택을 해제합니다.
- Activate on boot을 선택합니다.
- IP Address: “192.168.2.131.”을 입력합니다.
- Netmask: “255.255.255.0.”을 입력합니다.
- eth1을 선택합니다.
- Configure Using DHCP의 선택을 해제합니다.
- Activate on boot을 선택합니다.
- IP Address: “10.10.10.31.”을 입력합니다.
- Netmask: “255.255.255.0.”을 입력합니다.
- Hostname
- manually를 선택하고 “rac1.mycorpdomain.com.”을 입력합니다.
- Miscellaneous Settings
- Gateway: “192.168.2.1.”을 입력합니다.
- Primary DNS: <옵션>
- Secondary DNS: <옵션>
- Firewall Configuration:
- No Firewall을 선택합니다. 방화벽이 활성화된 경우, ocfs2 파일 시스템을 마운트하는 과정에서 “mount.ocfs2: Transport endpoint is not connected while mounting” 에러가 발생할 수 있습니다.
- Enable SELinux?: Active.
- Warning – No Firewall: Proceed를 클릭합니다.
- Additional Language Support: <사용할 언어를 선택합니다>.
- Time Zone Selection: <표준 시간대를 선택합니다>
- Set Root Password: <root 패스워드를 입력합니다>
- Package Group Selection:
- X Window System을 선택합니다.
- GNOME Desktop Environment를 선택합니다.
- Editors를 선택합니다.
- Details를 클릭하고 사용할 텍스트 편집기를 선택합니다.
- Graphical Internet을 선택합니다.
- Text-based Internet을 선택합니다.
- Office/Productivity를 선택합니다.
- Sound and Video를 선택합니다.
- Graphics를 선택합니다.
- Server Configuration Tools를 선택합니다.
- FTP Server를 선택합니다.
- Legacy Network Server를 선택합니다.
- Details를 클릭합니다.
- rsh-server를 선택합니다.
- Sstrong>telnet-server를 선택합니다.
- Development Tools를 선택합니다.
- Legacy Software Development를 선택합니다.
- Administration Tools를 선택합니다.
- System Tools를 선택합니다.
- Details를 클릭합니다. 디폴트로 선택된 패키지와 별도로 아래 패키지를 선택합니다.
- ocfs-2-2.6.9-42.0.0.0.1EL(UP 커널을 위한 드라이버)을 선택하거나, 또는 ocfs-2-2.6.9-42.0.0.0.1ELsmp(SMP 커널을 위한 드라이버)를 선택합니다.
- ocfs2-tools를 선택합니다.
- ocfs2console을 선택합니다.
- oracle oracleasm-2.6.9-42.0.0.0.1EL(UP 커널을 위한 드라이버)를 선택하거나, 또는 oracleasm-2.6.9-42.0.0.0.1ELsmp(SMP 커널을 위한 드라이버)를 선택합니다.
- sysstat을 선택합니다.
- Printing Support를 선택합니다.
- About to Install: Next를 클릭합니다.
- Required Install Media: Continue를 클릭합니다.
- Change CD-ROM: VMware Server 콘솔에서 Ctrl-D를 눌러 Virtual Machine Settings를 실행합니다. CD-ROM 디바이스를 클릭하고 disk 2를 위한 ISO 이미지(Enterprise-R4-U4-i386-disc2.iso)를 선택하고, 다시 disk3을 위한 ISO 이미지(Enterprise-R4-U4-i386-disc3.iso)를 선택합니다.
- 설치 작업이 종료된 후,
- VMware Server 콘솔에서 Ctrl-D를 눌러 Virtual Machine Settings를 실행합니다. CD-ROM 디바이스를 클릭하고 Use physical drive를 클릭합니다.
- Reboot를 클릭합니다.
- Welcome: Next를 클릭합니다.
- License Agreement: Yes, I agree to the License Agreement를 선택합니다.
- Date and Time: 날짜와 시간을 설정합니다.
- Display: <원하는 해상도를 선택합니다>
- System User: 항목을 빈 칸으로 남겨두고 Next를 클릭합니다.
- Additional CDs: Next를 클릭합니다.
- Finish Setup: Next를 클릭합니다.
축하합니다. 이것으로 VMware Server에 Enterprise Linux를 설치하는 작업을 완료하였습니다!
VMware Tools설치. VMware Tools는 호스트 머신과 게스트 머신 간의 시간을 동기화하기 위해 사용됩니다.
VMware 콘솔에서 root 사용자로 로그인합니다.
- VM을 클릭한 후 Install VMware Tools를 선택합니다.
- rac1 – Virtual Machine: Install을 클릭합니다.
- 데스크탑의 VMware Tools 아이콘을 더블 클릭하여 애플리케이션을 실행합니다.
- cdrom: VMwareTools-1.0.1-29996.i386.rpm을 더블 클릭합니다.
- Completed System Preparation: Continue를 클릭합니다.
- 터미널을 열고 vmware-config-tools.pl을 실행합니다.
- 원하는 디스플레이 사이즈를 입력합니다
게스트 OS와 호스트 OS의 시간 동기화. Oracle Clusterware와 Oracle Database 소프트웨어를 설치하는 과정에서 오라클 인스톨러는 먼저 로컬 노드에 소프트웨어를 설치한 후 원격 노드에 소프트웨어를 카피하는 작업을 수행합니다. 양쪽 RAC 노드의 날짜와 시간이 동기화되지 않은 경우 아래와 같은 에러가 발생할 수도 있습니다.
"/bin/tar: ./inventory/Components21/oracle.ordim.server/10.2.0.1.0: time
stamp 2006-11-04 06:24:04 is 25 s in the future"
따라서 Oracle RAC 설치를 수행하기 전에, 가상 머신과 호스트 머신의 시간을 동기화해 주어야 합니다. root 사용자로 로그인하여 아래 작업을 실행하여 시간을 동기화합니다.
- “vmware-toolbox”를 실행하여 VMware Tools Properties 윈도우를 엽니다. Options 탭에서 Time synchronization between the virtual machine and the host operating system을 선택합니다. tools.syncTime = "TRUE" 매개변수가 가상 머신 설정 파일(d:\vm\rac\rac1\Red Hat Enterprise Linux 4.vmx)에 추가된 것을 확인할 수 있을 것입니다.
- 2. "/boot/grub/grub.conf" 파일을 편집하여 kernel /boot/ 라인에 "clock=pit nosmp noapic nolapic" 옵션을 추가합니다. 이제 양쪽 커널에 옵션을 추가하는 작업을 완료했습니다. 변경 작업은 현재 사용 중인 커널에 대해서만 수행해 주면 됩니다.
3. #boot=/dev/sda
4. default=0
5. timeout=5
6. splashimage=(hd0,0)/boot/grub/splash.xpm.gz
7. hiddenmenu
8. title Enterprise (2.6.9-42.0.0.0.1.ELsmp)
9. root (hd0,0)
10. kernel /boot/vmlinuz-2.6.9-42.0.0.0.1.ELsmp ro
11.root=LABEL=/ rhgb quiet clock=pit nosmp noapic nolapic
12. initrd /boot/initrd-2.6.9-42.0.0.0.1.ELsmp.img
13.title Enterprise-up (2.6.9-42.0.0.0.1.EL)
14. root (hd0,0)
15. kernel /boot/vmlinuz-2.6.9-42.0.0.0.1.EL ro root=LABEL=/
16.rhgb quiet clock=pit nosmp noapic nolapic
17. initrd /boot/initrd-2.6.9-42.0.0.0.1.EL.img
- rac1을 리부트합니다.
# reboot
오라클 사용자의 생성 root 사용자로 로그인하여 아래와 같이 실행합니다:
# groupadd oinstall
# groupadd dba
# mkdir -p /export/home/oracle /ocfs
# useradd -d /export/home/oracle -g oinstall -G dba -s /bin/ksh oracle
# chown oracle:dba /export/home/oracle /u01
# passwd oracle
New Password:
Re-enter new Password:
passwd: password successfully changed for oracle
오라클 사용자 환경 파일의 생성.
/export/home/oracle/.profile
export PS1="`/bin/hostname -s`-> "
export EDITOR=vi
export ORACLE_SID=devdb1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORA_CRS_HOME=$ORACLE_BASE/product/10.2.0/crs_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$ORA_CRS_HOME/bin:/bin:
/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin
umask 022
파일시스템 디렉토리 구조의 생성. oracle 사용자로 로그인하여 아래와 같이 실행합니다:
rac1-> mkdir 뻪 $ORACLE_BASE/admin
rac1-> mkdir 뻪 $ORACLE_HOME
rac1-> mkdir 뻪 $ORA_CRS_HOME
rac1-> mkdir -p /u01/oradata/devdb
oracle 사용자의 Shell Limit 설정. 텍스트 편집기를 사용하여 아래 라인을 /etc/security/limits.conf, /etc/pam.d/login, /etc/profile에 추가합니다. 보다 상세한 정보는 제품 문서에서 확인하실 수 있습니다.
/etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
/etc/pam.d/login
session required /lib/security/pam_limits.so
/etc/profile
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
Enterprise Linux 소프트웨어 패키지의 설치. 오라클 소프트웨어 설치를 위해 추가해 주어야 하는 패키지가 아래와 같습니다. Enterprise Linux의 64 비트 버전을 설치한 경우에는, 인스톨러가 이 패키지를 이미 설치한 상태이어야 합니다.
- libaio-0.3.105-2.i386.rpm
- openmotif21-2.1.30-11.RHEL4.6.i386.rpm
root 사용자로 로그인하여 ISO CD에서 패키지를 추출하고 아래 커맨드를 실행합니다.
# ls
libaio-0.3.105-2.i386.rpm openmotif21-2.1.30-11.RHEL4.6.i386.rpm
#
# rpm -Uvh *.rpm
warning: libaio-0.3.105-2.i386.rpm: V3 DSA signature: NOKEY, key ID b38a8516
Preparing...
########################################### [100%]
1:openmotif21
########################################### [ 50%]
2:libaio
########################################### [100%]
커널 매개변수 설정. 텍스트 편집기를 사용하여 /etc/sysctl.conf에 아래 라인을 추가합니다. 변경 사항을 즉시 적용하기 위해 "/sbin/sysctl -p"를 실행합니다.
# more /etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144
/etc/hosts 파일의 수정.
# more /etc/hosts
127.0.0.1 localhost
192.168.2.131 rac1.mycorpdomain.com rac1
192.168.2.31 rac1-vip.mycorpdomain.com rac1-vip
10.10.10.31 rac1-priv.mycorpdomain.com rac1-priv
192.168.2.132 rac2.mycorpdomain.com rac2
192.168.2.32 rac2-vip.mycorpdomain.com rac2-vip
10.10.10.32 rac2-priv.mycorpdomain.com rac2-priv
hangcheck-timer 커널 모듈의 설정. hangcheck timer 커널 모듈은 시스템의 상태를 모니터링하고 장애가 발생한 RAC 노드를 재시작합니다. 노드의 장애 상황을 파악하기 위해 사용되는 두 가지 매개변수로 hangcheck_tick(시스템 모니터링 빈도 정의)과 hangcheck_margin(RAC 노드의 리셋을 수행하기 위한 최대 지연 허용 시간)이 있습니다.
/etc/modprobe.conf 파일에 아래 라인을 추가하여 hangcheck 커널 모듈 매개변수를 설정해 줍니다.
/etc/modprobe.conf
options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
모듈을 즉시 로드하기 위해 "modprobe -v hangcheck-timer" 명령을 실행합니다.
OCFS2, Oracle ASM을 위한 디스크 파티션 생성. OCFS2(/dev/sdb)와 Oracle ASM(/dev/sdc, /dev/sdd, /dev/sde)을 위한 로우 디스크를 생성합니다.
rac1에서 root 사용자로 로그인하여 아래와 같이 실행합니다:
# fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-512, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-512, default 512):
Using default value 512
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# fdisk /dev/sdc
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-391, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-391, default 391):
Using default value 391
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# fdisk /dev/sdd
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-391, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-391, default 391):
Using default value 391
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# fdisk /dev/sde
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261):
Using default value 261
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# fdisk -l
Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 910 7309543+ 83 Linux
/dev/sda2 911 1170 2088450 82 Linux swap
/dev/sda3 1171 2610 11566800 83 Linux
Disk /dev/sdb: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 512 524272 83 Linux
Disk /dev/sdc: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 391 3140676 83 Linux
Disk /dev/sdd: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdd1 1 391 3140676 83 Linux
Disk /dev/sde: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sde1 1 261 2096451 83 Linux
oracleasmlib 패키지 설치. OTN에서 ASM 라이브러리를 다운로드하고 root 사용자로 ASM RPM을 설치합니다.
# rpm -Uvh oracleasmlib-2.0.2-1.i386.rpm
Preparing...
########################################### [100%]
1:oracleasmlib
########################################### [100%]
이 단계에서, 아래와 같은 ASM 패키지가 설치된 상태이어야 합니다.
[root@rac1 swdl]# rpm -qa | grep oracleasm
oracleasm-support-2.0.3-2
oracleasm-2.6.9-42.0.0.0.1.ELsmp-2.0.3-2
oracleasmlib-2.0.2-1
ASM 디스크를 위한 로우 디바이스 매핑. 로우 디바이스 매핑(raw device mapping)은 표준 Linux I/O를 이용하여 ASM 디스크를 생성하는 경우에만 필요합니다. ASM 디스크를 생성하는 또 다른 방법으로 오라클이 제공하는 ASM 라이브러리 드라이버를 이용할 수도 있습니다. ASM 라이브러리 드라이버를 이용하여 ASM 디스크를 설정하는 방법은 뒷부분에서 설명합니다.
아래 작업을 수행하여 로우 디바이스를 앞에서 생성한 공유 파티션에 매핑합니다. 로우 디바이스는 클러스터 노드가 부팅될 때마다 블록 디바이스에 바인딩되어야 합니다.
/etc/sysconfig/rawdevices 파일에 아래 라인을 추가합니다.
/etc/sysconfig/rawdevices
/dev/raw/raw1 /dev/sdc1
/dev/raw/raw2 /dev/sdd1
/dev/raw/raw3 /dev/sde1
매핑 설정을 즉시 적용하려면, root 사용자로 로그인하여 아래 커맨드를 실행합니다:
# /sbin/service rawdevices restart
Assigning devices:
/dev/raw/raw1 --> /dev/sdc1
/dev/raw/raw1: bound to major 8, minor 33
/dev/raw/raw2 --> /dev/sdd1
/dev/raw/raw2: bound to major 8, minor 49
/dev/raw/raw3 --> /dev/sde1
/dev/raw/raw3: bound to major 8, minor 65
done
# chown oracle:dba /dev/raw/raw[1-3]
# chmod 660 /dev/raw/raw[1-3]
# ls -lat /dev/raw/raw*
crw-rw---- 1 oracle dba 162, 3 Nov 4 07:04 /dev/raw/raw3
crw-rw---- 1 oracle dba 162, 2 Nov 4 07:04 /dev/raw/raw2
crw-rw---- 1 oracle dba 162, 1 Nov 4 07:04 /dev/raw/raw1
oracle 사용자로 로그인하여 아래와 같이 실행합니다:
rac1-> ln -sf /dev/raw/raw1 /u01/oradata/devdb/asmdisk1
rac1-> ln -sf /dev/raw/raw2 /u01/oradata/devdb/asmdisk2
rac1-> ln -sf /dev/raw/raw3 /u01/oradata/devdb/asmdisk3
/etc/udev/permissions.d/50-udev.permissions 수정 로우 디바이스는 부팅 시점에 리매핑 됩니다. 디폴트 설정에서 로우 디바이스의 오너십은 부팅 시점에 root 사용자에게 귀속됩니다. 하지만 oracle 사용자에게 오너십이 귀속되지 않는 경우, ASM이 공유 파티션에 접근할 때 문제가 발생할 수 있습니다. /etc/udev/permissions.d/50-udev.permissions 파일의 “raw/*:root:disk:0660” 라인을 주석 처리하고 새로운 라인 “raw/*:oracle:dba:0660”을 추가합니다.
/etc/udev/permissions.d/50-udev.permissions
# raw devices
ram*:root:disk:0660
#raw/*:root:disk:0660
raw/*:oracle:dba:0660
4. 두 번째 가상 머신의 생성 및 설정
두 번째 가상 머신을 생성하기 위해, 첫 번째 가상 머신을 셧다운하고, d:\vm\rac\rac1의 모든 파일을 d:\vm\rac\rac2로 복사한 다음 몇 가지 설정을 변경해 줍니다.
네트워크 설정 변경.
- rac1에서 root 사용자로 로그인한 후,
" # shutdown ?h now"를 실행합니다. - 호스트 시스템에서 rac1 폴더의 모든 파일을 rac2로 복사합니다.
D:\>copy d:\vm\rac\rac1 d:\vm\rac\rac2 - VMware Server 콘솔에서 Ctrl-O를 눌러 두 번째 가상 머신, d:\rac\rac2\Red Hat Enterprise Linux 4.vmx를 엽니다.
- VMware Server console:
- o 가상 머신의 이름을 rac1에서 rac2로 변경합니다. rac1 탭을 마우스 오른쪽 버튼으로 클릭하고 Settings를 선택합니다.
- Options탭을 선택합니다.
1. Virtual machine name: Virtual machine name: “rac2"를 입력합니다.
o Start this virtual machine를 클릭하여 (rac1이 셧다운된 상태에서) rac2를 시작합니다.
o rac2 – Virtaul Machine: Create a new identifier를 클릭합니다.
- 5. root 사용자로 로그인한 상태에서 system-config-network를 실행하여 네트워크 설정을 변경합니다.
IP Address: 각각의 이더넷 디바이스를 더블 클릭하고 아래 표를 참고하여 변경 작업을 수행합니다.
디바이스 |
IP 주소 |
서브넷 마스크 |
디폴트 게이트웨이 주소 |
eth0 |
192.168.2.132 |
255.255.255.0 |
192.168.2.1 |
eth1 |
10.10.10.32 |
255.255.255.0 |
<공란으로 비워 둠> |
MAC Address: Hardware Device탭으로 이동하여 각 이더넷 디바이스의 새로운 MAC 어드레스를 조회합니다.
Hostname and DNS: 아래 표를 참고하여 DNS 탭의 항목을 변경하고 Ctrl-S를 눌러 저장합니다.
Hostname |
Primary DNS |
Secondary DNS |
DNS search path |
rac2.mycorpdomain.com |
DNS IP 주소를 입력하거나 공란으로 비워 둡니다. |
DNS IP 주소를 입력하거나 공란으로 비워 둡니다. |
디폴트 설정을 승인하거나 공란으로 비워 둡니다. |
마지막으로, 각 이더넷 디바이스를 활성화합니다.
/etc/hosts 파일 수정. /etc/hosts 파일에 아래 항목을 추가합니다.
127.0.0.1 localhost
VIPCA는 Oracle Clusterware 소프트웨어 설치 과정에서 루프백 주소를 사용하려 시도하게 됩니다.
/export/home/oracle/.profile 변경. ORACLE_SID 값을 devdb2로 변경합니다.
SSH를 이용한 user equivalence의 설정. Cluster Ready Services(CRS) 및 RAC 설치 과정에서, Oracle Universal Installer(OUI)는 oracle 사용자로 (패스워드를 별도로 입력하지 않고) 모든 RAC 노드에 소프트웨어를 복사할 수 있어야 합니다. Oracle 10g에서는 rsh 대신 ssh를 이용하여 이 작업을 수행할 수 있습니다.
user equivalence를 설정하기 위해, oracle 사용자를 위한 퍼블릿/프라이빗 키를 양쪽 노드에 생성해 줍니다. rac1을 시작한 후, 양쪽 노드에서 아래와 같이 작업을 수행해 줍니다.
먼저 rac1에서 아래와 같이 작업합니다:
rac1-> mkdir ~/.ssh
rac1-> chmod 700 ~/.ssh
rac1-> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/export/home/oracle/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /export/home/oracle/.ssh/id_rsa.
Your public key has been saved in /export/home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
87:54:4f:92:ba:ed:7b:51:5d:1d:59:5b:f9:44:da:b6 oracle@rac1.mycorpdomain.com
rac1-> ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/export/home/oracle/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /export/home/oracle/.ssh/id_dsa.
Your public key has been saved in /export/home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
31:76:96:e6:fc:b7:25:04:fd:70:42:04:1f:fc:9a:26 oracle@rac1.mycorpdomain.com
다음으로 rac2에서 아래와 같이 작업합니다:
rac2-> mkdir ~/.ssh
rac2-> chmod 700 ~/.ssh
rac2-> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/export/home/oracle/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /export/home/oracle/.ssh/id_rsa.
Your public key has been saved in /export/home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
29:5a:35:ac:0a:03:2c:38:22:3c:95:5d:68:aa:56:66 oracle@rac2.mycorpdomain.com
rac2-> ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/export/home/oracle/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /export/home/oracle/.ssh/id_dsa.
Your public key has been saved in /export/home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
4c:b2:5a:8d:56:0f:dc:7b:bc:e0:cd:3b:8e:b9:5c:7c oracle@rac2.mycorpdomain.com
rac1에서 아래와 같이 작업합니다:
rac1-> cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
rac1-> cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
rac1-> ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
The authenticity of host 'rac2 (192.168.2.132)' can't be established.
RSA key fingerprint is 63:d3:52:d4:4d:e2:cb:ac:8d:4a:66:9f:f1:ab:28:1f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'rac2,192.168.2.132' (RSA) to the list of known hosts.
oracle@rac2's password:
rac1-> ssh rac2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
oracle@rac2's password:
rac1-> scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys
oracle@rac2's password:
authorized_keys 100% 1716 1.7KB/s 00:00
각 노드의 연결을 테스트합니다. 아래 명령을 두 번째 실행했을 때 패스워드를 묻는 프롬프트가 뜨지 않음을 확인합니다.
ssh rac1 date
ssh rac2 date
ssh rac1-priv date
ssh rac2-priv date
ssh rac1.mycorpdomain.com date
ssh rac2.mycorpdomain.com date
ssh rac1-priv.mycorpdomain.com date
ssh rac2-priv.mycorpdomain.com date
5. Oracle Automatic Storage Management (ASM) 설정
Oracle ASM은 오라클 데이터베이스와 긴밀하게 통합되어 있으며 오라클의 데이터베이스 관리 툴과 연동합니다. Oracle ASM은 데이터베이스 스토리지 관리 업무를 단순화하고 로우 디스크 I/O 성능을 개선하는 효과를 제공합니다.
ASMLib 설정. root 사용자로 로그인하여 양쪽 노드에서 ASMLib을 설정해 줍니다.
# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.
This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting without typing an
answer will keep that current value. Ctrl-C will abort.
Default user to own the driver interface []: oracle
Default group to own the driver interface []: dba
Start Oracle ASM library driver on boot (y/n) [n]: y
Fix permissions of Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: [ OK ]
Loading module "oracleasm": [ OK ]
Mounting ASMlib driver filesystem: [ OK ]
Scanning system for ASM disks: [ OK ]
ASM 디스크의 생성. root 사용자로 두 노드 중 하나에서 ASM 디스크를 생성합니다.
# /etc/init.d/oracleasm createdisk VOL1 /dev/sdc1
Marking disk "/dev/sdc1" as an ASM disk: [ OK ]
# /etc/init.d/oracleasm createdisk VOL2 /dev/sdd1
Marking disk "/dev/sdd1" as an ASM disk: [ OK ]
# /etc/init.d/oracleasm createdisk VOL3 /dev/sde1
Marking disk "/dev/sde1" as an ASM disk: [ OK ]
Verify that the ASM disks are visible from every node.
# /etc/init.d/oracleasm scandisks
Scanning system for ASM disks: [ OK ]
# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4
6. Oracle Cluster File System(OCFS2) 설정
OCFS2는 오라클이 개발한 범용 클러스터 파일 시스템으로 Enterprise Linux 커널과 통합되어 있습니다. OCFS2는 전체 노드가 클러스터 파일 시스템에 동시 접근하는 것을 가능하게 하며, 로우 디바이스 관리의 필요성을 제거합니다. 본 가이드에서는 OCFS2 파일 시스템에 OCR과 Voting Disk를 위치시키는 방법을 사용합니다. OCFS2에 대한 자세한 정보는 OCFS2 사용자 가이드에서 확인하실 수 있습니다.
Enterprise Linux 설치 과정에서 이미 OCFS2 RPM이 설치되었을 것입니다. 양쪽 노드에 RPM이 선택되었는지 확인합니다.
rac1-> rpm -qa | grep ocfs
ocfs2-tools-1.2.2-2
ocfs2console-1.2.2-2
ocfs2-2.6.9-42.0.0.0.1.ELsmp-1.2.3-2
OCFS2 설정 파일의 생성. root 사용자로 로그인하여 아래와 같이 실행합니다:
# ocfs2console
- OCFS2 Console: Cluster, Configure Nodes를 선택합니다.
- “The cluster stack has been started”: Close를 클릭합니다.
- Node Configuration: Add를 클릭합니다.
- Add Node: 아래 노드를 추가한 후 Apply를 클릭합니다.
- Name: rac1
- IP Address: 192.168.2.131
- IP Port: 7777
- Name: rac2
- IP Address: 192.168.2.132
- IP Port: 7777
- 5. 생성된 설정 파일의 내용을 확인합니다.
6. # more /etc/ocfs2/cluster.conf
7. node:
8. ip_port = 7777
9. ip_address = 192.168.2.131
10. number = 0
11. name = rac1
12. cluster = ocfs2
13.
14.node:
15. ip_port = 7777
16. ip_address = 192.168.2.132
17. number = 1
18. name = rac2
19. cluster = ocfs2
20.
21.cluster:
22. node_count = 2
23. name = ocfs2
- 24. 설정 파일을 rac2로 복사합니다. 위에서 설명한 과정을 rac2에서 재실행하거나, 또는 rac1의 OCFS2 콘솔에서 Cluster, Propagate Configuration을 선택하여 설정 파일을 rac2로 복사할 수 있습니다.
CO2CB 드라이버 설정. O2CB는 노드와 클러스터 파일 시스템 간의 커뮤니케이션을 관리하는 일련의 클러스터링 서비스로 구성됩니다. 각 서비스에 대한 설명이 아래와 같습니다:
- NM: Node Manager ? cluster.conf에 설정된 모든 노드의 상태를 추적
- HB: Heartbeat 서비스 ? 노드가 클러스터에 가입/탈퇴하는 경우 업/다운 통보를 전달
- TCP: 노드 간의 커뮤니케이션을 처리
- DLM: Distributed Lock Manager ? 락, 락의 소유자 및 상태 정보를 추적
- CONFIGFS: 사용자 공간(/config)에 마운트되는 구성 파일 시스템
- DLMFS: 커널 스페이스 DLM을 위한 사용자 공간 인터페이스
양쪽 노드에 아래 작업을 수행하여 부팅 시 O2CB가 실행되도록 설정해 줍니다.
heartbeat dead threshold를 묻는 프롬프트에서 7 이상의 값을 입력하여 낮은 성능의 IDE 디스크 드라이브로 인해 노드 크래시가 발생하는 것을 방지해 주어야 합니다. heartbeat dead threshold는 fence time을 계산하기 위한 변수로 활용됩니다.
Fence time (seconds) = (heartbeat dead threshold -1) * 2
본 가이드의 구성에서는 120 초의 fence time이면 충분합니다. heartbeat dead threshold 값은 양쪽 노드에 동일하게 설정되어야 합니다.
root 사용자로 로그인하여 아래와 같이 실행합니다:
# /etc/init.d/o2cb unload
Stopping O2CB cluster ocfs2: OK
Unmounting ocfs2_dlmfs filesystem: OK
Unloading module "ocfs2_dlmfs": OK
Unmounting configfs filesystem: OK
Unloading module "configfs": OK
# /etc/init.d/o2cb configure
Configuring the O2CB driver.
This will configure the on-boot properties of the O2CB driver.
The following questions will determine whether the driver is loaded on
boot. The current values will be shown in brackets ('[]'). Hitting
without typing an answer will keep that current value. Ctrl-C
will abort.
Load O2CB driver on boot (y/n) [y]: y
Cluster to start on boot (Enter "none" to clear) [ocfs2]:
Specify heartbeat dead threshold (>=7) [7]: 61
Writing O2CB configuration: OK
Loading module "configfs": OK
Mounting configfs filesystem at /config: OK
Loading module "ocfs2_nodemanager": OK
Loading module "ocfs2_dlm": OK
Loading module "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster ocfs2: OK
파일 시스템의 포맷. 파일 시스템의 포맷, 마운팅을 수행하기 전에, OC2B가 양쪽 노드에서 온라인 상태인지 확인합니다. O2CB heartbeat는 파일 시스템이 마운트되기 전까지 활성화되지 않습니다.
# /etc/init.d/o2cb status
Module "configfs": Loaded
Filesystem "configfs": Mounted
Module "ocfs2_nodemanager": Loaded
Module "ocfs2_dlm": Loaded
Module "ocfs2_dlmfs": Loaded
Filesystem "ocfs2_dlmfs": Mounted
Checking O2CB cluster ocfs2: Online
Checking O2CB heartbeat: Not active
파일 시스템 포맷 작업은 두 노드 중 하나에서만 수행합니다. root 사용자로 rac1에 로그인하여 아래와 같이 실행합니다:
# ocfs2console
- OCFS2 Console: Tasks, Format을 선택합니다.
- Format:
- Available devices: /dev/sdb1
- Volume label: oracle
- Cluster size: Auto
- Number of node slots: 4
- Block size: Auto
- OCFS2 Console: CTRL-Q를 눌러 종료합니다.
파일 시스템의 마운트. 파일 시스템을 마운트하기 위해, 양쪽 노드에서 아래와 같이 명령을 실행합니다.
# mount -t ocfs2 -o datavolume,nointr /dev/sdb1 /ocfs
부팅 시에 파일 시스템이 마운트되도록, 양쪽 노드의 /etc/fstab에 아래 라인을 추가해 줍니다.
/etc/fstab
/dev/sdb1 /ocfs ocfs2 _netdev,datavolume,nointr 0 0
Oracle Clusterware 디렉토리 생성. OCFS2 파일 시스템에 OCR, Voting Disk가 위치할 디렉토리를 생성합니다.
rac1에서 아래와 같이 작업합니다:
# mkdir /ocfs/clusterware
# chown -R oracle:dba /ocfs
이것으로 OCFS2의 셋업 과정을 완료하였습니다. 양쪽 노드의 공유 클러스터 파일 시스템에서 파일 읽기/쓰기를 수행할 수 있는지 확인합니다.
7. Oracle Clusterware 설치
다운로드를 완료한 후, rac1에 oracle 사용자로 로그인하여 아래와 같이 실행합니다:
rac1-> /u01/staging/clusterware/runInstaller
- Welcome: Next를 클릭합니다.
- Specify Inventory directory and credentials:
- Enter the full path of the inventory directory: /u01/app/oracle/oraInventory.
- Specify Operating System group name: oinstall.
- Specify Home Details:
- Name: OraCrs10g_home
- /u01/app/oracle/product/10.2.0/crs_1
- Product-Specific Prerequisite Checks:
- 물리적 메모리 요구사항에 관련한 경고를 무시합니다.
- Specify Cluster Configuration: Add를 클릭합니다.
- Public Node Name: rac2.mycorpdomain.com
- Private Node Name: rac2-priv.mycorpdomain.com
- Virtual Host Name: rac2-vip.mycorpdomain.com
- Specify Network Interface Usage:
- Interface Name: eth0
- Subnet: 192.168.2.0
- Interface Type: Public
- Interface Name: eth1
- Subnet: 10.10.10.0
- Interface Type: Private
- Specify Oracle Cluster Registry (OCR) Location: External Redundancy를 선택합니다.
구성의 단순화를 위해, 본 가이드에서는 OCR을 미러링하지 않는 것으로 합니다. 실제 운영 환경에서는 OCR 디스크의 가용성 개선을 위해 멀티플렉싱을 사용해야 합니다. - Specify OCR Location: /ocfs/clusterware/ocr
- Specify Voting Disk Location: External Redundancy를 선택합니다.
구성의 단순화를 위해, 본 가이드에서는 Voting Disk를 미러링하지 않는 것으로 합니다. - Voting Disk Location: /ocfs/clusterware/votingdisk
- Summary: Install을 클릭합니다.
- Execute Configuration scripts: root 사용자로 로그인하여 아래 스크립트를 한 번에 하나씩 실행합니다. 현재 실행 중인 스크립트가 완료되기 전까지 다음 스크립트를 실행하지 않도록 주의합니다.
- Execute /u01/app/oracle/oraInventory/orainstRoot.sh on rac1.
- Execute /u01/app/oracle/oraInventory/orainstRoot.sh on rac2.
- Execute /u01/app/oracle/product/10.2.0/crs_1/root.sh on rac1.
- Execute /u01/app/oracle/product/10.2.0/crs_1/root.sh on rac2.
rac2의 root.sh 스크립트는 VIPCA를 자동으로 호출하지만, "The given interface(s), "eth0" is not public. Public interfaces should be used to configure virtual IPs" 에러와 함께 실패합니다. 퍼블릭 인터페이스에 사설 IP 주소(192.168.x.x)가 사용되고 있기 때문에 Oracle Cluster Verification Utility(CVU)가 적절한 퍼블릭 인터페이스를 찾을 수 없는 것입니다. 이 문제를 해결하려면 VIPCA를 수동으로 실행해야 합니다.
- 11. root 사용자로 로그인하여 두 번째 노드에서 VIPCA를 수동으로 실행합니다.
# /u01/app/oracle/product/10.2.0/crs_1/bin/vipca - Welcome: Next를 클릭합니다.
- Network Interfaces: eth0를 선택합니다.
- Virtual IPs for cluster nodes:
- Node name: rac1
- IP Alias Name: rac1-vip
- IP address: 192.168.2.31
- Subnet Mask: 255.255.255.0
- Node name: rac2
- IP Alias Name: rac2-vip
- IP address: 192.168.2.32
- Subnet Mask: 255.255.255.0
- Summary: Finish를 클릭합니다.
- Configuration Assistant Progress Dialog: 설정을 완료한 후 OK를 클릭합니다.
- Configuration Results: Exit를 클릭합니다.
- rac1의 Execute Configuration 스크립트 스크린으로 돌아가 OK를 클릭합니다.
- 19. Configuration Assistants: 모든 점검이 성공적으로 완료되었는지 확인합니다. OUI는 Clusterware 설치가 완료된 후 사후 점검 작업을 수행합니다. CVU가 실패한 경우 문제를 해결하고 다시 oracle 사용자로 아래 명령을 재실행합니다:
20.rac1-> /u01/app/oracle/product/10.2.0/crs_1/bin/cluvfy stage
21.-post crsinst -n rac1,rac2
22.
23.Performing post-checks for cluster services setup
24.
25.Checking node reachability...
26.Node reachability check passed from node "rac1".
27.
28.Checking user equivalence...
29.User equivalence check passed for user "oracle".
30.
31.Checking Cluster manager integrity...
32.
33.Checking CSS daemon...
34.Daemon status check passed for "CSS daemon".
35.
36.Cluster manager integrity check passed.
37.
38.Checking cluster integrity...
39.
40.Cluster integrity check passed
41.
42.Checking OCR integrity...
43.
44.Checking the absence of a non-clustered configuration...
45.All nodes free of non-clustered, local-only configurations.
46.
47.Uniqueness check for OCR device passed.
48.
49.Checking the version of OCR...
50.OCR of correct Version "2" exists.
51.
52.Checking data integrity of OCR...
53.Data integrity check for OCR passed.
54.
55.OCR integrity check passed.
56.
57.Checking CRS integrity...
58.
59.Checking daemon liveness...
60.Liveness check passed for "CRS daemon".
61.
62.Checking daemon liveness...
63.Liveness check passed for "CSS daemon".
64.
65.Checking daemon liveness...
66.Liveness check passed for "EVM daemon".
67.
68.Checking CRS health...
69.CRS health check passed.
70.
71.CRS integrity check passed.
72.
73.Checking node application existence...
74.
75.Checking existence of VIP node application (required)
76.Check passed.
77.
78.Checking existence of ONS node application (optional)
79.Check passed.
80.
81.Checking existence of GSD node application (optional)
82.Check passed.
83.
84.Post-check for cluster services setup was successful.
- End of Installation: Exit를 클릭합니다.
8. Oracle Database 10g Release 2 설치
다운로드를 완료한 후, rac1에 oracle 사용자로 로그인하여 아래와 같이 실행합니다:
rac1-> /u01/staging/database/runInstaller
- Welcome: Next를 클릭합니다.
- Select Installation Type:
- Enterprise Edition을 선택합니다.
- Specify Home Details:
- Name: OraDb10g_home1
- Path: /u01/app/oracle/product/10.2.0/db_1
- Specify Hardware Cluster Installation Mode:
- Cluster Installation을 선택합니다.
- Select All을 클릭합니다.
- Product-Specific Prerequisite Checks:
- 물리적 메모리 요구사항에 관련한 경고를 무시합니다.
- Select Configuration Option:
- Create a Database를 선택합니다.
- Select Database Configuration:
- Advanced를 선택합니다.
- Summary: Install을 클릭합니다.
- Database Templates:
- General Purpose를 선택합니다.
- Database identification:
- Global Database Name: devdb
- SID Prefix: devdb
- Management Options:
- Configure the Database with Enterprise Manager를 선택합니다.
- Database Credentials:
- “Use the Same Password for All Accounts”를 선택합니다.
- Storage Options:
- Automatic Storage Management (ASM)을 선택합니다.
- Create ASM Instance:
- SYS password: <SYS 패스워드를 입력합니다>.
- Create initialization parameter file (IFILE)을 선택합니다.
- ASM Disk Groups:
- Create New를 클릭합니다.
- Create Disk Group:
두 개의 디스크 그룹(DG1, RECOVERYDEST)을 생성합니다. - Disk Group Name: DG1
- Normal redundancy를 선택합니다.
- Disk Path, ORCL:VOL1, ORCL:VOL2를 선택합니다. 표준 Linux I/O를 이용하여 ASM 디스크를 설정한 경우, /u01/oradata/devdb/asmdisk1와 /u01/oradata/devdb/asmdisk2를 선택해 주어야 합니다.
- OK를 클릭합니다.
o Disk Group Name: RECOVERYDEST.
o External redundancy를 선택합니다.
o Disk Path, ORCL:VOL3을 선택합니다. 표준 Linux I/O를 이용하여 ASM 디스크를 설정한 경우, /u01/oradata/devdb/asmdisk3을 선택해 주어야 합니다.
o OK를 클릭합니다.
- ASM Disk Groups: Next를 클릭합니다.
- Database File Locations:
- Use Oracle-Managed Files를 선택합니다.
- Database Area: +DG1
- Recovery Configuration:
- Specify Flash Recovery Area를 선택합니다.
- Flash Recovery Area: +RECOVERYDEST
- Flash Recovery Area Size: 1500M
- Enable Archiving를 선택합니다.
- Database Content:
- 샘플 스키마를 선택 또는 해제합니다.
- Database Services:
- Next를 클릭합니다. 나중에 DBCA 또는 srvctl을 이용하여 서비스를 추가로 생성, 변경할 수 있습니다.
- Initialization Parameters:
- Custom를 선택합니다.
- Shared Memory Management: Automatic
- SGA Size: 200MB
- PGA Size: 25MB
- b. 필요에 따라 나머지 매개변수를 변경해 줍니다.
- Database Storage: Next를 클릭합니다.
- Creation Options:
- Create Database를 선택합니다.
- Finish를 클릭합니다.
- Summary: Click on OK.
- Database Configuration Assistant: Exit를 클릭합니다.
- Execute Configuration scripts: root 사용자로 로그인하여 아래 스크립트를 실행합니다.
- rac1에서 /u01/app/oracle/product/10.2.0/db_1/root.sh 스크립트를 실행합니다.
- rac2에서 /u01/app/oracle/product/10.2.0/db_1/root.sh 스크립트를 실행합니다.
- rac1의 Execute Configuration 스크립트 스크린으로 돌아가 OK를 클릭합니다.
- End of Installation: Exit를 클릭합니다.
축하합니다. 이것으로 Enterprise Linux에 Oracle RAC Database 10g를 설치하는 작업을 완료하였습니다!
9. RAC 데이터베이스 환경 확인
이제 가상 환경에 2 노드 RAC 데이터베이스를 성공적으로 설치하였습니다. 잠시 시간을 내어 설치된 환경을 둘러 보기로 합시다.
애플리케이션 리소스의 상태 확인
rac1-> crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.devdb.db application ONLINE ONLINE rac1
ora....b1.inst application ONLINE ONLINE rac1
ora....b2.inst application ONLINE ONLINE rac2
ora....SM1.asm application ONLINE ONLINE rac1
ora....C1.lsnr application ONLINE ONLINE rac1
ora.rac1.gsd application ONLINE ONLINE rac1
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora....C2.lsnr application ONLINE ONLINE rac2
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac2
rac1-> srvctl status nodeapps -n rac1
VIP is running on node: rac1
GSD is running on node: rac1
Listener is running on node: rac1
ONS daemon is running on node: rac1
rac1-> srvctl status nodeapps -n rac2
VIP is running on node: rac2
GSD is running on node: rac2
Listener is running on node: rac2
ONS daemon is running on node: rac2
rac1-> srvctl status asm -n rac1
ASM instance +ASM1 is running on node rac1.
rac1-> srvctl status asm -n rac2
ASM instance +ASM2 is running on node rac2.
rac1-> srvctl status database -d devdb
Instance devdb1 is running on node rac1
Instance devdb2 is running on node rac2
rac1-> srvctl status service -d devdb
rac1->
Oracle Clusterware의 상태 확인.
rac1-> crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy
rac2-> crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy
커맨드 라인에서 crsctl를 실행하여 사용 가능한 옵션을 확인합니다.
RAC 인스턴스 목록 확인.
SQL> select
2 instance_name,
3 host_name,
4 archiver,
5 thread#,
6 status
7 from gv$instance;
INSTANCE_NAME HOST_NAME ARCHIVE THREAD# STATUS
-------------- --------------------- ------- -------- ------
devdb1 rac1.mycorpdomain.com STARTED 1 OPEN
devdb2 rac2.mycorpdomain.com STARTED 2 OPEN
연결 테스트.
각 노드의 인스턴스와 서비스에 연결할 수 있는지 확인합니다.
sqlplus system@devdb1
sqlplus system@devdb2
sqlplus system@devdb
데이터베이스 설정의 확인.
rac1-> export ORACLE_SID=devdb1
rac1-> sqlplus / as sysdba
SQL> show sga
Total System Global Area 209715200 bytes
Fixed Size 1218556 bytes
Variable Size 104859652 bytes
Database Buffers 100663296 bytes
Redo Buffers 2973696 bytes
SQL> select file_name,bytes/1024/1024 from dba_data_files;
FILE_NAME BYTES/1024/1024
------------------------------------------- ---------------
+DG1/devdb/datafile/users.259.606468449 5
+DG1/devdb/datafile/sysaux.257.606468447 240
+DG1/devdb/datafile/undotbs1.258.606468449 30
+DG1/devdb/datafile/system.256.606468445 480
+DG1/devdb/datafile/undotbs2.264.606468677 25
SQL> select
2 group#,
3 type,
4 member,
5 is_recovery_dest_file
6 from v$logfile
7 order by group#;
GROUP# TYPE MEMBER IS_
------ ------- --------------------------------------------------- ---
1 ONLINE +RECOVERYDEST/devdb/onlinelog/group_1.257.606468581 YES
1 ONLINE +DG1/devdb/onlinelog/group_1.261.606468575 NO
2 ONLINE +RECOVERYDEST/devdb/onlinelog/group_2.258.606468589 YES
2 ONLINE +DG1/devdb/onlinelog/group_2.262.606468583 NO
3 ONLINE +DG1/devdb/onlinelog/group_3.265.606468865 NO
3 ONLINE +RECOVERYDEST/devdb/onlinelog/group_3.259.606468875 YES
4 ONLINE +DG1/devdb/onlinelog/group_4.266.606468879 NO
4 ONLINE +RECOVERYDEST/devdb/onlinelog/group_4.260.606468887 YES
rac1-> export ORACLE_SID=+ASM1
rac1-> sqlplus / as sysdba
SQL> show sga
Total System Global Area 92274688 bytes
Fixed Size 1217884 bytes
Variable Size 65890980 bytes
ASM Cache 25165824 bytes
SQL> show parameter asm_disk
NAME TYPE VALUE
------------------------------ ----------- ------------------------
asm_diskgroups string DG1, RECOVERYDEST
asm_diskstring string
SQL> select
2 group_number,
3 name,
4 allocation_unit_size alloc_unit_size,
5 state,
6 type,
7 total_mb,
8 usable_file_mb
9 from v$asm_diskgroup;
ALLOC USABLE
GROUP UNIT TOTAL FILE
NUMBER NAME SIZE STATE TYPE MB MB
------ ------------ -------- ------- ------ ------ -------
1 DG1 1048576 MOUNTED NORMAL 6134 1868
2 RECOVERYDEST 1048576 MOUNTED EXTERN 2047 1713
SQL> select
2 name,
3 path,
4 header_status,
5 total_mb free_mb,
6 trunc(bytes_read/1024/1024) read_mb,
7 trunc(bytes_written/1024/1024) write_mb
8 from v$asm_disk;
NAME PATH HEADER_STATU FREE_MB READ_MB WRITE_MB
----- ---------- ------------ ---------- ---------- ----------
VOL1 ORCL:VOL1 MEMBER 3067 229 1242
VOL2 ORCL:VOL2 MEMBER 3067 164 1242
VOL3 ORCL:VOL3 MEMBER 2047 11 354
테이블스페이스 생성.
SQL> connect system/oracle@devdb
Connected.
SQL> create tablespace test_d datafile '+DG1' size 10M;
Tablespace created.
SQL> select
2 file_name,
3 tablespace_name,
4 bytes
5 from dba_data_files
6 where tablespace_name='TEST_D';
FILE_NAME TABLESPACE_NAME BYTES
---------------------------------------- --------------- ----------
+DG1/devdb/datafile/test_d.269.606473423 TEST_D 10485760
온라인 리두 로그파일 그룹 생성.
SQL> connect system/oracle@devdb
Connected.
SQL> alter database add logfile thread 1 group 5 size 50M;
Database altered.
SQL> alter database add logfile thread 2 group 6 size 50M;
Database altered.
SQL> select
2 group#,
3 thread#,
4 bytes,
5 members,
6 status
7 from v$log;
GROUP# THREAD# BYTES MEMBERS STATUS
---------- ---------- ---------- ---------- ----------------
1 1 52428800 2 CURRENT
2 1 52428800 2 INACTIVE
3 2 52428800 2 ACTIVE
4 2 52428800 2 CURRENT
5 1 52428800 2 UNUSED
6 2 52428800 2 UNUSED
SQL> select
2 group#,
3 type,
4 member,
5 is_recovery_dest_file
6 from v$logfile
7 where group# in (5,6)
8 order by group#;
GROUP# TYPE MEMBER IS_
------ ------- ---------------------------------------------------- ---
5 ONLINE +DG1/devdb/onlinelog/group_5.271.606473683 NO
5 ONLINE +RECOVERYDEST/devdb/onlinelog/group_5.261.606473691 YES
6 ONLINE +DG1/devdb/onlinelog/group_6.272.606473697 NO
6 ONLINE +RECOVERYDEST/devdb/onlinelog/group_6.262.606473703 YES
플래시 복구 영역의 공간 사용 현황 점검.
SQL> select * from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
------------- ----------- ---------- ----------------- ---------------
+RECOVERYDEST 1572864000 331366400 0 7
SQL> select * from v$flash_recovery_area_usage;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ------------------------- ---------------
CONTROLFILE .97 0 1
ONLINELOG 20 0 6
ARCHIVELOG 0 0 0
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
애플리케이션 리소스의 시작/중단.
아래 작업을 수행하여 개별 애플리케이션 리소스를 시작/중단해 봅니다.
srvctl start nodeapps -n <node1 hostname>
srvctl start nodeapps -n <node2 hostname>
srvctl start asm -n <node1 hostname>
srvctl start asm -n <node2 hostname>
srvctl start database -d <database name>
srvctl start service -d <database name> -s <service name>
crs_stat -t
srvctl stop service -d <database name> -s <service name>
srvctl stop database -d <database name>
srvctl stop asm -n <node1 hostname>
srvctl stop asm -n <node2 hostname>
srvctl stop nodeapps -n <node1 hostname>
srvctl stop nodeapps -n <node2 hostname>
crs_stat -t
10. Transparent Application Failover(TAF) 테스트
Oracle TAF는 데이터베이스 연결에 장애가 발생한 경우 클러스터의 다른 노드로 재연결하기 위한 페일오버 메커니즘을 제공합니다. 페일오버 과정은 사용자 관점에서 투명하게 수행됩니다. 오라클은 페일오버된 인스턴스에서 쿼리를 재실행하고 결과를 사용자에게 반환합니다.
새로운 데이터베이스 서비스의 생성. 먼저 CRM이라는 이름의 새로운 서비스를 생성해 봅시다. 데이터베이스 서비스는 DBCA 또는 srvctl 유틸리티를 이용하여 생성할 수 있습니다. 여기에서는 DBCA를 사용해서 devdb1에 CRM 서비스를 생성해 보겠습니다.
Service Name |
Database Name |
Preferred Instance |
Available Instance |
TAF Policy |
CRM |
devdb |
devdb1 |
devdb2 |
BASIC |
oracle 사용자로 rac1에 로그인하여 아래와 같이 실행합니다:
rac1-> dbca
- Welcome: Oracle Real Application Clusters database를 선택합니다.
- Operations: Services Management를 선택합니다.
- List of cluster databases: Next를 클릭합니다.
- Database Services: strong>Add를 클릭합니다.
- Add a Service: “CRM”을 입력합니다.
- devdb1을 Preferred instance로 선택합니다.
- devdb2를 Available instance로 선택합니다.
- TAF Policy: Basic을 선택합니다.
- Finish를 클릭합니다.
- Database Configuration Assistant: No를 클릭하여 종료합니다.
Database Configuration Assistant는 tnsnames.ora 파일에 아래 CRM 서비스 네임 엔트리를 생성합니다:
CRM =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = CRM)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
SQL> connect system/oracle@devdb1
Connected.
SQL> show parameter service
NAME TYPE VALUE
------------------------------ ----------- ------------------------
service_names string devdb, CRM
SQL> connect system/oracle@devdb2
Connected.
SQL> show parameter service
NAME TYPE VALUE
------------------------------ ----------- ------------------------
service_names string devdb
CRM 서비스를 이용하여 첫 번째 세션에 연결. failover_type과 failover_mode의 반환 결과가 'NONE'인 경우, CRM 서비스가 tnsnames.ora에 올바르게 설정되었는지 확인합니다.
SQL> connect system/oracle@crm
Connected.
SQL> select
2 instance_number instance#,
3 instance_name,
4 host_name,
5 status
6 from v$instance;
INSTANCE# INSTANCE_NAME HOST_NAME STATUS
---------- ---------------- --------------------- ------------
1 devdb1 rac1.mycorpdomain.com OPEN
SQL> select
2 failover_type,
3 failover_method,
4 failed_over
5 from v$session
6 where username='SYSTEM';
FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------------- ----------------
SELECT BASIC NO
다른 세션에서 인스턴스를 셧다운. CRM 인스턴스에 sys 사용자로 연결한 후 인스턴스를 셧다운합니다.
rac1-> export ORACLE_SID=devdb1
rac1-> sqlplus / as sysdba
SQL> select
2 instance_number instance#,
3 instance_name,
4 host_name,
5 status
6 from v$instance;
INSTANCE# INSTANCE_NAME HOST_NAME STATUS
---------- ---------------- --------------------- ------------
1 devdb1 rac1.mycorpdomain.com OPEN
SQL> shutdown abort;
ORACLE instance shut down.
세션이 페일오버 되었는지 확인. 동일한 CRM 세션에서 아래 쿼리를 실행하여 세션이 다른 인스턴스로 페일오버 되었는지 확인합니다.
SQL> select
2 instance_number instance#,
3 instance_name,
4 host_name,
5 status
6 from v$instance;
INSTANCE# INSTANCE_NAME HOST_NAME STATUS
---------- ---------------- --------------------- ------------
2 devdb2 rac2.mycorpdomain.com OPEN
SQL> select
2 failover_type,
3 failover_method,
4 failed_over
5 from v$session
6 where username='SYSTEM';
FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------------- ----------------
SELECT BASIC YES
CRM 서비스를 preferred instance로 페일백. devdb1이 다시 시작된 이후에도 CRM 서비스는 preferred instance로 페일백 처리되지 않습니다. 따라서 수동으로 서비스를 devdb1으로 이전해 주어야 합니다.
rac1-> export ORACLE_SID=devdb1
rac1-> sqlplus / as sysdba
SQL> startup
ORACLE instance started.
Total System Global Area 209715200 bytes
Fixed Size 1218556 bytes
Variable Size 104859652 bytes
Database Buffers 100663296 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL> show parameter service
NAME TYPE VALUE
------------------------------ ----------- ------------------------
service_names string devdb
rac2-> export ORACLE_SID=devdb2
rac2-> sqlplus / as sysdba
SQL> show parameter service
NAME TYPE VALUE
------------------------------ ----------- ------------------------
service_names string devdb, CRM
rac1-> srvctl relocate service -d devdb -s crm -i devdb2 -t devdb1
SQL> connect system/oracle@devdb1
Connected.
SQL> show parameter service
NAME TYPE VALUE
------------------------------ ----------- ------------------------
service_names string devdb, CRM
SQL> connect system/oracle@devdb2
Connected.
SQL> show parameter service
NAME TYPE VALUE
------------------------------ ----------- ------------------------
service_names string devdb
11. 데이터베이스 백업 및 복구
Oracle Recovery Manager(RMAN)을 이용하여 Oracle RAC 데이터베이스를 백업/복구하는 방법은 싱글 인스턴스 데이터베이스의 경우와 동일합니다.
이번 섹션에서는 아주 간단한 백업/복구 시나리오를 실행해 보기로 합니다:
1. 전체 데이터베이스 백업 수행.
2. test_d 테이블스페이스에 mytable 테이블을 생성.
3. t1 시점에 mytable에 첫 번째 레코드를 삽입.
4. t2 시점에 두 번째 레코드를 mytable에 삽입.
5. t3 시점에 mytable을 드롭.
6. test_d 테이블스페이스의 포인트-인-타임 복구 수행.
7. 복구 결과 검증.
전체 데이터베이스 백업 수행.
rac1-> rman nocatalog target /
Recovery Manager: Release 10.2.0.1.0 - Production on Mon Nov 13 18:15:09 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: DEVDB (DBID=511198553)
using target database control file instead of recovery catalog
RMAN> configure controlfile autobackup on;
RMAN> backup database plus archivelog delete input;
test_d 테이블스페이스에 mytable 테이블을 생성.
19:01:56 SQL> connect system/oracle@devdb2
Connected.
19:02:01 SQL> create table mytable (col1 number) tablespace test_d;
Table created.
t1 시점에 mytable에 첫 번째 레코드를 삽입.
19:02:50 SQL> insert into mytable values (1);
1 row created.
19:02:59 SQL> commit;
Commit complete.
t2 시점에 mytable에 두 번째 레코드를 삽입.
19:04:41 SQL> insert into mytable values (2);
1 row created.
19:04:46 SQL> commit;
Commit complete.
t3 시점에 mytable을 드롭.
19:05:09 SQL> drop table mytable;
Table dropped.
test_d 테이블스페이스의 포인트-인-타임 복구 수행.
보조 데이터베이스를 위한 보조 디렉토리를 생성합니다.
rac1-> mkdir /u01/app/oracle/aux
RMAN> recover tablespace test_d
2> until time "to_date('13-NOV-2006 19:03:10','DD-MON-YYYY HH24:MI:SS')"
3> auxiliary destination '/u01/app/oracle/aux';
RMAN> backup tablespace test_d;
RMAN> sql 'alter tablespace test_d online';
복구 결과 검증.
19:15:09 SQL> connect system/oracle@devdb2
Connected.
19:15:16 SQL> select * from mytable;
COL1
----------
1
12. Oracle Enterprise Manager (OEM) 데이터베이스 콘솔 사용
Oracle Enterprise Manager Database Console은 클러스터 데이터베이스 환경의 운영 및 관리를 위한 통합적, 포괄적인 GUI 인터페이스를 제공합니다. 관리자는 콘솔을 통해 거의 모든 운영 업무를 수행할 수 있습니다.
Database Console에 접근하려면, 웹 브라우저를 열고 아래 URL을 입력합니다.
sysman 계정으로 로그인한 후 데이터베이스 설치 과정에서 설정한 패스워드를 입력합니다.
http://rac1:1158/em
Database Console의 시작/중단.
rac1-> emctl stop dbconsole
TZ set to US/Eastern
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://rac1.mycorpdomain.com:1158/em/console/aboutApplication
Stopping Oracle Enterprise Manager 10g Database Control ...
... Stopped.
rac1-> emctl start dbconsole
TZ set to US/Eastern
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://rac1.mycorpdomain.com:1158/em/console/aboutApplication
Starting Oracle Enterprise Manager 10g Database Control
................... started.
------------------------------------------------------------------
Logs are generated in directory
/u01/app/oracle/product/10.2.0/db_1/rac1_devdb1/sysman/log
Database Console의 상태 확인.
rac1-> emctl status dbconsole
TZ set to US/Eastern
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://rac1.mycorpdomain.com:1158/em/console/aboutApplication
Oracle Enterprise Manager 10g is running.
------------------------------------------------------------------
Logs are generated in directory
/u01/app/oracle/product/10.2.0/db_1/rac1_devdb1/sysman/log
rac1-> emctl status agent
TZ set to US/Eastern
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
Agent Version : 10.1.0.4.1
OMS Version : 10.1.0.4.0
Protocol Version : 10.1.0.2.0
Agent Home : /u01/app/oracle/product/10.2.0/db_1/rac1_devdb1
Agent binaries : /u01/app/oracle/product/10.2.0/db_1
Agent Process ID : 10263
Parent Process ID : 8171
Agent URL : http://rac1.mycorpdomain.com:3938/emd/main
Started at : 2006-11-12 08:10:01
Started by user : oracle
Last Reload : 2006-11-12 08:20:33
Last successful upload : 2006-11-12 08:41:53
Total Megabytes of XML files uploaded so far : 4.88
Number of XML files pending upload : 0
Size of XML files pending upload(MB) : 0.00
Available disk space on upload filesystem : 71.53%
---------------------------------------------------------------
Agent is Running and Ready
13. 알려진 이슈
알려진 이슈와 그 해결 방법이 아래와 같습니다.
문제 1: 이더넷 디바이스가 활성화되지 않는 경우.
에러 메시지 ? “Cannot activate network device eth0! Device eth0 has different MAC address than expected, ignoring.”
해결 방법:
“ifconfig”에 의해 확인된 MAC 어드레스가 /etc/sysconfig/network-scripts/ifcfg-eth0과 일치하지 않아 생기는 문제입니다. 새로운 MAC 어드레스로 파일을 업데이트하거나 system-config-network 툴을 이용하여 새로운 MAC 어드레스를 조회하는 방법으로 문제를 해결합니다.
문제 2: OCFS2 설정 파일을 생성할 수 없는 경우.
에러 메시지 ? “Could not start cluster stack. This must be resolved before any OCFS2 filesystem can be mounted” (OCFS2 설정 파일을 생성하는 시점에 발생)
해결 방법:
oracle 사용자가 아닌 root 사용자로 ocfs2console을 실행합니다.
문제 3: Oracle Clusterware 또는 Oracle Database 소프트웨어를 원격 노드에 설치할 수 없는 경우.
에러 메시지 ? “ /bin/tar: ./inventory/Components21/oracle.ordim.server/10.2.0.1.0: time stamp 2006-11-04 06:24:04 is 25 s in the future” (Oracle Clusterware 소프트웨어 설치 과정에서 발생)
해결 방법:
VMware Tools를 설치하고 /boot/grub/grub.conf 파일에 “clock=pit nosmp noapic nolapic” 옵션을 추가하여 게스트 OS와 호스트 OS의 시간을 동기화합니다. 자세한 방법은 섹션 3을 참고하십시오.
문제 4: OCFS2 파일 시스템을 마운트할 수 없는 경우.
에러 메시지 ? “mount.ocfs2: Transport endpoint is not connected while mounting” (ocfs2 파일 시스템의 마운트를 시도하는 시점에 발생)
해결 방법:
/usr/bin/system-config-securitylevel을 실행하여 방화벽을 비활성화합니다.
문제 5: ONS 리소스를 시작할 수 없는 경우.
에러 메시지 ? “CRS-0215: Could not start resource ?ora.rac2.ons’” (VIPCA가 ONS 애플리케이션 리소스를 시작하는 시점에 발생)
해결 방법:
ONS가 localhost에 액세스하려 시도하지만 IP 주소를 찾을 수 없는 경우 발생하는 문제입니다. /etc/hosts 파일에 아래 항목을 추가합니다.
127.0.0.1 localhost
결론
이 가이드를 통해 VMware Server에서 오라클 데이터베이스 클러스터 환경을 구축하는 방법을 익히셨기를 바랍니다. 무료로 제공되는 소프트웨어를 활용하여 Enterprise Linux 기반 Oracle RAC 환경을 체험해 보십시오!
Vincent Chan (vkchan99@yahoo.com)은 MSD Inc의 선임 컨설턴트입니다. 빈센트는 Oracle Certified Master DBA 자격을 소유하고 있으며 오라클 솔루션의 설계에 관련하여 10여 년의 경력을 갖고 있습니다.