I. 개요

1. 사용 Software

제품명버전아키텍쳐배포 사이트
VirtualBox6.1.x호스트 환경에 따름https://www.virtualbox.org
Oracle Enterprise Linux7 (Update 5 이상 권장)x86 64bit

https://edelivery.oracle.com/linux

Oracle 11g RAC11.2.0.4Linux x86 64bithttps://edelivery.oracle.com (등록된 고객만 다운로드 가능)
Oracle 11g GI Patch18370031Linux x86 64bithttps://support.oracle.com (Extended Support 고객만 다운로드 가능)
Oracle 11g Patch Set Update30501155 (202001)Linux x86 64bithttps://support.oracle.com (Extended Support 고객만 다운로드 가능)
Oracle 19c RAC19.3Linux x86 64bithttp://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
Oracle 19c Release Update30501910 (202001)Linux x86 64bithttps://support.oracle.com (등록된 고객만 다운로드 가능)
Opatch11.2 & 12.2Linux x86 64bithttps://support.oracle.com (등록된 고객만 다운로드 가능)
  • Linux 7에 GI 설치를 위해서 18370031 패치는 필수 입니다. 패치를 적용하지 않고 root 스크립트를 수행할 경우 클러스터 구성에 실패합니다.
  • GI를 11.2.0.4에서 19c로 업그레이드 하려면 28553832 (11.2.0.4.GIPSU:191015), 17617807 (11.2.0.4.GIPSU04), 21255373 (11.2.0.4.GIPSU:160419) 패치가 필요합니다.
  • PSU 패치 30501155 (11.2.0.4.GIPSU:200114)를 적용하면 3가지가 통합되어 패치가 됩니다.

2. 구성 계획

A) 서버

VMHost NameMemoryNet Adapter 1Net Adapter 2구성 방법비고
RAC1rac110GB브리지 어댑터호스트 전용 어댑터리눅스 설치dnsmasq를 사용하여 DNS 구성
RAC2rac210GB브리지 어댑터호스트 전용 어댑터RAC1 복제dnsmasq를 사용하여 DNS 구성

리눅스 기반의 2 node RAC로 구성합니다.

B) 스토리지

파일 이름용량타입용도비고
rac1.vdi100GBDynamic / NormalRAC1 노드 스토리지디스크 사용량을 최소화하기 위해 Dynamic으로 생성합니다.
rac2.vdi100GBDynamic / NormalRAC2 노드 스토리지vboxmanage clonemedium을 이용하여 rac1.vdi 파일을 복제합니다.
CRS1.vdi1GBFixed / ShareableOCR / Vote 저장 영역  공유(shareable) 디스크로 사용하기 위해서는 Fixed Size로 생성해야 합니다.  


   


  
CRS2.vdi1GBFixed / Shareable
CRS3.vdi1GBFixed / Shareable
DATA.vdi30GBFixed / ShareableDATA 영역
FRA.vdi20GBFixed / ShareableFast Recovery Area 

Automatic Storage Management를 이용하여 Data 공간과 Fast Recovery Area를 구성합니다.

테스트를 위한 VM이므로 디스크 공간을 절약하기 위해 파일을 업로드 없이 VirtualBox의 게스트 확장 기능으로 VM에서 불러와 사용합니다.

C) 네트워크

VMPublic IPPrivate IPVirtual IPNetmaskGatewayDNS ServerSCAN IP
RAC110.0.1.10110.0.5.10110.0.1.201255.255.255.010.0.1.1127.0.0.1

10.0.1.191, 10.0.1.192, 10.0.1.193

RAC210.0.1.10210.0.5.10210.0.1.202255.255.255.010.0.1.1127.0.0.1

Netmask의 경우 Public과 Private 모두 24bit(255.255.255.0)을 사용합니다.

인터넷 공유기 또는 Gateway의 IP에 맞춰 Public IP와 Virtual IP를 설정하기 바랍니다.

별도의 DNS 서버 구성 없이 dnsmasq를 사용하여 RAC를 구축할 계획이므로 DNS는 Loopback IP로 지정합니다.

3. 호스트 환경

A) 시스템

12c부터는 64비트의 운영체제만을 지원하므로, 호스트 장비 또한 64비트 운영체제를 사용하여 구축해야 합니다.

메모리는 오라클의 권고에 따라 VM 노드당 8GB 이상이 필요하므로, 가능하면 20GB 이상의 메모리가 장착된 환경에서 작업하는 것을 권합니다.

(구축 테스트를 위해 임시적으로 설치하는 것이라면 경고 메시지를 무시하고 8GB 이하로 구성할 수도 있으나, 운영 환경에서는 권고하지 않습니다.)

B) 스토리지

디스크 I/O에 의한 지연을 최소화하기 위해 호스트의 OS가 설치되지 않은 별도의 내장 디스크를 사용하거나 SSD의 사용을 권합니다.

ESATA 또는 USB 3.0 이상의 빠른 속도를 보장하는 외장 디스크를 사용하는 것도 방법일 수 있습니다만 지속적인 연결이 보장되어야 합니다.

사실상 디스크의 속도에 따라 설치에 소요되는 시간이 크게 좌우되므로, 가급적이면 안정적이고 빠른 스토리지를 사용하기 바랍니다.

II. VM 구성

1. VM 생성

RAC 1번 노드 구성을 위한 VM을 생성합니다.

<새로 만들기> 버튼을 클릭합니다.

A) 가상 머신 만들기

OS의 종류는 'Linux'로 하고 설치될 버전은 'Oracle (64-bit)'를 선택합니다.

머신 폴더는 VM 설정을 위한 파일이나, 가상 이미지를 저장할 디렉토리를 선택합니다. 가급적 성능이 좋은 디스크나 SSD에 저장할 것을 권합니다.

Oracle Database은 12c R1 버전부터 64bit만을 지원하고 있습니다.

Client 소프트웨어만 32bit 프로그램을 제공합니다.

기본 메모리는 "10240MB"로 지정합니다.

Grid를 설치하기 위한 최소 메모리는 8GB 이지만, 원활한 작업을 위해서는 가급적 10GB 이상을 할당하는 것이 좋습니다.

새로운 디스크를 생성해야 하므로 '지금 새 가상 하드 디스크 만들기'를 선택하고 <만들기>를 클릭합니다.

B) 가상 하드 디스크 만들기

가상 하드 디스크 파일의 종류는 'VDI(VirtualBox 디스크 이미지)'를 선택한 후 <다음>을 클릭합니다.

물리적 하드 드라이브 저장 방식은 '동적 할당'으로 하고 <다음>을 클릭합니다.

디스크 파일의 크기는 "100GB"로 한 후 <만들기>를 클릭하면 VM이 생성됩니다.

2. VM 설정 변경

생성된 가상 머신의 설정을 변경해야 하므로, 가상 머신을 선택하고 <설정>을 클릭합니다.

A) 시스템

부팅 순서에서 "플로피 디스크"를 해제하고, "광 디스크"가 우선권을 갖도록 합니다.

B) 디스플레이

VirtualBox에서 제공하는 Guest Additions 기능을 설치하는 과정에서 화면이 깨지는 경우가 있으므로, 잠시 그래피 컨트롤러를 "VBoxVGA"로 선택합니다.

설치가 정상으로 된 후에는 원래의 설정인 "VMSVGA"로 원복시켜주면 됩니다.

C) 저장소

설치할 리눅스 디스크 이미지를 마운트 하기 위해 저장소로 이동합니다.

'컨트롤러 : IDE'를 선택하고, 속성의 '광학 드라이브' 우측의 광 디스크 모양 아이콘을 클릭합니다.

리눅스 이미지가 있는 경로를 찾아가서 마운트하면, IDE 컨트롤러에 리눅스 설치 이미지가 마운트 됩니다.

D) 오디오

오디오는 사용하지 않을 것이므로 '오디오 사용하기'는 해제합니다.

E) 네트워크

1번 네트워크 카드를 설치될 환경에 맞게 적절한 장치에 연결합니다.

일반적으로 외부와 통신을 하기 위해서 '어댑터에 브리지'를 선택합니다.

RAC 노드간의 통신을 위해 2번 어댑터를 활성화해야 합니다.

어댑터 2번 항목에 가서 '네트워크 어댑터 사용하기'를 체크합니다.

그리고, RAC 노드 내부에서만 사용할 것이므로 '호스트 전용 어댑터'를 클릭합니다.

사전에 VirtualBox의 호스트 전용 네트워크가 생성되어 있어야 합니다.

F) 공유 폴더

VirtualBox 상에서 Guest Additions 을 설치하면, 공유 폴더 기능을 사용할 수 있습니다.

공유 폴더를 설정할 경우, 호스트 서버에 저장된 설치 파일을 업로드 없이 바로 사용할 수 있습니다.

오른쪽에 폴더 모양에 '+' 표시가 있는 아이콘을 클릭합니다.

공유할 폴더를 입력하기 위해 폴더 경로에 '기타'를 선택합니다

공유할 폴더를 선택하고, 폴더 이름을 "oracle"로 지정하고 '자동 마운트'를 선택한 후 <OK>를 클릭합니다

설정 변경이 모두 완료되었으므로 <OK>를 클릭합니다.

리눅스 설치를 위해 <시작> 버튼을 클릭하면, 마운트된 리눅스 이미지로 가상 시스템이 부팅되며 OS 설치가 시작 됩니다.

III. Oracle Linux 7 설치

1. 부팅

A) 미디어 검사 여부 선택

설치 미디어에 대한 테스트 없이 바로 설치를 진행하려면 'Install Oracle Linux 7.x'를 키보드로 선택하고 "엔터"를 입력합니다.

B) 언어 선택

실습의 편의를 위해 설치 언어는 '한국어'를 선택하고 <계속 진행>을 클릭합니다.

운영 환경에서는 이슈 발생시의 문제 해결이나 디버깅 등을 위해 영어로 설치하는 것을 권합니다.

2. 설치 요약

A) 소프트웨어 선택

설치 요약 화면입니다.

이 화면에서 각 항목별로 필요한 옵션을 수정한 후에 설치를 진행할 예정입니다.

먼저 '소프트웨어 선택' 항목을 클릭합니다.

서버에서 직접 GUI 모드로 설치하기 위해 '서버 - GUI 사용'을 선택하고, 우측의 '선택한 환경의 기능'에서 다음의 두 기능을 추가합니다.

  • 호환성 라이브러리
  • 개발용 도구

그리고 <완료>를 클릭합니다.

B) 설치 대상

다음으로 '설치 대상'을 수정합니다.

설치할 디스크를 체크하고 '파티션을 설정합니다'를 선택한 후에 <완료> 버튼을 클릭합니다.

C) 파티션 설정

'수동으로 파티션 설정' 화면으로 전환됩니다.

'새로운 Oracle Linux 7.x 설치' 항목 좌측 하단에 <+> 버튼을 클릭하여 마운트 지점을 생성합니다

마운트 지점을 "/boot"로 지정하고 "500MiB"를 할당한 후 <마운트 지점 추가>를 클릭합니다.

swap 영역도 <+> 버튼을 클릭하여 '새 마운트 지점 추가' 창을 연 후에 RAM 크기와 동일한 10GiB를 할당하고, <마운트 지점 추가> 버튼을 클릭합니다.

swap의 크기는 아래와 같이 크기를 할당할 수 있습니다.

물리 메모리(RAM) 크기swap 영역 크기
1GB~2GBRAM의 1.5배 크기
2GB~16GBRAM과 동일한 크기
16GB 이상16GB

동일한 방식으로 나머지 공간을 "/"(root) 영역에 할당 합니다.

용량 항목을 빈 칸으로 입력한 후 <마운트 지점 추가>를 클릭하면 나머지 전체 영역이 할당됩니다.

각각의 마운트 지점이 아래와 같은 크기로 할당됩니다.

할당 영역

크기

/boot200MB
swap10GB
/나머지 공간 할당

적용된 내용을 확인한 후에 <완료> 버튼을 클릭합니다.

변경 요약 화면이 나오면 <변경 사항 적용> 버튼을 클릭합니다.

D) KDUMP

실습을 위한 구축이므로 'KDUMP' 항목에서 kdump 기능을 비활성화하려 합니다.

'KDUMP' 항목으로 이동합니다.

'kdump 활성화'를 해제합니다.

운영 환경에서는 문제 해결 등의 이유로 활성화된 상태로 사용할 수 있으며, 운영 정책에 따라 지정해야 합니다.

필요한 옵션을 선택하였으면 <완료>를 클릭합니다

네트워크 및 호스트명

네트워크와 호스트명을 변경하기 위해 '네트워크 및 호스트명' 항목을 선택합니다.

네트워크와 호스트 이름을 설정해야 합니다.

좌측에서 Public 네트워크와 연결할 이더넷 인터페이스인 enp0s3을 선택하고 우측 하단의 <설정> 버튼을 클릭합니다.

VirtualBox가 아닌 VMware를 사용할 경우, 인터페이스 이름이 다를 수 있습니다.

(https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/ch-Consistent_Network_Device_Naming.html)

네트워크 인터페이스명은 BIOS나 firmware를 기준으로 자동으로 생성됩니다.

RAC를 구성하는데 있어서, 모든 노드의 public 이더넷과 private 이더넷의 이름이 각 그룹내에서 동일해야 경고없이 설치나 패치를 진행할 수 있습니다.

일반 탭에서 '사용 가능하면 자동으로 이 네트워크에 연결'을 체크합니다.

IPv4 설정 탭으로 이동하여 방식에 '수동'을 선택합니다.

'Add' 버튼을 클릭하고 다음의 정보를 입력합니다.

항목입력값비고
주소10.0.1.1011번 노드 Public IP 주소
넷마스크24서브넷 마스크 값으로  255.255.255.0 사용 가능
게이트웨이10.0.1.1Public 망의 게이트웨이
DNS 서버127.0.0.1dnsmasq를 사용할 경우 loopback IP 사용
검색 도메인localdomain로컬 도메인 정보 입력

DNS가 없는 환경이어서 dnsmasq를 사용할 것이므로 DNS 서버에 "127.0.0.1"을 입력하였으나, 운영 환경에서는 적절한 DNS 주소 입력이 필요합니다.

IPv6는 사용하지 않을 것이므로 방식에 '무시'를 선택하고, <저장>을 클릭합니다.

이더넷(enp0s3)에 입력한 Public 네트워크 정보가 적용된 것을 확인할 수 있습니다.

이번에는 좌측에서 Private 네트워크와 연결할 이더넷 인터페이스인 enp0s8을 선택하고 우측 하단의 <설정> 버튼을 클릭합니다.

일반 탭에서 '사용 가능하면 자동으로 이 네트워크에 연결'을 체크합니다.

IPv4 설정 탭으로 이동하여 방식에 '수동'을 선택합니다.

'Add' 버튼을 클릭하고 다음의 정보를 입력합니다.

항목입력값비고
주소10.0.5.1011번 노드 Private IP 주소
넷마스크24서브넷 마스크 값으로  255.255.255.0 사용 가능

Private 망을 위한 설정으로 게이트웨이나 DNS값은 비워둡니다.

실습에서는 Private 연결에 별도의 장치를 구성하지는 않았지만, 운영 환경에서는 노드 간의 통신은 L2 이상의 장비를 통해 연결되어야 합니다. (오라클 권고)

IPv6는 사용하지 않을 것이므로 방식에 '무시'를 선택하고, <저장>을 클릭합니다.

이더넷(enp0s8)에 입력한 Private 네트워크 정보가 적용된 것을 확인할 수 있습니다.

좌측 하단에 서버에 사용될 호스트명을 입력하고 <적용>을 클릭합니다.

실습 환경에서는 1번 노드는 "rac1"을 사용할 것입니다.

네트워크 구성이 완료되었으므로 <완료> 버튼을 클릭합니다.

E) SECURITY POLICY

보안 관련 설정을 변경하기 위해 'SECURITY POLICY' 항목으로 이동합니다.

실습에서는 'SECURITY POLICY'의 모든 내용을 끄고 진행하겠습니다.

'Apply security policy'를 끄고 <완료>를 클릭합니다.

운영 환경에서는 보안 정책을 고려하여 설정을 변경할 것을 권고합니다.

설치를 위한 사전 준비가 모두 완료되었으므로 <설치 시작>을 클릭합니다.

3. 사용자 설정

A) ROOT 암호

설치가 진행되는 중간에 root 계정의 암호와 추가 사용자를 생성할 수 있습니다.

먼저 'ROOT 암호'를 선택합니다.

적당한 암호를 입력하고 <완료> 버튼을 클릭합니다.

취약한 암호를 사용할 경우에는 <완료> 버튼을 2번 클릭해야 합니다.

B) 사용자 생성

'사용자 생성'에서는 root와는 별개의 관리자 권한을 생성하겠습니다.

리눅스 7버전에서는 별도의 관리자 계정을 생성하여 사용하는 것을 권하고 있습니다.

추가할 관리자 계정의 정보를 입력하고 <완료> 버튼을 클릭합니다.

OS 설치가 진행되는 동안 기다립니다.

4. 재부팅

설치가 완료되면 <재부팅> 버튼을 클릭합니다.

가상 머신이 재부팅됩니다.

A) LICENSE INFORMATION

재부팅 화면에서 'LICENSE INFORMATION'을 클릭하여 라이센스 동의를 진행합니다.

'약관에 동의합니다'를 체크하고 <완료>를 클릭합니다.

모든 구성이 완료되었으므로 본격적인 사용을 위해 <설정 완료>를 클릭합니다.

IV. 리눅스 환경 설정

1. GUI 접속 환경 설정

A) root 계정 접속

VirtualBox를 사용하는 실습 환경에서는 편의를 위해 Guest Addition을 설치하는 것이 좋습니다.

VMware라면 VMware Tools를 설치할 수 있습니다.

물론 가상머신을 사용하지 않는 운영 환경에서는 이 방법을 사용할 수 없고, ftp나 sftp 등의 방식으로 파일을 서버에 업로드해야 합니다.

root 유저로 접속하기 위해서 초기 접속 화면에 '목록에 없습니까?'를 클릭합니다.

사용자 이름에 "root"를 입력하고 <다음>을 클릭합니다.

암호에 root 계정의 암호를 입력하고 <다음>을 클릭합니다.

처음 접속시 환영 메시지와 함께 초기 설정 화면이 나옵니다.

언어를 '한국어'로 선택한 상태에서 <다음>을 클릭합니다.

운영 환경에서는 영어(English)를 사용하는 것을 권합니다.

키보드 배치에 '한국어'가 선택된 상태에서 <다음>을 클릭합니다.

위치 정보 서비스를 '끔'으로 변경하고 <다음>을 클릭합니다.

온라인 계정 설정 화면에서 <건너뛰기>를 클릭합니다.

마지막으로 'Oracle Linux Server 시작'을 클릭하면, 초기 설정 창이 닫힙니다.

시작하기란 새로운 창이 열리면 창 우측 상단의 'x' 표시를 클릭하여 닫아 줍니다.

GUI 모드로 다른 계정에 처음 접속할 때도, 동일한 방식으로 접속을 진행하면 됩니다.

B) VirtualBox Guest Additions 설치

호스트 머신의 VirtualBox 메뉴에서 '장치' > '게스트 확장 CD 이미지 삽입'을 클릭하여, Guest Additions CD를 가상머신에 mount 시켜줍니다

설치 미디어가 인식되면 자동 시작 프로그램에 대한 안내 창이 뜹니다.

설치를 진행하기 위해 <실행>을 클릭합니다.

Guest Additions이 정상적으로 설치되었으면, 마운트 된 설치 이미지를 eject 해야 합니다.

바탕화면을 마우스 우측 버튼으로 클릭하면 드롭다운 메뉴가 펼쳐지며, '터미널 열기'를 클릭하면 됩니다.

터미널에서 eject 명령어로 이미지를 해제한 후, 가상머신의 디스플레이 설정을 변경하기 위해서 shutdown 명령어로 서버를 중지합니다.

가상머신의 설정 메뉴에서 디스플레이의 그래픽 컨트롤러를 'VMSVGA'로 원복한 후에 가상 머신을 다시 기동합니다.

자동 설치 스크립트가 실행되며, VM에 Guest Addition이 설치됩니다.

설치가 완료되면 "엔터"를 입력하여 실행 창을 닫아줍니다.

C) 화면 해상도 변경

가상 머신을 설치하게 되면 기본 화면 크기가 800*600으로 설정되어 있습니다.

OUI 로 설치를 진행하기 위해서는 화면의 해상도를 변경해야 합니다.

메뉴바에서 '프로그램' > '시스템 도구' > '설정'을 클릭합니다.

좌측의 항목 중에서 '장치'를 클릭합니다.

장치 목록에서 '디스플레이'를 선택한 후, '해상도' 부분을 클릭합니다.

해상도를 선택할 수 있는 창이 열리면 '1024x768' 이상의 화면 크기롤 선택합니다.

원하는 해상도를 선택하였으면 우측 상단의 <적용> 버튼을 클릭하여, 선택한 값으로 해상도가 변경되도록 합니다.

정상적으로 화면이 출력된다면, 디스클레이 설정 유지 여부를 뭍는 창에서 '바뀐 사항 유지'를 클릭하면 변경된 해상도로 계속 사용할 수 있게 됩니다.

2. 리눅스 환경 설정

A) 설치 정보 확인

OS 정보 확인
uname -a
cat /etc/oracle-release
[root@rac1 ~]# uname -a
Linux rac1 4.14.35-1818.3.3.el7uek.x86_64 #2 SMP Mon Sep 24 14:45:01 PDT 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@rac1 ~]# cat /etc/oracle-release
Oracle Linux Server release 7.6

먼저 설치된 리눅스의 버전 정보를 확인합니다.

B) 미사용 서비스 정리

미사용 서비스 정리
### 방화벽 중지
systemctl stop firewalld
systemctl disable firewalld
### 블루투스 중지
systemctl stop bluetooth
systemctl disable bluetooth
### 시간 동기화 중지
systemctl stop chronyd
systemctl disable chronyd
mv /etc/chrony.conf /etc/chrony.conf.bak
### NTP 중지
systemctl stop ntpdate
systemctl disable ntpdate
### AVAHI 중지
systemctl stop avahi-daemon.socket
systemctl disable avahi-daemon.socket
systemctl stop avahi-daemon
systemctl disable avahi-daemon
### 가상 시스템 관리 중지
systemctl stop libvirtd
systemctl disable libvirtd
[root@rac1 ~]# systemctl stop firewalld
[root@rac1 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@rac1 ~]# systemctl stop bluetooth
[root@rac1 ~]# systemctl disable bluetooth
Removed symlink /etc/systemd/system/dbus-org.bluez.service.
Removed symlink /etc/systemd/system/bluetooth.target.wants/bluetooth.service.

[root@rac1 ~]# systemctl stop chronyd
[root@rac1 ~]# systemctl disable chronyd
Removed symlink /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@rac1 ~]# mv /etc/chrony.conf /etc/chrony.conf.bak

[root@rac1 ~]# systemctl stop ntpdate
[root@rac1 ~]# systemctl disable ntpdate

[root@rac1 ~]# systemctl stop avahi-daemon.socket
[root@rac1 ~]# systemctl disable avahi-daemon.socket
Removed symlink /etc/systemd/system/sockets.target.wants/avahi-daemon.socket.
[root@rac1 ~]# systemctl stop avahi-daemon
[root@rac1 ~]# systemctl disable avahi-daemon
Removed symlink /etc/systemd/system/multi-user.target.wants/avahi-daemon.service.
Removed symlink /etc/systemd/system/dbus-org.freedesktop.Avahi.service.

[root@rac1 ~]# systemctl stop libvirtd
[root@rac1 ~]# systemctl disable libvirtd
Removed symlink /etc/systemd/system/multi-user.target.wants/libvirtd.service.
Removed symlink /etc/systemd/system/sockets.target.wants/virtlogd.socket.
Removed symlink /etc/systemd/system/sockets.target.wants/virtlockd.socket.

테스트 환경에서 사용하지 않는 서비스를 정리합니다.

실습 환경에서는 CTSS를 활성화 모드로 운영할 것이므로 NTP나 chrony 등의 시간 동기화 서비스를 중지할 것입니다.

그러나 실제 운영환경에서는 구성 환경을 고려하여 사용 여부를 결정해야하며, 가급적 NTP를 설정(-x 포함)하여 사용하는 것을 권장합니다.

C) 리눅스 제공 필수 패키지 설치

Linux 필수 패키지 설치
cd <리눅스 설치 디스크 마운트 경로>/Packages
rpm -ivh ksh-*.x86_64.rpm
rpm -ivh libaio-devel-*.x86_64.rpm
# rpm -ivh kmod-oracleasm-*.x86_64.rpm
rpm -ivh oracleasm-support-*.x86_64.rpm
cd
eject
[root@rac1 ~]# cd /run/media/root/OL-7.6\ Server.x86_64/Packages

[root@rac1 Packages]# rpm -ivh ksh-20120801-139.0.1.el7.x86_64.rpm
경고: ksh-20120801-139.0.1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
준비 중...                         ################################# [100%]
Updating / installing...
   1:ksh-20120801-139.0.1.el7         ################################# [100%]

[root@rac1 Packages]# rpm -ivh libaio-devel-0.3.109-13.el7.x86_64.rpm
경고: libaio-devel-0.3.109-13.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
준비 중...                         ################################# [100%]
Updating / installing...
   1:libaio-devel-0.3.109-13.el7      ################################# [100%]

[root@rac1 Packages]# rpm -ivh oracleasm-support-2.1.11-2.el7.x86_64.rpm
경고: oracleasm-support-2.1.11-2.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
준비 중...                         ################################# [100%]
Updating / installing...
   1:oracleasm-support-2.1.11-2.el7   ################################# [100%]
알림: 'systemctl enable oracleasm.service'에 요청을 전송하고 있습니다.
Created symlink from /etc/systemd/system/multi-user.target.wants/oracleasm.service to /usr/lib/systemd/system/oracleasm.service.

[root@rac1 Packages]# cd
[root@rac1 ~]# eject

리눅스 설치시에 기본적으로 설치된 패키지 외에 추가로 3개의 패키지를 설치해야 합니다.

리눅스 설치 이미지를 mount한 후에 Package 디렉토리로 이동하여 패키지를 설치합니다.

설치가 완료되면 설치 이미지 밖의 경로로 이동한 후에 이미지를 eject 시켜줍니다.

그러지 않을 경우, 재부팅시 다시 리눅스 설치 화면으로 돌아오게 됩니다.

Red Hat Enterprise Linux 사용시에는 kmod-oracleasm 패키지도 추가로 설치합니다.

Linux 필수 패키지 설치 여부 확인
rpm -q binutils
rpm -q compat-libcap1
rpm -q compat-libstdc++-33
rpm -q glibc
rpm -q glibc-devel
rpm -q ksh
rpm -q libaio
rpm -q libaio-devel
rpm -q libgcc
rpm -q libstdc++
rpm -q libstdc++-devel
rpm -q libX11
rpm -q libXau
rpm -q libxcb
rpm -q libXi
rpm -q libXtst
rpm -q make
rpm -q net-tools
rpm -q nfs-utils
rpm -q smartmontools
rpm -q sysstat
[root@rac1 ~]# rpm -q binutils
binutils-2.27-34.base.0.1.el7.x86_64
[root@rac1 ~]# rpm -q compat-libcap1
compat-libcap1-1.10-7.el7.x86_64
[root@rac1 ~]# rpm -q compat-libstdc++-33
compat-libstdc++-33-3.2.3-72.el7.x86_64
[root@rac1 ~]# rpm -q glibc
glibc-2.17-260.0.9.el7.x86_64
[root@rac1 ~]# rpm -q glibc-devel
glibc-devel-2.17-260.0.9.el7.x86_64
[root@rac1 ~]# rpm -q ksh
ksh-20120801-139.0.1.el7.x86_64
[root@rac1 ~]# rpm -q libaio
libaio-0.3.109-13.el7.x86_64
[root@rac1 ~]# rpm -q libaio-devel
libaio-devel-0.3.109-13.el7.x86_64
[root@rac1 ~]# rpm -q libgcc
libgcc-4.8.5-36.0.1.el7.x86_64
[root@rac1 ~]# rpm -q libstdc++
libstdc++-4.8.5-36.0.1.el7.x86_64
[root@rac1 ~]# rpm -q libstdc++-devel
libstdc++-devel-4.8.5-36.0.1.el7.x86_64
[root@rac1 ~]# rpm -q libX11
libX11-1.6.5-2.el7.x86_64
[root@rac1 ~]# rpm -q libXau
libXau-1.0.8-2.1.el7.x86_64
[root@rac1 ~]# rpm -q libxcb
libxcb-1.13-1.el7.x86_64
[root@rac1 ~]# rpm -q libXi
libXi-1.7.9-1.el7.x86_64
[root@rac1 ~]# rpm -q libXtst
libXtst-1.2.3-1.el7.x86_64
[root@rac1 ~]# rpm -q make
make-3.82-23.el7.x86_64
[root@rac1 ~]# rpm -q net-tools
net-tools-2.0-0.24.20131004git.el7.x86_64
[root@rac1 ~]# rpm -q nfs-utils
nfs-utils-1.3.0-0.61.0.1.el7.x86_64
[root@rac1 ~]# rpm -q smartmontools
smartmontools-6.5-1.el7.x86_64
[root@rac1 ~]# rpm -q sysstat
sysstat-10.1.5-17.el7.x86_64

오라클 설치에 필요한 리눅스 패키지들이 모두 설치되어 있는지 검증합니다.

누락된 패키지가 있다면 반드시 설치해야 합니다.

패키지 파일은 yum 이용하여 직접 설치하거나 Oracle Linux Repository에서 다운로드   있습니다.

https://public-yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/index.html

Red Hat Enterprise Linux 사용시에는 별도로 compat-libstdc++-33 패키지 설치가 필요합니다.


D) 11g 구축을 위한 추가 패키지 설치

rpm -ivh zlib-devel-*.x86_64.rpm
rpm -ivh elfutils-libelf-devel-*.x86_64.rpm
[root@rac1 Packages]# rpm -ivh zlib-devel-1.2.7-18.el7.x86_64.rpm
경고: zlib-devel-1.2.7-18.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
준비 중...                         ################################# [100%]
Updating / installing...
   1:zlib-devel-1.2.7-18.el7          ################################# [100%]

[root@rac1 Packages]# rpm -ivh elfutils-libelf-devel-0.176-2.el7.x86_64.rpm
경고: elfutils-libelf-devel-0.176-2.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
준비 중...                         ################################# [100%]
Updating / installing...
   1:elfutils-libelf-devel-0.176-2.el7################################# [100%]

Database 11g 설치를 위해 필요한 elfutils-libelf-devel 패키지와 이에 필요한 zlib-devel 패키지를 설치합니다.

E) hosts 파일 수정

vi /etc/hosts 로 호스트 파일 수정
### Public
10.0.1.101  rac1        rac1.localdomain
10.0.1.102  rac2        rac2.localdomain
### Private
10.0.5.101  rac1-priv   rac1-priv.localdomain
10.0.5.102  rac2-priv   rac2-priv.localdomain
### Virtual
10.0.1.201  rac1-vip    rac1-vip.localdomain
10.0.1.202  rac2-vip    rac2-vip.localdomain
### SCAN
10.0.1.191  rac-scan    rac-scan.localdomain
10.0.1.192  rac-scan    rac-scan.localdomain
10.0.1.193  rac-scan    rac-scan.localdomain

/etc/hosts 파일에 설치할 모든 서버의 IP와 호스트명을 추가합니다.

오라클 소프트웨어 설치를 정상적으로 진행하기 위해 로컬 노드와 원격 노드에 대한 정보를 정확히 입력해야 합니다.

SCAN IP는 1개만 할당해도 설치에 지장은 없습니다. 다만, 18c부터는 3개를 할당하지 않을 경우, 필요 조건 검사 과정에서 검증 실패 메시지가 출력됩니다.

F) 보안 설정 변경

vi /etc/selinux/config 로 selinux 모드 변경
SELINUX=permissive
SELinux 모드를 온라인 상에서 변경
setenforce permissive

Selinux 모드를 permissive로 변경합니다.

G) dnsmasq 활성화

vi /etc/dnsmasq.conf 로 dnsmasq에 로컬 도메인 정보 추가
local=/localdomain/

dnsmasq 서비스의 환경 설정 파일에 로컬 도메인에 대한 정보를 입력합니다.

resolv.conf 내용 확인 및 dnsmasq 활성화
cat /etc/resolv.conf
systemctl start dnsmasq
systemctl enable dnsmasq
nslookup rac-scan.localdomain	# 경우에 따라 재기동 필요
[root@rac1 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 127.0.0.1

[root@rac1 ~]# systemctl start dnsmasq
[root@rac1 ~]# systemctl enable dnsmasq
Created symlink from /etc/systemd/system/multi-user.target.wants/dnsmasq.service to /usr/lib/systemd/system/dnsmasq.service.

[root@rac1 ~]# nslookup rac-scan.localdomain
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   rac-scan.localdomain
Address: 10.0.1.191
Name:   rac-scan.localdomain
Address: 10.0.1.192
Name:   rac-scan.localdomain
Address: 10.0.1.193

[root@rac1 ~]# nslookup rac-scan.localdomain
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   rac-scan.localdomain
Address: 10.0.1.192
Name:   rac-scan.localdomain
Address: 10.0.1.193
Name:   rac-scan.localdomain
Address: 10.0.1.191

[root@rac1 ~]# nslookup rac-scan.localdomain
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   rac-scan.localdomain
Address: 10.0.1.193
Name:   rac-scan.localdomain
Address: 10.0.1.191
Name:   rac-scan.localdomain
Address: 10.0.1.192

별도의 DNS 서비스 없이 SCAN을 사용하기 위해 dnsmasq 서비스를 활성화합니다.

DNS 설정 파일(resolv.conf)에는 "nameserver 127.0.0.1"가 입력되어 있어야 합니다.

H) 가상 메모리 파일 시스템 할당

vi /etc/fstab 로 tmpfs 영역 할당
tmpfs                   /dev/shm                tmpfs   size=8g         0 0
mount 명령으로 /dev/shm 영역 remount
mount -o remount /dev/shm
tmpfs                   /dev/shm                tmpfs   size=8g         0 0
[root@rac1 ~]# mount -o remount /dev/shm

[root@rac1 ~]# df -h | grep shm
tmpfs                8.0G   84K  8.0G   1% /dev/shm

가상 메모리 파일 시스템(tmpfs) 값을 설정하고 remount하여 적용시킵니다.

I) oracle 제공 추가 패키지 설치

Oracle 사전환경 구성 패키지 및 ASMLib 패키지 설치
rpm -ivh oracle-database-preinstall-19c-*.x86_64.rpm
rpm -ivh oracleasmlib-*.x86_64.rpm
[root@rac1 tmp]# rpm -ivh oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
경고: oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
준비 중...                         ################################# [100%]
Updating / installing...
   1:oracle-database-preinstall-19c-1.################################# [100%]


[root@rac1 tmp]# rpm -ivh oracleasmlib-2.0.12-1.el7.x86_64.rpm
경고: oracleasmlib-2.0.12-1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
준비 중...                         ################################# [100%]
Updating / installing...
   1:oracleasmlib-2.0.12-1.el7        ################################# [100%]

추가로 Oracle Database 설치를 위한 preinstall 패키지와 ASMLib 패키지를 설치합니다.

preinstall 패키지는 Oracle Linux Repository에서 받을 수 있고, ASMLib 패키지는 아래 경로에서 다운로드 합니다.

https://www.oracle.com/technetwork/server-storage/linux/asmlib/rhel7-2773795.html

J) 그룹 및 사용자 계정 작업

그룹 등록 및 사용자 설정 변경
### 그룹 등록 (정책에 따라 생략)
# groupadd oper
# groupadd backupdba
# groupadd dgdba
# groupadd kmdba
# groupadd racdba
groupadd asmadmin
groupadd asmdba
groupadd asmoper
### 유저 그룹 설정 변경 (vboxsf는 VirtualBox의 Guest Additions 사용시 설정)
usermod -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba,asmadmin,asmdba,asmoper,vboxsf oracle
# usermod -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba,asmadmin,asmdba,asmoper oracle
### 계정 암호 변경
passwd oracle
[root@rac1 ~]# groupadd asmadmin
[root@rac1 ~]# groupadd asmdba
[root@rac1 ~]# groupadd asmoper

[root@rac1 ~]# usermod -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba,asmadmin,asmdba,asmoper,vboxsf oracle

[root@rac1 ~]# passwd oracle
oracle 사용자의 비밀 번호 변경 중
새  암호:
잘못된 암호: 암호는 8 개의 문자 보다 짧습니다
새  암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.

소프트웨어를 설치할 사용자 계정과 그룹을 생성 또는 추가합니다.

preinstall 패키지가 설치되었다면 oracle 유저와 oinstall, dba, oper, backupdba, dgdba, kmdba, racdba 그룹은 이미 생성되어 있습니다.

vboxsf 그룹은 VirtualBox의 Guest Addition을 사용하기 위한 그룹으로, 실제 운영 환경에서 Guest Addition을 사용하지 않는다면 추가하지 않습니다.

passwd 명령어로 각 계정의 암호를 지정해주면 됩니다.

K) 설치 경로 생성

설치 경로 생성 및 권한 부여
mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01
chmod -R 775 /u01
[root@rac1 ~]# mkdir -p /u01/app/oracle
[root@rac1 ~]# chown -R oracle:oinstall /u01
[root@rac1 ~]# chmod -R 775 /u01

오라클 소프트웨어 설치를 위한 경로를 생성하고, 해당 경로에 대한 권한과 소유권을 수정합니다.

L) 사용자 환경 설정

vi ~oracle/.bash_profile 로 oracle 프로필 설정
export TMP=/tmp
export TMPDIR=$TMP
export EDITOR=vi
export ORACLE_HOSTNAME=rac1             # 호스트명에 맞게 변경
export ORACLE_UNQNAME=racdb
export ORACLE_BASE=/u01/app/oracle
export GRID_HOME=/u01/app/11g/grid
export DB_HOME=$ORACLE_BASE/product/11g/db_1
export ORACLE_HOME=$DB_HOME
export ORACLE_SID=racdb1                # 2번 노드 racdb2
export ORACLE_TERM=xterm
export BASE_PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GRID_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_LANG=AMERICAN_KOREA.AL32UTF8
PS1='[$ORACLE_SID:$PWD]> '

oracle 유저의 .bash_profile을 수정합니다.

root 계정에서 파일을 직접 수정할 수 있습니다.

vi ~oracle/.bashrc 로 alias 설정
alias grid_env='export ORACLE_HOME=$GRID_HOME;export ORACLE_SID=+ASM1;export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$BASE_PATH'
alias db_env='export ORACLE_HOME=$DB_HOME;export ORACLE_SID=racdb1;export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$BASE_PATH'

Grid와 DB 인스턴스 간의 변환을 쉽게 하기 위해 alias를 설정합니다.

vi ~/.bash_profile 로 root 프로필 수정
export ORACLE_BASE=/u01/app/oracle
export GRID_HOME=/u01/app/11g/grid
export DB_HOME=$ORACLE_BASE/product/11g/db_1
export PATH=$PATH:$GRID_HOME/bin

작업의 편의를 위해 root 계정의 .bash_profile에도 경로 정보를 추가로 입력합니다.

V. 공유 환경 및 2번 노드 구성

1. 공유 스토리지 구성

공유 스토리지 구성을 위해 고정 공간이 할당된 가상 디스크 6개를 추가로 생성합니다.

파일 이름용량타입용도비고

CRS1.vdi

1GBFixed / ShareableCRS 저장 영역공유(shareable) 디스크로 사용하기 위해서 Fixed Size로 생성합니다.
CRS2.vdi1GBFixed / Shareable
CRS3.vdi1GBFixed / Shareable
DATA.vdi30GBFixed / ShareableData 저장 영역
FRA.vdi20GBFixed / ShareableFast Recovery Area

A) 가상 스토리지 파일 생성

공유 스토리지 가상 디스크 생성
vboxmanage createmedium --filename CRS1.vdi --size 1024 --format VDI --variant Fixed
vboxmanage createmedium --filename CRS2.vdi --size 1024 --format VDI --variant Fixed
vboxmanage createmedium --filename CRS3.vdi --size 1024 --format VDI --variant Fixed
vboxmanage createmedium --filename DATA.vdi --size 30720 --format VDI --variant Fixed
vboxmanage createmedium --filename FRA.vdi --size 20480 --format VDI --variant Fixed
PS D:\VM> pwd

Path
----
D:\VM

PS D:\VM> vboxmanage createmedium --filename CRS1.vdi --size 1024 --format VDI --variant Fixed
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Medium created. UUID: 3a6327e8-0367-4edc-bb5b-591efe123e8d
PS D:\VM> vboxmanage createmedium --filename CRS2.vdi --size 1024 --format VDI --variant Fixed
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Medium created. UUID: 9d4524a2-5a06-478a-b733-81cd9889e59e
PS D:\VM> vboxmanage createmedium --filename CRS3.vdi --size 1024 --format VDI --variant Fixed
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Medium created. UUID: a9d5a021-b91a-4c43-b7d5-2136bf447e83
PS D:\VM> vboxmanage createmedium --filename DATA.vdi --size 30720 --format VDI --variant Fixed
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Medium created. UUID: 94a0fac2-2040-42ec-9b7e-2fecc49bcf05
PS D:\VM> vboxmanage createmedium --filename FRA.vdi --size 20480 --format VDI --variant Fixed
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Medium created. UUID: 8f120938-511d-42b1-b15b-dfd4e20218e9

Host 컴퓨터에서 VM에 연결시킬 CRS, MGMT, DATA와 FRA 디스크를 생성합니다.

디스크는 2개의 노드에서 공유할 것이므로, 반드시 Fixed 모드로 디스크 공간이 사전에 할당되도록 생성해야 합니다.

B) 스토리지 파일 공유 설정

가상 디스크 타입 변경
vboxmanage modifymedium CRS1.vdi --type shareable
vboxmanage modifymedium CRS2.vdi --type shareable
vboxmanage modifymedium CRS3.vdi --type shareable
vboxmanage modifymedium DATA.vdi --type shareable
vboxmanage modifymedium FRA.vdi --type shareable
PS D:\VM> vboxmanage modifymedium CRS1.vdi --type shareable
PS D:\VM> vboxmanage modifymedium CRS2.vdi --type shareable
PS D:\VM> vboxmanage modifymedium CRS3.vdi --type shareable
PS D:\VM> vboxmanage modifymedium DATA.vdi --type shareable
PS D:\VM> vboxmanage modifymedium FRA.vdi --type shareable

생성된 디스크들은 모두 shareable 디스크로 속성 변경이 필요합니다.

VirtualBox의 GUI 툴을 사용하여 변경할 수도 있습니다.

C) VM에 스토리지 연결

정지된 1번 노드의 설정 모드로 들어가서 디스크 파일을 추가합니다.

SATA 콘트롤러의 오른쪽에 하드디스크 모양의 아이콘을 클릭합니다

vboxmanage 명령으로 이미 생성된 디스크 파일을 추가할 것이므로 <기존 디스크 선택하기>를 클릭합니다.

Not Attatched에 등록된 디스크 목록에서 "CRS1.vdi"를 선택한 후 <선택>을 클릭합니다.

만약 생성된 디스크 이미지가 목록에 없다면 <추가> 아이콘을 클릭한 후에 디스크 이미지를 찾아서 추가하면 됩니다.

정상적으로 스토리지가 추가된 것을 확인할 수 있습니다.

다른 공유 디스크들도 같은 방법으로 추가해줍니다.

나머지 디스크 파일 모두 순서에 맞게 SATA 컨트롤러에 등록시켜줍니다.

반드시 동일한 순서대로 다른 노드에도 등록시켜야 합니다.

2. ASM 환경 구성

A) ASM 환경 설정 및 초기화

ASM 환경 설정
oracleasm configure -i
oracleasm init
oracleasm status
oracleasm configure
[root@rac1 ~]# oracleasm configure -i
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 <ENTER> 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 []: asmadmin
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]:
Writing Oracle ASM library driver configuration: done

[root@rac1 ~]# oracleasm init
Creating /dev/oracleasm mount point: /dev/oracleasm
Loading module "oracleasm": oracleasm
Configuring "oracleasm" to use device physical block size
Mounting ASMlib driver filesystem: /dev/oracleasm

[root@rac1 ~]# oracleasm status
Checking if ASM is loaded: yes
Checking if /dev/oracleasm is mounted: yes

[root@rac1 ~]# oracleasm configure
ORACLEASM_ENABLED=true
ORACLEASM_UID=oracle
ORACLEASM_GID=asmadmin
ORACLEASM_SCANBOOT=true
ORACLEASM_SCANORDER=""
ORACLEASM_SCANEXCLUDE=""
ORACLEASM_SCAN_DIRECTORIES=""
ORACLEASM_USE_LOGICAL_BLOCK_SIZE="false"

ASM library에 대한 추가적인 환경 설정(사용자, 그룹, 부팅시 활성화, 부팅시 스캔 여부)을 수행하고 적용 여부를 검증합니다.

B) 디스크 파티셔닝

스토리지 파티션 생성
ls /dev/sd*
fdisk /dev/sdb  ### "n", "p", "1", "엔터", "엔터", "w" 입력
fdisk /dev/sdc  ### "n", "p", "1", "엔터", "엔터", "w" 입력
fdisk /dev/sdd  ### "n", "p", "1", "엔터", "엔터", "w" 입력
fdisk /dev/sde  ### "n", "p", "1", "엔터", "엔터", "w" 입력
fdisk /dev/sdf  ### "n", "p", "1", "엔터", "엔터", "w" 입력
ls /dev/sd*
[root@rac1 ~]# ls /dev/sd*
/dev/sda   /dev/sda2  /dev/sdc  /dev/sde
/dev/sda1  /dev/sdb   /dev/sdd  /dev/sdf

[root@rac1 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xaf5d0328.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-2097151, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151):
Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@rac1 ~]# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x16fccdd3.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-2097151, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151):
Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@rac1 ~]# fdisk /dev/sdd
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x6072c319.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-2097151, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151):
Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@rac1 ~]# fdisk /dev/sde
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x30096059.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-62914559, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-62914559, default 62914559):
Using default value 62914559
Partition 1 of type Linux and of size 30 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@rac1 ~]# fdisk /dev/sdg
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x7dd5a9bc.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039):
Using default value 41943039
Partition 1 of type Linux and of size 20 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@rac1 ~]# ls /dev/sd*
/dev/sda   /dev/sda2  /dev/sdb1  /dev/sdc1  /dev/sdd1  /dev/sde1  /dev/sdf1
/dev/sda1  /dev/sdb   /dev/sdc   /dev/sdd   /dev/sde   /dev/sdf

VM에 연결된 디스크에 fdisk 명령어로 파티션 분할 작업을 수행 합니다.

실습의 편의를 위해 하나의 디스크가 하나의 파티션이 되도록 합니다.

C) ASM 디스크 생성

ASM 디스크 생성 및 확인
oracleasm createdisk CRS1 /dev/sdb1
oracleasm createdisk CRS2 /dev/sdc1
oracleasm createdisk CRS3 /dev/sdd1
oracleasm createdisk DATA /dev/sde1
oracleasm createdisk FRA /dev/sdf1
oracleasm scandisks
oracleasm listdisks
[root@rac1 ~]# oracleasm createdisk CRS1 /dev/sdb1
Writing disk header: done
Instantiating disk: done
[root@rac1 ~]# oracleasm createdisk CRS2 /dev/sdc1
Writing disk header: done
Instantiating disk: done
[root@rac1 ~]# oracleasm createdisk CRS3 /dev/sdd1
Writing disk header: done
Instantiating disk: done
[root@rac1 ~]# oracleasm createdisk DATA /dev/sde1
Writing disk header: done
Instantiating disk: done
[root@rac1 ~]# oracleasm createdisk FRA /dev/sdf1
Writing disk header: done
Instantiating disk: done

[root@rac1 ~]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...

[root@rac1 ~]# oracleasm listdisks
CRS1
CRS2
CRS3
DATA
FRA

VM에 마운트된 디스크를 각각 ASM Disk로 할당해줍니다.

순서대로 마운트가 되었다면, 디바이스 명의 알파벳 순으로 ASM 디스크를 생성하면 됩니다.

3. 2번 노드 구성

A) 2번 노드 가상 머신 만들기

.

가상 머신 2번 노드를 만들기 위해 VirtualBox에서 ‘새로 만들기’를 클릭합니다.

가상 머신의 이름을 "rac2"로 정하고, 1번 노드와 동일한 경로를 머신 폴더로 지정합니다.

해당 디렉토리 아래에 rac2라는 디렉토리가 생성되고, 디렉토리 안에 가상 머신 관련 파일들이 저장됩니다.

OS의 종류는 'Linux'로 하고 설치될 버전은 'Oracle (64-bit)'를 선택한 후 <다음>을 클릭합니다.

메모리 크기는 1번 노드와 동일하게 10240MB로 선택한 후 <다음>을 클릭합니다.

B) 1번 노드 VM 복제

2번 노드 가상 디스크 이미지 복제
vboxmanage clonemedium disk .\rac1.vdi ..\rac2\rac2.vdi
PS D:\VM\rac1> vboxmanage clonemedium disk .\rac1.vdi ..\rac2\rac2.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'VDI'. UUID: 28c8742c-e783-4dca-b95c-5919bfd1257e

1번 노드가 정지된 상태에서 1번 노드의 복제본을 rac2 디렉토리에 저장합니다.

1번 노드의 UUID값과 다른 이미지가 생성되도록 반드시 VirtualBox에서 제공하는 방식으로 복제합니다.

하드 디스크는 '기존의 가상 하드 디스크 파일 사용'을 선택합니다.

그리고 방금 복제한 가상 하드 디스크 파일을 선택하기 위해 폴더 모양의 아이콘을 클릭합니다.

vboxmanage 명령으로 디스크를 복제했다면, Not Attatched 항목에 rac2.vdi 파일이 존재합니다.

만약 목록에 없다면 <추가> 버튼을 클릭하여 복제한 이미지를 찾아 불러오면 됩니다.

rac2.vdi 파일을 선택한 후 <선택> 버튼을 클릭합니다.

<만들기>를 클릭하면, 지금까지 선택한 환경에 맞게 가상 머신이 생성됩니다.

C) 2번 노드 VM 환경 설정

기본적으로 생성된 가상 머신을 RAC 환경에 맞게 변경해야 하므로, 2번 노드를 선택하고 <설정>을 클릭합니다.

부팅 순서에서 플로피 디스크를 해제합니다.

1번 노드와 동일한 순서로 공유 디스크를 추가시켜 줍니다.

반드시 같은 순서대로 SATA 컨트롤러에 연결시켜야 합니다.

오디오는 사용하지 않을 것이므로 '오디오 사용하기'를 해제합니다.

어댑터 1의 네트워크 설정을 1번 노드와 동일하게 구성합니다.

본인이 사용할 네트워크 환경에 맞게 설정하면 됩니다.

RAC 노드간의 통신을 위해 어댑터 2를 활성화시킵니다.

어댑터 2번 항목에 가서 '네트워크 어댑터 사용하기'를 체크하고, 1번 노드와 동일하게 '호스트 전용 어댑터'로 구성합니다.

1번 노드와 동일하게 공유 폴더 기능을 설정합니다.

공유 폴더를 설정할 경우, 호스트 서버에 저장된 설치 파일을 업로드 없이 바로 사용할 수 있습니다.

모든 구성이 완료되었으면 <확인>을 클릭해서 변경한 설정 값을 저장하고, 가상머신을 기동합니다.

D) 네트워크 설정 변경

네트워크 설정을 변경하기 위해 root 계정으로 접속한 후에 '프로그램' > '시스템 도구' > '설정'을 클릭합니다.

네트워크 항목으로 이동한 후에 각 이더넷 항목에 톱니바퀴 모양의 아이콘을 클릭하여 설정을 변경합니다.

참고로 VirtualBox를 기준으로 했을 떄, 이더넷 enp0s3은 Public 네트워크이고 enp0s8은 Private 네트워크의 인터페이스입니다.


네트워크 인터페이스 alias 변경
ip link set <old NIC alias> down
ip link set <old NIC alias> name <new NIC alias>
ip link set <new NIC alias> up
mv /etc/sysconfig/network-scripts/ifcfg-<old NIC alias> /etc/sysconfig/network-scripts/ifcfg-<new NIC alias>
sed -ire "s/NAME=\"<old NIC alias>\"/NAME=\"<new NIC alias>\"/" /etc/sysconfig/network-scripts/ifcfg-<new NIC alias>
sed -ire "s/DEVICE=\"<old NIC alias>\"/NAME=\"<new NIC alias>\"/" /etc/sysconfig/network-scripts/ifcfg-<new NIC alias>

만약 2번 VM의 NIC(Network Interface Card)의 alias가 1번 노드의 alias와 일치하지 않을 경우, grid 검증 과정에서 오류가 발생합니다.

좌측의 명령어로 alias를 1번과 동일하게 변경하여 해결할 수 있습니다.

추가적으로 NIC별 UUID 확인이 필요할 경우 다음의 명령어를 사용합니다.

NIC별 UUID 확인
nmcli connection



이더넷 enp0s3의 IPv4 항목에서 주소를 "10.0.1.102"(2번 노드의 Public 네트워크 IP)로 변경한 후 <적용>을 클릭합니다.

리눅스 버전에 따라 네트워크 정보가 초기화되어 있을 수 있습니다.

그럴 때는 아래의 정보와 같이 입력합니다.

항목

입력값

비고

주소10.0.1.1021번 노드 Public IP 주소
네트마스크24서브넷 마스크 값으로  255.255.255.0 사용 가능
게이트웨이10.0.1.1Public 망의 게이트웨이
네임서버(DNS)127.0.0.1dnsmasq를 사용할 경우 loopback IP 사용
검색 도메인localdomain로컬 도메인 정보 입력

이더넷 enp0s8의 IPv4 항목에서 주소를 "10.0.5.102"(2번 노드의 Private 네트워크 IP)로 변경한 후 <적용>을 클릭합니다.

마찬가지로 네트워크 정보가 초기화 되었을 경우, 아래와 같이 입력합니다.

항목

입력값

비고

주소10.0.5.1011번 노드 Private IP 주소
네트마스크24서브넷 마스크 값으로  255.255.255.0 사용 가능

각 이더넷 인터페이스를 껏다가 키면 변경된 설정이 적용됩니다.

또는 명령 프롬프트에서 아래 명령을 수행합니다.

root 유저로 네트워크 재기동 수행
systemctl restart network
2번 노드 IP 주소 변경하기 (옵션)
ip addr show
vi /etc/sysconfig/network-scripts/ifcfg-<public 인터페이스명>
# IPADDR=XXX.XXX.XXX.XXX 부분 변경
vi /etc/sysconfig/network-scripts/ifcfg-<private 인터페이스명>
# IPADDR=XXX.XXX.XXX.XXX 부분 변경
systemctl restart network
ip addr show
[root@rac1 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:72:b8:d8 brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.101/24 brd 10.0.1.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe72:b8d8/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:fd:6d:a9 brd ff:ff:ff:ff:ff:ff
    inet 10.0.5.101/24 brd 10.0.5.255 scope global noprefixroute enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::cd39:da9a:86ab:40a8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

[root@rac1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
... << 생략 >> ...
IPADDR=10.0.1.102
... << 생략 >> ...

[root@rac1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
... << 생략 >> ...
IPADDR=10.0.5.102
... << 생략 >> ...

[root@rac1 ~]# systemctl restart network

[root@rac1 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:72:b8:d8 brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.102/24 brd 10.0.1.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe72:b8d8/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:fd:6d:a9 brd ff:ff:ff:ff:ff:ff
    inet 10.0.5.102/24 brd 10.0.5.255 scope global noprefixroute enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::cd39:da9a:86ab:40a8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

위의 GUI 방식보다 간단하게 CLI 모드에서 vi 편집기를 사용하여 IP를 수정할 수도 있습니다.

다만 Public Private 이더넷을 혼동하여 잘못 설정할  있으므로 주의가 필요합니다.

E) 호스트명 변경

2번 노드 hostname 변경
hostnamectl status
hostnamectl set-hostname rac2
hostnamectl status
[root@rac1 ~]# hostnamectl status
   Static hostname: rac1
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 5554cd8ab5124283be4afd144783a884
           Boot ID: dc642dbe4f44426f82469fbda8e61f27
    Virtualization: kvm
  Operating System: Oracle Linux Server 7.6
       CPE OS Name: cpe:/o:oracle:linux:7:6:server
            Kernel: Linux 4.14.35-1818.3.3.el7uek.x86_64
      Architecture: x86-64
	  
[root@rac1 ~]# hostnamectl set-hostname rac2

[root@rac1 ~]# hostnamectl status
   Static hostname: rac2
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 5554cd8ab5124283be4afd144783a884
           Boot ID: dc642dbe4f44426f82469fbda8e61f27
    Virtualization: kvm
  Operating System: Oracle Linux Server 7.6
       CPE OS Name: cpe:/o:oracle:linux:7:6:server
            Kernel: Linux 4.14.35-1818.3.3.el7uek.x86_64
      Architecture: x86-64

2번 노드의 호스트 명은 CLI 모드에서 간단한 명령어로 변경할 수 있습니다.

2번 노드 CLI 모드로 변경
systemctl set-default multi-user.target
[root@rac2 ~]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.

설치 과정 중에 리소스를 절약하기 위해 2번 노드는 텍스트 모드로 실행되도록 수정합니다.

F) 사용자 환경 변수 변경

vi ~oracle/.bash_profile로 2번 노드 oracle 프로필 변경
export ORACLE_HOSTNAME=rac2
export ORACLE_SID=racdb2
[root@rac2 ~]# cat ~oracle/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

export TMP=/tmp
export TMPDIR=$TMP
export EDITOR=vi
export ORACLE_HOSTNAME=rac2             # 호스트명에 맞게 변경
export ORACLE_UNQNAME=racdb
export ORACLE_BASE=/u01/app/oracle
export GRID_HOME=/u01/app/11g/grid
export DB_HOME=$ORACLE_BASE/product/11g/db_1
export ORACLE_HOME=$DB_HOME
export ORACLE_SID=racdb2                # 2번 노드 racdb2
export ORACLE_TERM=xterm
export BASE_PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GRID_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_LANG=AMERICAN_KOREA.AL32UTF8
PS1='[$ORACLE_SID:$PWD]> '

oracle 유저의 환경 설정을 2번 노드에 맞게 수정합니다.

vi ~oracle/.bashrc 2번 노드의 alias 설정 변경
alias grid_env='export ORACLE_HOME=$GRID_HOME;export ORACLE_SID=+ASM2;export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$BASE_PATH'
alias db_env='export ORACLE_HOME=$DB_HOME;export ORACLE_SID=racdb2;export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$BASE_PATH'

aslias 설정의 ORACLE_SID 정보도 2번 노드에 맞게 수정합니다.

VI. 11g Grid Infrastructure 설치

1. Grid 설치

A) 환경 설정 및 OUI 실행

Grid 설치 스크립트 실행
# grid_env
export LANG=C
cd <Grid 설치 파일 압축 디렉토리>
./runInstaller

Linux 7 에서는 11g의 OUI에서 한글이 표기가 되지 않으므로 LANG=C 설정으로 언어 표기를 초기화한 후 OUI를 실행합니다.

‘Skip software updates’를 선택하고 <Next>를 클릭합니다.

‘Install and Configure Oracle Grid Infrastructure for a Cluster’를 선택하고 <Next>를 클릭합니다.

‘Advanced Installation’을 선택하고 <Next>를 클릭합니다.

언어에 ‘Korean’을 추가하고 <Next>를 클릭합니다

Cluster Name에 “rac”, SCAN Name에 “rac-scan”, SCAN Port에 “1521”을 입력합니다.

Configure GNS를 해제하고 <Next>를 클릭합니다

<Add> 버튼을 클릭하여 RAC2 노드에 대한 정보를 추가합니다.

Public Hostname에 ‘rac2’ 와 Virtual Hostname에 ‘rac2-vip’를 입력하고 <OK>를 클릭합니다.


SSH 구성을 위해 <SSH Connecivity>를 클릭합니다.

OS Password에 oracle 유저의 암호(“oracle”)를 입력하고 <Setup>을 클릭합니다

SSH 설정이 완료되었으면 <OK>를 클릭합니다

설치를 진행하기 위해 <Next>를 클릭합니다.

enp0s3은 ‘Public’, enp0s8은 ‘Private’로 선택되었는지 체크하고 <Next>를 클릭합니다

ASM에 데이터베이스를 구성할 것이므로 ‘Oracle Automatic Storage Management (Oracle ASM)’을 선택하고 <Next>를 클릭합니다.

먼저 클러스터 환경을 구성하고 저장할 디스크 그룹을 생성합니다.

디스크 그룹 이름에 ‘CRS'를 입력하고 ‘ORCL:CRS1’부터 ‘ORCL:CRS3’까지 선택하고 <Next>를 클릭합니다.

Redundancy는 ‘Normal’을 유지하고 AU Size는 기본값(1MB)으로 둡니다.

'Use same passwords for these accounts’를 선택하고 암호에 ‘oracle_4U’를 입력한 후 <Next>를 클릭합니다

‘Do not use Intelligent Platform Management Interface(IPMI)’ 선택 후 <Next>를 클릭합니다

ASM 관련 그룹이 제대로 선택되어 있는지 확인하고 <Next>를 클릭합니다.

Oracle Base가 “/u01/app/oracle”, Software Location이 “/u01/app/11g/grid”로 되어 있는지 확인하고 <Next>를 클릭합니다.

Inventory Directory가 "/u01/app/oraInventory"로 되어 있는지 확인하고 <Next>를 클릭합니다

오라클 설치에 필요한 조건 검사가 진행됩니다.

패키지 관련 2가지 waring이 있습니다. 이중에 cvuqdisk 패키지는 <Fix & Check Again>에서 수정이 가능합니다.

<Fix & Check Again>을 클릭하면 root 유저로 스크립트를 실행할 수 있는 안내창이 나옵니다.

B) runfixup 쉘 실행

root 유저로 fixup 스크립트 수행
/tmp/CVU_11.2.0.4.0_oracle/runfixup.sh
[root@rac1 ~]# /tmp/CVU_11.2.0.4.0_oracle/runfixup.sh
Response file being used is :/tmp/CVU_11.2.0.4.0_oracle/fixup.response
Enable file being used is :/tmp/CVU_11.2.0.4.0_oracle/fixup.enable
Log file location: /tmp/CVU_11.2.0.4.0_oracle/orarun.log
Installing Package /tmp/CVU_11.2.0.4.0_oracle//cvuqdisk-1.0.9-1.rpm
준비 중...                         ################################# [100%]
Updating / installing...
   1:cvuqdisk-1.0.9-1                 ################################# [100%]
[root@rac2 ~]# /tmp/CVU_11.2.0.4.0_oracle/runfixup.sh
Response file being used is :/tmp/CVU_11.2.0.4.0_oracle/fixup.response
Enable file being used is :/tmp/CVU_11.2.0.4.0_oracle/fixup.enable
Log file location: /tmp/CVU_11.2.0.4.0_oracle/orarun.log
Installing Package /tmp/CVU_11.2.0.4.0_oracle//cvuqdisk-1.0.9-1.rpm
준비 중...                         ################################# [100%]
Updating / installing...
   1:cvuqdisk-1.0.9-1                 ################################# [100%]

안내 창에서 가이드 된 스크립트를 root 유저 권한으로 모든 노드에서 수행합니다.

그리고 다시 OUI 화면으로 돌아와 <OK>를 클릭하면 재검사가 수행됩니다.

남아있는 pdksh 패키지는 리눅스 7에서는 더이상 제공되지 않으며, 오라클(문서 1962046.1)로부터 무시해도 되는 패키지임을 확인 받았으므로 'Ignore All'을 체크하고 <Next>를 클릭합니다.

해당 패키지를 무시하는 것과 관련하여 안내 창이 뜨면 <Yes>를 클릭합니다.

설치 내역에 대한 요약 정보를 확인할 수 있습니다.

수정할 부분이 없으면 <Install>을 클릭합니다.

Grid Infrastructure 설치가 진행됩니다

구성 스크립트를 실행하라는 창이 뜹니다.

스크립트를 실행하기에 앞서 먼저 1837001 패치를 수행해야 합니다.

해당 패치를 수행하지 않고 구성 스크립트를 실행할 경우, 클러스터 구성 과정 중에 에러가 발생하며 작업이 진행되지 않습니다.

따라서 반드시 해당 패치를 스크립트 수행 전에 적용해야 합니다. (최소 두 번째 스크립트 수행 전)

C) Grid 18370031 패치

$GRID_HOME 디렉토리에 Opatch 패치
export ORACLE_BASE=/u01/app/oracle
export GRID_HOME=/u01/app/11g/grid
$GRID_HOME/OPatch/opatch version
mv $GRID_HOME/OPatch $GRID_HOME/OPatch.old
unzip <패치 파일 다운로드 디렉토리>/p6880880_112000_Linux-x86-64.zip -d $GRID_HOME
chown -R oracle:oinstall $GRID_HOME/OPatch
$GRID_HOME/OPatch/opatch version
[root@rac1 ~]# export ORACLE_BASE=/u01/app/oracle

[root@rac1 ~]# export GRID_HOME=/u01/app/11g/grid

[root@rac1 ~]# $GRID_HOME/OPatch/opatch version
OPatch Version: 11.2.0.3.4

OPatch succeeded.

[root@rac1 ~]# mv $GRID_HOME/OPatch $GRID_HOME/OPatch.old

[root@rac1 ~]# unzip /media/sf_oracle/11.2/p6880880_112000_Linux-x86-64.zip -d $GRID_HOME/
Archive:  /media/sf_oracle/11.2/p6880880_112000_Linux-x86-64.zip
... << 중략 >> ...
  inflating: /u01/app/11g/grid/OPatch/operr

[root@rac1 ~]# chown -R oracle:oinstall $GRID_HOME/OPatch

[root@rac1 ~]# $GRID_HOME/OPatch/opatch version
OPatch Version: 11.2.0.3.23

OPatch succeeded.
[root@rac2 ~]# export ORACLE_BASE=/u01/app/oracle

[root@rac2 ~]# export GRID_HOME=/u01/app/11g/grid

[root@rac2 ~]# $GRID_HOME/OPatch/opatch version
OPatch Version: 11.2.0.3.4

OPatch succeeded.

[root@rac2 ~]# mv $GRID_HOME/OPatch $GRID_HOME/OPatch.old

[root@rac2 ~]# unzip /media/sf_oracle/11.2/p6880880_112000_Linux-x86-64.zip -d $GRID_HOME/
Archive:  /media/sf_oracle/11.2/p6880880_112000_Linux-x86-64.zip
... << 중략 >> ...
  inflating: /u01/app/11g/grid/OPatch/operr

[root@rac2 ~]# chown -R oracle:oinstall $GRID_HOME/OPatch

[root@rac2 ~]# $GRID_HOME/OPatch/opatch version
OPatch Version: 11.2.0.3.23

OPatch succeeded.

먼저 패치를 위해 $GRID_HOME의 Opatch 파일을 최신 버전으로 업데이트 합니다.

Grid를 설치할 모든 노드에 업데이트해야 합니다.

18370031 패치 적용
grid_env
opatch napply -local <패치 압축 해제 디렉토리>/18370031
opatch lspatches
[racdb1:/home/oracle]> grid_env

[+ASM1:/home/oracle]> opatch napply -local /media/sf_oracle/11.2/18370031
Oracle Interim 패치 설치 프로그램 버전 11.2.0.3.23
Copyright (c) 2020, Oracle Corporation.  All rights reserved.


Oracle 홈: /u01/app/11g/grid
중앙 인벤토리: /u01/app/oraInventory
   출처: /u01/app/11g/grid/oraInst.loc
OPatch 버전: 11.2.0.3.23
OUI 버전: 11.2.0.4.0
로그 파일 위치: /u01/app/11g/grid/cfgtoollogs/opatch/opatch2020-03-28_14-35-25오후_1.log

Verifying environment and performing prerequisite checks...
OPatch continues with these patches:   18370031

계속하겠습니까? [y|n]
y
User Responded with: Y
All checks passed.

로컬 시스템의 이 ORACLE_HOME에서 실행 중인 Oracle 인스턴스를 종료하십시오.
(Oracle 홈 = '/u01/app/11g/grid')


로컬 시스템이 패치할 준비가 되었습니까? [y|n]
y
User Responded with: Y
Backing up files...
OH '/u01/app/11g/grid'에 Interim 패치 '18370031'을(를) 적용하는 중

oracle.crs, 11.2.0.4.0 구성요소를 패치하는 중...
Patch 18370031 successfully applied.
Log file location: /u01/app/11g/grid/cfgtoollogs/opatch/opatch2020-03-28_14-35-25오후_1.log

OPatch succeeded.

[+ASM1:/home/oracle]> opatch lspatches
18370031;Grid Infrastructure Patch Set Update : 11.2.0.4.x (gibugno)

OPatch succeeded.
[racdb2:/home/oracle]> grid_env

[+ASM2:/home/oracle]> opatch napply -local /media/sf_oracle/11.2/18370031
Oracle Interim 패치 설치 프로그램 버전 11.2.0.3.23
Copyright (c) 2020, Oracle Corporation.  All rights reserved.


Oracle 홈: /u01/app/11g/grid
중앙 인벤토리: /u01/app/oraInventory
   출처: /u01/app/11g/grid/oraInst.loc
OPatch 버전: 11.2.0.3.23
OUI 버전: 11.2.0.4.0
로그 파일 위치: /u01/app/11g/grid/cfgtoollogs/opatch/opatch2020-03-28_14-39-24오후_1.log

Verifying environment and performing prerequisite checks...
OPatch continues with these patches:   18370031

계속하겠습니까? [y|n]
y
User Responded with: Y
All checks passed.

로컬 시스템의 이 ORACLE_HOME에서 실행 중인 Oracle 인스턴스를 종료하십시오.
(Oracle 홈 = '/u01/app/11g/grid')


로컬 시스템이 패치할 준비가 되었습니까? [y|n]
y
User Responded with: Y
Backing up files...
OH '/u01/app/11g/grid'에 Interim 패치 '18370031'을(를) 적용하는 중

oracle.crs, 11.2.0.4.0 구성요소를 패치하는 중...
Patch 18370031 successfully applied.
Log file location: /u01/app/11g/grid/cfgtoollogs/opatch/opatch2020-03-28_14-39-24오후_1.log

OPatch succeeded.

[+ASM2:/home/oracle]> opatch lspatches
18370031;Grid Infrastructure Patch Set Update : 11.2.0.4.x (gibugno)

OPatch succeeded.

업데이트한 Opatch 파일로 18370031 패치를 Grid에 적용합니다.

설치하고자 하는 모든 노드에서 각각 실행해야 합니다.

D) root 스크립트 실행

첫번째 root 스크립트 실행
/u01/app/oraInventory/orainstRoot.sh
[root@rac1 ~]# /u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.
[root@rac2 ~]# /u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.

패치가 정상적으로 되었으면 첫번째 구성 스크립트를 실행햡니다.

클러스터를 구성할 모든 노드에 빠찜없이 수행합니다.

두번째 root 스크립트 실행
/u01/app/11g/grid/root.sh
[root@rac1 ~]# /u01/app/11g/grid/root.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/11g/grid

Enter the full pathname of the local bin directory: [/usr/local/bin]:
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /u01/app/11g/grid/crs/install/crsconfig_params
Creating trace directory
User ignored Prerequisites during installation
Installing Trace File Analyzer
OLR initialization - successful
  root wallet
  root wallet cert
  root cert export
  peer wallet
  profile reader wallet
  pa wallet
  peer wallet keys
  pa wallet keys
  peer cert request
  pa cert request
  peer cert
  pa cert
  peer root cert TP
  profile reader root cert TP
  pa root cert TP
  peer pa cert TP
  pa peer cert TP
  profile reader pa cert TP
  profile reader peer cert TP
  peer user cert
  pa user cert
Adding Clusterware entries to oracle-ohasd.service
CRS-2672: Attempting to start 'ora.mdnsd' on 'rac1'
CRS-2676: Start of 'ora.mdnsd' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.gpnpd' on 'rac1'
CRS-2676: Start of 'ora.gpnpd' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'rac1'
CRS-2672: Attempting to start 'ora.gipcd' on 'rac1'
CRS-2676: Start of 'ora.cssdmonitor' on 'rac1' succeeded
CRS-2676: Start of 'ora.gipcd' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.cssd' on 'rac1'
CRS-2672: Attempting to start 'ora.diskmon' on 'rac1'
CRS-2676: Start of 'ora.diskmon' on 'rac1' succeeded
CRS-2676: Start of 'ora.cssd' on 'rac1' succeeded

ASM이 성공적으로 생성되고 시작되었습니다.

디스크 그룹 CRS이(가) 성공적으로 생성되었습니다.

clscfg: -install mode specified
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
CRS-4256: Updating the profile
Successful addition of voting disk 3d565099b3bd4f12bfd953417f1d8120.
Successful addition of voting disk 2f539dd6cd254ffabf7378fadde45b24.
Successful addition of voting disk 56d9ca743a024f5fbf23d5ba055ee1c5.
Successfully replaced voting disk group with +CRS.
CRS-4256: Updating the profile
CRS-4266: Voting file(s) successfully replaced
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   3d565099b3bd4f12bfd953417f1d8120 (ORCL:CRS1) [CRS]
 2. ONLINE   2f539dd6cd254ffabf7378fadde45b24 (ORCL:CRS2) [CRS]
 3. ONLINE   56d9ca743a024f5fbf23d5ba055ee1c5 (ORCL:CRS3) [CRS]
Located 3 voting disk(s).
CRS-2672: Attempting to start 'ora.asm' on 'rac1'
CRS-2676: Start of 'ora.asm' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.CRS.dg' on 'rac1'
CRS-2676: Start of 'ora.CRS.dg' on 'rac1' succeeded
Configure Oracle Grid Infrastructure for a Cluster ... succeeded
[root@rac2 ~]# /u01/app/11g/grid/root.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/11g/grid

Enter the full pathname of the local bin directory: [/usr/local/bin]:
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /u01/app/11g/grid/crs/install/crsconfig_params
Creating trace directory
User ignored Prerequisites during installation
Installing Trace File Analyzer
OLR initialization - successful
Adding Clusterware entries to oracle-ohasd.service
CRS-4402: The CSS daemon was started in exclusive mode but found an active CSS daemon on node rac1, number 1, and is terminating
An active cluster was found during exclusive startup, restarting to join the cluster
Configure Oracle Grid Infrastructure for a Cluster ... succeeded

첫번째 구성 스크립트를 모든 노드에서 수행한 후, 두번째 구성 스크립트도 모든 노드에서 수행합니다.

반드시 한 노드에서 작업이 끝난 후에 다음 노드에서 작업을 진행해야 하며, 절대로 동시에 여러 노드에서 수행하면 안됩니다.

스크립트 실행을 모두 완료하였으면 OUI 화면으로 돌아와서 구성 스크립트 실행 창의 <OK> 버튼을 클릭합니다.

클러스터용 Oracle Grid Infrastructure 구성 작업이 진행됩니다.

Grid 설치가 모두 성공했습니다.

<Close> 버튼을 클릭해서 종료합니다

Grid 설치 및 클러스터 구축 결과 확인
crsctl stat res -t
[root@rac1 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CRS.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.asm
               ONLINE  ONLINE       rac1                     Started
               ONLINE  ONLINE       rac2                     Started
ora.gsd
               OFFLINE OFFLINE      rac1
               OFFLINE OFFLINE      rac2
ora.net1.network
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.ons
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac2
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       rac1
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       rac1
ora.cvu
      1        ONLINE  ONLINE       rac1
ora.oc4j
      1        ONLINE  ONLINE       rac1
ora.rac1.vip
      1        ONLINE  ONLINE       rac1
ora.rac2.vip
      1        ONLINE  ONLINE       rac2
ora.scan1.vip
      1        ONLINE  ONLINE       rac2
ora.scan2.vip
      1        ONLINE  ONLINE       rac1
ora.scan3.vip
      1        ONLINE  ONLINE       rac1


 

2. ASM 디스크 그룹 추가

ASMCA 실행
grid_env
export LANG=C
asmca

ASM 디스크 그룹을 추가하기 위해 oracle 유저에서 asmca를 실행합니다

Linux 7 환경에서 11g OUI 수행시 한글이 깨지므로 LANG=C 옵션으로 언어 설정을 초기화 합니다.

Disk Groups 탭에서 <Create> 버튼을 클릭합니다.

Disk Group Name에 “DATA”를 입력하고 Redundancy는 ‘External(None)’을 선택합니다.

‘ORCL:DATA’를 체크한 후에 <OK>를 클릭합니다.

DATA 디스크 그룹이 성공적으로 생성된 메시지가 나옵니다.

<OK>를 클릭합니다.

FRA 디스크 그룹을 만들기 위해 다시 <Create>를 클릭합니다.

Disk Group Name에 “FRA”를 입력하고 Redundancy는 ‘External(None)’을 선택합니다.

‘ORCL:FRA’를 체크한 후에 <OK>를 클릭합니다.

FRA 디스크 그룹이 성공적으로 생성된 메시지가 나옵니다.

<OK>를 클릭합니다.

구성이 완료되었으므로 <Exit>을 클릭합니다.

프로그램 종료를 확인 메시지가 나오면 <Yes>를 클릭합니다.

디스크 그룹 생성 결과 확인
crsctl stat res -t


[root@rac1 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CRS.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.DATA.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.FRA.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.asm
               ONLINE  ONLINE       rac1                     Started
               ONLINE  ONLINE       rac2                     Started
ora.gsd
               OFFLINE OFFLINE      rac1
               OFFLINE OFFLINE      rac2
ora.net1.network
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.ons
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac2
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       rac1
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       rac1
ora.cvu
      1        ONLINE  ONLINE       rac1
ora.oc4j
      1        ONLINE  ONLINE       rac1
ora.rac1.vip
      1        ONLINE  ONLINE       rac1
ora.rac2.vip
      1        ONLINE  ONLINE       rac2
ora.scan1.vip
      1        ONLINE  ONLINE       rac2
ora.scan2.vip
      1        ONLINE  ONLINE       rac1
ora.scan3.vip
      1        ONLINE  ONLINE       rac1


VII. 11g Database 설치

1. Database 소프트웨어 설치

A) 환경 설정 및 OUI 실행

Database 설치 스크립트 실행
#db_env
export LANG=C
cd <Database 설치 파일 압축 디렉토리>
./runInstaller

Linux 7 에서는 11g의 OUI에서 한글이 표기가 되지 않으므로 LANG=C 설정으로 언어 표기를 초기화한 후 OUI를 실행합니다.

‘I wish to receive seurity updates via My Oracle Support’를 해제하고 <Next>를 클릭합니다.

전제 메일 주소 제공 관련 안내 메시지가 나오면 <Yes>를 클릭하여 설치를 계속 진행합니다.

‘Skip software updates’를 선택하고 <Next>를 클릭합니다.

‘Install database software only’를 선택하고 <Next>를 클릭합니다.

Oracle Real Application Clusters database installation’을 선택하고 <Select All>을 클릭하여 모든 노드를 체크합니다.

그리고 <Next>를 클릭합니다.

제품 언어에 ‘Korean’을 추가하고 <Next>를 클릭합니다

‘Enterprise Edition’을 선택하고 <Next>를 클릭합니다.

Oracle Base에 “/u01/app/oracle”을 입력하고 Software Location에 “/u01/app/oracle/product/11g/db_1”을 입력하고 <Next>를 클릭합니다.

데이터베이스 관리자 그룹에 ‘dba’, 운영자 그룹에 ‘oper’을 선택하고 <Next>를 클릭합니다.

데이터베이스 소프트웨어 설치에 필요한 조건을 검사합니다.

pdksh 패키지는 리눅스 7에서는 더이상 제공되지 않으며, 오라클(문서 1962046.1)로부터 무시해도 되는 패키지임을 확인 받았으므로 'Ignore All'을 체크하고 <Next>를 클릭합니다.

해당 패키지를 무시하는 것과 관련하여 안내 창이 뜨면 <Yes>를 클릭합니다.

설치에 대한 요약된 정보를 확인하고 이상이 없을 경우 <Install>을 클릭합니다.

데이터베이스 소프트웨어의 설치가 진행됩니다.

설치 진행 중 ins_emagent.mk 파일 관련 오류가 발생합니다.

오라클의 가이드(2299494.1)에 따라 해당 파일을 수정해야 정상적으로 설치를 진행할 수 있습니다.

B) ins_emagent.mk 파일 수정

vi $ORACLE_HOME/sysman/lib/ins_emagent.mk 파일 수정
#$(MK_EMAGENT_NMECTL)
$(MK_EMAGENT_NMECTL) -lnnz11

vi 편집기로 해당 파일을 열어서 "$(MK_EMAGENT_NMECTL)"로 입력되어 있는 176번 줄의 내용을 "$(MK_EMAGENT_NMECTL) -lnnz11"로 수정한 후 저장합니다.

그리고 OUI 화면으로 돌아와서 <Retry> 버튼을 클릭합니다.

남은 설치가 진행됩니다.

마지막으로 구성 스크립트 실행 안내창이 뜹니다.

C) root 스크립트 실행

모든 노드에서 root 유저로 스크립트 실행
/u01/app/oracle/product/11g/db_1/root.sh
[root@rac1 ~]# /u01/app/oracle/product/11g/db_1/root.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/11g/db_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of "dbhome" have not changed. No need to overwrite.
The contents of "oraenv" have not changed. No need to overwrite.
The contents of "coraenv" have not changed. No need to overwrite.

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
[root@rac2 ~]# /u01/app/oracle/product/11g/db_1/root.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/11g/db_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of "dbhome" have not changed. No need to overwrite.
The contents of "oraenv" have not changed. No need to overwrite.
The contents of "coraenv" have not changed. No need to overwrite.

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Finished product-specific root actions.

루트 사용자 권한으로 모든 노드에서 스크립트를 실행합니다.

스크립트를 모두 실행한 후에 OUI 화면으로 돌아와서 <OK>를 클릭하면 설치 성공 메시지가 출력됩니다.

<Close>를 클릭하여 설치를 완료합니다.

 

2. Database 생성

DBCA 실행
# db_env
export LANG=C
dbca

Linux 7 에서는 11g의 OUI에서 한글이 표기가 되지 않으므로 LANG=C 설정으로 언어 표기를 초기화한 후 DBCA를 실행합니다.

‘Oracle Real Application Clusters(RAC) database’를 선택하고 <Next>를 클릭합니다.

‘Create Database’를 선택하고 <Next>를 클릭합니다.

‘General Purpose or Transaction Processing’을 선택하고 <Next>를 클릭합니다

‘Admin-Managed’가 체크된 상태에서 Global Database Name에 “racdb”을 입력하고 SID Prefix에 “racdb”를 입력합니다.

모든 노드에 설치하기 위해 <Select All>을 클릭하고 <Next>를 클릭합니다.

리소스 절약을 위해 'Configure Enterprise Manager '의 체크를 해제하고 <Next>를 클릭합니다.

‘Use the Same Administrative Password for All Accounts’를 체크하고 Password로 ‘oracle_4U’를 입력한 후 <Next>를 클릭합니다.

ASM에 데이터베이스를 구성할 것이므로 Storage Type이 'Automatic Storage Management(ASM)'으로 되어 있는지 확인합니다.

'Use Oracle-Managed Files'가 선택되어 있고, Database Area에 "+DATA" 디스크 그룹으로 되어 있는지 확인합니다.

<Multiplex Redo Logs and Control Files>를 클릭합니다.

Redo Logs와 Control Files를 여러 곳에 저장할 수 있도록 "+DATA"와 "+FRA"를 입력한 후 <OK>를 클릭합니다.

<Next>를 클릭합니다.

Fast Recovery Area를 FRA 디스크 그룹으로 변경하기 위해 <Browse>를 클릭합니다.

‘FRA’를 선택하고 <OK>를 클릭합니다.

아카이브 설정을 데이터베이스 생성을 완료하거나 업그레이드 한 후에 활성화하는  것이 좋으므로, 우선은 <Next>를 클릭합니다.

샘플 스키마 설치 여부를 선택할 수 있습니다.

수정할 내용이 없으면 <Next>를 클릭합니다.

할당된 메모리 내역을 확인할 수 있으며, 자동 메모리 관리 사용 여부도 선택할 수 있습니다.

<All Initialization Parameters> 버튼을 클릭하면, 인스턴스 파라미터를 수정할 수 있습니다.

프로세스의 수도 사용할 환경에 맞게 변경할 수 있습니다.

‘Choose from the list of charactersets’을 선택하고, Database Character Set은 'KO16MSWIN949'를 선택합니다.

Default Language는 'American'으로 하고 Default Territory는 'Korea'로 합니다.

운영환경에서 문자와 언어를 선택하는 과정은 매우 중요합니다.

어플리케이션과의 호환성을 고려하여 신중하게 선택해야 합니다.

접속 모드는 기본값인 ‘Dedicated Server Mode’로 두고 <Next>를 클릭합니다.

데이터베이스 저장 영역에 대한 정보를 확인할 수 있습니다.

기본적으로 Redo Log는 4개의 그룹에 50MB 용량으로 구성됩니다.

2개의 인스턴스에서 2개의 그룹으로 50MB를 사용하게 되므로 빈번한 로그 스위차와 대기 이벤트가 발생하기 쉽습니다.


그룹 2개를 더 추가하여 인스턴스별로 3개의 그룹을 사용할 수 있도록 수정하고, 파일 크기는 200MB로 변경해주도록 합니다.

구성이 마무리되었으면 <Next>를 클릭합니다.

‘Create Database’을 체크하고 <Finish>를 클릭합니다.

데이터베이스 생성에 관한 요약 정보가 출력됩니다.

화면을 내려 구성에 대한 요약 정보를 검토할 수 있습니다.

변경할 내용이 없으면 <OK>를 클릭합니다.

데이터베이스 구성이 진행됩니다.

데이터베이스 구성이 완료되었음을 알리는 안내창이 뜹니다.

<Exit>을 클릭합니다.

Database 생성 결과 확인
crsctl stat res -t
[root@rac1 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CRS.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.DATA.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.FRA.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.asm
               ONLINE  ONLINE       rac1                     Started
               ONLINE  ONLINE       rac2                     Started
ora.gsd
               OFFLINE OFFLINE      rac1
               OFFLINE OFFLINE      rac2
ora.net1.network
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.ons
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac2
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       rac1
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       rac1
ora.cvu
      1        ONLINE  ONLINE       rac1
ora.oc4j
      1        ONLINE  ONLINE       rac1
ora.rac1.vip
      1        ONLINE  ONLINE       rac1
ora.rac2.vip
      1        ONLINE  ONLINE       rac2
ora.racdb.db
      1        ONLINE  ONLINE       rac1                     Open
      2        ONLINE  ONLINE       rac2                     Open
ora.scan1.vip
      1        ONLINE  ONLINE       rac2
ora.scan2.vip
      1        ONLINE  ONLINE       rac1
ora.scan3.vip
      1        ONLINE  ONLINE       rac1


VIII. 업그레이드 사전 준비

1. ASM 호환성 업그레이드

ASMCA 실행
grid_env
export LANG=C
asmca

Linux 7 에서는 11g의 OUI에서 한글이 표기가 되지 않으므로 LANG=C 설정으로 언어 표기를 초기화한 후 ASMCA를 실행합니다.

11.2에서 구성된 ASM을 19c에서 사용하려면 ASM 호환성을 최소 11.2.0.2 이상으로 지정해야 합니다.

맨먼저 CRS 디스크 그룹의 호환성을 변경하기 위해 디스크 그룹 목록에서 CRS를 마우스 우측 버튼으로 클릭합니다.

드롭다운 메뉴가 펼쳐지면 'Edit Attributes'를 클릭합니다.

ASM Compatibility를 "11.2.0.2.0"으로 수정하고, <OK>를 클릭합니다.

FRA 디스크 그룹의 호환성을 변경하기 위해 디스크 그룹 목록에서 FRA를 마우스 우측 버튼으로 클릭합니다.

드롭다운 메뉴가 펼쳐지면 'Edit Attributes'를 클릭합니다.

ASM Compatibility를 "11.2.0.2.0"으로 수정하고, <OK>를 클릭합니다.

마지막으로 DATA 디스크 그룹의 호환성을 변경하기 위해 디스크 그룹 목록에서 DATA를 마우스 우측 버튼으로 클릭합니다.

드롭다운 메뉴가 펼쳐지면 'Edit Attributes'를 클릭합니다.

ASM Compatibility를 "11.2.0.2.0"으로 수정하고, <OK>를 클릭합니다.

모든 디스크 그룹의 ASM 호환성을 업그레이드했다면 <Exit>을 클릭하여 ASMCA를 종료합니다.

종료에 대한 확인 창이 뜨면 <Yes>를 클릭합니다.

 

2. 11g PSU 패치 적용

A) OPatch 업데이트

$DB_HOME의 OPatch 업데이트
$DB_HOME/OPatch/opatch version
mv $DB_HOME/OPatch $DB_HOME/OPatch.bak
cp -r $GRID_HOME/OPatch $DB_HOME
chown -R oracle:oinstall $DB_HOME/OPatch
$DB_HOME/OPatch/opatch version
[root@rac1 ~]# $GRID_HOME/OPatch/opatch version
OPatch Version: 11.2.0.3.23

OPatch succeeded.

[root@rac1 ~]# $DB_HOME/OPatch/opatch version
OPatch Version: 11.2.0.3.4

OPatch succeeded.

[root@rac1 ~]# mv $DB_HOME/OPatch $DB_HOME/OPatch.bak

[root@rac1 ~]# cp -r $GRID_HOME/OPatch $DB_HOME

[root@rac1 ~]# chown -R oracle:oinstall $DB_HOME/OPatch

[root@rac1 ~]# $DB_HOME/OPatch/opatch version
OPatch Version: 11.2.0.3.23

OPatch succeeded.
[root@rac2 ~]# $GRID_HOME/OPatch/opatch version
OPatch Version: 11.2.0.3.23

OPatch succeeded.

[root@rac2 ~]# $DB_HOME/OPatch/opatch version
OPatch Version: 11.2.0.3.4

OPatch succeeded.

[root@rac2 ~]# mv $DB_HOME/OPatch $DB_HOME/OPatch.bak

[root@rac2 ~]# cp -r $GRID_HOME/OPatch $DB_HOME

[root@rac2 ~]# chown -R oracle:oinstall $DB_HOME/OPatch

[root@rac2 ~]# $DB_HOME/OPatch/opatch version
OPatch Version: 11.2.0.3.23

OPatch succeeded.


B) 사전 조사

패치 적용 여부 확인
grid_env
opatch lspatches
db_env
opatch lspatches


[racdb1:/home/oracle]> grid_env

[+ASM1:/home/oracle]> opatch lspatches
18370031;Grid Infrastructure Patch Set Update : 11.2.0.4.x (gibugno)

OPatch succeeded.

[+ASM1:/home/oracle]> db_env

[racdb1:/home/oracle]> opatch lspatches
이 Oracle 홈에 설치된 Interim 패치가 없습니다 "/u01/app/oracle/product/11g/db_1".

OPatch succeeded.
[racdb2:/home/oracle]> grid_env

[+ASM2:/home/oracle]> opatch lspatches
18370031;Grid Infrastructure Patch Set Update : 11.2.0.4.x (gibugno)

OPatch succeeded.

[+ASM2:/home/oracle]> db_env

[racdb2:/home/oracle]> opatch lspatches
이 Oracle 홈에 설치된 Interim 패치가 없습니다 "/u01/app/oracle/product/11g/db_1".

OPatch succeeded.


패치 충돌 여부 조사
$GRID_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph <패치 압축 해제 디렉토리>/30501155 -oh $GRID_HOME
$DB_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph <패치 압축 해제 디렉토리>/30501155 -oh $DB_HOME
[racdb1:/home/oracle]> $GRID_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph /media/sf_oracle/11.2/30501155 -oh $GRID_HOME
Oracle Interim 패치 설치 프로그램 버전 11.2.0.3.23
Copyright (c) 2020, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle 홈: /u01/app/11g/grid
중앙 인벤토리: /u01/app/oraInventory
   출처: /u01/app/11g/grid/oraInst.loc
OPatch 버전: 11.2.0.3.23
OUI 버전: 11.2.0.4.0
로그 파일 위치: /u01/app/11g/grid/cfgtoollogs/opatch/opatch2020-03-28_22-58-11오후_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.

[racdb1:/home/oracle]> $DB_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph /media/sf_oracle/11.2/30501155 -oh $DB_HOME
Oracle Interim 패치 설치 프로그램 버전 11.2.0.3.23
Copyright (c) 2020, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle 홈: /u01/app/oracle/product/11g/db_1
중앙 인벤토리: /u01/app/oraInventory
   출처: /u01/app/oracle/product/11g/db_1/oraInst.loc
OPatch 버전: 11.2.0.3.23
OUI 버전: 11.2.0.4.0
로그 파일 위치: /u01/app/oracle/product/11g/db_1/cfgtoollogs/opatch/opatch2020-03-28_22-58-25오후_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.
[racdb1:/home/oracle]> $GRID_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph /media/sf_oracle/11.2/30501155 -oh $GRID_HOME
Oracle Interim 패치 설치 프로그램 버전 11.2.0.3.23
Copyright (c) 2020, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle 홈: /u01/app/11g/grid
중앙 인벤토리: /u01/app/oraInventory
   출처: /u01/app/11g/grid/oraInst.loc
OPatch 버전: 11.2.0.3.23
OUI 버전: 11.2.0.4.0
로그 파일 위치: /u01/app/11g/grid/cfgtoollogs/opatch/opatch2020-03-28_22-58-11오후_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.

[racdb1:/home/oracle]> $DB_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph /media/sf_oracle/11.2/30501155 -oh $DB_HOME
Oracle Interim 패치 설치 프로그램 버전 11.2.0.3.23
Copyright (c) 2020, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle 홈: /u01/app/oracle/product/11g/db_1
중앙 인벤토리: /u01/app/oraInventory
   출처: /u01/app/oracle/product/11g/db_1/oraInst.loc
OPatch 버전: 11.2.0.3.23
OUI 버전: 11.2.0.4.0
로그 파일 위치: /u01/app/oracle/product/11g/db_1/cfgtoollogs/opatch/opatch2020-03-28_22-58-25오후_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.


C) 1번 노드 패치

1번 노드 Database 패치
$DB_HOME/OPatch/opatch auto <패치 압축 해제 디렉토리>/30501155 -oh $DB_HOME
[root@rac1 ~]# $DB_HOME/OPatch/opatch auto /media/sf_oracle/11.2/30501155 -oh $DB_HOME
Executing /u01/app/11g/grid/perl/bin/perl /u01/app/oracle/product/11g/db_1/OPatch/crs/patch11203.pl -patchdir /media/sf_oracle/11.2 -patchn 30501155 -oh /u01/app/oracle/product/11g/db_1 -paramfile /u01/app/11g/grid/crs/install/crsconfig_params

This is the main log file: /u01/app/oracle/product/11g/db_1/cfgtoollogs/opatchauto2020-03-28_23-00-33.log

This file will show your detected configuration and all the steps that opatchauto attempted to do on your system:
/u01/app/oracle/product/11g/db_1/cfgtoollogs/opatchauto2020-03-28_23-00-33.report.log

2020-03-28 23:00:33: Starting Clusterware Patch Setup
Using configuration parameter file: /u01/app/11g/grid/crs/install/crsconfig_params

Stopping RAC /u01/app/oracle/product/11g/db_1 ...
Stopped RAC /u01/app/oracle/product/11g/db_1 successfully

patch /media/sf_oracle/11.2/30501155/29938455/custom/server/29938455  apply successful for home  /u01/app/oracle/product/11g/db_1
patch /media/sf_oracle/11.2/30501155/30298532  apply successful for home  /u01/app/oracle/product/11g/db_1

Starting RAC /u01/app/oracle/product/11g/db_1 ...
Started RAC /u01/app/oracle/product/11g/db_1 successfully

opatch auto succeeded.


1번 노드 Grid 패치
$GRID_HOME/OPatch/opatch auto <패치 압축 해제 디렉토리>/30501155 -oh $GRID_HOME
[root@rac1 ~]# $GRID_HOME/OPatch/opatch auto /media/sf_oracle/11.2/30501155 -oh $GRID_HOME
Executing /u01/app/11g/grid/perl/bin/perl /u01/app/11g/grid/OPatch/crs/patch11203.pl -patchdir /media/sf_oracle/11.2 -patchn 30501155 -oh /u01/app/11g/grid -paramfile /u01/app/11g/grid/crs/install/crsconfig_params

This is the main log file: /u01/app/11g/grid/cfgtoollogs/opatchauto2020-03-28_23-07-30.log

This file will show your detected configuration and all the steps that opatchauto attempted to do on your system:
/u01/app/11g/grid/cfgtoollogs/opatchauto2020-03-28_23-07-30.report.log

2020-03-28 23:07:30: Starting Clusterware Patch Setup
Using configuration parameter file: /u01/app/11g/grid/crs/install/crsconfig_params

Stopping CRS...
Stopped CRS successfully

patch /media/sf_oracle/11.2/30501155/29938455  apply successful for home  /u01/app/11g/grid
patch /media/sf_oracle/11.2/30501155/30298532  apply successful for home  /u01/app/11g/grid
patch /media/sf_oracle/11.2/30501155/29509309  apply successful for home  /u01/app/11g/grid

Starting CRS...
Installing Trace File Analyzer
CRS-4123: Oracle High Availability Services has been started.

opatch auto succeeded.


1번 노드 패치 결과 확인
grid_env
opatch lspatches
db_env
opatch lspatches
[racdb1:/home/oracle]> grid_env

[+ASM1:/home/oracle]> opatch lspatches
30298532;Database Patch Set Update : 11.2.0.4.200114 (30298532)
29509309;ACFS Patch Set Update : 11.2.0.4.190716 (29509309)
29938455;OCW Patch Set Update : 11.2.0.4.191015 (29938455)

OPatch succeeded.

[+ASM1:/home/oracle]> db_env

[racdb1:/home/oracle]> opatch lspatches
30298532;Database Patch Set Update : 11.2.0.4.200114 (30298532)
29938455;OCW Patch Set Update : 11.2.0.4.191015 (29938455)

OPatch succeeded.


D) 2번 노드 패치

2번 노드 Database 패치
$DB_HOME/OPatch/opatch auto <패치 압축 해제 디렉토리>/30501155 -oh $DB_HOME
[root@rac2 ~]# $DB_HOME/OPatch/opatch auto /media/sf_oracle/11.2/30501155 -oh $DB_HOME
Executing /u01/app/11g/grid/perl/bin/perl /u01/app/oracle/product/11g/db_1/OPatch/crs/patch11203.pl -patchdir /media/sf_oracle/11.2 -patchn 30501155 -oh /u01/app/oracle/product/11g/db_1 -paramfile /u01/app/11g/grid/crs/install/crsconfig_params

This is the main log file: /u01/app/oracle/product/11g/db_1/cfgtoollogs/opatchauto2020-03-28_23-20-14.log

This file will show your detected configuration and all the steps that opatchauto attempted to do on your system:
/u01/app/oracle/product/11g/db_1/cfgtoollogs/opatchauto2020-03-28_23-20-14.report.log

2020-03-28 23:20:14: Starting Clusterware Patch Setup
Using configuration parameter file: /u01/app/11g/grid/crs/install/crsconfig_params

Stopping RAC /u01/app/oracle/product/11g/db_1 ...
Stopped RAC /u01/app/oracle/product/11g/db_1 successfully

patch /media/sf_oracle/11.2/30501155/29938455/custom/server/29938455  apply successful for home  /u01/app/oracle/product/11g/db_1
patch /media/sf_oracle/11.2/30501155/30298532  apply successful for home  /u01/app/oracle/product/11g/db_1

Starting RAC /u01/app/oracle/product/11g/db_1 ...
Started RAC /u01/app/oracle/product/11g/db_1 successfully

opatch auto succeeded.


2번 노드 Grid 패치
$GRID_HOME/OPatch/opatch auto <패치 압축 해제 디렉토리>/30501155 -oh $GRID_HOME
[root@rac2 ~]# $GRID_HOME/OPatch/opatch auto /media/sf_oracle/11.2/30501155 -oh $GRID_HOME
Executing /u01/app/11g/grid/perl/bin/perl /u01/app/11g/grid/OPatch/crs/patch11203.pl -patchdir /media/sf_oracle/11.2 -patchn 30501155 -oh /u01/app/11g/grid -paramfile /u01/app/11g/grid/crs/install/crsconfig_params

This is the main log file: /u01/app/11g/grid/cfgtoollogs/opatchauto2020-03-28_23-28-24.log

This file will show your detected configuration and all the steps that opatchauto attempted to do on your system:
/u01/app/11g/grid/cfgtoollogs/opatchauto2020-03-28_23-28-24.report.log

2020-03-28 23:28:24: Starting Clusterware Patch Setup
Using configuration parameter file: /u01/app/11g/grid/crs/install/crsconfig_params

Stopping CRS...
Stopped CRS successfully

patch /media/sf_oracle/11.2/30501155/29938455  apply successful for home  /u01/app/11g/grid
patch /media/sf_oracle/11.2/30501155/30298532  apply successful for home  /u01/app/11g/grid
patch /media/sf_oracle/11.2/30501155/29509309  apply successful for home  /u01/app/11g/grid

Starting CRS...
Installing Trace File Analyzer
CRS-4123: Oracle High Availability Services has been started.

opatch auto succeeded.


2번 노드 패치 결과 확인
grid_env
opatch lspatches
db_env
opatch lspatches
[racdb2:/home/oracle]> grid_env

[+ASM2:/home/oracle]> opatch lspatches
30298532;Database Patch Set Update : 11.2.0.4.200114 (30298532)
29509309;ACFS Patch Set Update : 11.2.0.4.190716 (29509309)
29938455;OCW Patch Set Update : 11.2.0.4.191015 (29938455)

OPatch succeeded.

[+ASM2:/home/oracle]> db_env

[racdb2:/home/oracle]> opatch lspatches
30298532;Database Patch Set Update : 11.2.0.4.200114 (30298532)
29938455;OCW Patch Set Update : 11.2.0.4.191015 (29938455)

OPatch succeeded.


E) Database에 PSU 적용

데이터베이스에 PSU 패치 적용
@?/rdbms/admin/catbundle.sql psu apply
@?/rdbms/admin/utlrp.sql
[racdb1:/home/oracle]> sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Sat Mar 29 00:34:52 2020

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL> @?/rdbms/admin/catbundle.sql psu apply

PL/SQL procedure successfully completed.

... << 중략 >> ...

SQL> PROMPT Skipping Spatial because it is not installed or versions mismatch...
Skipping Spatial because it is not installed or versions mismatch...
SQL> ALTER SESSION SET current_schema = SYS;

Session altered.

SQL> PROMPT Updating registry...
Updating registry...
SQL> INSERT INTO registry$history
  2    (action_time, action,
  3     namespace, version, id,
  4     bundle_series, comments)
  5  VALUES
  6    (SYSTIMESTAMP, 'APPLY',
  7     SYS_CONTEXT('REGISTRY$CTX','NAMESPACE'),
  8     '11.2.0.4',
  9     200114,
 10     'PSU',
 11     'PSU 11.2.0.4.200114');

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SPOOL off
SQL> SET echo off
Check the following log file for errors:
/u01/app/oracle/cfgtoollogs/catbundle/catbundle_PSU_RACDB_APPLY_2020Mar29_00_35_17.log
SQL> @?/rdbms/admin/utlrp.sql

TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_BGN  2020-03-29 00:45:29

1 row selected.

DOC>   The following PL/SQL block invokes UTL_RECOMP to recompile invalid
DOC>   objects in the database. Recompilation time is proportional to the
DOC>   number of invalid objects in the database, so this command may take
DOC>   a long time to execute on a database with a large number of invalid
DOC>   objects.
DOC>
DOC>   Use the following queries to track recompilation progress:
DOC>
DOC>   1. Query returning the number of invalid objects remaining. This
DOC>      number should decrease with time.
DOC>         SELECT COUNT(*) FROM obj$ WHERE status IN (4, 5, 6);
DOC>
DOC>   2. Query returning the number of objects compiled so far. This number
DOC>      should increase with time.
DOC>         SELECT COUNT(*) FROM UTL_RECOMP_COMPILED;
DOC>
DOC>   This script automatically chooses serial or parallel recompilation
DOC>   based on the number of CPUs available (parameter cpu_count) multiplied
DOC>   by the number of threads per CPU (parameter parallel_threads_per_cpu).
DOC>   On RAC, this number is added across all RAC nodes.
DOC>
DOC>   UTL_RECOMP uses DBMS_SCHEDULER to create jobs for parallel
DOC>   recompilation. Jobs are created without instance affinity so that they
DOC>   can migrate across RAC nodes. Use the following queries to verify
DOC>   whether UTL_RECOMP jobs are being created and run correctly:
DOC>
DOC>   1. Query showing jobs created by UTL_RECOMP
DOC>         SELECT job_name FROM dba_scheduler_jobs
DOC>            WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC>
DOC>   2. Query showing UTL_RECOMP jobs that are running
DOC>         SELECT job_name FROM dba_scheduler_running_jobs
DOC>            WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC>#

PL/SQL procedure successfully completed.


TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_END  2020-03-29 00:45:33

1 row selected.

DOC> The following query reports the number of objects that have compiled
DOC> with errors.
DOC>
DOC> If the number is higher than expected, please examine the error
DOC> messages reported with each object (using SHOW ERRORS) to see if they
DOC> point to system misconfiguration or resource constraints that must be
DOC> fixed before attempting to recompile these objects.
DOC>#

OBJECTS WITH ERRORS
-------------------
                  0

1 row selected.

DOC> The following query reports the number of errors caught during
DOC> recompilation. If this number is non-zero, please query the error
DOC> messages in the table UTL_RECOMP_ERRORS to see if any of these errors
DOC> are due to misconfiguration or resource constraints that must be
DOC> fixed before objects can compile successfully.
DOC>#

ERRORS DURING RECOMPILATION
---------------------------
                          0

1 row selected.


Function created.


PL/SQL procedure successfully completed.


Function dropped.


PL/SQL procedure successfully completed.


데이터베이스 PSU 패치 결과 확인
select ACTION_TIME, ACTION, VERSION, COMMENTS from REGISTRY$HISTORY;
SQL> col ACTION_TIME form a30
SQL> col ACTION form a10
SQL> col VERSION form a10
SQL> col COMMENTS form a20
SQL> select ACTION_TIME, ACTION, VERSION, COMMENTS from REGISTRY$HISTORY;

ACTION_TIME                    ACTION     VERSION    COMMENTS
------------------------------ ---------- ---------- --------------------
13/08/24 12:03:45.119862       APPLY      11.2.0.4   Patchset 11.2.0.2.0
20/03/27 23:01:46.153471       APPLY      11.2.0.4   Patchset 11.2.0.2.0
20/03/29 00:37:36.930710       APPLY      11.2.0.4   PSU 11.2.0.4.200114

3 rows selected.

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options


IX. 19c Grid Infrastructure설치 및 클러스터 업그레이드

vi ~oracle/.bash_profie 로 $GRID_HOME 수정
# export GRID_HOME=/u01/app/11g/grid
export GRID_HOME=/u01/app/19c/grid

프로파일에 기존 11g의 경로가 아닌 19c의 경로를 인식할 수 있도록 $GRID_HOME 을 변경합니다.

Grid 압축 해제 및 설치 스크립트 실행
export GRID_HOME=/u01/app/19c/grid
mkdir -p $GRID_HOME
unzip <zip 파일이 있는 경로>/LINUX.X64_193000_grid_home.zip -d $GRID_HOME
cd $GRID_HOME
./gridSetup.sh
# ./gridSetup.sh -applyRU <RU 압축 해제 경로>
[racdb1:/home/oracle]> export GRID_HOME=/u01/app/19c/grid

[racdb1:/home/oracle]> mkdir -p $GRID_HOME

[racdb1:/home/oracle]> unzip /media/sf_oracle/19.3/LINUX.X64_193000_grid_home.zip -d $GRID_HOME
Archive:  /media/sf_oracle/19.3/LINUX.X64_193000_grid_home.zip
... << 중략 >> ...
  /u01/app/19c/grid/javavm/lib/security/README.txt -> ../../../javavm/jdk/jdk8/lib/security/README.txt
  /u01/app/19c/grid/javavm/lib/security/java.security -> ../../../javavm/jdk/jdk8/lib/security/java.security
  /u01/app/19c/grid/jdk/jre/lib/amd64/server/libjsig.so -> ../libjsig.so

[racdb1:/home/oracle]> cd $GRID_HOME

[racdb1:/u01/app/19c/grid]> ./gridSetup.sh

1번 노드에 oracle 유저로 접속한 후 $GRID_HOME 디렉토리를 생성하고, 해당 경로에 Grid Infrastructure(이하 GI) 설치 파일의 압축을 해제합니다.

Release Update를 적용하고자 할 경우에는 applyRU 옵션을 사용하면, 한번에 패치와 설치를 진행할 수 있습니다.

기존 RAC 클러스터를 업그레이드 하기 위해 'Oracle Grid Infrastructure 업그레이드'을 선택한 후 <다음> 버튼을 클릭합니다

모든 노드가 선택되어 있는지 확인하고 <다음>을 클릭합니다.

별도의 EM 시스템에 등록하지 않는다면, 'EM(Enterprise Manager) Cloud Control에 등록'이 해제된 상태(기본)에서 <다음> 버튼을 클릭합니다.

Oracle Base 경로를 확인하는 단계입니다.

정상적으로 지정이 되었으면 <다음> 버튼을 클릭합니다.

클러스터 구성 과정 중에 root 권한으로 스크립트를 실행하는 과정이 있습니다.

'자동으로 구성 스크립트 실행'을 체크하고 '"루트" 사용자 인증서 사용'을 선택한 후 root 계정의 비밀번호를 입력하고 <다음> 버튼을 클릭합니다.

자동으로 구성 스크립트를 실행하기 위해서는 모든 노드의 root 계정 비밀번호가 동일해야 합니다.

만약 노드간에 root 계정의 암호가 다르거나, 수동으로 설치를 진행하고자 할 경우에는 아무 것도 선택하지 않고 다음 단계로 진행하면 수동으로 스크립트 실행을 할 수 있습니다.

모든 노드의 root 스크립트를 batch 처리로 수행하기 위해 지정하는 단계입니다.

노드가 많을 경우, 최대 3개의 배치로 분할하여 업그레이드를 수행할 수 있습니다.

OUI를 수행하는 노드를 '일괄 처리 1'에 두고 <다음>을 클릭합니다.

설치에 앞서 서버에 대한 필요 조건 검사가 실행됩니다.

이 단계에서 누락되거나 잘못된 설정이 있을 경우, 수정하고 설치를 진행해야 합니다.

cvuqdisk 패키지와 관련된 오류는 자동으로 수정할 수 있습니다.

<수정 및 다시 확인> 버튼을 클릭합니다.

수정 스크립트와 해당 스크립트를 수행할 노드에 대한 정보를 확인할 수 있습니다.

root 유저로 fixup 스크립트 수행
/tmp/GridSetupActions<YYYY-MM-DD_HH_MI_SS>/CVU_19.0.0.0.0_oracle/runfixup.sh
[root@rac1 ~]# /tmp/GridSetupActions2020-03-30_11-33-09AM/CVU_19.0.0.0.0_oracle/runfixup.sh
All Fix-up operations were completed successfully.
[root@rac2 ~]# /tmp/GridSetupActions2020-03-30_11-33-09AM/CVU_19.0.0.0.0_oracle/runfixup.sh
All Fix-up operations were completed successfully.

가이드에 따라서 root 계정으로 fixup 스크립트를 실행합니다.

모두 마친 후 OUI 화면으로 돌아와 <확인>을 클릭하면 재검사를 수행합니다.

ACFS 드라이버 호환성에 대한 문제가 남아있습니다.

Oracle Linux 7.6 이상 버전에 대한 19.3 버전의 버그로 19.4에서 해결된 이슈입니다. (문서 1369107.1)

해당 기능은 사용하지 않을 것이므로 '모두 무시'를 체크하고 <다음>을 클릭합니다.

업그레이드를 진행하기 위해 <예>를 클릭합니다.

업그레이드를 진행하기 전에 구성에 대한 요약 정보를 검토합니다.

수정할 사항이 있으면 해당 항목 옆에 '편집'을 클릭하여 변경하면 됩니다.

정확하게 모든 사항이 선택되었으면 <제출> 버튼을 클릭합니다.

로컬 노드와 원격 노드에 GI 설치가 진행됩니다.

로컬 노드에는 GRID_HOME 디렉토리에 설치 파일의 압축이 이미 풀려 있으므로, 파일 복제 과정은 생략됩니다.

원격 노드에는 Private 망의 SSH 연결을 통해 설치 파일이 전송되며 GRID_HOME 디렉토리에 파일 복제가 진행됩니다.

설치된 소프트웨어에 대한 등록을 진행합니다.

클러스터 구성 스크립트를 자동으로 실행할 것인지 뭍는 창이 뜨면 <예>를 클릭합니다.

설치 과정 중에 입력한 root 사용자의 비밀번호를 이용하여 자동으로 스크립트가 실행됩니다.

인벤토리 정보를 갱신과 클러스터 검증을 수행합니다.

GI 설치와 구성이 완료되면 <닫기> 버튼을 클릭하여 설치 프로그램을 종료합니다.

X. 19c Database 설치

vi ~oracle/.bash_profie 로 $DB_HOME 수정
export DB_HOME=$ORACLE_BASE/product/19c/db_1

프로파일에 기존 11g의 경로가 아닌 19c의 경로를 인식할 수 있도록 $DB_HOME 을 변경합니다.

Database 압축 해제 및 설치 스크립트 실행
export DB_HOME=$ORACLE_BASE/product/19c/db_1
export ORACLE_HOME=$DB_HOME
mkdir -p $DB_HOME
unzip <zip 파일이 있는 경로>/LINUX.X64_193000_db_home.zip -d $DB_HOME
cd $DB_HOME
./runInstaller
# ./runInstaller -applyRU <RU 압축 해제 경로>
[racdb1:/home/oracle]> export DB_HOME=$ORACLE_BASE/product/19c/db_1

[racdb1:/home/oracle]> export ORACLE_HOME=$DB_HOME

[racdb1:/home/oracle]> mkdir -p $DB_HOME

[racdb1:/home/oracle]> unzip /media/sf_oracle/19.3/LINUX.X64_193000_db_home.zip -d $DB_HOME

[racdb1:/home/oracle]> cd $DB_HOME

[racdb1:/u01/app/oracle/product/19c/db_1]> ./runInstaller

oracle 유저로 1번 노드에 접속해서 $DB_HOME 디렉토리를 생성하고, 해당 경로에 설치 파일의 압축을 해제합니다.

GI 설치와 동일하게 1번 또는 대표 노드 한 곳에 압축을 해제하고, 그곳에서 설치를 진행하면 됩니다.

Release Update를 적용하고자 할 경우에는 applyRU 옵션을 사용하면, 한번에 패치와 설치를 진행할 수 있습니다.

소프트웨어만 설치한 후에 DBUA로 업그레이드를 할 예정이므로 '소프트웨어만 설치'를 선택하고 <다음> 버튼을 클릭합니다.

설치 옵션은 'Oracle Real Application Clusters 데이터베이스 설치'를 선택하고 <다음> 버튼을 클릭합니다.

RAC 모든 노드에 설치할 것이므로 rac1과 rac2가 모두 체크되었는지 확인합니다.

SSH 접속은 Grid 설치 시에 확인된 것이므로, 변경할 사항이 없다면 <다음>을 클릭합니다.

데이터베이스 버전은 'Enterprise Edition'를 선택합니다.

RAC는 Enterprise Edition만 설치 가능합니다.

버전 선택 후 <다음> 버튼을 클릭합니다.

소프트웨어 설치 위치인 Oracle Base와 소프트웨어 위치 경로(ORACLE_HOME)가 정상적으로 인식되었는지 확인하고 <다음> 버튼을 클릭합니다.

OS 인증을 위한 OS 그룹을 설정하는 단계입니다.

오라클의 권고사항에 따라 그룹을 세분화하였지만, 정책에 따라 관리 편의상 1개의 그룹(대부분 dba)으로 운영하는 경우가 많습니다.

적절한 OS 그룹과 맵핑이 된다면 <다음>을 클릭합니다.

소프트웨어 구성 중에  root 권한으로 스크립트를 실행하는 과정이 있습니다.

'자동으로 구성 스크립트 실행'을 체크하고 '"루트" 사용자 인증서 사용'을 선택한 후 root 계정의 비밀번호를 입력하고 <다음> 버튼을 클릭합니다.

자동으로 구성 스크립트를 실행하기 위해서는 모든 노드의 root 계정 비밀번호가 동일해야 합니다.

만약 노드간에 root 계정의 암호가 다르거나, 수동으로 설치를 진행하고자 할 경우에는 아무 것도 선택하지 않고 다음 단계로 진행하면 수동으로 스크립트 실행하게 됩니다.

설치에 앞서 서버에 대한 필요 조건 검사가 실행됩니다.

GI 설치를 하면서 검증 및 수정이 완료되었다면, 자동으로 다음 단계로 넘어갑니다.

본격적인 설치에 앞서 구성될 환경에 대한 요약 정보를 검토합니다.

수정할 사항이 있으면 해당 항목 옆에 '편집'을 클릭하여 변경하면 됩니다.

정확하게 모든 사항이 선택되었으면 <설치> 버튼을 클릭합니다.

로컬 노드에 database의 설치가 진행됩니다.

이미 설치될 경로에 압축을 해제하였으므로, 이전 버전에 비해 빠르게 작업이 진행됩니다.

원격 노드로 Database 파일을 복사하게 됩니다.

GI와 동일하게 Private 네트워크의 SSH를 이용하여 파일이 전송됩니다.

소프트웨어 설치 후에 위치 정보를 설정합니다.

설치 과정의 마지막 단계로 루트 스크립트를 자동으로 실행할 것인지 뭍는 메시지가 나옵니다.

<예> 버튼을 클릭하면, 자동으로 루트 스크립트 실행이 진행됩니다.

Database 설치가 완료되면 <닫기> 버튼을 클릭하여 설치 프로그램을 종료합니다.

XI. 19c Release Update 패치

1. 패치 전 준비

A) 환경 변수 설정

root 계정 환경 변수 설정
export GRID_HOME=/u01/app/19c/grid
export ORACLE_BASE=/u01/app/oracle
export DB_HOME=$ORACLE_BASE/product/19c/db_1
[root@rac1 ~]# export GRID_HOME=/u01/app/19c/grid

[root@rac1 ~]# export ORACLE_BASE=/u01/app/oracle

[root@rac1 ~]# export DB_HOME=$ORACLE_BASE/product/19c/db_1
[root@rac2 ~]# export GRID_HOME=/u01/app/19c/grid

[root@rac2 ~]# export ORACLE_BASE=/u01/app/oracle

[root@rac2 ~]# export DB_HOME=$ORACLE_BASE/product/19c/db_1


B) OPatch 업데이트

$GRID_HOME의 OPatch 업데이트
$GRID_HOME/OPatch/opatch version
mv $GRID_HOME/OPatch $GRID_HOME/OPatch.old
unzip <opatch 다운로드 디렉토리>/p6880880_190000_Linux-x86-64.zip -d $GRID_HOME
chown -R oracle:oinstall $GRID_HOME/OPatch
$GRID_HOME/OPatch/opatch version
[root@rac1 ~]# $GRID_HOME/OPatch/opatch version
OPatch Version: 12.2.0.1.17

OPatch succeeded.

[root@rac1 ~]# mv $GRID_HOME/OPatch $GRID_HOME/OPatch.old

[root@rac1 ~]# unzip /media/sf_oracle/19.6/p6880880_190000_Linux-x86-64.zip -d $GRID_HOME
Archive:  /media/sf_oracle/19.6/p6880880_190000_Linux-x86-64.zip
... << 중략 >> ...
  inflating: /u01/app/19c/grid/OPatch/opatchauto
  inflating: /u01/app/19c/grid/OPatch/operr
  inflating: /u01/app/19c/grid/OPatch/opatchauto.cmd

[root@rac1 ~]# chown -R oracle:oinstall $GRID_HOME/OPatch

[root@rac1 ~]# $GRID_HOME/OPatch/opatch version
OPatch Version: 12.2.0.1.19

OPatch succeeded.
[root@rac2 ~]# $GRID_HOME/OPatch/opatch version
OPatch Version: 12.2.0.1.17

OPatch succeeded.

[root@rac2 ~]# mv $GRID_HOME/OPatch $GRID_HOME/OPatch.old

[root@rac2 ~]# unzip /media/sf_oracle/19.6/p6880880_190000_Linux-x86-64.zip -d $GRID_HOME
Archive:  /media/sf_oracle/19.6/p6880880_190000_Linux-x86-64.zip
... << 중략 >> ...
  inflating: /u01/app/19c/grid/OPatch/opatchauto
  inflating: /u01/app/19c/grid/OPatch/operr
  inflating: /u01/app/19c/grid/OPatch/opatchauto.cmd

[root@rac2 ~]# chown -R oracle:oinstall $GRID_HOME/OPatch

[root@rac2 ~]# $GRID_HOME/OPatch/opatch version
OPatch Version: 12.2.0.1.19

OPatch succeeded.


$DB_HOME의 OPatch 업데이트
$DB_HOME/OPatch/opatch version
mv $DB_HOME/OPatch $DB_HOME/OPatch.old
cp -r $GRID_HOME/OPatch $DB_HOME/
chown -R oracle:oinstall $DB_HOME/OPatch
$DB_HOME/OPatch/opatch version
[root@rac1 ~]# $DB_HOME/OPatch/opatch version
OPatch Version: 12.2.0.1.17

OPatch succeeded.

[root@rac1 ~]# mv $DB_HOME/OPatch $DB_HOME/OPatch.old

[root@rac1 ~]# cp -r $GRID_HOME/OPatch $DB_HOME/

[root@rac1 ~]# chown -R oracle:oinstall $DB_HOME/OPatch

[root@rac1 ~]# $DB_HOME/OPatch/opatch version
OPatch Version: 12.2.0.1.19

OPatch succeeded.
[root@rac2 ~]# $DB_HOME/OPatch/opatch version
OPatch Version: 12.2.0.1.17

OPatch succeeded.

[root@rac2 ~]# mv $DB_HOME/OPatch $DB_HOME/OPatch.old

[root@rac2 ~]# cp -r $GRID_HOME/OPatch $DB_HOME/

[root@rac2 ~]# chown -R oracle:oinstall $DB_HOME/OPatch

[root@rac2 ~]# $DB_HOME/OPatch/opatch version
OPatch Version: 12.2.0.1.19

OPatch succeeded.


2. 1번 노드 패치

A) 1번 노드 Grid 패치

1번 노드 Grid 패치 적용
$GRID_HOME/OPatch/opatchauto apply <패치 압축 해제 디렉토리>/30501910
[root@rac1 ~]# $GRID_HOME/OPatch/opatchauto apply /media/sf_oracle/19.6/30501910

OPatchauto session is initiated at Thu Mar 29 10:46:34 2020

System initialization log file is /u01/app/19c/grid/cfgtoollogs/opatchautodb/systemconfig2020-03-29_10-46-50AM.log.

세션 로그 파일은 /u01/app/19c/grid/cfgtoollogs/opatchauto/opatchauto2020-03-29_10-48-10AM.log입니다.
이 세션의 ID는 1PM4입니다.

Executing OPatch prereq operations to verify patch applicability on home /u01/app/19c/grid
Patch applicability verified successfully on home /u01/app/19c/grid


Bringing down CRS service on home /u01/app/19c/grid
CRS service brought down successfully on home /u01/app/19c/grid


Start applying binary patch on home /u01/app/19c/grid
Binary patch applied successfully on home /u01/app/19c/grid


Starting CRS service on home /u01/app/19c/grid
CRS service started successfully on home /u01/app/19c/grid

OPatchAuto를 성공했습니다.

--------------------------------Summary--------------------------------

Patching is completed successfully. Please find the summary as follows:

Host:rac1
CRS Home:/u01/app/19c/grid
Version:19.0.0.0.0
Summary:

==Following patches were SUCCESSFULLY applied:

Patch: /media/sf_oracle/19.6/30501910/30489227
Log: /u01/app/19c/grid/cfgtoollogs/opatchauto/core/opatch/opatch2020-03-29_10-53-49오전_1.log

Patch: /media/sf_oracle/19.6/30501910/30489632
Log: /u01/app/19c/grid/cfgtoollogs/opatchauto/core/opatch/opatch2020-03-29_10-53-49오전_1.log

Patch: /media/sf_oracle/19.6/30501910/30557433
Log: /u01/app/19c/grid/cfgtoollogs/opatchauto/core/opatch/opatch2020-03-29_10-53-49오전_1.log

Patch: /media/sf_oracle/19.6/30501910/30655595
Log: /u01/app/19c/grid/cfgtoollogs/opatchauto/core/opatch/opatch2020-03-29_10-53-49오전_1.log



Following homes are skipped during patching as patches are not applicable:

/u01/app/oracle/product/11g/db_1



OPatchauto session completed at Thu Mar 29 11:10:36 2020
Time taken to complete the session 24 minutes, 2 seconds


B) 1번 노드 DB 패치

1번 노드 DB 패치 적용
$DB_HOME/OPatch/opatchauto apply <패치 압축 해제 디렉토리>/30501910 -oh $DB_HOME
[root@rac1 ~]# $DB_HOME/OPatch/opatchauto apply /media/sf_oracle/19.6/30501910 -oh $DB_HOME

OPatchauto session is initiated at Thu Mar 29 11:41:40 2020

System initialization log file is /u01/app/oracle/product/19c/db_1/cfgtoollogs/opatchautodb/systemconfig2020-03-29_11-41-58AM.log.

세션 로그 파일은 /u01/app/oracle/product/19c/db_1/cfgtoollogs/opatchauto/opatchauto2020-03-29_11-44-14AM.log입니다.
이 세션의 ID는 HQDF입니다.

Executing OPatch prereq operations to verify patch applicability on home /u01/app/oracle/product/19c/db_1
Patch applicability verified successfully on home /u01/app/oracle/product/19c/db_1


Verifying SQL patch applicability on home /u01/app/oracle/product/19c/db_1
No step execution required.........


Preparing to bring down database service on home /u01/app/oracle/product/19c/db_1
No step execution required.........


Performing prepatch operation on home /u01/app/oracle/product/19c/db_1
Perpatch operation completed successfully on home /u01/app/oracle/product/19c/db_1


Start applying binary patch on home /u01/app/oracle/product/19c/db_1
Binary patch applied successfully on home /u01/app/oracle/product/19c/db_1


Performing postpatch operation on home /u01/app/oracle/product/19c/db_1
Postpatch operation completed successfully on home /u01/app/oracle/product/19c/db_1


Preparing home /u01/app/oracle/product/19c/db_1 after database service restarted
No step execution required.........


Trying to apply SQL patch on home /u01/app/oracle/product/19c/db_1
No step execution required.........

OPatchAuto를 성공했습니다.

--------------------------------Summary--------------------------------

Patching is completed successfully. Please find the summary as follows:

Host:rac1
RAC Home:/u01/app/oracle/product/19c/db_1
Version:19.0.0.0.0
Summary:

==Following patches were SKIPPED:

Patch: /media/sf_oracle/19.6/30501910/30489632
Reason: This patch is not applicable to this specified target type - "rac_database"

Patch: /media/sf_oracle/19.6/30501910/30655595
Reason: This patch is not applicable to this specified target type - "rac_database"


==Following patches were SUCCESSFULLY applied:

Patch: /media/sf_oracle/19.6/30501910/30489227
Log: /u01/app/oracle/product/19c/db_1/cfgtoollogs/opatchauto/core/opatch/opatch2020-03-29_11-46-16오전_1.log

Patch: /media/sf_oracle/19.6/30501910/30557433
Log: /u01/app/oracle/product/19c/db_1/cfgtoollogs/opatchauto/core/opatch/opatch2020-03-29_11-46-16오전_1.log



OPatchauto session completed at Thu Mar 29 11:53:28 2020
Time taken to complete the session 11 minutes, 48 seconds


C) 1번 노드 패치 결과 확인

1번 노드 패치 결과 확인
grid_env
opatch lspatches
db_env
opatch lspatches
[racdb1:/home/oracle]> grid_env

[+ASM1:/home/oracle]> opatch lspatches
30655595;TOMCAT RELEASE UPDATE 19.0.0.0.0 (30655595)
30557433;Database Release Update : 19.6.0.0.200114 (30557433)
30489632;ACFS RELEASE UPDATE 19.6.0.0.0 (30489632)
30489227;OCW RELEASE UPDATE 19.6.0.0.0 (30489227)

OPatch succeeded.

[+ASM1:/home/oracle]> db_env

[racdb1:/home/oracle]> opatch lspatches
30298532;Database Patch Set Update : 11.2.0.4.200114 (30298532)
29938455;OCW Patch Set Update : 11.2.0.4.191015 (29938455)

OPatch succeeded.


3. 2번 노드 패치

A) 2번 노드 Grid 패치

2번 노드 Grid 패치 적용
$GRID_HOME/OPatch/opatchauto apply <패치 압축 해제 디렉토리>/30501910
[root@rac2 ~]# $GRID_HOME/OPatch/opatchauto apply /media/sf_oracle/19.6/30501910

OPatchauto session is initiated at Thu Mar 29 11:54:28 2020

System initialization log file is /u01/app/19c/grid/cfgtoollogs/opatchautodb/systemconfig2020-03-29_11-54-41AM.log.

세션 로그 파일은 /u01/app/19c/grid/cfgtoollogs/opatchauto/opatchauto2020-03-29_11-56-31AM.log입니다.
이 세션의 ID는 CA8I입니다.

Executing OPatch prereq operations to verify patch applicability on home /u01/app/19c/grid
Patch applicability verified successfully on home /u01/app/19c/grid


Bringing down CRS service on home /u01/app/19c/grid
CRS service brought down successfully on home /u01/app/19c/grid


Start applying binary patch on home /u01/app/19c/grid
Binary patch applied successfully on home /u01/app/19c/grid


Starting CRS service on home /u01/app/19c/grid
CRS service started successfully on home /u01/app/19c/grid

OPatchAuto를 성공했습니다.

--------------------------------Summary--------------------------------

Patching is completed successfully. Please find the summary as follows:

Host:rac2
CRS Home:/u01/app/19c/grid
Version:19.0.0.0.0
Summary:

==Following patches were SUCCESSFULLY applied:

Patch: /media/sf_oracle/19.6/30501910/30489227
Log: /u01/app/19c/grid/cfgtoollogs/opatchauto/core/opatch/opatch2020-03-29_12-02-42오후_1.log

Patch: /media/sf_oracle/19.6/30501910/30489632
Log: /u01/app/19c/grid/cfgtoollogs/opatchauto/core/opatch/opatch2020-03-29_12-02-42오후_1.log

Patch: /media/sf_oracle/19.6/30501910/30557433
Log: /u01/app/19c/grid/cfgtoollogs/opatchauto/core/opatch/opatch2020-03-29_12-02-42오후_1.log

Patch: /media/sf_oracle/19.6/30501910/30655595
Log: /u01/app/19c/grid/cfgtoollogs/opatchauto/core/opatch/opatch2020-03-29_12-02-42오후_1.log



Following homes are skipped during patching as patches are not applicable:

/u01/app/oracle/product/11g/db_1



OPatchauto session completed at Thu Mar 29 12:21:39 2020
Time taken to complete the session 27 minutes, 11 seconds


B) 2번 노드 DB 패치

2번 노드 DB 패치 적용
$DB_HOME/OPatch/opatchauto apply <패치 압축 해제 디렉토리>/30501910 -oh $DB_HOME
[root@rac2 ~]# $DB_HOME/OPatch/opatchauto apply /media/sf_oracle/19.6/30501910 -oh $DB_HOME

OPatchauto session is initiated at Thu Mar 29 12:35:59 2020

System initialization log file is /u01/app/oracle/product/19c/db_1/cfgtoollogs/opatchautodb/systemconfig2020-03-29_12-36-19PM.log.

세션 로그 파일은 /u01/app/oracle/product/19c/db_1/cfgtoollogs/opatchauto/opatchauto2020-03-29_12-38-59PM.log입니다.
이 세션의 ID는 MEP1입니다.

Executing OPatch prereq operations to verify patch applicability on home /u01/app/oracle/product/19c/db_1
Patch applicability verified successfully on home /u01/app/oracle/product/19c/db_1


Verifying SQL patch applicability on home /u01/app/oracle/product/19c/db_1
No step execution required.........


Preparing to bring down database service on home /u01/app/oracle/product/19c/db_1
No step execution required.........


Performing prepatch operation on home /u01/app/oracle/product/19c/db_1
Perpatch operation completed successfully on home /u01/app/oracle/product/19c/db_1


Start applying binary patch on home /u01/app/oracle/product/19c/db_1
Binary patch applied successfully on home /u01/app/oracle/product/19c/db_1


Performing postpatch operation on home /u01/app/oracle/product/19c/db_1
Postpatch operation completed successfully on home /u01/app/oracle/product/19c/db_1


Preparing home /u01/app/oracle/product/19c/db_1 after database service restarted
No step execution required.........


Trying to apply SQL patch on home /u01/app/oracle/product/19c/db_1
No step execution required.........

OPatchAuto를 성공했습니다.

--------------------------------Summary--------------------------------

Patching is completed successfully. Please find the summary as follows:

Host:rac2
RAC Home:/u01/app/oracle/product/19c/db_1
Version:19.0.0.0.0
Summary:

==Following patches were SKIPPED:

Patch: /media/sf_oracle/19.6/30501910/30489632
Reason: This patch is not applicable to this specified target type - "rac_database"

Patch: /media/sf_oracle/19.6/30501910/30655595
Reason: This patch is not applicable to this specified target type - "rac_database"


==Following patches were SUCCESSFULLY applied:

Patch: /media/sf_oracle/19.6/30501910/30489227
Log: /u01/app/oracle/product/19c/db_1/cfgtoollogs/opatchauto/core/opatch/opatch2020-03-29_12-40-58오후_1.log

Patch: /media/sf_oracle/19.6/30501910/30557433
Log: /u01/app/oracle/product/19c/db_1/cfgtoollogs/opatchauto/core/opatch/opatch2020-03-29_12-40-58오후_1.log



OPatchauto session completed at Thu Mar 29 12:49:21 2020
Time taken to complete the session 13 minutes, 23 seconds


C) 2번 노드 패치 결과 확인

2번 노드 패치 결과 확인
grid_env
opatch lspatches
db_env
opatch lspatches
[racdb2:/home/oracle]> grid_env

[+ASM2:/home/oracle]> opatch lspatches
30655595;TOMCAT RELEASE UPDATE 19.0.0.0.0 (30655595)
30557433;Database Release Update : 19.6.0.0.200114 (30557433)
30489632;ACFS RELEASE UPDATE 19.6.0.0.0 (30489632)
30489227;OCW RELEASE UPDATE 19.6.0.0.0 (30489227)

OPatch succeeded.

[+ASM2:/home/oracle]> db_env

[racdb2:/home/oracle]> opatch lspatches
30298532;Database Patch Set Update : 11.2.0.4.200114 (30298532)
29938455;OCW Patch Set Update : 11.2.0.4.191015 (29938455)

OPatch succeeded.


XII. Database 업그레이드

1. OLAP 카달로그 삭제

sys 계정으로 DB에서 수행
@?/olap/admin/catnoamd.sql
purge dba_recyclebin;
[oracle@orcl ~]$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0/db_1

[oracle@orcl ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Feb 28 20:38:25 2020

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> @?/olap/admin/catnoamd.sql

Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Package dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


Synonym dropped.


View dropped.


View dropped.


Type dropped.


Type dropped.


View dropped.


Type dropped.


Type dropped.


Type dropped.


Type dropped.


PL/SQL procedure successfully completed.


Role dropped.


PL/SQL procedure successfully completed.


1 row deleted.

SQL> purge dba_recyclebin;

DBA Recyclebin purged.

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options



2. EM Repository 삭제

oracle 유저로 OS에서 수행
cp <ORACLE_HOME(19c)>/rdbms/admin/emremove.sql <ORACLE_HOME(11g)>/rdbms/admin/
emctl stop dbconsole
[oracle@orcl ~]$ cp /u01/app/oracle/product/19c/db_1/rdbms/admin/emremove.sql /u01/app/oracle/product/11.2.0/db_1/rdbms/admin/

[oracle@orcl ~]$ emctl stop dbconsole
Oracle Enterprise Manager 11g Database Control Release 11.2.0.4.0
Copyright (c) 1996, 2013 Oracle Corporation.  All rights reserved.
https://dbup:1158/em/console/aboutApplication
Stopping Oracle Enterprise Manager 11g Database Control ...
 ...  Stopped.


sys 계정으로 DB에서 수행
SET ECHO ON;
SET SERVEROUTPUT ON;
@?/rdbms/admin/emremove.sql
[oracle@orcl ~]$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0/db_1

[oracle@orcl ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Feb 28 20:43:02 2020

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> SET ECHO ON;
SQL> SET SERVEROUTPUT ON;
SQL> @?/rdbms/admin/emremove.sql
SQL> Rem
SQL> Rem $Header: rdbms/admin/emremove.sql /main/5 2017/05/28 22:46:05 stanaya Exp $
SQL> Rem
SQL> Rem emremove.sql
SQL> Rem
SQL> Rem Copyright (c) 2012, 2017, Oracle and/or its affiliates.
SQL> Rem All rights reserved.
SQL> Rem
SQL> Rem    NAME
SQL> Rem emremove.sql - This script removes EM Schema from RDBMS
SQL> Rem
SQL> Rem    DESCRIPTION
SQL> Rem This script will drop the Oracle Enterprise Manager related schemas and objects.
SQL> Rem This script might take few minutes to complete; it has 6 phases to complete the process.
SQL> Rem The script may take longer if you have SYSMAN and related sessions are active
SQL> Rem from Oracle Enterprise Manager(OEM) application.
SQL> Rem
SQL> Rem    NOTES
SQL> Rem Please do following two steps  before running this script
SQL> Rem set serveroutput on
SQL> Rem set echo on
SQL> Rem
SQL> Rem
SQL> Rem
SQL> Rem    RECOMMENDATIONS
SQL> Rem
SQL> Rem You are recommended to shutdown DB Control application immediately before running this
SQL> Rem OEM repository removal script.
SQL> Rem To shutdown DB Control application, you need to run emctl stop dbconsole
SQL> Rem
SQL> Rem
SQL> Rem Steps to be performed manually (after this script is run)
SQL> Rem
SQL> Rem
SQL> Rem Please note that you need to remove the DB Control Configuration Files
SQL> Rem manually to remove DB Control completly; remove the following
SQL> Rem directories from your filesystem
SQL> Rem <ORACLE_HOME>/<hostname_sid>
SQL> Rem <ORACLE_HOME>/oc4j/j2ee/OC4J_DBConsole_<hostname>_<sid>
SQL> Rem
SQL> Rem If the dbcontrol is upgraded from lower version, for example, from 10.2.0.3 to 10.2.0.4,
SQL> Rem then the following directory also needs to be removed from the file system.
SQL> Rem <ORACLE_HOME>/<hostname_sid>.upgrade
SQL> Rem <ORACLE_HOME>/oc4j/j2ee/OC4J_DBConsole_<hostname>_<sid>.upgrade
SQL> Rem
SQL> Rem On Microsoft platforms, also delete the DB Console service, generally with name
SQL> Rem OracleDBConsole<sid>
SQL> Rem
SQL> Rem #############################################################################################
SQL> Rem
SQL> Rem
SQL> Rem    BEGIN SQL_FILE_METADATA
SQL> Rem    SQL_SOURCE_FILE: rdbms/admin/emremove.sql
SQL> Rem    SQL_SHIPPED_FILE: rdbms/admin/emremove.sql
SQL> Rem    SQL_PHASE: UTILITY
SQL> Rem    SQL_STARTUP_MODE: NORMAL
SQL> Rem    SQL_IGNORABLE_ERRORS: NONE
SQL> Rem    END SQL_FILE_METADATA
SQL> Rem
SQL> Rem    MODIFIED   (MM/DD/YY)
SQL> Rem    spramani    01/17/17 - fix for 24518751
SQL> Rem    spramani    08/03/16 - fix # 24330891
SQL> Rem    spramani    07/20/12 - more fix
SQL> Rem    spramani    12/21/11 - Created
SQL> Rem
SQL>
SQL>
SQL> DEFINE EM_REPOS_USER ="SYSMAN"
SQL> DEFINE LOGGING = "VERBOSE"
SQL>
SQL> declare
  2
  3    l_username dba_role_privs.grantee%type;
  4    l_user_name dba_role_privs.grantee%type;
  5    l_sql varchar2(1024);
  6    l_sysman_user number;
  7    l_mgmt_users_src number;
  8    l_sid number;
  9    l_serial number;
 10    err number;
 11    err_msg varchar2(128);
 12    c number;
 13    l_removejobs varchar2(1024);
 14    l_set_context varchar2(1024);
 15    l_client varchar2(16) := ' ';
 16    l_context integer := 5;
 17    l_verbose boolean := FALSE;
 18    l_msg varchar2(1024);
 19    l_open_acc number := 0;
 20
 21    TYPE SESSION_REC IS RECORD
 22     (sid     v$session.sid%type,
 23      serial_no v$session.serial#%type);
 24    TYPE     SESSION_TYPE IS TABLE OF SESSION_REC;
 25    l_sessions SESSION_TYPE;
 26
 27
 28
 29    l_job_process_count NUMBER ;
 30    TYPE TBSP_ARRAY IS TABLE OF varchar2(64) INDEX BY BINARY_INTEGER ;
 31    l_tablespaces TBSP_ARRAY;
 32
 33      PROCEDURE set_job_process_count(p_count IN NUMBER)
 34      IS
 35      BEGIN
 36        --scope=memory so it will be reset on instance startup
 37        -- SID=* to take care of RAC
 38        IF p_count >=0
 39        THEN
 40          EXECUTE IMMEDIATE 'ALTER SYSTEM SET job_queue_processes='
 41                      ||p_count||' SID=''*'' scope=memory' ;
 42        END IF ;
 43      EXCEPTION WHEN OTHERS THEN NULL ;
 44      END set_job_process_count ;
 45
 46      PROCEDURE LOG_MESSAGE (verbose boolean, message varchar2)
 47      IS
 48      BEGIN
 49          IF (verbose = TRUE)
 50          THEN
 51              DBMS_OUTPUT.PUT_LINE(message);
 52          END IF;
 53      END LOG_MESSAGE;
 54
 55      FUNCTION get_job_process_count
 56      RETURN NUMBER
 57      IS
 58      l_value NUMBER ;
 59      BEGIN
 60        SELECT value
 61          INTO l_value
 62          FROM v$parameter
 63         WHERE name = 'job_queue_processes' ;
 64         RETURN(l_value) ;
 65      EXCEPTION
 66      WHEN OTHERS THEN
 67         RETURN(10) ;
 68      END get_job_process_count ;
 69  begin
 70      IF (upper('&LOGGING') = 'VERBOSE')
 71      THEN
 72        l_verbose := TRUE;
 73      END IF;
 74
 75      LOG_MESSAGE(l_verbose,' This script will drop the Oracle Enterprise Manager related schemas and objects.');
 76      LOG_MESSAGE(l_verbose, ' This script might take few minutes to complete; it has 6 phases to complete the process.');
 77      LOG_MESSAGE(l_verbose,' The script may take longer if you have SYSMAN and related sessions are active');
 78      LOG_MESSAGE(l_verbose,' from Oracle Enterprise Manager(OEM) application.');
 79      LOG_MESSAGE(l_verbose,' ');
 80      LOG_MESSAGE(l_verbose,' ');
 81      LOG_MESSAGE(l_verbose,' Recommendations:');
 82      LOG_MESSAGE(l_verbose,' ');
 83      LOG_MESSAGE(l_verbose,' ');
 84      LOG_MESSAGE(l_verbose,' You are recommended to shutdown DB Control application immediately before running this');
 85      LOG_MESSAGE(l_verbose,' OEM repository removal script.');
 86      LOG_MESSAGE(l_verbose,' To shutdown DB Control application, you need to run: emctl stop dbconsole');
 87      LOG_MESSAGE(l_verbose,' ');
 88      LOG_MESSAGE(l_verbose,' ');
 89      LOG_MESSAGE(l_verbose,' Steps to be performed manually (after this script is run):');
 90      LOG_MESSAGE(l_verbose,' ');
 91      LOG_MESSAGE(l_verbose,' ');
 92      LOG_MESSAGE(l_verbose,' Please note that you need to remove the DB Control Configuration Files');
 93      LOG_MESSAGE(l_verbose,' manually to remove DB Control completly; remove the following');
 94      LOG_MESSAGE(l_verbose,' directories from your filesystem:');
 95      LOG_MESSAGE(l_verbose,' <ORACLE_HOME>/<hostname_sid>');
 96      LOG_MESSAGE(l_verbose,' <ORACLE_HOME>/oc4j/j2ee/OC4J_DBConsole_<hostname>_<sid>');
 97      LOG_MESSAGE(l_verbose,' ');
 98      LOG_MESSAGE(l_verbose,' If the dbcontrol is upgraded from lower version, for example, from 10.2.0.3 to 10.2.0.4,');
 99      LOG_MESSAGE(l_verbose,' then the following directory also needs to be removed from the file system.');
100      LOG_MESSAGE(l_verbose,' <ORACLE_HOME>/<hostname_sid>.upgrade');
101      LOG_MESSAGE(l_verbose,' <ORACLE_HOME>/oc4j/j2ee/OC4J_DBConsole_<hostname>_<sid>.upgrade');
102      LOG_MESSAGE(l_verbose,' ');
103      LOG_MESSAGE(l_verbose,' On Microsoft platforms, also delete the DB Console service, generally with name');
104      LOG_MESSAGE(l_verbose,' OracleDBConsole<sid>');
105
106
107      LOG_MESSAGE(l_verbose,'Starting phase 1 : Dropping AQ related objests, EM jobs and all Oracle Enterprise Manager related schemas; except SYSMAN ...');
108
109      c := 0;
110      BEGIN
111          select count(1) into l_sysman_user from all_users where username='SYSMAN';
112      IF (l_sysman_user > 0 ) THEN
113      BEGIN
114
115          BEGIN
116              LOG_MESSAGE(l_verbose,'dropping AQ related objests from SYSMAN ...');
117
118              DBMS_AQADM.DROP_QUEUE_TABLE(queue_table=>'SYSMAN.MGMT_NOTIFY_QTABLE',force=>TRUE);
119          EXCEPTION
120              WHEN OTHERS THEN
121               err := SQLCODE;
122               LOG_MESSAGE(l_verbose,'found [sqlcode:'||err||']: AQ related objects are dropped already or not found');
123          END;
124
125          BEGIN
126              -- reduce job_queue_processes to zero
127             l_job_process_count := get_job_process_count ;
128             set_job_process_count(0) ;
129             LOG_MESSAGE(l_verbose,'saved job_queue_process=' || l_job_process_count || ', set to 0, now removing Oracle EM jobs ...');
130             l_removejobs := 'BEGIN ' ||  'SYSMAN' || '.emd_maintenance.remove_em_dbms_jobs; END;';
131             execute immediate l_removejobs;
132          EXCEPTION
133             WHEN OTHERS THEN
134                 err := SQLCODE;
135                 LOG_MESSAGE(l_verbose,'found [sqlcode:'||err||']: EM jobs are dropped already or not found');
136          END;
137
138      END;
139      END IF;
140      END;
141
142      -- First, drop all users, except SYSMAN who have MGMT_USER role and
143      -- are created by EM. All users created by EM will have a record
144      -- in MGMT_CREATED_USERS table
145      --
146
147      BEGIN
148          select count(1) into l_sysman_user from all_users where username='SYSMAN';
149          IF (l_sysman_user > 0 ) THEN
150          BEGIN
151
152          LOOP  --  part 1 main loop
153                -- handle SYSMAN is partially dropped
154               select count(1) into l_mgmt_users_src from all_objects where object_name='MGMT_CREATED_USERS' and owner='SYSMAN';
155               IF(l_mgmt_users_src = 0 ) THEN
156                   EXIT;
157               END IF;
158          BEGIN
159            LOG_MESSAGE(l_verbose,'finding users who needs to be dropped ...');
160            l_username := '';
161            BEGIN
162                execute immediate 'select grantee
163                   from sys.dba_role_privs
164                   where granted_role ='||DBMS_ASSERT.ENQUOTE_LITERAL('MGMT_USER')||
165                    ' AND grantee IN (SELECT user_name
166                                 FROM SYSMAN.MGMT_CREATED_USERS
167                                  WHERE SYSTEM_USER=0)
168                    AND ROWNUM=1'
169                    into l_user_name;
170                 LOG_MESSAGE(l_verbose,'found user name: ' || l_user_name);
171                    l_username := DBMS_ASSERT.ENQUOTE_NAME(l_user_name, FALSE);
172
173                 EXECUTE IMMEDIATE 'ALTER USER '||l_username||' ACCOUNT LOCK' ;
174            EXCEPTION
175                  WHEN NO_DATA_FOUND THEN
176                      LOG_MESSAGE(l_verbose,l_username || ' IS ALREADY DROPPED');
177                  EXIT; -- THEN RETURN ;
178            END ;
179
180
181            FOR cnt in 1 .. 150 LOOP -- session kill loop
182
183              BEGIN
184                -- FOR crec in (SELECT sid, serial#
185                --               FROM v$session
186                --              WHERE username=l_username
187                --                AND status NOT IN('KILLED'))
188
189                l_sql := 'SELECT sid, serial#
190                               FROM v$session
191                              WHERE username='|| DBMS_ASSERT.ENQUOTE_LITERAL(l_user_name)||'
192                              AND status NOT IN(''KILLED'')';
193                execute immediate l_sql BULK COLLECT INTO l_sessions;
194
195                FOR i in 1..l_sessions.COUNT
196                LOOP   --  cursor loop
197                BEGIN
198                     LOG_MESSAGE(l_verbose,'killing related sessions : sid= ' || l_sessions(i).sid || ' serial#= ' || l_sessions(i).serial_no || ' ...');
199                       EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION ' || DBMS_ASSERT.ENQUOTE_LITERAL(l_sessions(i).sid || ',' || l_sessions(i).serial_no)||' IMMEDIATE';
200                EXCEPTION
201                        WHEN OTHERS THEN
202                           err := SQLCODE;
203                           IF err != -30 THEN
204                              LOG_MESSAGE(l_verbose,'found [sqlcode:'||err||']: no session found; or already killed.');
205                              EXIT;
206                           END IF;
207                END;
208                COMMIT;
209                END LOOP; -- end cursor loop
210
211              EXCEPTION
212                  WHEN OTHERS THEN
213                    err := SQLCODE;
214                    IF err != -30 THEN
215                      LOG_MESSAGE(l_verbose,'found [sqlcode:'||err||']: no session found; or already killed.');
216                      EXIT;
217                    END IF;
218              END;
219
220              IF SQL%NOTFOUND THEN
221                 LOG_MESSAGE(l_verbose,'found [sql%notfound]: no session found; or already killed.');
222                 EXIT;
223              END IF;
224
225            COMMIT;
226
227            END LOOP;  -- end session killing loop
228            LOG_MESSAGE(l_verbose,' Dropping user : ' || l_username || '...');
229
230            EXECUTE IMMEDIATE 'drop user ' || l_username || ' cascade';
231            exit;
232            EXCEPTION
233              WHEN NO_DATA_FOUND THEN
234                LOG_MESSAGE(l_verbose,'found [no_data_found]: no user/corresponding sessions found related to DB Control');
235                 EXIT;
236              WHEN OTHERS THEN
237                err := SQLCODE;
238                IF err = -1918 THEN
239                 LOG_MESSAGE(l_verbose,'found [sqlcode:'||err||']: no DB Control user/corresponding sessions found related to DB Control');
240                  EXIT;
241                ELSE
242                  IF err = -1940 THEN
243                    NULL;
244                  ELSE
245                    -- keep count of try to drop EM related user and sessions
246                    -- give up after 50 try
247
248                    c := c+1;
249                    IF c > 50 THEN
250                       RAISE;
251                    END IF;
252                  END IF;
253                END IF;
254          END;
255          END LOOP; -- end part main loop
256         END;
257         ELSE
258                 LOG_MESSAGE(l_verbose,'SYSMAN IS ALREADY DROPPED');
259         END IF;
260     END;
261
262     BEGIN
263         -- Now, drop the SYSMAN user
264         LOG_MESSAGE(l_verbose,'Finished phase 1');
265         LOG_MESSAGE(l_verbose,'Starting phase 2 : Dropping SYSMAN schema ...');
266
267         c := 0;
268         -- validate user exists
269         select count(1) into l_sysman_user from all_users where username='SYSMAN';
270         IF (l_sysman_user > 0 ) THEN
271         BEGIN
272
273             BEGIN
274               --  SELECT username
275               --   INTO l_username
276               --   FROM dba_users
277               --   WHERE username = 'SYSMAN';
278                  -- l_user_name := 'SYSMAN';
279                  -- l_username = DBMS_ASSERT.ENQUOTE_NAME(l_user_name);
280                  EXECUTE IMMEDIATE 'ALTER USER SYSMAN ACCOUNT LOCK' ;
281             EXCEPTION
282                  WHEN NO_DATA_FOUND THEN
283                      LOG_MESSAGE(l_verbose,'SYSMAN IS ALREADY DROPPED');
284                  -- THEN RETURN ;
285             END ;
286
287
288             BEGIN
289                 LOOP  -- main loop
290                     BEGIN
291                         FOR cnt in 1 .. 150 LOOP -- session kill loop
292                             BEGIN
293                                 FOR crec in (SELECT sid, serial#
294                                     FROM gv$session
295                                       WHERE (username='SYSMAN' OR
296                                          schemaname='SYSMAN')
297                                       AND status != 'KILLED')
298                                 LOOP   --cursor loop
299                                     BEGIN
300                                         LOG_MESSAGE(l_verbose,'killing related sessions : sid= ' || crec.sid || ' serial#= ' || crec.serial#  || ' ...');
301                                         EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION ' ||
302                                           DBMS_ASSERT.ENQUOTE_LITERAL(crec.sid || ',' || crec.serial#)|| ' IMMEDIATE';
303                                     EXCEPTION
304                                     WHEN OTHERS THEN
305                                         err := SQLCODE;
306                                         IF err != -30 THEN
307                                             LOG_MESSAGE(l_verbose,'found [sqlcode:'||err||']: SYSMAN related sessions are already killed; no session found');
308                                             EXIT;
309                                         END IF;
310                                    END;
311                                    COMMIT;
312                                 END LOOP;  -- cursor loop ends
313                             EXCEPTION
314                                WHEN OTHERS THEN
315                                   err := SQLCODE;
316                                   IF err != -30 THEN
317                                       LOG_MESSAGE(l_verbose,'found [sqlcode:'||err||']: SYSMAN related sessions are already killed; no session found');
318                                       EXIT;
319                                   END IF;
320                             END;
321                             IF SQL%NOTFOUND THEN
322                                  LOG_MESSAGE(l_verbose,'found [sql%notfound]: SYSMAN related sessions are already killed; no session found');
323                                  EXIT;
324                            END IF;
325                            COMMIT;
326                         END LOOP;  -- end of session kill loop
327
328                         -- END;
329                         LOG_MESSAGE(l_verbose,'dropping user :  ' || l_user_name || '...');
330                         execute immediate 'drop user SYSMAN cascade';
331                         set_job_process_count(l_job_process_count) ;
332                         exit;
333
334                         -- >> START - Dropping the Tablespaces
335                         LOG_MESSAGE(l_verbose,'Finished phase 2');
336                         LOG_MESSAGE(l_verbose,'Starting phase 3 : Dropping Oracle Enterprise Manager related tablespaces ...');
337
338                         LOG_MESSAGE(l_verbose,'No seperate TABLESPACES Exist for EM;  all in SYSAUX; no action taken');
339                         -- >> END - Dropping the Tablespaces
340
341                     EXCEPTION
342                        WHEN NO_DATA_FOUND THEN
343                            LOG_MESSAGE(l_verbose,'found [ no_data_found]: no sysman/corresponding sessions');
344                            EXIT;
345                        WHEN OTHERS THEN
346                        err := SQLCODE;
347                        IF err = -1918 THEN
348                            LOG_MESSAGE(l_verbose,'found [sqlcode:1918]: no sysman/corresponding sessions');
349                            EXIT;
350                        ELSIF err = -1940 THEN
351                                NULL;
352                        ELSE
353                            LOG_MESSAGE(l_verbose,'found [sqlcode:'||err||']: no sysman/corresponding sessions');
354                            c := c+1;
355                            IF c > 50 THEN
356                                RAISE;
357                            END IF;
358                        END IF;
359                     END;
360                 END LOOP;  -- end of main loop
361             END;
362             LOG_MESSAGE(l_verbose,'SYSMAN dropped');
363             commit;
364         END;
365      ELSE
366        LOG_MESSAGE(l_verbose,'SYSMAN is already dropped');
367      END IF;
368      EXCEPTION
369          WHEN OTHERS THEN
370          set_job_process_count(l_job_process_count) ;
371          RAISE ;
372      END;
373
374  BEGIN
375
376      -- Drop basic roles.
377      LOG_MESSAGE(l_verbose,'Finished phase 3');
378      LOG_MESSAGE(l_verbose,'Starting phase 4 : Dropping Oracle Enterprise Manager related MGMT_USER role ...');
379
380      BEGIN
381        execute immediate 'drop role MGMT_USER';
382      EXCEPTION
383            WHEN OTHERS THEN
384            LOG_MESSAGE(l_verbose,'Role MGMT_USER already dropped');
385      END;
386      --
387      -- Drop the following synonyms related to REPOS Schema
388      --
389      LOG_MESSAGE(l_verbose,'Finished phase 4');
390      LOG_MESSAGE(l_verbose,'Starting phase 5 : Dropping Oracle Enterprise Manager related public synonyms ...');
391
392
393      BEGIN
394        FOR crec in (SELECT synonym_name,table_owner,table_name
395                     FROM dba_synonyms
396                     WHERE owner = 'PUBLIC'
397                     AND table_owner = 'SYSMAN')
398        LOOP
399            BEGIN
400                LOG_MESSAGE(l_verbose,'Dropping synonym : ' || crec.synonym_name || ' ... ');
401                EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM ' || DBMS_ASSERT.SIMPLE_SQL_NAME(crec.synonym_name);
402
403            EXCEPTION
404                when others then
405                LOG_MESSAGE(l_verbose,'Public synonym ' || crec.synonym_name ||
406                                     ' cannot be dropped');
407                -- continue dropping other synonyms.
408            END;
409        END LOOP;
410      END;
411
412      BEGIN
413        LOG_MESSAGE(l_verbose,'Finished phase 5');
414        LOG_MESSAGE(l_verbose,'Starting phase 6 : Dropping Oracle Enterprise Manager related other roles ...');
415        FOR crec in (select role from sys.dba_roles where role like 'MGMT_%')
416        LOOP
417          LOG_MESSAGE(l_verbose,'Dropping role: ' || crec.role ||' ...');
418          execute immediate 'drop role ' || DBMS_ASSERT.SIMPLE_SQL_NAME(crec.role);
419          commit;
420        END LOOP;
421      EXCEPTION
422          when NO_DATA_FOUND THEN
423            LOG_MESSAGE(l_verbose,'Roles like MGMT% do not exist');
424          WHEN OTHERS THEN
425            err := SQLCODE;
426            LOG_MESSAGE(l_verbose,'found [sqlcode: '||SQLCODE||']: no MGMT% roles to drop');
427      END;
428
429      -- lock DBSNMP user
430      BEGIN
431          BEGIN
432             LOG_MESSAGE(l_verbose,'Process DBSNMP user');
433             select count(1) into l_open_acc  from DBA_USERS where USERNAME ='DBSNMP' and ACCOUNT_STATUS='OPEN';
434          EXCEPTION
435             when NO_DATA_FOUND THEN
436                LOG_MESSAGE(l_verbose,'User DBSNMP does not exist');
437             WHEN OTHERS THEN
438                  err := SQLCODE;
439                  LOG_MESSAGE(l_verbose,'found [sqlcode: '||SQLCODE||']: while checking DBSNMP user status');
440
441          END;
442
443          IF (l_open_acc > 0 ) THEN
444              BEGIN
445                  execute immediate 'ALTER USER DBSNMP PASSWORD EXPIRE';
446                   LOG_MESSAGE(l_verbose,'DBSNMP user password is made expired');
447              EXCEPTION
448                  WHEN OTHERS THEN
449                      err := SQLCODE;
450                      LOG_MESSAGE(l_verbose,'found [sqlcode: '||SQLCODE||']: while expiring DBSNMP user password');
451              END;
452
453              BEGIN
454                  execute immediate 'ALTER USER DBSNMP ACCOUNT LOCK';
455                   LOG_MESSAGE(l_verbose,'User DBSNMP is locked');
456              EXCEPTION
457                  WHEN OTHERS THEN
458                      err := SQLCODE;
459                      LOG_MESSAGE(l_verbose,'found [sqlcode: '||SQLCODE||']: while locking DBSNMP user');
460              END;
461
462          END IF;
463          LOG_MESSAGE(l_verbose,'Done processing DBSNMP user');
464      END;
465
466      LOG_MESSAGE(l_verbose,'Finished phase 6');
467      LOG_MESSAGE(l_verbose,'The Oracle Enterprise Manager related schemas and objects are dropped.');
468      LOG_MESSAGE(l_verbose,'Do the manual steps to studown the DB Control if not done before running this script and then delete the DB Control configuration files');
469      commit;
470  END;
471  END;
472  /
old  70:     IF (upper('&LOGGING') = 'VERBOSE')
new  70:     IF (upper('VERBOSE') = 'VERBOSE')
This script will drop the Oracle Enterprise Manager related schemas and objects.
This script might take few minutes to complete; it has 6 phases to complete the
process.
The script may take longer if you have SYSMAN and related sessions are active
from Oracle Enterprise Manager(OEM) application.
Recommendations:
You are recommended to shutdown DB Control application immediately before
running this
OEM repository removal script.
To shutdown DB Control application, you need to run: emctl stop dbconsole
Steps to be performed manually (after this script is run):
Please note that you need to remove the DB Control Configuration Files
manually to remove DB Control completly; remove the following
directories from your filesystem:
<ORACLE_HOME>/<hostname_sid>
<ORACLE_HOME>/oc4j/j2ee/OC4J_DBConsole_<hostname>_<sid>
If the dbcontrol is upgraded from lower version, for example, from 10.2.0.3 to
10.2.0.4,
then the following directory also needs to be removed from the file system.
<ORACLE_HOME>/<hostname_sid>.upgrade
<ORACLE_HOME>/oc4j/j2ee/OC4J_DBConsole_<hostname>_<sid>.upgrade
On Microsoft platforms, also delete the DB Console service, generally with name
OracleDBConsole<sid>
Starting phase 1 : Dropping AQ related objests, EM jobs and all Oracle
Enterprise Manager related schemas; except SYSMAN ...
dropping AQ related objests from SYSMAN ...
saved job_queue_process=1000, set to 0, now removing Oracle EM jobs ...
finding users who needs to be dropped ...
found user name: MGMT_VIEW
found [sql%notfound]: no session found; or already killed.
Dropping user : "MGMT_VIEW"...
Finished phase 1
Starting phase 2 : Dropping SYSMAN schema ...
found [sql%notfound]: SYSMAN related sessions are already killed; no session
found
dropping user :  MGMT_VIEW...
SYSMAN dropped
Finished phase 3
Starting phase 4 : Dropping Oracle Enterprise Manager related MGMT_USER role ...
Finished phase 4
Starting phase 5 : Dropping Oracle Enterprise Manager related public synonyms
...
Dropping synonym : ECM_UTIL ...
Dropping synonym : EMD_MNTR ...
Dropping synonym : MGMT$ALERT_ANNOTATIONS ...
Dropping synonym : MGMT$ALERT_CURRENT ...
Dropping synonym : MGMT$ALERT_HISTORY ...
Dropping synonym : MGMT$ALERT_NOTIF_LOG ...
Dropping synonym : MGMT$APPLIED_PATCHES ...
Dropping synonym : MGMT$APPLIED_PATCHSETS ...
Dropping synonym : MGMT$APPL_PATCH_AND_PATCHSET ...
Dropping synonym : MGMT$AUDIT_LOG ...
Dropping synonym : MGMT$AVAILABILITY_CURRENT ...
Dropping synonym : MGMT$AVAILABILITY_HISTORY ...
Dropping synonym : MGMT$BLACKOUTS ...
Dropping synonym : MGMT$BLACKOUT_HISTORY ...
Dropping synonym : MGMT$CLUSTER_INTERCONNECTS ...
Dropping synonym : MGMT$CPF_ADVISORY_INFO ...
Dropping synonym : MGMT$CPF_HOMES_INFO ...
Dropping synonym : MGMT$CPF_PATCH_DATA ...
Dropping synonym : MGMT$CPF_PATCH_INFO ...
Dropping synonym : MGMT$CSA_CLIENTS ...
Dropping synonym : MGMT$CSA_CLIENT_RULE_VIOLS ...
Dropping synonym : MGMT$CSA_COLLECTIONS ...
Dropping synonym : MGMT$CSA_FAILED ...
Dropping synonym : MGMT$CSA_HOST_COOKIES ...
Dropping synonym : MGMT$CSA_HOST_CPUS ...
Dropping synonym : MGMT$CSA_HOST_CUSTOM ...
Dropping synonym : MGMT$CSA_HOST_IOCARDS ...
Dropping synonym : MGMT$CSA_HOST_NICS ...
Dropping synonym : MGMT$CSA_HOST_OS_COMPONENTS ...
Dropping synonym : MGMT$CSA_HOST_OS_FILESYSTEMS ...
Dropping synonym : MGMT$CSA_HOST_OS_PROPERTIES ...
Dropping synonym : MGMT$CSA_HOST_RULES ...
Dropping synonym : MGMT$CSA_HOST_SW ...
Dropping synonym : MGMT$CSM_DOMAIN_DAILY ...
Dropping synonym : MGMT$CSM_DOMAIN_DIST_DAILY ...
Dropping synonym : MGMT$CSM_DOMAIN_DIST_HOURLY ...
Dropping synonym : MGMT$CSM_DOMAIN_HOURLY ...
Dropping synonym : MGMT$CSM_IP_DAILY ...
Dropping synonym : MGMT$CSM_IP_DIST_DAILY ...
Dropping synonym : MGMT$CSM_IP_DIST_HOURLY ...
Dropping synonym : MGMT$CSM_IP_HOURLY ...
Dropping synonym : MGMT$CSM_METRIC_DETAILS ...
Dropping synonym : MGMT$CSM_MT_DSR_DAILY ...
Dropping synonym : MGMT$CSM_MT_DSR_DIST_DAILY ...
Dropping synonym : MGMT$CSM_MT_DSR_DIST_HOURLY ...
Dropping synonym : MGMT$CSM_MT_DSR_HOURLY ...
Dropping synonym : MGMT$CSM_MT_IP_DAILY ...
Dropping synonym : MGMT$CSM_MT_IP_DIST_DAILY ...
Dropping synonym : MGMT$CSM_MT_IP_DIST_HOURLY ...
Dropping synonym : MGMT$CSM_MT_IP_HOURLY ...
Dropping synonym : MGMT$CSM_MT_METRIC_DETAILS ...
Dropping synonym : MGMT$CSM_MT_URL_DAILY ...
Dropping synonym : MGMT$CSM_MT_URL_DIST_DAILY ...
Dropping synonym : MGMT$CSM_MT_URL_DIST_HOURLY ...
Dropping synonym : MGMT$CSM_MT_URL_HOURLY ...
Dropping synonym : MGMT$CSM_REGION ...
Dropping synonym : MGMT$CSM_REGION_DAILY ...
Dropping synonym : MGMT$CSM_REGION_DIST_DAILY ...
Dropping synonym : MGMT$CSM_REGION_DIST_HOURLY ...
Dropping synonym : MGMT$CSM_REGION_HOURLY ...
Dropping synonym : MGMT$CSM_SUBNET_DAILY ...
Dropping synonym : MGMT$CSM_SUBNET_DIST_DAILY ...
Dropping synonym : MGMT$CSM_SUBNET_DIST_HOURLY ...
Dropping synonym : MGMT$CSM_SUBNET_HOURLY ...
Dropping synonym : MGMT$CSM_URL_DAILY ...
Dropping synonym : MGMT$CSM_URL_DIST_DAILY ...
Dropping synonym : MGMT$CSM_URL_DIST_HOURLY ...
Dropping synonym : MGMT$CSM_URL_HOURLY ...
Dropping synonym : MGMT$CSM_WATCHLIST ...
Dropping synonym : MGMT$CS_CONFIG_STANDARDS ...
Dropping synonym : MGMT$CS_EVAL_SUMMARY_RULE ...
Dropping synonym : MGMT$CS_EVAL_SUMMARY_STANDARD ...
Dropping synonym : MGMT$DB_CONTROLFILES ...
Dropping synonym : MGMT$DB_CONTROLFILES_ALL ...
Dropping synonym : MGMT$DB_DATAFILES ...
Dropping synonym : MGMT$DB_DATAFILES_ALL ...
Dropping synonym : MGMT$DB_DBNINSTANCEINFO ...
Dropping synonym : MGMT$DB_DBNINSTANCEINFO_ALL ...
Dropping synonym : MGMT$DB_FEATUREUSAGE ...
Dropping synonym : MGMT$DB_INIT_PARAMS ...
Dropping synonym : MGMT$DB_INIT_PARAMS_ALL ...
Dropping synonym : MGMT$DB_LICENSE ...
Dropping synonym : MGMT$DB_LICENSE_ALL ...
Dropping synonym : MGMT$DB_OPTIONS ...
Dropping synonym : MGMT$DB_OPTIONS_ALL ...
Dropping synonym : MGMT$DB_REDOLOGS ...
Dropping synonym : MGMT$DB_REDOLOGS_ALL ...
Dropping synonym : MGMT$DB_ROLLBACK_SEGS ...
Dropping synonym : MGMT$DB_ROLLBACK_SEGS_ALL ...
Dropping synonym : MGMT$DB_SGA ...
Dropping synonym : MGMT$DB_SGA_ALL ...
Dropping synonym : MGMT$DB_TABLESPACES ...
Dropping synonym : MGMT$DB_TABLESPACES_ALL ...
Dropping synonym : MGMT$DELTA_COMPONENTS ...
Dropping synonym : MGMT$DELTA_COMPONENT_DETAILS ...
Dropping synonym : MGMT$DELTA_FS_MOUNT ...
Dropping synonym : MGMT$DELTA_HARDWARE ...
Dropping synonym : MGMT$DELTA_HOST_CONFIG ...
Dropping synonym : MGMT$DELTA_INIT ...
Dropping synonym : MGMT$DELTA_ONEOFF_PATCHES ...
Dropping synonym : MGMT$DELTA_ORACLE_HOME ...
Dropping synonym : MGMT$DELTA_OS_COMPONENTS ...
Dropping synonym : MGMT$DELTA_OS_COMP_DETAILS ...
Dropping synonym : MGMT$DELTA_OS_KERNEL_PARAMS ...
Dropping synonym : MGMT$DELTA_PATCHSETS ...
Dropping synonym : MGMT$DELTA_PATCHSET_DETAILS ...
Dropping synonym : MGMT$DELTA_VENDOR_SW ...
Dropping synonym : MGMT$DELTA_VIEW ...
Dropping synonym : MGMT$DELTA_VIEW_DETAILS ...
Dropping synonym : MGMT$E2E_1DAY ...
Dropping synonym : MGMT$E2E_HOURLY ...
Dropping synonym : MGMT$E2E_RAW ...
Dropping synonym : MGMT$ECM_CONFIG_HISTORY ...
Dropping synonym : MGMT$ECM_CONFIG_HISTORY_KEY1 ...
Dropping synonym : MGMT$ECM_CONFIG_HISTORY_KEY2 ...
Dropping synonym : MGMT$ECM_CONFIG_HISTORY_KEY3 ...
Dropping synonym : MGMT$ECM_CONFIG_HISTORY_KEY4 ...
Dropping synonym : MGMT$ECM_CONFIG_HISTORY_KEY5 ...
Dropping synonym : MGMT$ECM_CONFIG_HISTORY_KEY6 ...
Dropping synonym : MGMT$ECM_CURRENT_SNAPSHOTS ...
Dropping synonym : MGMT$ECM_VISIBLE_SNAPSHOTS ...
Dropping synonym : MGMT$EM_HOMES_PLATFORM ...
Dropping synonym : MGMT$ESA_ALL_PRIVS_REPORT ...
Dropping synonym : MGMT$ESA_ANY_DICT_REPORT ...
Dropping synonym : MGMT$ESA_ANY_PRIV_REPORT ...
Dropping synonym : MGMT$ESA_AUDIT_SYSTEM_REPORT ...
Dropping synonym : MGMT$ESA_BECOME_USER_REPORT ...
Dropping synonym : MGMT$ESA_CATALOG_REPORT ...
Dropping synonym : MGMT$ESA_CONN_PRIV_REPORT ...
Dropping synonym : MGMT$ESA_CREATE_PRIV_REPORT ...
Dropping synonym : MGMT$ESA_DBA_GROUP_REPORT ...
Dropping synonym : MGMT$ESA_DBA_ROLE_REPORT ...
Dropping synonym : MGMT$ESA_DIRECT_PRIV_REPORT ...
Dropping synonym : MGMT$ESA_EXMPT_ACCESS_REPORT ...
Dropping synonym : MGMT$ESA_KEY_OBJECTS_REPORT ...
Dropping synonym : MGMT$ESA_OH_OWNERSHIP_REPORT ...
Dropping synonym : MGMT$ESA_OH_PERMISSION_REPORT ...
Dropping synonym : MGMT$ESA_POWER_PRIV_REPORT ...
Dropping synonym : MGMT$ESA_PUB_PRIV_REPORT ...
Dropping synonym : MGMT$ESA_SYS_PUB_PKG_REPORT ...
Dropping synonym : MGMT$ESA_TABSP_OWNERS_REPORT ...
Dropping synonym : MGMT$ESA_TRC_AUD_PERM_REPORT ...
Dropping synonym : MGMT$ESA_TRC_AUD_PERM_REP_NT ...
Dropping synonym : MGMT$ESA_WITH_ADMIN_REPORT ...
Dropping synonym : MGMT$ESA_WITH_GRANT_REPORT ...
Dropping synonym : MGMT$GROUP_DERIVED_MEMBERSHIPS ...
Dropping synonym : MGMT$GROUP_FLAT_MEMBERSHIPS ...
Dropping synonym : MGMT$GROUP_MEMBERS ...
Dropping synonym : MGMT$GRP_METRICS_DAILY ...
Dropping synonym : MGMT$GRP_METRICS_HOURLY ...
Dropping synonym : MGMT$GRP_METRICS_RAW ...
Dropping synonym : MGMT$HA_BACKUP ...
Dropping synonym : MGMT$HA_FILES ...
Dropping synonym : MGMT$HA_FILES_ALL ...
Dropping synonym : MGMT$HA_INFO ...
Dropping synonym : MGMT$HA_INFO_ALL ...
Dropping synonym : MGMT$HA_INIT_PARAMS ...
Dropping synonym : MGMT$HA_INIT_PARAMS_ALL ...
Dropping synonym : MGMT$HA_MTTR ...
Dropping synonym : MGMT$HA_RMAN_CONFIG ...
Dropping synonym : MGMT$HA_RMAN_CONFIG_ALL ...
Dropping synonym : MGMT$HOMES_AFFECTED ...
Dropping synonym : MGMT$HOSTPATCH_GROUPS ...
Dropping synonym : MGMT$HOSTPATCH_GRP_COMPL_HIST ...
Dropping synonym : MGMT$HOSTPATCH_HOSTS ...
Dropping synonym : MGMT$HOSTPATCH_HOST_COMPL ...
Dropping synonym : MGMT$HW_NIC ...
Dropping synonym : MGMT$INTERFACE_STATS ...
Dropping synonym : MGMT$JOBS ...
Dropping synonym : MGMT$JOB_ANNOTATIONS ...
Dropping synonym : MGMT$JOB_EXECUTION_HISTORY ...
Dropping synonym : MGMT$JOB_NOTIFICATION_LOG ...
Dropping synonym : MGMT$JOB_STEP_HISTORY ...
Dropping synonym : MGMT$JOB_TARGETS ...
Dropping synonym : MGMT$MESSAGES ...
Dropping synonym : MGMT$METRIC_CATEGORIES ...
Dropping synonym : MGMT$METRIC_COLLECTION ...
Dropping synonym : MGMT$METRIC_CURRENT ...
Dropping synonym : MGMT$METRIC_DAILY ...
Dropping synonym : MGMT$METRIC_DETAILS ...
Dropping synonym : MGMT$METRIC_ERROR_CURRENT ...
Dropping synonym : MGMT$METRIC_ERROR_HISTORY ...
Dropping synonym : MGMT$METRIC_HOURLY ...
Dropping synonym : MGMT$MISSING_TARGETS ...
Dropping synonym : MGMT$MISSING_TARGETS_IN_GROUPS ...
Dropping synonym : MGMT$ORACLE_SW_ENT_INSTALL ...
Dropping synonym : MGMT$ORACLE_SW_ENT_TARGETS ...
Dropping synonym : MGMT$ORACLE_SW_GRP_INSTALL ...
Dropping synonym : MGMT$ORACLE_SW_GRP_TARGETS ...
Dropping synonym : MGMT$OS_COMPONENTS ...
Dropping synonym : MGMT$OS_FS_MOUNT ...
Dropping synonym : MGMT$OS_HW_SUMMARY ...
Dropping synonym : MGMT$OS_KERNEL_PARAMS ...
Dropping synonym : MGMT$OS_PATCHES ...
Dropping synonym : MGMT$OS_PROPERTIES ...
Dropping synonym : MGMT$OS_SUMMARY ...
Dropping synonym : MGMT$PATCH_ADVISORIES ...
Dropping synonym : MGMT$POLICIES ...
Dropping synonym : MGMT$POLICY_PARAMETERS ...
Dropping synonym : MGMT$POLICY_VIOLATION_CONTEXT ...
Dropping synonym : MGMT$POLICY_VIOLATION_CTXT ...
Dropping synonym : MGMT$POLICY_VIOLATION_CURRENT ...
Dropping synonym : MGMT$POLICY_VIOLATION_HISTORY ...
Dropping synonym : MGMT$POLICY_VIOL_ANNOTATIONS ...
Dropping synonym : MGMT$POLICY_VIOL_NOTIF_LOG ...
Dropping synonym : MGMT$RACDB_INTERCONNECTS ...
Dropping synonym : MGMT$SOFTWARE_COMPONENTS ...
Dropping synonym : MGMT$SOFTWARE_COMPONENT_ONEOFF ...
Dropping synonym : MGMT$SOFTWARE_COMP_PATCHSET ...
Dropping synonym : MGMT$SOFTWARE_DEPENDENCIES ...
Dropping synonym : MGMT$SOFTWARE_HOMES ...
Dropping synonym : MGMT$SOFTWARE_HOME_PROPERTIES ...
Dropping synonym : MGMT$SOFTWARE_ONEOFF_PATCHES ...
Dropping synonym : MGMT$SOFTWARE_OTHERS ...
Dropping synonym : MGMT$SOFTWARE_PATCHES_IN_HOMES ...
Dropping synonym : MGMT$SOFTWARE_PATCHSETS ...
Dropping synonym : MGMT$STEPS ...
Dropping synonym : MGMT$STEP_GROUPS ...
Dropping synonym : MGMT$STEP_METRICS_DAILY ...
Dropping synonym : MGMT$STEP_METRICS_HOURLY ...
Dropping synonym : MGMT$STEP_METRICS_RAW ...
Dropping synonym : MGMT$STORAGE_REPORT_DATA ...
Dropping synonym : MGMT$STORAGE_REPORT_DISK ...
Dropping synonym : MGMT$STORAGE_REPORT_ISSUES ...
Dropping synonym : MGMT$STORAGE_REPORT_KEYS ...
Dropping synonym : MGMT$STORAGE_REPORT_LOCALFS ...
Dropping synonym : MGMT$STORAGE_REPORT_NFS ...
Dropping synonym : MGMT$STORAGE_REPORT_PATHS ...
Dropping synonym : MGMT$STORAGE_REPORT_VOLUME ...
Dropping synonym : MGMT$TARGET ...
Dropping synonym : MGMT$TARGET_ASSOCIATIONS ...
Dropping synonym : MGMT$TARGET_COMPONENTS ...
Dropping synonym : MGMT$TARGET_COMPOSITE ...
Dropping synonym : MGMT$TARGET_FLAT_MEMBERS ...
Dropping synonym : MGMT$TARGET_MEMBERS ...
Dropping synonym : MGMT$TARGET_METRIC_COLLECTIONS ...
Dropping synonym : MGMT$TARGET_METRIC_SETTINGS ...
Dropping synonym : MGMT$TARGET_POLICIES ...
Dropping synonym : MGMT$TARGET_POLICY_EVAL_SUMM ...
Dropping synonym : MGMT$TARGET_POLICY_SETTINGS ...
Dropping synonym : MGMT$TARGET_PROPERTIES ...
Dropping synonym : MGMT$TARGET_TYPE ...
Dropping synonym : MGMT$TARGET_TYPE_DEF ...
Dropping synonym : MGMT$TARGET_TYPE_PROPERTIES ...
Dropping synonym : MGMT$TEMPLATES ...
Dropping synonym : MGMT$TEMPLATE_METRICCOLLECTION ...
Dropping synonym : MGMT$TEMPLATE_METRIC_SETTINGS ...
Dropping synonym : MGMT$TEMPLATE_POLICY_SETTINGS ...
Dropping synonym : MGMT$TXN_PERF_DAY ...
Dropping synonym : MGMT$TXN_PERF_HOUR ...
Dropping synonym : MGMT$TXN_PERF_RAW ...
Dropping synonym : MGMT_ADMIN ...
Dropping synonym : MGMT_AVAILABILITY ...
Dropping synonym : MGMT_TARGET_BLACKOUTS ...
Dropping synonym : MGMT_COLLECTION_PROPERTIES ...
Dropping synonym : MGMT_CREDENTIAL ...
Dropping synonym : MGMT_CURRENT_AVAILABILITY ...
Dropping synonym : MGMT_CURRENT_METRICS ...
Dropping synonym : MGMT_CURRENT_METRIC_ERRORS ...
Dropping synonym : MGMT_CURRENT_SEVERITY ...
Dropping synonym : MGMT_DELTA ...
Dropping synonym : MGMT_DELTA_ENTRY ...
Dropping synonym : MGMT_DELTA_ENTRY_VALUES ...
Dropping synonym : MGMT_DELTA_IDS ...
Dropping synonym : MGMT_DELTA_ID_VALUES ...
Dropping synonym : MGMT_DELTA_VALUE ...
Dropping synonym : MGMT_DELTA_VALUES ...
Dropping synonym : MGMT_GLOBAL ...
Dropping synonym : MGMT_GUID_ARRAY ...
Dropping synonym : MGMT_GUID_OBJ ...
Dropping synonym : MGMT_IP_TGT_GUID_ARRAY ...
Dropping synonym : MGMT_JOB ...
Dropping synonym : MGMT_JOBS ...
Dropping synonym : MGMT_JOB_EXECPLAN ...
Dropping synonym : MGMT_JOB_EXECUTION ...
Dropping synonym : MGMT_JOB_EXEC_SUMMARY ...
Dropping synonym : MGMT_JOB_OUTPUT ...
Dropping synonym : MGMT_JOB_PARAMETER ...
Dropping synonym : MGMT_JOB_SCHEDULE ...
Dropping synonym : MGMT_JOB_TARGET ...
Dropping synonym : MGMT_LOG ...
Dropping synonym : MGMT_LONG_TEXT ...
Dropping synonym : MGMT_MESSAGES ...
Dropping synonym : MGMT_METRICS ...
Dropping synonym : MGMT_METRICS_1DAY ...
Dropping synonym : MGMT_METRICS_1HOUR ...
Dropping synonym : MGMT_METRICS_COMPOSITE_KEYS ...
Dropping synonym : MGMT_METRICS_RAW ...
Dropping synonym : MGMT_METRIC_COLLECTIONS ...
Dropping synonym : MGMT_METRIC_ERRORS ...
Dropping synonym : MGMT_METRIC_THRESHOLDS ...
Dropping synonym : MGMT_NAME_VALUE ...
Dropping synonym : MGMT_NAME_VALUES ...
Dropping synonym : MGMT_PAF$APPLICATIONS ...
Dropping synonym : MGMT_PAF$INSTANCES ...
Dropping synonym : MGMT_PAF$PROCEDURES ...
Dropping synonym : MGMT_PAF$STATES ...
Dropping synonym : MGMT_PAF_JOBS ...
Dropping synonym : MGMT_PAF_PROCS_LATEST ...
Dropping synonym : MGMT_PREFERENCES ...
Dropping synonym : MGMT_SEVERITY ...
Dropping synonym : MGMT_SEVERITY_ARRAY ...
Dropping synonym : MGMT_SEVERITY_OBJ ...
Dropping synonym : MGMT_STRING_METRIC_HISTORY ...
Dropping synonym : MGMT_TARGET ...
Dropping synonym : MGMT_TARGETS ...
Dropping synonym : MGMT_TARGET_MEMBERSHIPS ...
Dropping synonym : MGMT_TARGET_PROPERTIES ...
Dropping synonym : MGMT_TYPE_PROPERTIES ...
Dropping synonym : MGMT_USER ...
Dropping synonym : MGMT_VIEW_UTIL ...
Dropping synonym : SETEMVIEWUSERCONTEXT ...
Dropping synonym : SMP_EMD_AVAIL_OBJ ...
Dropping synonym : SMP_EMD_DELETE_REC_ARRAY ...
Dropping synonym : SMP_EMD_INTEGER_ARRAY ...
Dropping synonym : SMP_EMD_INTEGER_ARRAY_ARRAY ...
Dropping synonym : SMP_EMD_NVPAIR ...
Dropping synonym : SMP_EMD_NVPAIR_ARRAY ...
Dropping synonym : SMP_EMD_STRING_ARRAY ...
Dropping synonym : SMP_EMD_STRING_ARRAY_ARRAY ...
Dropping synonym : SMP_EMD_TARGET_OBJ ...
Dropping synonym : SMP_EMD_TARGET_OBJ_ARRAY ...
Finished phase 5
Starting phase 6 : Dropping Oracle Enterprise Manager related other roles ...
Process DBSNMP user
DBSNMP user password is made expired
User DBSNMP is locked
Done processing DBSNMP user
Finished phase 6
The Oracle Enterprise Manager related schemas and objects are dropped.
Do the manual steps to studown the DB Control if not done before running this
script and then delete the DB Control configuration files

PL/SQL procedure successfully completed.

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options


3. APEX 수동 업그레이드

19c 경로로 이동하여 sys 계정으로 DB 접속
cd <ORACLE_HOME(19c)>/apex
sqlplus / as sysdba
[oracle@orcl ~]$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0/db_1

[oracle@orcl ~]$ cd /u01/app/oracle/product/19c/db_1/apex

[oracle@orcl apex]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Feb 28 20:53:01 2020

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> 


업그레이드 전 버전 확인
col comp_name format a35
col status format a12
select comp_name, status, version
from dba_Registry
where comp_name='Oracle Application Express';
SQL> col comp_name format a35
SQL> col status format a12
SQL> select comp_name, status, version
  2  from dba_Registry
  3  where comp_name='Oracle Application Express';

COMP_NAME                           STATUS       VERSION
----------------------------------- ------------ ------------------------------
Oracle Application Express          VALID        3.2.1.00.12


sys 계정으로 APEX 업그레이드 수행
@apexins SYSAUX SYSAUX TEMP /i/

작업 스크립트 참고 : apex_up.log


업그레이드 후 버전 확인
col comp_name format a35
col status format a12
select comp_name, status, version
from dba_Registry
where comp_name='Oracle Application Express';
SQL> col comp_name format a35
SQL> col status format a12
SQL> select comp_name, status, version
  2  from dba_Registry
  3  where comp_name='Oracle Application Express';

COMP_NAME                           STATUS       VERSION
----------------------------------- ------------ ------------------------------
Oracle Application Express          VALID        18.2.0.00.12


객체 재컴파일
@?/rdbms/admin/utlrp.sql
SQL> @?/rdbms/admin/utlrp.sql

TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_BGN  2020-02-28 21:10:12

DOC>   The following PL/SQL block invokes UTL_RECOMP to recompile invalid
DOC>   objects in the database. Recompilation time is proportional to the
DOC>   number of invalid objects in the database, so this command may take
DOC>   a long time to execute on a database with a large number of invalid
DOC>   objects.
DOC>
DOC>   Use the following queries to track recompilation progress:
DOC>
DOC>   1. Query returning the number of invalid objects remaining. This
DOC>      number should decrease with time.
DOC>         SELECT COUNT(*) FROM obj$ WHERE status IN (4, 5, 6);
DOC>
DOC>   2. Query returning the number of objects compiled so far. This number
DOC>      should increase with time.
DOC>         SELECT COUNT(*) FROM UTL_RECOMP_COMPILED;
DOC>
DOC>   This script automatically chooses serial or parallel recompilation
DOC>   based on the number of CPUs available (parameter cpu_count) multiplied
DOC>   by the number of threads per CPU (parameter parallel_threads_per_cpu).
DOC>   On RAC, this number is added across all RAC nodes.
DOC>
DOC>   UTL_RECOMP uses DBMS_SCHEDULER to create jobs for parallel
DOC>   recompilation. Jobs are created without instance affinity so that they
DOC>   can migrate across RAC nodes. Use the following queries to verify
DOC>   whether UTL_RECOMP jobs are being created and run correctly:
DOC>
DOC>   1. Query showing jobs created by UTL_RECOMP
DOC>         SELECT job_name FROM dba_scheduler_jobs
DOC>            WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC>
DOC>   2. Query showing UTL_RECOMP jobs that are running
DOC>         SELECT job_name FROM dba_scheduler_running_jobs
DOC>            WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC>#

PL/SQL procedure successfully completed.


TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_END  2020-02-28 21:10:25

DOC> The following query reports the number of objects that have compiled
DOC> with errors.
DOC>
DOC> If the number is higher than expected, please examine the error
DOC> messages reported with each object (using SHOW ERRORS) to see if they
DOC> point to system misconfiguration or resource constraints that must be
DOC> fixed before attempting to recompile these objects.
DOC>#

OBJECTS WITH ERRORS
-------------------
                  0

DOC> The following query reports the number of errors caught during
DOC> recompilation. If this number is non-zero, please query the error
DOC> messages in the table UTL_RECOMP_ERRORS to see if any of these errors
DOC> are due to misconfiguration or resource constraints that must be
DOC> fixed before objects can compile successfully.
DOC>#

ERRORS DURING RECOMPILATION
---------------------------
                          0


Function created.


PL/SQL procedure successfully completed.


Function dropped.

...(21:10:27) Starting validate_apex for APEX_180200
...(21:10:28) Checking missing sys privileges
...(21:10:28) Re-generating APEX_180200.wwv_flow_db_version
... wwv_flow_db_version is up to date
...(21:10:28) Key object existence check
...(21:10:29) Setting DBMS Registry for APEX to valid
...(21:10:29) Exiting validate_apex

PL/SQL procedure successfully completed.

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options


4. DBUA

DBUA 실행
dbua

















  • 레이블 없음