Skip to main content
NetApp database solutions
본 한국어 번역은 사용자 편의를 위해 제공되는 기계 번역입니다. 영어 버전과 한국어 버전이 서로 어긋나는 경우에는 언제나 영어 버전이 우선합니다.

TR-5020: Google Cloud NetApp Volumes에서 NFS를 사용한 Oracle 단일 인스턴스 배포

기여자 acao8888

Allen Cao, Niyaz Mohamed, NetApp

이 솔루션은 NFS 프로토콜을 통해 Google Cloud NetApp Volumes를 기본 데이터베이스 스토리지로 사용하는 Oracle 배포에 대한 개요 및 세부 정보를 제공하며, Oracle 데이터베이스는 dNFS가 활성화된 독립형 컨테이너 데이터베이스로 배포됩니다.

목적

클라우드 환경에서 성능 집약적이고 지연 시간에 민감한 Oracle 워크로드를 실행하는 것은 어려울 수 있습니다. Google Cloud NetApp Volumes(GCNV)를 사용하면 기업의 기간 업무(LOB) 담당자와 스토리지 전문가가 코드 변경 없이 까다로운 Oracle 워크로드를 쉽게 마이그레이션하고 실행할 수 있습니다. Google Cloud NetApp Volumes는 Oracle 데이터베이스를 온프레미스에서 Google Cloud로 마이그레이션(리프트 앤 시프트)하거나 새로 배포하는 등 다양한 시나리오에서 기본 공유 파일 스토리지 서비스로 널리 사용됩니다.

이 문서에서는 Google Cloud 콘솔에서 GCNV DB 볼륨 구성과 Ansible 자동화를 사용하여 NFS 마운트를 통해 Google Cloud NetApp Volumes에 Oracle 데이터베이스를 간소화하여 배포하는 방법을 설명합니다. Oracle 데이터베이스는 컨테이너 데이터베이스(CDB) 및 플러그형 데이터베이스(PDB) 구성으로 배포되며, 성능 향상을 위해 Oracle dNFS 프로토콜이 활성화됩니다. 또한, 자세한 데이터베이스 백업, 복원 및 클론 전략을 제시하고 Google Cloud에서 Oracle 데이터베이스 백업 관리를 위한 자동화 툴킷을 제공합니다.

이 솔루션은 다음과 같은 사용 사례를 해결합니다.

  • NFS 프로토콜을 사용하여 Google Cloud의 Google Cloud NetApp Volumes에 Oracle 데이터베이스를 자동으로 배포합니다.

  • Google Cloud의 Google Cloud NetApp Volumes에서 Oracle 데이터베이스 백업, 복구, 클론.

대상

이 솔루션은 다음과 같은 사람들을 위해 만들어졌습니다.

  • Google Cloud NetApp Volumes에 Oracle을 배포하려는 DBA입니다.

  • Google Cloud NetApp Volumes에서 Oracle 워크로드를 테스트하려는 데이터베이스 솔루션 설계자.

  • Google Cloud NetApp Volumes에서 Oracle 데이터베이스를 배포하고 관리하려는 스토리지 관리자입니다.

  • Google Cloud NetApp Volumes에서 Oracle 데이터베이스를 구축하려는 애플리케이션 소유자.

솔루션 테스트 및 검증 환경

이 솔루션의 테스트와 검증은 최종 배포 환경과 일치하지 않을 수 있는 실험실 환경에서 수행되었습니다. 섹션을 참조하세요배포 고려사항의 핵심 요소 자세한 내용은.

아키텍처

이 이미지는 NFS 및 Google Cloud NetApp Volumes를 사용하는 Google Cloud의 Oracle 배포 구성에 대한 자세한 그림을 제공합니다.

하드웨어 및 소프트웨어 구성 요소

하드웨어

Google Cloud NetApp Volumes

Google의 Google Cloud 현재 제공 서비스

Flex 서비스 레벨을 지원하는 스토리지 풀 1개, 용량 2TiB, 처리량 64MiB/s, IOPS 1024가 Oracle 데이터베이스 스토리지용으로 프로비저닝되었습니다

데이터베이스 서버용 Google Compute Engine VM

n1-standard-4(vCPU 4개, 메모리 15GB)

배포 및 복구 시연을 위한 두 개의 Linux 가상 머신 인스턴스

소프트웨어

레드햇 리눅스

RHEL Linux 8.10 (LVM) - x64 Gen2

테스트를 위해 RedHat 구독을 배포했습니다.

오라클 데이터베이스

버전 21.19

RU 패치 p38068980_210000_Linux-x86-64.zip을 적용했습니다

오라클 OPatch

버전 12.2.0.1.48

최신 패치 p6880880_210000_Linux-x86-64.zip

NFS

버전 3.0

Oracle dNFS 활성화됨

앤서블

코어 2.16.2

Python 3.10.13

랩 환경에서의 Oracle 데이터베이스 구성

섬기는 사람

데이터 베이스

DB 스토리지

orap - 기본 DB 서버

NTAP(NTAP_PDB1,NTAP_PDB2,NTAP_PDB3)

/u01, /u02, /u03 NFS는 Google Cloud NetApp Volumes 스토리지 풀에 마운트됩니다

orap2 - 백업에서 복원됨

NTAP(NTAP_PDB1,NTAP_PDB2,NTAP_PDB3)

/u01, /u02, /u03 NFS는 Google Cloud NetApp Volumes 스토리지 풀에 마운트됩니다

배포 고려사항의 핵심 요소

  • GCNV 스토리지 풀 서비스 레벨 및 처리량. GCNV는 Standard, Premium, Extreme, Flex의 네 가지 서비스 레벨을 제공합니다. Standard, Premium, Extreme 서비스 레벨의 경우 IO 처리량은 DB 볼륨 크기에 따라 결정되고 고정됩니다. 총 IO 처리량은 스토리지 풀 크기에 따라 제한됩니다. Flex 서비스 레벨의 경우 IO 처리량은 DB 볼륨 크기에 따라 고정되지 않고 모든 DB 볼륨에서 공유되며 스토리지 풀 크기 레벨에서 제한됩니다. 이는 간헐적인 IOPS 급증이 발생하는 소규모 볼륨 데이터베이스에 적합합니다. 참고로 Standard, Premium, Extreme 서비스 레벨은 각각 GiB당 16 KiB/s, GiB당 64 KiB/s, GiB당 128 KiB/s의 처리량을 제공합니다. 반면 Flex 서비스 레벨은 사용자 지정 성능 설정을 통해 스토리지 풀당 최대 5 GiB/s를 제공합니다. Oracle 데이터베이스 워크로드의 예상 IO 처리량 및 IOPS 요구 사항에 따라 서비스 레벨과 스토리지 풀의 크기를 적절하게 조정하는 것이 중요합니다.

  • 데이터베이스 스토리지 레이아웃. 이 자동화된 Oracle 배포에서는 기본적으로 각 데이터베이스에 대해 Oracle 바이너리, 데이터 및 로그를 저장하기 위한 세 개의 데이터베이스 볼륨을 프로비저닝합니다. 이러한 볼륨은 NFS를 통해 Oracle DB 서버에 /u01 - 바이너리, /u02 - 데이터, /u03 - 로그로 마운트됩니다. 이중화를 위해 /u02 및 /u03 마운트 지점에 이중 제어 파일이 구성됩니다.

  • dNFS 구성. Oracle dNFS(Oracle 11g부터 사용 가능)를 사용하면 Google Cloud NetApp Volumes 스토리지를 사용하는 Google Compute Engine에서 실행되는 Oracle 데이터베이스가 기본 NFS 클라이언트보다 훨씬 더 많은 I/O를 구동할 수 있습니다. 자동화된 Oracle 배포는 기본적으로 NFSv3에서 dNFS를 구성합니다.

  • 스냅샷 및 볼트 백업. 기존 RMAN 데이터베이스 백업 대신 NetApp은 스토리지 효율적이고 애플리케이션 일관성을 유지하는 스냅샷 및 볼트 백업을 구현하여 빠른(수초) 스냅샷 백업, 신속한(수분) 데이터베이스 복원, 스토리지 볼트의 스냅샷 또는 백업을 통한 복구 및 클론을 구현할 것을 권장합니다. 스냅샷은 데이터베이스 볼륨의 시점 복사본으로, 몇 초 만에 생성할 수 있으며 생성 시 추가 스토리지 공간을 차지하지 않습니다. 스냅샷은 기본 데이터베이스 볼륨과 함께 존재하며 기본 볼륨이 손상될 경우 손실될 수 있습니다. 볼트 백업은 재해 복구를 위해 오브젝트 스토리지의 다른 위치에 저장되는 스냅샷의 복사본입니다.

  • RTO/RPO 고려 사항. 데이터베이스 백업 전략을 수립할 때 복구 시간 목표(RTO)와 복구 시점 목표(RPO) 요구 사항을 고려하는 것이 중요합니다. 스냅샷 기반 백업은 데이터베이스 성능에 미치는 영향이 최소화되지만, RTO/RPO에 영향을 미치는 백업 빈도와 스토리지 비용 간에는 상충 관계가 있습니다. 백업 빈도를 높이면 RTO/RPO를 낮출 수 있지만 스토리지 비용이 증가할 수 있습니다. 비즈니스 요구 사항과 예산을 고려하여 적절한 균형을 찾는 것이 중요합니다. 본 자동화 솔루션은 사용자가 구성 가능한 보존 기간 및 백업 일정을 통해 Oracle 데이터베이스 백업을 관리할 수 있는 Ansible 플레이북 기반 자동화 툴킷을 제공합니다.

솔루션 구축

다음 섹션에서는 Google Cloud NetApp Volumes에 Oracle 21c를 자동화하여 배포하고 데이터베이스를 백업, 복구, 복제하는 단계별 절차를 제공합니다. 데이터베이스 볼륨은 NFS를 통해 Google Cloud Compute Engine VM을 데이터베이스 서버로 사용하여 직접 마운트됩니다.

배포를 위한 전제 조건

Details

배포에는 다음과 같은 전제 조건이 필요합니다.

  1. Google Cloud 계정이 설정되었으며, Google Cloud 계정의 특정 프로젝트 내에 필요한 VPC 및 네트워크 설정이 생성되었습니다.

  2. Google Cloud 콘솔에서 Google Compute Engine VM을 Oracle DB 서버로 배포합니다. 자동화를 위해 방화벽을 끄고 관리자 사용자로 DB 서버에 대한 VM SSH 개인/공개 키 인증을 활성화해야 합니다. 환경 설정에 대한 자세한 내용은 이전 섹션의 아키텍처 다이어그램을 참조하십시오.

    참고 Oracle 설치 파일을 준비하고 OS 스왑 파일을 추가할 수 있는 충분한 공간을 확보하기 위해 VM 루트 디스크에 최소 50G를 할당했는지 확인하십시오.
  3. 자동화 툴킷 README에 나열된 버전의 Ansible 및 Git이 설치된 Linux VM을 Ansible 컨트롤러 노드로 프로비저닝합니다. Ansible 자동화에 대한 도움말은 다음 링크를 참조하십시오: "NetApp 솔루션 자동화 시작하기" 섹션 -
    Setup the Ansible Control Node for CLI deployments on RHEL / CentOS 또는
    Setup the Ansible Control Node for CLI deployments on Ubuntu / Debian.

    참고 Ansible 컨트롤러 노드는 ssh 포트를 통해 Google Cloud DB 서버 VM에 연결할 수 있는 한 온프레미스 또는 Google Cloud에 위치할 수 있습니다.
  4. NFS용 NetApp Oracle 배포 자동화 툴킷의 사본을 복제합니다.

    git clone https://bitbucket.ngage.netapp.com/scm/ns-bb/na_oracle_deploy_nfs.git
    참고 현재 이 툴킷은 bitbucket 액세스 권한이 있는 NetApp 내부 사용자만 액세스할 수 있습니다. 관심 있는 외부 사용자는 계정 팀에 액세스를 요청하거나 NetApp 솔루션 엔지니어링 팀에 문의하세요.
  5. 777 권한으로 Google Cloud DB VM /tmp/archive 디렉터리에 Oracle 21c 설치 파일을 준비합니다.

    installer_archives:
      - "LINUX.X64_213000_db_home.zip"
      - "p34765931_210000_Linux-x86-64.zip"
      - "p6880880_210000_Linux-x86-64.zip"

Oracle 데이터베이스 스토리지를 위한 Google Cloud NetApp Volumes 구성

Details

다음은 Google Cloud NetApp Volumes를 Oracle 데이터베이스 스토리지에 맞게 구성하는 단계이며, 화면 예시를 위해 스크린샷이 포함되어 있습니다.

  1. Oracle 데이터베이스 스토리지용으로 원하는 서비스 수준과 용량을 갖춘 스토리지 풀을 생성합니다. +이 이미지는 NFS를 사용하여 Google Cloud에 Oracle을 배포할 때 GCNV 볼륨 구성에 대한 스크린샷을 제공합니다. +이 이미지는 NFS를 사용하여 Google Cloud에 Oracle을 배포할 때 GCNV 볼륨 구성에 대한 스크린샷을 제공합니다. +이 이미지는 NFS를 사용하여 Google Cloud에 Oracle을 배포할 때 GCNV 볼륨 구성에 대한 스크린샷을 제공합니다. +이 이미지는 NFS를 사용하여 Google Cloud에 Oracle을 배포할 때 GCNV 볼륨 구성에 대한 스크린샷을 제공합니다. +이 이미지는 NFS를 사용하여 Google Cloud에 Oracle을 배포할 때 GCNV 볼륨 구성에 대한 스크린샷을 제공합니다.

  2. 데이터베이스 스토리지용 스토리지 풀에 원하는 크기의 Oracle 데이터베이스용 DB 볼륨 3개를 생성합니다. 예를 들어, 바이너리 파일용 /u01, 데이터 파일용 /u02, 리두 로그 및 제어 파일용 /u03을 NFSv3 프로토콜 및 마운트 옵션과 함께 다음 화면에 나와 있는 것처럼 생성합니다. +이 이미지는 NFS를 사용하여 Google Cloud에 Oracle을 배포할 때 GCNV 볼륨 구성에 대한 스크린샷을 제공합니다. +이 이미지는 NFS를 사용하여 Google Cloud에 Oracle을 배포할 때 GCNV 볼륨 구성에 대한 스크린샷을 제공합니다. +이 이미지는 NFS를 사용하여 Google Cloud에 Oracle을 배포할 때 GCNV 볼륨 구성에 대한 스크린샷을 제공합니다. +이 이미지는 NFS를 사용하여 Google Cloud에 Oracle을 배포할 때 GCNV 볼륨 구성에 대한 스크린샷을 제공합니다. +이 이미지는 NFS를 사용하여 Google Cloud에 Oracle을 배포할 때 GCNV 볼륨 구성에 대한 스크린샷을 제공합니다.

참고 Google Cloud NetApp Volumes의 기본 제공 백업 방식은 애플리케이션 일관성을 지원하지 않으므로 현재로서는 예약 백업을 활성화하지 마십시오. 이 솔루션에 제공되는 백업 자동화 툴킷을 사용하면 사용자 정의 일정 및 보존 기간에 따라 애플리케이션 일관성을 유지하는 데이터베이스 백업을 관리할 수 있습니다.

Ansible 플레이북을 이용한 자동화된 Oracle 배포

자동화 매개변수 파일

Details

Ansible 플레이북은 미리 정의된 매개변수를 사용하여 데이터베이스 설치 및 구성 작업을 실행합니다. 현재 이 툴킷은 Oracle 데이터베이스 버전 19c 및 21c 배포를 지원합니다. 이 Oracle 자동화 솔루션에는 플레이북 실행 전에 사용자가 입력해야 하는 세 개의 사용자 정의 매개변수 파일이 있습니다.

  • 호스트 - 자동화 플레이북이 실행되는 대상을 정의합니다.

  • vars/vars.yml - 모든 대상에 적용되는 변수를 정의하는 전역 변수 파일입니다.

  • host_vars/host_name.yml - 지정된 대상에만 적용되는 변수를 정의하는 로컬 변수 파일입니다. 우리의 사용 사례에서는 이는 Oracle DB 서버입니다.

이러한 사용자 정의 변수 파일 외에도 필요하지 않은 한 변경할 필요가 없는 기본 매개변수가 포함된 여러 가지 기본 변수 파일이 있습니다. 다음 섹션에서는 사용자 정의 변수 파일을 구성하는 방법을 보여줍니다.

매개변수 파일 구성

Details
  1. Ansible 대상 hosts 파일 구성:

    #Oracle hosts
    [oracle]
    orap ansible_host=10.61.180.6 ansible_ssh_private_key_file=ora_01.pem
    orap2 ansible_host=10.61.180.8 ansible_ssh_private_key_file=ora_02.pem
  2. 글로벌 vars/vars.yml 파일 구성

    ###########################################
    ### ONTAP env specific config variables ###
    ###########################################
    
    # Prerequisite to create three volumes in NetApp ONTAP storage from System Manager or cloud dashboard with following naming convention:
    # {{ inventory_hostname}}_u01 or {{ inventory_hostname}}-u01 -- Oracle binary
    # {{ inventory_hostname}}_u02 or {{ inventory_hostname}}-u02 -- Oracle data
    # {{ inventory_hostname}}_u03 or {{ inventory_hostname}}-u03 -- Oracle redo
    # It is important to strictly follow the name convention or the automation will fail.
    
    host_datastores_nfs:
      - {vol_name: "{{ inventory_hostname}}-u01", lif: "{{ nfs_lif }}"}
      - {vol_name: "{{ inventory_hostname}}-u02", lif: "{{ nfs_lif }}"}
      - {vol_name: "{{ inventory_hostname}}-u03", lif: "{{ nfs_lif }}"}
    
    ###########################################
    ### Linux env specific config variables ###
    ###########################################
    
    redhat_sub_username: "xxxxxxxxxx"
    redhat_sub_password: "xxxxxxxxxx"
    
    
    ####################################################
    ### DB env specific install and config variables ###
    ####################################################
    
    # Database version: support 19c and 21c, 19c|19.0.0 or 21c|21.0.0
    ora_version: 21c
    ora_version_num: 21.0.0
    
    # Set initial password for all required Oracle passwords. Change them after installation.
    initial_pwd_all: "xxxxxxxxxx"
    
    # Database domain name
    db_domain: cvs-pm-host-1p.internal
  3. orap.yml, orap2.yml 등과 같은 로컬 DB 서버 host_vars/host_name.yml 구성

    # User configurable Oracle host specific parameters
    
    # Database SID. By default, a container DB is created with 3 PDBs within the CDB
    oracle_sid: NTAP
    
    # CDB is created with SGA at 75% of memory_limit, MB. Consider how many databases to be hosted on the node and how much ram to be allocated to each DB. The grand total of SGA should not exceed 75% available RAM on node.
    memory_limit: 8192
    
    # NFS server ip address to access database volumes - retrieved from Google Cloud console within the volume details.
    nfs_lif: 10.165.128.242

플레이북 실행

Details

자동화 툴킷에는 총 5개의 플레이북이 있습니다. 각각은 서로 다른 작업 블록을 수행하고 서로 다른 목적을 위해 사용됩니다.

0-all_playbook.yml - execute playbooks from 1-4 in one playbook run.
1-ansible_requirements.yml - set up Ansible controller with required libs and collections.
2-linux_config.yml - execute Linux kernel configuration on Oracle DB servers.
4-oracle_config.yml - install and configure Oracle on DB servers and create a container database.
5-destroy.yml - optional to undo the environment to dismantle all.

다음 명령을 사용하여 플레이북을 실행하는 세 가지 옵션이 있습니다.

  1. 모든 배포 플레이북을 한 번에 결합해서 실행합니다.

    ansible-playbook -i hosts 0-all_playbook.yml -u admin -e @vars/vars.yml
  2. 1~4까지의 숫자 순서대로 플레이북을 하나씩 실행합니다.

    ansible-playbook -i hosts 1-ansible_requirements.yml -u admin -e @vars/vars.yml
    ansible-playbook -i hosts 2-linux_config.yml -u admin -e @vars/vars.yml
    ansible-playbook -i hosts 4-oracle_config.yml -u admin -e @vars/vars.yml
  3. 태그와 함께 0-all_playbook.yml을 실행합니다.

    ansible-playbook -i hosts 0-all_playbook.yml -u admin -e @vars/vars.yml -t ansible_requirements
    ansible-playbook -i hosts 0-all_playbook.yml -u admin -e @vars/vars.yml -t linux_config
    ansible-playbook -i hosts 0-all_playbook.yml -u admin -e @vars/vars.yml -t oracle_config
  4. 환경 실행 취소

    ansible-playbook -i hosts 5-destroy.yml -u admin -e @vars/vars.yml

실행 후 검증

Details

플레이북 실행 후 Oracle DB 서버 VM에 로그인하여 Oracle이 설치 및 구성되었는지, 컨테이너 데이터베이스가 성공적으로 생성되었는지 확인하십시오. 다음은 호스트 orap에서 Oracle 데이터베이스를 검증하는 예입니다.

  1. NFS 마운트 검증

    [oracle@orap ~]$ df -h
    Filesystem                Size  Used Avail Use% Mounted on
    devtmpfs                  7.2G     0  7.2G   0% /dev
    tmpfs                     7.3G     0  7.3G   0% /dev/shm
    tmpfs                     7.3G  8.5M  7.2G   1% /run
    tmpfs                     7.3G     0  7.3G   0% /sys/fs/cgroup
    /dev/sda2                  50G   31G   20G  62% /
    /dev/sda1                 200M  5.9M  194M   3% /boot/efi
    10.165.128.242:/orap-u02  500G  410G   91G  82% /u02
    10.165.128.242:/orap-u03  300G  2.5G  298G   1% /u03
    10.165.128.242:/orap-u01   50G   11G   40G  21% /u01
    tmpfs                     1.5G     0  1.5G   0% /run/user/1010
    
    [admin@orap ~]$ cat /etc/fstab
    
    #
    # /etc/fstab
    # Created by anaconda on Wed Jul  9 15:09:30 2025
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk/'.
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
    #
    # After editing this file, run 'systemctl daemon-reload' to update systemd
    # units generated from this file.
    #
    UUID=c829892e-02dc-40d8-b1b0-42a3b90b6315 /                       xfs     defaults        0 0
    UUID=6275-3342          /boot/efi               vfat    defaults,uid=0,gid=0,umask=077,shortname=winnt 0 2
    /root/swapfile swap swap defaults 0 0
    10.165.128.242:/orap-u01 /u01 nfs rw,bg,hard,vers=3,proto=tcp,timeo=600,rsize=262144,wsize=262144 0 0
    10.165.128.242:/orap-u02 /u02 nfs rw,bg,hard,vers=3,proto=tcp,timeo=600,rsize=262144,wsize=262144 0 0
    10.165.128.242:/orap-u03 /u03 nfs rw,bg,hard,vers=3,proto=tcp,timeo=600,rsize=262144,wsize=262144 0 0
  2. Oracle 사용자로 Oracle 리스너를 검증합니다

    [oracle@orap ~]$ lsnrctl status listener
    
    LSNRCTL for Linux: Version 21.0.0.0.0 - Production on 17-FEB-2026 20:34:06
    
    Copyright (c) 1991, 2021, Oracle.  All rights reserved.
    
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=orap.us-east4-b.c.cvs-pm-host-1p.internal)(PORT=1521)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 21.0.0.0.0 - Production
    Start Date                17-FEB-2026 16:03:25
    Uptime                    0 days 4 hr. 30 min. 41 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /u01/app/oracle/homes/OraDB21Home1/network/admin/listener.ora
    Listener Log File         /u01/app/oracle/diag/tnslsnr/orap/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=orap.us-east4-b.c.cvs-pm-host-1p.internal)(PORT=1521)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=orap.us-east4-b.c.cvs-pm-host-1p.internal)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/homes/OraDB21Home1/admin/NTAP/xdb_wallet))(Presentation=HTTP)(Session=RAW))
    Services Summary...
    Service "48ea7bc6e662ab02e063130b460ac1b5.cvs-pm-host-1p.internal" has 1 instance(s).
      Instance "NTAP", status READY, has 1 handler(s) for this service...
    Service "48ea7e8e7de8ab6de063130b460a341d.cvs-pm-host-1p.internal" has 1 instance(s).
      Instance "NTAP", status READY, has 1 handler(s) for this service...
    Service "48ea7ff1feb4ab7ce063130b460ac700.cvs-pm-host-1p.internal" has 1 instance(s).
      Instance "NTAP", status READY, has 1 handler(s) for this service...
    Service "NTAP.cvs-pm-host-1p.internal" has 1 instance(s).
      Instance "NTAP", status READY, has 1 handler(s) for this service...
    Service "NTAPXDB.cvs-pm-host-1p.internal" has 1 instance(s).
      Instance "NTAP", status READY, has 1 handler(s) for this service...
    Service "ntap_pdb1.cvs-pm-host-1p.internal" has 1 instance(s).
      Instance "NTAP", status READY, has 1 handler(s) for this service...
    Service "ntap_pdb2.cvs-pm-host-1p.internal" has 1 instance(s).
      Instance "NTAP", status READY, has 1 handler(s) for this service...
    Service "ntap_pdb3.cvs-pm-host-1p.internal" has 1 instance(s).
      Instance "NTAP", status READY, has 1 handler(s) for this service...
    The command completed successfully
  3. Oracle 데이터베이스 및 dNFS 검증

    [oracle@orap ~]$ cat /etc/oratab
    #
    
    
    
    # This file is used by ORACLE utilities.  It is created by root.sh
    # and updated by either Database Configuration Assistant while creating
    # a database or ASM Configuration Assistant while creating ASM instance.
    
    # A colon, ':', is used as the field terminator.  A new line terminates
    # the entry.  Lines beginning with a pound sign, '#', are comments.
    #
    # Entries are of the form:
    #   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
    #
    # The first and second fields are the system identifier and home
    # directory of the database respectively.  The third field indicates
    # to the dbstart utility that the database should , "Y", or should not,
    # "N", be brought up at system boot time.
    #
    # Multiple entries with the same $ORACLE_SID are not allowed.
    #
    #
    NTAP:/u01/app/oracle/product/21.0.0/NTAP:Y
    
    
    [oracle@orap ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 21.0.0.0.0 - Production on Wed Jan 28 18:18:02 2026
    Version 21.19.0.0.0
    
    Copyright (c) 1982, 2021, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
    Version 21.19.0.0.0
    
    SQL> select name, open_mode, log_mode from v$database;
    
    NAME      OPEN_MODE            LOG_MODE
    --------- -------------------- ------------
    NTAP      READ WRITE           ARCHIVELOG
    
    SQL> show pdbs
    
        CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    ---------- ------------------------------ ---------- ----------
             2 PDB$SEED                       READ ONLY  NO
             3 NTAP_PDB1                      READ WRITE NO
             4 NTAP_PDB2                      READ WRITE NO
             5 NTAP_PDB3                      READ WRITE NO
    SQL> select name from v$datafile;
    
    NAME
    --------------------------------------------------------------------------------
    /u02/oradata/NTAP/system01.dbf
    /u02/oradata/NTAP/sysaux01.dbf
    /u02/oradata/NTAP/undotbs01.dbf
    /u02/oradata/NTAP/pdbseed/system01.dbf
    /u02/oradata/NTAP/pdbseed/sysaux01.dbf
    /u02/oradata/NTAP/users01.dbf
    /u02/oradata/NTAP/pdbseed/undotbs01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/system01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/sysaux01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/undotbs01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/users01.dbf
    
    NAME
    --------------------------------------------------------------------------------
    /u02/oradata/NTAP/NTAP_pdb2/system01.dbf
    /u02/oradata/NTAP/NTAP_pdb2/sysaux01.dbf
    /u02/oradata/NTAP/NTAP_pdb2/undotbs01.dbf
    /u02/oradata/NTAP/NTAP_pdb2/users01.dbf
    /u02/oradata/NTAP/NTAP_pdb3/system01.dbf
    /u02/oradata/NTAP/NTAP_pdb3/sysaux01.dbf
    /u02/oradata/NTAP/NTAP_pdb3/undotbs01.dbf
    /u02/oradata/NTAP/NTAP_pdb3/users01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/soe_01.pdf
    /u02/oradata/NTAP/NTAP_pdb1/soe_02.pdf
    /u02/oradata/NTAP/NTAP_pdb1/soe_03.pdf
    
    NAME
    --------------------------------------------------------------------------------
    /u02/oradata/NTAP/NTAP_pdb1/soe_04.pdf
    /u02/oradata/NTAP/NTAP_pdb1/soe_05.pdf
    /u02/oradata/NTAP/NTAP_pdb1/soe_06.pdf
    /u02/oradata/NTAP/NTAP_pdb1/soe_07.pdf
    /u02/oradata/NTAP/NTAP_pdb1/soe_08.pdf
    /u02/oradata/NTAP/NTAP_pdb1/soe_09.pdf
    /u02/oradata/NTAP/NTAP_pdb1/soe_10.pdf
    /u02/oradata/NTAP/NTAP_pdb1/soe_11.pdf
    /u02/oradata/NTAP/NTAP_pdb1/soe_12.pdf
    
    31 rows selected.
    
    SQL> select name from v$controlfile;
    
    NAME
    --------------------------------------------------------------------------------
    /u02/oradata/NTAP/control01.ctl
    /u03/orareco/NTAP/control02.ctl
    
    SQL> select name from v$tempfile;
    
    NAME
    --------------------------------------------------------------------------------
    /u02/oradata/NTAP/temp01.dbf
    /u02/oradata/NTAP/pdbseed/temp012026-01-21_17-35-36-638-PM.dbf
    /u02/oradata/NTAP/NTAP_pdb1/temp01.dbf
    /u02/oradata/NTAP/NTAP_pdb2/temp01.dbf
    /u02/oradata/NTAP/NTAP_pdb3/temp01.dbf
    /u02/oradata/NTAP/NTAP_pdb1/temp02.dbf
    
    6 rows selected.
    
    SQL> select member from v$logfile;
    
    MEMBER
    --------------------------------------------------------------------------------
    /u03/orareco/NTAP/onlinelog/redo03.log
    /u03/orareco/NTAP/onlinelog/redo02.log
    /u03/orareco/NTAP/onlinelog/redo01.log
    
    SQL> select svrname, dirname from v$dnfs_servers;
    
    SVRNAME
    --------------------------------------------------------------------------------
    DIRNAME
    --------------------------------------------------------------------------------
    10.165.128.242
    /orap-u02
    
    10.165.128.242
    /orap-u03
    
    10.165.128.242
    /orap-u01
  4. 자동 시작 및 종료를 위한 Oracle 서비스를 검증합니다.

    [admin@orap ~]$ sudo systemctl status oracle_NTAP
    ● oracle_NTAP.service - Oracle Database Start/Stop Service
       Loaded: loaded (/etc/systemd/system/oracle_NTAP.service; enabled; vendor preset: disabled)
       Active: active (running) since Wed 2026-01-28 16:59:10 UTC; 1h 22min ago
        Tasks: 79 (limit: 94156)
       Memory: 7.1G
       CGroup: /system.slice/oracle_NTAP.service
               ├─1368 /u01/app/oracle/product/21.0.0/NTAP/bin/tnslsnr LISTENER -inherit
               ├─1903 ora_pmon_NTAP
               ├─1907 ora_clmn_NTAP
               ├─1911 ora_psp0_NTAP
               ├─1915 ora_vktm_NTAP
               ├─1921 ora_gen0_NTAP
               ├─1925 ora_mman_NTAP
               ├─1931 ora_gen1_NTAP
               ├─1933 ora_gen2_NTAP
               ├─1935 ora_vosd_NTAP
               ├─1937 ora_diag_NTAP
               ├─1939 ora_ofsd_NTAP
               ├─1941 ora_dbrm_NTAP
               ├─1943 ora_vkrm_NTAP
               ├─1945 ora_svcb_NTAP
               ├─1947 ora_pman_NTAP
               ├─1949 ora_dia0_NTAP
               ├─1955 ora_dbw0_NTAP
               ├─1957 ora_lgwr_NTAP
               ├─1961 ora_ckpt_NTAP
               ├─1965 ora_smon_NTAP
               ├─1969 ora_smco_NTAP
               ├─1971 ora_reco_NTAP
               ├─1973 ora_bg00_NTAP
               ├─1975 ora_lreg_NTAP
               ├─1981 ora_pxmn_NTAP
               ├─1991 ora_mmon_NTAP
               ├─1993 ora_mmnl_NTAP
               ├─2000 ora_lg00_NTAP
               ├─2003 ora_bg01_NTAP
               ├─2006 ora_d000_NTAP
               ├─2008 ora_w000_NTAP
               ├─2010 ora_s000_NTAP
               ├─2015 ora_lg01_NTAP
               ├─2017 ora_tmon_NTAP
               ├─2019 ora_w001_NTAP
               ├─2026 ora_m000_NTAP
               ├─2036 ora_tt00_NTAP
               ├─2038 ora_arc0_NTAP
               ├─2040 ora_tt01_NTAP
               ├─2042 ora_arc1_NTAP
               ├─2044 ora_arc2_NTAP
               ├─2048 ora_arc3_NTAP
               ├─2050 ora_tt02_NTAP
               ├─2063 ora_w002_NTAP
               ├─2065 ora_rcbg_NTAP
               ├─2069 ora_aqpc_NTAP
               ├─2073 ora_p000_NTAP
               ├─2075 ora_p001_NTAP
               ├─2077 ora_p002_NTAP
               ├─2079 ora_p003_NTAP
               ├─2081 ora_p004_NTAP
               ├─2083 ora_p005_NTAP
               ├─2085 ora_p006_NTAP
               ├─2087 ora_p007_NTAP
               ├─2092 ora_w003_NTAP
               ├─2164 ora_w004_NTAP
               ├─2279 ora_qm02_NTAP
               ├─2289 ora_q005_NTAP
               ├─2296 ora_cjq0_NTAP
               ├─2450 ora_m001_NTAP
               ├─2454 ora_m002_NTAP
               ├─2458 ora_m003_NTAP
               ├─2508 ora_w005_NTAP
               ├─2510 ora_m004_NTAP
               ├─2512 ora_m005_NTAP
               ├─2514 ora_m006_NTAP
               ├─2516 ora_w006_NTAP
               ├─2540 ora_q00i_NTAP
               ├─2550 ora_w007_NTAP
               └─2559 ora_cl00_NTAP
    
    Jan 28 16:58:29 orap systemd[1]: Starting Oracle Database Start/Stop Service...
    Jan 28 16:58:31 orap dbstart[1519]: Processing Database instance "NTAP": log file /u01/app/oracle/homes/OraDB21Home1/rdbms/log/startup.log
    Jan 28 16:59:10 orap systemd[1]: Started Oracle Database Start/Stop Service.
    
    [admin@orap ~]$

Google Cloud NetApp Volumes를 사용한 Oracle 데이터베이스 백업

Oracle 데이터베이스 스냅샷 및 볼트 백업

Details

Oracle 데이터베이스 백업 설정을 간편하게 하기 위해 NetApp Solutions Engineering 팀은 사용자가 구성 가능한 보존 기간 및 백업 스케줄을 사용하여 Oracle 데이터베이스 백업을 자동화하는 Ansible 플레이북을 개발했습니다. 이 플레이북은 Google Cloud NetApp Volumes 스냅샷 및 볼트 백업 기능을 활용하여 빠른(수초) 스냅샷 백업, 신속한(수분) 데이터베이스 복원, 스토리지 볼트의 스냅샷 또는 백업으로부터의 복구 및 클론 작업을 수행합니다.

  1. GCNV용 NetApp Oracle 데이터베이스 백업 자동화 툴킷의 복사본을 복제합니다.

    git clone https://bitbucket.ngage.netapp.com/scm/ns-bb/na_oracle_bkup_gcnv.git
    참고 현재 이 툴킷은 bitbucket 액세스 권한이 있는 NetApp 내부 사용자만 액세스할 수 있습니다. 관심 있는 외부 사용자는 계정 팀에 액세스를 요청하거나 NetApp 솔루션 엔지니어링 팀에 문의하세요.
  2. 툴킷의 README 파일을 읽고 아래 지침에 따라 crontab 또는 다른 스케줄링 도구를 사용하여 백업 작업을 구성하고 예약하십시오. 이 플레이북은 Oracle DB 서버 VM 및 Google NetApp Volumes에 액세스할 수 있는 Ansible 컨트롤러 노드에서 실행되도록 설계되었습니다. 정의된 일정 및 보존 정책에 따라 데이터베이스 볼륨의 애플리케이션 일관성 스냅샷을 생성하고 재해 복구를 위해 스냅샷을 볼트에 복사합니다.

  3. 기본적으로 플레이북은 매일 스냅샷 백업을 생성하고 매시간 시간별 스냅샷을 생성합니다. 기본 스냅샷 보존 기간은 매일 스냅샷 7개, 시간별 스냅샷 24개입니다. 보존 기간을 초과하는 추가 스냅샷은 삭제되며, 매일 스냅샷 7개와 시간별 스냅샷 24개를 기준으로 롤링 복사본이 유지됩니다. RTO/RPO 요구 사항 및 스토리지 비용을 고려하여 백업 빈도와 보존 기간을 조정할 수 있습니다. 매일 스냅샷 백업은 모든 DB 볼륨을 백업하는 반면, 시간별 스냅샷 백업은 로그 볼륨만 백업하여 스토리지 공간을 절약합니다. 매일 스냅샷 백업 중에 플레이북은 정의된 보존 기간에 따라 Oracle 아카이브 로그 파일을 삭제하여 DB 로그 볼륨의 스토리지 공간을 절약합니다.

  4. 다음은 스냅샷 백업을 생성하고 볼트에 복사하는 crontab 항목의 예입니다.

    [admin@ansiblectl na_oracle_bkup_gcnv]$ crontab -l
    0 0 * * * /home/admin/na_oracle_bkup_gcnv/oracle_standalone_snapshot_daily.sh
    0 1-23 * * * /home/admin/na_oracle_bkup_gcnv/oracle_standalone_snapshot_hourly.sh
    5 0 * * 7 /home/admin/na_oracle_bkup_gcnv/oracle_standalone_vaultbkup_weekly.sh
    5 0 * * 1-6 /home/admin/na_oracle_bkup_gcnv/oracle_standalone_vaultbkup_daily.sh
    5 1-23 * * * /home/admin/na_oracle_bkup_gcnv/oracle_standalone_vaultbkup_hourly.sh
  5. 볼트 백업은 RTO/RPO 요구 사항에 따라 주간, 일간 또는 시간 단위로 실행할 수 있습니다. 주간 및 일간 백업은 모든 DB 볼륨을 포함하는 반면, 시간 단위 볼트 백업은 스토리지 공간을 절약하기 위해 로그 볼륨만 포함합니다. 첫 번째 볼트 백업은 기준선을 생성하므로 시간이 더 오래 걸립니다. 기준선 백업이 설정되면 모든 추가 볼트 백업은 영구 증분 방식을 사용하여 증분 방식으로 수행됩니다. 모든 볼트 백업은 복구 가능성을 보장하기 위해 실행 시점의 가장 최근 애플리케이션 일관성 스냅샷을 기반으로 생성됩니다. 일반적인 기준선 및 증분 백업과 달리 기준선 볼트 백업 데이터는 모든 증분 백업에 롤업됩니다. 즉, 모든 증분 볼트 백업에는 전체 데이터 세트가 포함되어 기준선 백업을 복원할 필요 없이 복구에 사용할 수 있습니다. 이 방식은 백업 관리 및 복구 프로세스를 간소화하는 동시에 볼트의 스토리지 공간을 효율적으로 활용할 수 있도록 합니다. 이 방식에서는 모든 백업이 독립적이므로 백업을 삭제해야 할 때 백업 체인이나 종속성을 고려할 필요가 없습니다. 백업 자동화 스크립트는 정의된 보존 목표를 충족하기 위해 백업을 자동으로 정리합니다.

  6. 다음 로그 파일 기록은 스냅샷 백업 및 보존 관리의 예입니다.

    Begin Oracle DB snapshot backup at 2026-0217-160001
    
    PLAY [Enable Oracle bkup mode for consistent snapshot] *************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [orap]
    
    TASK [Call presnap tasks block before snapshot] ********************************
    
    TASK [oracle : Copy presnap script to prod host] *******************************
    ok: [orap]
    
    TASK [oracle : Stage prod DB for snapshot] *************************************
    changed: [orap]
    
    PLAY [Take a volume snapshot or vault backup] **********************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [ontap : Open a GCP connection via cli] ***********************************
    included: /home/admin/na_oracle_bkup_gcnv/roles/ontap/tasks/gcp_open_conn.yml for localhost
    
    TASK [ontap : Login to GCP with service key from cli] **************************
    changed: [localhost]
    
    TASK [ontap : Take app consistent snapshots for DB volumes] ********************
    included: /home/admin/na_oracle_bkup_gcnv/roles/ontap/tasks/gcp_vol_snapshot.yml for localhost
    
    TASK [ontap : Obtain current date, time] ***************************************
    ok: [localhost] => {
        "ansible_date_time": {
            "date": "2026-02-17",
            "day": "17",
            "epoch": "1771362008",
            "epoch_int": "1771362008",
            "hour": "16",
            "iso8601": "2026-02-17T21:00:08Z",
            "iso8601_basic": "20260217T160008243394",
            "iso8601_basic_short": "20260217T160008",
            "iso8601_micro": "2026-02-17T21:00:08.243394Z",
            "minute": "00",
            "month": "02",
            "second": "08",
            "time": "16:00:08",
            "tz": "EST",
            "tz_dst": "EDT",
            "tz_offset": "-0500",
            "weekday": "Tuesday",
            "weekday_number": "2",
            "weeknumber": "07",
            "year": "2026"
        }
    }
    
    TASK [ontap : Take a snapshot of all DB data volumes in sequence] **************
    skipping: [localhost] => (item=orap-u01)
    skipping: [localhost] => (item=orap-u02)
    skipping: [localhost] => (item=orap-u03)
    skipping: [localhost]
    
    TASK [ontap : Take a snapshot of all DB logs volumes in sequence] **************
    changed: [localhost] => (item=orap-u03)
    
    TASK [ontap : Pause to allow snapshots to complete] ****************************
    Pausing for 15 seconds
    ok: [localhost]
    
    TASK [ontap : Take app consistent vault backups from DB volume snapshots] ******
    skipping: [localhost]
    
    TASK [ontap : Take app consistent vault backups from DB volumes] ***************
    skipping: [localhost]
    
    PLAY [End Oracle backup mode after snapshot] ***********************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [orap]
    
    TASK [Call postsnap tasks block after snapshot] ********************************
    
    TASK [oracle : Copy postsnap script to prod host] ******************************
    ok: [orap]
    
    TASK [oracle : Execute postsnapshot script] ************************************
    changed: [orap]
    
    PLAY [Prune volume snapshot based on defined retention goals] ******************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [Call snapshot management tasks block] ************************************
    
    TASK [ontap : Login to GCP with service key from cli] **************************
    changed: [localhost]
    
    TASK [ontap : Process snapshots for each volume] *******************************
    included: /home/admin/na_oracle_bkup_gcnv/roles/ontap/tasks/gcp_process_vol_snapshot.yml for localhost => (item=orap-u01)
    included: /home/admin/na_oracle_bkup_gcnv/roles/ontap/tasks/gcp_process_vol_snapshot.yml for localhost => (item=orap-u02)
    included: /home/admin/na_oracle_bkup_gcnv/roles/ontap/tasks/gcp_process_vol_snapshot.yml for localhost => (item=orap-u03)
    
    TASK [ontap : List an existing snapshot of a DB volume in sequence if exist] ***
    changed: [localhost]
    
    TASK [ontap : Debug orap-u01 snapshot list] ************************************
    ok: [localhost] => {
        "snapshots.stdout_lines": [
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260209t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260213t103635",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260213t000008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260205t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260206t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260212t125953",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260210t153007"
        ]
    }
    
    TASK [ontap : Parse orap-u01 snapshots count] **********************************
    ok: [localhost]
    
    TASK [ontap : Parse orap-u01 snapshots by backup frequency] ********************
    ok: [localhost] => (item=['projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260209t153007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260213t103635', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260213t000008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260205t153007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260206t153007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260212t125953', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260210t153007'])
    
    TASK [ontap : list orap-u01 daily snapshot] ************************************
    ok: [localhost] => {
        "daily_snapshot_raw_0": [
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260205t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260206t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260209t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260210t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260212t125953",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260213t000008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260213t103635"
        ]
    }
    
    TASK [ontap : list orap-u01 hourly snapshot] ***********************************
    ok: [localhost] => {
        "hourly_snapshot_raw_0": []
    }
    
    TASK [ontap : Report snapshots count per volume] *******************************
    ok: [localhost] => {
        "msg": [
            "Volume orap-u01 has 7 daily snapshots",
            "Volume orap-u01 has 0 hourly snapshots"
        ]
    }
    
    TASK [ontap : Check if cleanup is needed] **************************************
    ok: [localhost]
    
    TASK [ontap : Report cleanup status for orap-u01 daily snapshot after check against retention policy] ***
    skipping: [localhost]
    
    TASK [ontap : Report cleanup status for orap-u01 hourly snapshot after check against retention policy] ***
    skipping: [localhost]
    
    TASK [ontap : Deletion plan for orap-u01 daily snapshots, if cleanup needed] ***
    skipping: [localhost]
    
    TASK [ontap : Deletion plan for orap-u01 hourly snapshots, if cleanup needed] ***
    skipping: [localhost]
    
    TASK [ontap : Get the orap-u01 excess daily snapshots] *************************
    skipping: [localhost] => (item=[])
    skipping: [localhost]
    
    TASK [ontap : Get the orap-u01 excess hourly snapshots] ************************
    skipping: [localhost] => (item=[])
    skipping: [localhost]
    
    TASK [ontap : Delete orap-u01 excess daily snapshots] **************************
    skipping: [localhost]
    
    TASK [ontap : Delete orap-u01 excess hourly snapshots] *************************
    skipping: [localhost]
    
    TASK [ontap : List an existing snapshot of a DB volume in sequence if exist] ***
    changed: [localhost]
    
    TASK [ontap : Debug orap-u02 snapshot list] ************************************
    ok: [localhost] => {
        "snapshots.stdout_lines": [
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260210t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260213t000008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260206t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260205t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260212t125953",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260209t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260213t103635"
        ]
    }
    
    TASK [ontap : Parse orap-u02 snapshots count] **********************************
    ok: [localhost]
    
    TASK [ontap : Parse orap-u02 snapshots by backup frequency] ********************
    ok: [localhost] => (item=['projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260210t153007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260213t000008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260206t153007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260205t153007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260212t125953', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260209t153007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260213t103635'])
    
    TASK [ontap : list orap-u02 daily snapshot] ************************************
    ok: [localhost] => {
        "daily_snapshot_raw_1": [
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260205t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260206t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260209t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260210t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260212t125953",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260213t000008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260213t103635"
        ]
    }
    
    TASK [ontap : list orap-u02 hourly snapshot] ***********************************
    ok: [localhost] => {
        "hourly_snapshot_raw_1": []
    }
    
    TASK [ontap : Report snapshots count per volume] *******************************
    ok: [localhost] => {
        "msg": [
            "Volume orap-u02 has 7 daily snapshots",
            "Volume orap-u02 has 0 hourly snapshots"
        ]
    }
    
    TASK [ontap : Check if cleanup is needed] **************************************
    ok: [localhost]
    
    TASK [ontap : Report cleanup status for orap-u02 daily snapshot after check against retention policy] ***
    skipping: [localhost]
    
    TASK [ontap : Report cleanup status for orap-u02 hourly snapshot after check against retention policy] ***
    skipping: [localhost]
    
    TASK [ontap : Deletion plan for orap-u02 daily snapshots, if cleanup needed] ***
    skipping: [localhost]
    
    TASK [ontap : Deletion plan for orap-u02 hourly snapshots, if cleanup needed] ***
    skipping: [localhost]
    
    TASK [ontap : Get the orap-u02 excess daily snapshots] *************************
    skipping: [localhost] => (item=[])
    skipping: [localhost]
    
    TASK [ontap : Get the orap-u02 excess hourly snapshots] ************************
    skipping: [localhost] => (item=[])
    skipping: [localhost]
    
    TASK [ontap : Delete orap-u02 excess daily snapshots] **************************
    skipping: [localhost]
    
    TASK [ontap : Delete orap-u02 excess hourly snapshots] *************************
    skipping: [localhost]
    
    TASK [ontap : List an existing snapshot of a DB volume in sequence if exist] ***
    changed: [localhost]
    
    TASK [ontap : Debug orap-u03 snapshot list] ************************************
    ok: [localhost] => {
        "snapshots.stdout_lines": [
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t090008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t120011",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t060008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260213t000008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260213t103635",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t210008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t220008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t100010",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t120009",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t150007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t030007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260210t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t080007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260209t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260205t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t150007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t050008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260206t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t130008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t230009",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260212t125953",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t160008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t110008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t160007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t020007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t040008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t130008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t140007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t070007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t200008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t010008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t140008"
        ]
    }
    
    TASK [ontap : Parse orap-u03 snapshots count] **********************************
    ok: [localhost]
    
    TASK [ontap : Parse orap-u03 snapshots by backup frequency] ********************
    ok: [localhost] => (item=['projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t090008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t120011', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t060008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260213t000008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260213t103635', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t210008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t220008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t100010', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t120009', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t150007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t030007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260210t153007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t080007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260209t153007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260205t153007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t150007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t050008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260206t153007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t130008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t230009', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260212t125953', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t160008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t110008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t160007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t020007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t040008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t130008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t140007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t070007', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t200008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t010008', 'projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t140008'])
    
    TASK [ontap : list orap-u03 daily snapshot] ************************************
    ok: [localhost] => {
        "daily_snapshot_raw_2": [
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260205t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260206t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260209t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260210t153007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260212t125953",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260213t000008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-daily-orap-u03-20260213t103635"
        ]
    }
    
    TASK [ontap : list orap-u03 hourly snapshot] ***********************************
    ok: [localhost] => {
        "hourly_snapshot_raw_2": [
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t200008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t210008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t220008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t230009",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t010008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t020007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t030007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t040008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t050008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t060008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t070007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t080007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t090008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t100010",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t110008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t120009",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t130008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t140007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t150007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260213t160007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t120011",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t130008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t140008",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t150007",
            "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260217t160008"
        ]
    }
    
    TASK [ontap : Report snapshots count per volume] *******************************
    ok: [localhost] => {
        "msg": [
            "Volume orap-u03 has 7 daily snapshots",
            "Volume orap-u03 has 25 hourly snapshots"
        ]
    }
    
    TASK [ontap : Check if cleanup is needed] **************************************
    ok: [localhost]
    
    TASK [ontap : Report cleanup status for orap-u03 daily snapshot after check against retention policy] ***
    skipping: [localhost]
    
    TASK [ontap : Report cleanup status for orap-u03 hourly snapshot after check against retention policy] ***
    ok: [localhost] => {
        "msg": [
            "Volume orap-u03 hourly snapshots exceeded retention limit and needs cleanup"
        ]
    }
    
    TASK [ontap : Deletion plan for orap-u03 daily snapshots, if cleanup needed] ***
    skipping: [localhost]
    
    TASK [ontap : Deletion plan for orap-u03 hourly snapshots, if cleanup needed] ***
    ok: [localhost] => {
        "msg": "Volume: orap-u03\nTotal hourly snapshots: 25\nWill delete excess: 1\n"
    }
    
    TASK [ontap : Get the orap-u03 excess daily snapshots] *************************
    skipping: [localhost] => (item=[])
    skipping: [localhost]
    
    TASK [ontap : Get the orap-u03 excess hourly snapshots] ************************
    ok: [localhost] => (item=['projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t200008']) => {
        "msg": "The excess 1 hourly snapshots are: ['projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t200008']"
    }
    
    TASK [ontap : Delete orap-u03 excess daily snapshots] **************************
    skipping: [localhost]
    
    TASK [ontap : Delete orap-u03 excess hourly snapshots] *************************
    changed: [localhost] => (item=projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260212t200008)
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=40   changed=7    unreachable=0    failed=0    skipped=23   rescued=0    ignored=0
    orap                       : ok=6    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    
    End Oracle DB snapshot backup at 2026-0217-160040
  7. 다음 로그 파일 기록은 애플리케이션 정합성이 보장된 스냅샷의 볼트 백업 세부 정보를 캡처합니다.

    Begin Oracle DB daily vault backup at 2026-0225-000501
    
    PLAY [Enable Oracle bkup mode for consistent snapshot] *************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [orap]
    
    TASK [Call presnap tasks block before snapshot] ********************************
    skipping: [orap]
    
    PLAY [Take a volume snapshot or vault backup] **********************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [ontap : Open a GCP connection via cli] ***********************************
    included: /home/admin/na_oracle_bkup_gcnv/roles/ontap/tasks/gcp_open_conn.yml for localhost
    
    TASK [ontap : Login to GCP with service key from cli] **************************
    changed: [localhost]
    
    TASK [ontap : Take app consistent snapshots for DB volumes] ********************
    skipping: [localhost]
    
    TASK [ontap : Take app consistent vault backups from DB volume snapshots] ******
    included: /home/admin/na_oracle_bkup_gcnv/roles/ontap/tasks/gcp_snap_bk2vault.yml for localhost
    
    TASK [ontap : Check if an existing backup vault db-vault exist] ****************
    ok: [localhost]
    
    TASK [ontap : debug] ***********************************************************
    ok: [localhost] => {
        "vault_list_raw.stdout_lines": [
            "db-vault",
            "us-east4-vault",
            "dg-backup-vault-destination-b9ec"
        ]
    }
    
    TASK [ontap : Check if db-vault is in the list] ********************************
    ok: [localhost]
    
    TASK [ontap : Create backup vault, if not exist] *******************************
    skipping: [localhost]
    
    TASK [ontap : Assign DB volumes to backup vault] *******************************
    skipping: [localhost] => (item=orap-u01)
    skipping: [localhost] => (item=orap-u02)
    skipping: [localhost] => (item=orap-u03)
    skipping: [localhost]
    
    TASK [ontap : Purge the existing vault backups to maintain the retention] ******
    included: /home/admin/na_oracle_bkup_gcnv/roles/ontap/tasks/gcp_del_vault_bkup.yml for localhost => (item=orap-u01)
    included: /home/admin/na_oracle_bkup_gcnv/roles/ontap/tasks/gcp_del_vault_bkup.yml for localhost => (item=orap-u02)
    included: /home/admin/na_oracle_bkup_gcnv/roles/ontap/tasks/gcp_del_vault_bkup.yml for localhost => (item=orap-u03)
    
    TASK [ontap : List existing vault bkup of the DB volume orap-u01 if exist] *****
    changed: [localhost]
    
    TASK [ontap : Display all backups for volume orap-u01] *************************
    ok: [localhost] => {
        "vol_vault_bkup.stdout_lines": [
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u01-20260220t131037",
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-orap-u01-20260224t134624",
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u01-20260224t000504",
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u01-20260223t155123"
        ]
    }
    
    TASK [ontap : Retrieve the vault backups to purge for volume orap-u01 with retention goal] ***
    ok: [localhost] => {
        "msg": [
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u01-20260220t131037"
        ]
    }
    
    TASK [ontap : Purge the extra vault backups for volume orap-u01 to maintain the retention] ***
    changed: [localhost] => (item=projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u01-20260220t131037)
    
    TASK [ontap : List existing vault bkup of the DB volume orap-u02 if exist] *****
    changed: [localhost]
    
    TASK [ontap : Display all backups for volume orap-u02] *************************
    ok: [localhost] => {
        "vol_vault_bkup.stdout_lines": [
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u02-20260224t000504",
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u02-20260223t155123",
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u02-20260220t131037",
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-orap-u02-20260224t134624"
        ]
    }
    
    TASK [ontap : Retrieve the vault backups to purge for volume orap-u02 with retention goal] ***
    ok: [localhost] => {
        "msg": [
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u02-20260220t131037"
        ]
    }
    
    TASK [ontap : Purge the extra vault backups for volume orap-u02 to maintain the retention] ***
    changed: [localhost] => (item=projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u02-20260220t131037)
    
    TASK [ontap : List existing vault bkup of the DB volume orap-u03 if exist] *****
    changed: [localhost]
    
    TASK [ontap : Display all backups for volume orap-u03] *************************
    ok: [localhost] => {
        "vol_vault_bkup.stdout_lines": [
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u03-20260224t120840",
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u03-20260224t000504",
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-hourly-orap-u03-20260220t140451",
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-orap-u03-20260224t134624"
        ]
    }
    
    TASK [ontap : Retrieve the vault backups to purge for volume orap-u03 with retention goal] ***
    ok: [localhost] => {
        "msg": [
            "projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u03-20260224t000504"
        ]
    }
    
    TASK [ontap : Purge the extra vault backups for volume orap-u03 to maintain the retention] ***
    changed: [localhost] => (item=projects/cvs-pm-host-1p/locations/us-east4/backupVaults/db-vault/backups/bkup-daily-orap-u03-20260224t000504)
    
    TASK [ontap : Obtain current date, time] ***************************************
    ok: [localhost] => {
        "ansible_date_time": {
            "date": "2026-02-25",
            "day": "25",
            "epoch": "1771995904",
            "epoch_int": "1771995904",
            "hour": "00",
            "iso8601": "2026-02-25T05:05:04Z",
            "iso8601_basic": "20260225T000504817299",
            "iso8601_basic_short": "20260225T000504",
            "iso8601_micro": "2026-02-25T05:05:04.817299Z",
            "minute": "05",
            "month": "02",
            "second": "04",
            "time": "00:05:04",
            "tz": "EST",
            "tz_dst": "EDT",
            "tz_offset": "-0500",
            "weekday": "Wednesday",
            "weekday_number": "3",
            "weeknumber": "08",
            "year": "2026"
        }
    }
    
    TASK [ontap : Create a weekly vault backup for each volume from most recent volume snapshot] ***
    skipping: [localhost] => (item=orap-u01)
    skipping: [localhost] => (item=orap-u02)
    skipping: [localhost] => (item=orap-u03)
    skipping: [localhost]
    
    TASK [ontap : Create a daily vault backup for each volume from most recent volume snapshot] ***
    included: /home/admin/na_oracle_bkup_gcnv/roles/ontap/tasks/gcp_process_vol_vault.yml for localhost => (item=orap-u01)
    included: /home/admin/na_oracle_bkup_gcnv/roles/ontap/tasks/gcp_process_vol_vault.yml for localhost => (item=orap-u02)
    included: /home/admin/na_oracle_bkup_gcnv/roles/ontap/tasks/gcp_process_vol_vault.yml for localhost => (item=orap-u03)
    
    TASK [ontap : List existing snapshots of DB volume orap-u01 if exist] **********
    changed: [localhost]
    
    TASK [ontap : Retrieve the last or most recent snapshot] ***********************
    ok: [localhost] => {
        "snapshots.stdout_lines | sort | last": "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u01/snapshots/snap-daily-orap-u01-20260225t000007"
    }
    
    TASK [ontap : Take a vault bkup of DB volume orap-u01 from most recent snapshot] ***
    changed: [localhost]
    
    TASK [ontap : List existing snapshots of DB volume orap-u02 if exist] **********
    changed: [localhost]
    
    TASK [ontap : Retrieve the last or most recent snapshot] ***********************
    ok: [localhost] => {
        "snapshots.stdout_lines | sort | last": "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u02/snapshots/snap-daily-orap-u02-20260225t000007"
    }
    
    TASK [ontap : Take a vault bkup of DB volume orap-u02 from most recent snapshot] ***
    changed: [localhost]
    
    TASK [ontap : List existing snapshots of DB volume orap-u03 if exist] **********
    changed: [localhost]
    
    TASK [ontap : Retrieve the last or most recent snapshot] ***********************
    ok: [localhost] => {
        "snapshots.stdout_lines | sort | last": "projects/cvs-pm-host-1p/locations/us-east4-b/volumes/orap-u03/snapshots/snap-hourly-orap-u03-20260224t230008"
    }
    
    TASK [ontap : Take a vault bkup of DB volume orap-u03 from most recent snapshot] ***
    changed: [localhost]
    
    TASK [ontap : Create a hourly vault backup for each volume from most recent volume snapshot] ***
    skipping: [localhost] => (item=orap-u03)
    skipping: [localhost]
    
    TASK [ontap : Take app consistent vault backups from DB volumes] ***************
    skipping: [localhost]
    
    PLAY [End Oracle backup mode after snapshot] ***********************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [orap]
    
    TASK [Call postsnap tasks block after snapshot] ********************************
    skipping: [orap]
    
    PLAY [Prune volume snapshot based on defined retention goals] ******************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [Call snapshot management tasks block] ************************************
    skipping: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=36   changed=13   unreachable=0    failed=0    skipped=7    rescued=0    ignored=0
    orap                       : ok=2    changed=0    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
    
    End Oracle DB daily vault backup at 2026-0225-001406
참고 스냅샷에서 생성된 볼트 백업이 이미 있는 경우 동일한 스냅샷에 대한 두 번째 백업 시도는 오류 없이 건너뜁니다.

Google Cloud NetApp Volumes를 이용한 Oracle 데이터베이스 복구 및 복제

Google Cloud NetApp Volumes 스냅샷을 사용한 Oracle 데이터베이스 현재 위치 특정 시점 복구

Details

Oracle 데이터베이스 특정 시점 복구는 실수로 삭제되거나 손상된 데이터를 복구하거나 논리적 오류를 복구하는 데 일반적으로 사용됩니다. Google NetApp Volumes 스냅샷을 사용하면 데이터베이스를 특정 스냅샷으로 복원하여 Oracle 데이터베이스의 특정 시점 복구를 간편하게 수행할 수 있습니다. 이를 통해 전체 백업에서 복원하지 않고도 데이터 손실 또는 손상으로부터 신속하게 복구할 수 있습니다. 다음은 Google NetApp Volumes 스냅샷을 사용하여 삭제된 테이블을 복구하는 단계를 보여줍니다.

  1. 본 데모에서는 먼저 "NTAP" 데이터베이스에 "test"라는 테스트 테이블을 생성하고 데이터를 삽입합니다. 그런 다음 실수로 데이터가 삭제된 상황을 시뮬레이션하기 위해 테이블을 삭제합니다. 이후 Google NetApp Volumes 스냅샷을 사용하여 테이블이 삭제되기 이전 시점으로 데이터베이스를 복원하고 테이블과 데이터가 성공적으로 복구되었는지 확인합니다.

    SQL> select current_timestamp from dual;
    
    CURRENT_TIMESTAMP
    ---------------------------------------------------------------------------
    06-FEB-26 08.41.29.708302 PM +00:00
    
    SQL> select * from test;
    
            ID
    ----------
    DT
    ---------------------------------------------------------------------------
    EVENT
    --------------------------------------------------------------------------------
             1
    05-FEB-26 08.14.17.000000 PM
    testing Oracle in-place restore and point-in-time recovery for GCNV
    
    
    SQL> drop table test;
    
    Table dropped.
    
    SQL> select * from test;
    select * from test
                  *
    ERROR at line 1:
    ORA-00942: table or view does not exist
  2. 스냅샷에서 복원하기 전에 Oracle 서비스를 중지하여 Oracle 데이터베이스를 종료하고 호스트의 파일 시스템을 마운트 해제하십시오.

    [root@orap admin]# systemctl stop oracle_NTAP
    [root@orap admin]# umount /u01
    [root@orap admin]# umount /u02
    [root@orap admin]# umount /u03
    [root@orap admin]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        7.2G     0  7.2G   0% /dev
    tmpfs           7.3G     0  7.3G   0% /dev/shm
    tmpfs           7.3G   17M  7.2G   1% /run
    tmpfs           7.3G     0  7.3G   0% /sys/fs/cgroup
    /dev/sda2        50G   23G   28G  46% /
    /dev/sda1       200M  5.9M  194M   3% /boot/efi
    tmpfs           1.5G     0  1.5G   0% /run/user/1010
  3. 복구하려는 데이터가 포함된 스냅샷을 식별합니다. Google Cloud Console 또는 gcloud 명령줄 도구를 사용하여 Oracle 데이터베이스 볼륨에 사용 가능한 스냅샷을 나열할 수 있습니다. 스냅샷 목록 끝에 있는 점 세 개를 클릭하고 `Show More`에서 옵션을 확인합니다. `Revert`를 선택하여 선택한 스냅샷으로 되돌립니다. 모든 DB 볼륨에 대해 반복합니다.

    이 이미지는 NFS를 사용하는 Google Cloud의 Oracle 배포 환경에서 GCNV 볼륨 스냅샷을 복원하는 화면 스크린샷을 제공합니다.

    이 이미지는 NFS를 사용하는 Google Cloud의 Oracle 배포 환경에서 GCNV 볼륨 스냅샷을 복원하는 화면 스크린샷을 제공합니다.

    이 이미지는 NFS를 사용하는 Google Cloud의 Oracle 배포 환경에서 GCNV 볼륨 스냅샷을 복원하는 화면 스크린샷을 제공합니다.

  4. 스냅샷 되돌리기가 완료된 후 DB 볼륨을 마운트하십시오.

    [root@orap admin]# mount -t nfs 10.165.128.242:/orap-u01 /u01 -o rw,bg,hard,vers=3,proto=tcp,timeo=600,rsize=65536,wsize=65536
    [root@orap admin]# mount -t nfs 10.165.128.242:/orap-u02 /u02 -o rw,bg,hard,vers=3,proto=tcp,timeo=600,rsize=65536,wsize=65536
    [root@orap admin]# mount -t nfs 10.165.128.242:/orap-u03 /u03 -o rw,bg,hard,vers=3,proto=tcp,timeo=600,rsize=65536,wsize=65536
    [root@orap admin]# df -h
    Filesystem                Size  Used Avail Use% Mounted on
    devtmpfs                  7.2G     0  7.2G   0% /dev
    tmpfs                     7.3G     0  7.3G   0% /dev/shm
    tmpfs                     7.3G   17M  7.2G   1% /run
    tmpfs                     7.3G     0  7.3G   0% /sys/fs/cgroup
    /dev/sda2                  50G   23G   28G  46% /
    /dev/sda1                 200M  5.9M  194M   3% /boot/efi
    tmpfs                     1.5G     0  1.5G   0% /run/user/1010
    10.165.128.242:/orap-u01   50G   11G   40G  22% /u01
    10.165.128.242:/orap-u02  500G  477G   24G  96% /u02
    10.165.128.242:/orap-u03  300G  4.9G  296G   2% /u03
  5. Oracle 데이터베이스 서버에 로그인하고 sqlplus를 통해 시점 복구 명령을 실행하여 데이터베이스를 원하는 시점으로 복구하십시오.

    [oracle@orap ~]$ env | grep ORA
    ORACLE_SID=NTAP
    ORACLE_HOME=/u01/app/oracle/product/21.0.0/NTAP
    [oracle@orap ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 21.0.0.0.0 - Production on Fri Feb 6 21:08:34 2026
    Version 21.19.0.0.0
    
    Copyright (c) 1982, 2021, Oracle.  All rights reserved.
    
    Connected to an idle instance.
    
    SQL> startup mount;
    ORACLE instance started.
    
    Total System Global Area 6442447808 bytes
    Fixed Size                  9700288 bytes
    Variable Size            1342177280 bytes
    Database Buffers         5083496448 bytes
    Redo Buffers                7073792 bytes
    Database mounted.
    
    SQL> recover database until cancel using backup controlfile;
    ORA-00279: change 6239773 generated at 02/06/2026 20:30:06 needed for thread 1
    ORA-00289: suggestion : /u03/orareco/NTAP/archivelog/2026_02_06/o1_mf_1_55_%u_.arc
    ORA-00280: change 6239773 for thread 1 is in sequence #55
    
    [oracle@orap ~]$ ls -l /u03/orareco/NTAP/archivelog/2026_02_06
    total 159376
    -r--r----- 1 oracle oinstall 118324736 Feb  6 16:05 o1_mf_1_50__4lsr8joo_.arc
    -r--r----- 1 oracle oinstall   7432704 Feb  6 17:05 o1_mf_1_51__4p51o6k4_.arc
    -r--r----- 1 oracle oinstall  11385856 Feb  6 18:05 o1_mf_1_52__4sjbbr29_.arc
    -r--r----- 1 oracle oinstall  16721920 Feb  6 19:05 o1_mf_1_53__4wvn4ohy_.arc
    -r--r----- 1 oracle oinstall   8655360 Feb  6 20:30 o1_mf_1_54__51mmc8ph_.arc
    
    
    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
    /u03/orareco/NTAP/onlinelog/redo01.log
    Log applied.
    Media recovery complete.
    SQL> alter database open resetlogs;
    
    Database altered.
    
    Note: You may need to apply the current online logs if there are any changes when the snapshot was taken.
  6. 복구가 완료되면 데이터가 성공적으로 복구되었는지 확인하십시오.

    SQL> alter session set container = ntap_pdb1;
    
    Session altered.
    
    SQL> select * from test;
    
            ID DT                                                                          EVENT
    ---------- --------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
             1 05-FEB-26 08.14.17.000000 PM                                                testing Oracle in-place restore and point-in-time recovery for GCNV
    
    SQL> select current_timestamp from dual;
    
    CURRENT_TIMESTAMP
    ---------------------------------------------------------------------------
    06-FEB-26 09.39.08.097365 PM +00:00
  7. 데이터베이스를 systemd 서비스로 종료한 후 다시 시작하여 복구 프로세스를 완료하십시오.

    SQL> alter session set container=cdb$root;
    
    Session altered.
    
    SQL> shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> exit
    
    
    [root@orap admin]# systemctl start oracle_NTAP
    [root@orap admin]# systemctl status oracle_NTAP
    ● oracle_NTAP.service - Oracle Database Start/Stop Service
       Loaded: loaded (/etc/systemd/system/oracle_NTAP.service; enabled; vendor preset: disabled)
       Active: active (running) since Fri 2026-02-06 21:42:19 UTC; 9s ago
      Process: 61431 ExecStop=/u01/app/oracle/product/21.0.0/NTAP/bin/dbshut /u01/app/oracle/product/21.0.0/NTAP (code=exited, status=0/SUCCESS)
      Process: 62476 ExecStart=/u01/app/oracle/product/21.0.0/NTAP/bin/dbstart /u01/app/oracle/product/21.0.0/NTAP (code=exited, status=0/SUCCESS)
        Tasks: 85 (limit: 94156)
       Memory: 6.6G
       CGroup: /system.slice/oracle_NTAP.service
               ├─62487 /u01/app/oracle/product/21.0.0/NTAP/bin/tnslsnr LISTENER -inherit
               ├─62587 ora_pmon_NTAP
               ├─62591 ora_clmn_NTAP
               ├─62595 ora_psp0_NTAP
               ├─62599 ora_vktm_NTAP
               ├─62605 ora_gen0_NTAP
               ├─62609 ora_mman_NTAP
               ├─62615 ora_gen1_NTAP
               ├─62617 ora_gen2_NTAP
               ├─62619 ora_vosd_NTAP
               ├─62621 ora_diag_NTAP
               ├─62623 ora_ofsd_NTAP
               ├─62625 ora_dbrm_NTAP
               ├─62627 ora_vkrm_NTAP
               ├─62629 ora_svcb_NTAP
               ├─62631 ora_pman_NTAP
               ├─62633 ora_dia0_NTAP
               ├─62635 ora_dbw0_NTAP
               ├─62637 ora_lgwr_NTAP
               ├─62642 ora_ckpt_NTAP
               ├─62648 ora_smon_NTAP
               ├─62651 ora_smco_NTAP
               ├─62655 ora_reco_NTAP
               ├─62657 ora_lreg_NTAP
               ├─62659 ora_bg00_NTAP
               ├─62661 ora_pxmn_NTAP
               ├─62675 ora_mmon_NTAP
               ├─62677 ora_mmnl_NTAP
               ├─62685 ora_lg00_NTAP
               ├─62688 ora_bg01_NTAP
               ├─62690 ora_d000_NTAP
               ├─62692 ora_w000_NTAP
               ├─62695 ora_s000_NTAP
               ├─62699 ora_lg01_NTAP
               ├─62701 ora_tmon_NTAP
               ├─62703 ora_w001_NTAP
               ├─62710 ora_m000_NTAP
               ├─62712 ora_m001_NTAP
               ├─62717 ora_tt00_NTAP
               ├─62719 ora_arc0_NTAP
               ├─62721 ora_tt01_NTAP
               ├─62723 ora_arc1_NTAP
               ├─62725 ora_arc2_NTAP
               ├─62727 ora_arc3_NTAP
               ├─62729 ora_tt02_NTAP
               ├─62733 ora_rcbg_NTAP
               ├─62737 ora_w002_NTAP
               ├─62739 ora_aqpc_NTAP
               ├─62743 ora_p000_NTAP
               ├─62745 ora_p001_NTAP
               ├─62747 ora_p002_NTAP
               ├─62749 ora_p003_NTAP
               ├─62751 ora_p004_NTAP
               ├─62753 ora_p005_NTAP
               ├─62755 ora_p006_NTAP
               ├─62757 ora_p007_NTAP
               ├─62759 ora_s001_NTAP
               ├─62942 ora_w003_NTAP
               ├─62949 ora_w004_NTAP
               ├─62958 ora_cjq0_NTAP
               ├─62960 ora_qm02_NTAP
               ├─63026 ora_q001_NTAP
               ├─63028 ora_qm03_NTAP
               ├─63030 ora_q003_NTAP
               ├─63032 ora_q004_NTAP
               ├─63034 ora_q005_NTAP
               ├─63036 ora_p008_NTAP
               ├─63038 ora_p009_NTAP
               ├─63040 ora_p00a_NTAP
               ├─63042 ora_p00b_NTAP
               ├─63048 ora_m002_NTAP
               ├─63050 ora_m003_NTAP
               ├─63056 ora_mz00_NTAP
               ├─63060 ora_mz03_NTAP
               ├─63062 ora_mz02_NTAP
               ├─63064 ora_mz04_NTAP
               └─63072 ora_m004_NTAP
    
    Feb 06 21:41:55 orap systemd[1]: Starting Oracle Database Start/Stop Service...
    Feb 06 21:41:55 orap dbstart[62524]: Processing Database instance "NTAP": log file /u01/app/oracle/homes/OraDB21Home1/rdbms/log/startup.log
    Feb 06 21:42:19 orap systemd[1]: Started Oracle Database Start/Stop Service.

Google Cloud NetApp Volumes Vault 백업을 사용하여 Oracle 데이터베이스를 새 호스트로 복구하는 방법

Details

원래 호스트를 더 이상 사용할 수 없거나 기본 DB 볼륨에 액세스할 수 없는 경우와 같이 새 호스트로 복구해야 하는 장애가 발생하면 Google Cloud NetApp Volumes 볼트 백업을 사용하여 새 호스트에 Oracle 데이터베이스를 복원할 수 있습니다. 이 과정은 스냅샷을 사용한 제자리 복구와 유사하지만 스냅샷으로 되돌리는 대신 볼트 백업에서 데이터베이스를 복원합니다. 이를 통해 다른 호스트에서 데이터베이스를 복구할 수 있으므로 원래 호스트를 더 이상 사용할 수 없거나 하드웨어 장애가 발생한 시나리오에서 유용할 수 있습니다. 볼트 백업에서 복원하는 단계는 다음과 같습니다.

  1. 복구하려는 데이터가 포함된 볼트 백업을 찾으세요. Google Cloud 콘솔 또는 gcloud 명령줄 도구를 사용하여 Oracle 데이터베이스 볼륨에 사용 가능한 볼트 백업 목록을 확인할 수 있습니다. 볼트 백업 목록 끝에 있는 점 세 개를 클릭하고 Show more 아래에서 옵션을 확인하세요. 선택한 볼트 백업에서 복원하려면 `Create new volume from backup`를 선택하세요. 모든 DB 볼륨에 대해 반복합니다. 필요한 경우 동일한 스토리지 풀 또는 다른 스토리지 풀로 복원할 수도 있습니다.

    이 이미지는 NFS를 사용하는 Google Cloud의 Oracle 배포 환경에서 GCNV 볼트 백업 복원 과정을 보여주는 스크린샷입니다. 이 이미지는 NFS를 사용하는 Google Cloud의 Oracle 배포 환경에서 GCNV 볼트 백업 복원 과정을 보여주는 스크린샷입니다. 이 이미지는 NFS를 사용하는 Google Cloud의 Oracle 배포 환경에서 GCNV 볼트 백업 복원 과정을 보여주는 스크린샷입니다. 이 이미지는 NFS를 사용하는 Google Cloud의 Oracle 배포 환경에서 GCNV 볼트 백업 복원 과정을 보여주는 스크린샷입니다. 이 이미지는 NFS를 사용하는 Google Cloud의 Oracle 배포 환경에서 GCNV 볼트 백업 복원 과정을 보여주는 스크린샷입니다. 이 이미지는 NFS를 사용하는 Google Cloud의 Oracle 배포 환경에서 GCNV 볼트 백업 복원 과정을 보여주는 스크린샷입니다.

  2. 하드웨어, 운영 체제 및 OS 커널 패치 구성 측면에서 원래 호스트와 일치하는 새 데이터베이스 서버를 생성합니다. 이렇게 하면 복원 프로세스가 완료된 후 복원된 데이터베이스를 제대로 마운트하고 열 수 있습니다.

    이 이미지는 NFS를 사용하는 Google Cloud의 Oracle 배포 환경에서 GCNV 볼트 백업 복원 과정을 보여주는 스크린샷입니다.

    You may also use the same Ansible playbook from automated database deployment section to automate the new database server configuration for the linux only.
    
    [admin@ansiblectl na_oracle_deploy_nfs]$ ansible-playbook -i hosts 2-linux_config.yml -u admin -e @vars/vars.yml
  3. 관리자 사용자로 새 DB 서버에 로그인합니다. 복원된 DB 볼륨을 원래 호스트와 동일한 마운트 지점에 마운트합니다. 필요한 경우 마운트 지점의 소유권을 변경합니다.

    [admin@orap2 ~]$ sudo mount -t nfs 10.165.128.242:/orap-u01-bkup /u01 -o rw,bg,hard,vers=3,proto=tcp,timeo=600,rsize=262144,wsize=262144
    mount: (hint) your fstab has been modified, but systemd still uses
           the old version; use 'systemctl daemon-reload' to reload.
    [admin@orap2 ~]$ sudo mount -t nfs 10.165.128.242:/orap-u02-bkup /u02 -o rw,bg,hard,vers=3,proto=tcp,timeo=600,rsize=262144,wsize=262144
    mount: (hint) your fstab has been modified, but systemd still uses
           the old version; use 'systemctl daemon-reload' to reload.
    [admin@orap2 ~]$ sudo mount -t nfs 10.165.128.242:/orap-u03-bkup /u03 -o rw,bg,hard,vers=3,proto=tcp,timeo=600,rsize=262144,wsize=262144
    mount: (hint) your fstab has been modified, but systemd still uses
           the old version; use 'systemctl daemon-reload' to reload.
    [admin@orap2 ~]$ sudo systemctl daemon-reload
    [admin@orap2 ~]$ df -h
    Filesystem                     Size  Used Avail Use% Mounted on
    devtmpfs                       7.2G     0  7.2G   0% /dev
    tmpfs                          7.3G     0  7.3G   0% /dev/shm
    tmpfs                          7.3G  8.5M  7.2G   1% /run
    tmpfs                          7.3G     0  7.3G   0% /sys/fs/cgroup
    /dev/sda2                       50G   23G   28G  45% /
    /dev/sda1                      200M  5.9M  194M   3% /boot/efi
    tmpfs                          1.5G     0  1.5G   0% /run/user/1010
    tmpfs                          1.5G     0  1.5G   0% /run/user/1011
    10.165.128.242:/orap-u01-bkup   50G   11G   40G  22% /u01
    10.165.128.242:/orap-u02-bkup  500G  382G  119G  77% /u02
    10.165.128.242:/orap-u03-bkup  300G  5.6G  295G   2% /u03
    
    [admin@orap2 ~]$ sudo chown oracle:oinstall /u01
    [admin@orap2 ~]$ sudo chown oracle:oinstall /u02
    [admin@orap2 ~]$ sudo chown oracle:oinstall /u03
  4. oratab, oraInstall.loc 파일과 같은 Oracle 데이터베이스 환경 변수 및 루트 디렉터리 파일을 구성합니다.

    [admin@orap2 ~]$ sudo vi /etc/oraInst.loc
    [admin@orap2 ~]$ vi /etc/oratab
    [admin@orap2 ~]$ sudo vi /etc/oratab
    [admin@orap2 ~]$ sudo chown oracle:oinstall /etc/oratab
    [admin@orap2 ~]$ ls -l /etc/ora*
    -rw-r--r--. 1 root   root      56 Feb 13 19:37 /etc/oraInst.loc
    -rw-rw-r--. 1 oracle oinstall 784 Feb 13 19:38 /etc/oratab
    
    [oracle@orap2 ~]$ env | grep ORA
    ORACLE_SID=NTAP
    ORACLE_HOME=/u01/app/oracle/product/21.0.0/NTAP
  5. oracle 사용자로서 Oracle 바이너리를 다시 링크하십시오.

    [oracle@orap2 ~]$ cd $ORACLE_HOME/bin
    [oracle@orap2 bin]$ ./relink
    writing relink log to: /u01/app/oracle/homes/OraDB21Home1/install/relinkActions2026-02-13_07-45-29PM.log
  6. 마지막으로 사용 가능한 로그까지 데이터베이스를 복구한 다음 resetlogs 옵션을 사용하여 데이터베이스를 엽니다.

    [oracle@orap2 bin]$ sqlplus / as sysdba
    
    SQL*Plus: Release 21.0.0.0.0 - Production on Fri Feb 13 19:49:50 2026
    Version 21.19.0.0.0
    
    Copyright (c) 1982, 2021, Oracle.  All rights reserved.
    
    Connected to an idle instance.
    
    SQL> startup mount;
    ORACLE instance started.
    
    Total System Global Area 6442447808 bytes
    Fixed Size                  9700288 bytes
    Variable Size            1593835520 bytes
    Database Buffers         4831838208 bytes
    Redo Buffers                7073792 bytes
    Database mounted.
    
    SQL> recover database until cancel using backup controlfile;
    ORA-00279: change 7017907 generated at 02/13/2026 05:00:07 needed for thread 1
    ORA-00289: suggestion :
    /u03/orareco/NTAP/archivelog/2026_02_13/o1_mf_1_96__938r46wf_.arc
    ORA-00280: change 7017907 for thread 1 is in sequence #96
    
    
    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
    auto
    ORA-00279: change 7022777 generated at 02/13/2026 06:00:06 needed for thread 1
    ORA-00289: suggestion :
    /u03/orareco/NTAP/archivelog/2026_02_13/o1_mf_1_97__96n12q2b_.arc
    ORA-00280: change 7022777 for thread 1 is in sequence #97
    ORA-00278: log file
    '/u03/orareco/NTAP/archivelog/2026_02_13/o1_mf_1_96__938r46wf_.arc' no longer
    needed for this recovery
    .
    .
    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
    cancel
    Media recovery cancelled.
    SQL> alter database open resetlogs;
    
    Database altered.
    
    SQL> select name, open_mode, log_mode from v$database;
    
    NAME      OPEN_MODE            LOG_MODE
    --------- -------------------- ------------
    NTAP      READ WRITE           ARCHIVELOG
    
    SQL> show pdbs;
    
        CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    ---------- ------------------------------ ---------- ----------
             2 PDB$SEED                       READ ONLY  NO
             3 NTAP_PDB1                      READ WRITE NO
             4 NTAP_PDB2                      READ WRITE NO
             5 NTAP_PDB3                      READ WRITE NO
    SQL> select instance_name, host_name from v$instance;
    
    INSTANCE_NAME
    ----------------
    HOST_NAME
    ----------------------------------------------------------------
    NTAP
    orap2
    
    
    SQL> alter session set container=ntap_pdb1;
    
    Session altered.
    
    SQL> select * from test;
    
            ID
    ----------
    DT
    ---------------------------------------------------------------------------
    EVENT
    --------------------------------------------------------------------------------
             1
    05-FEB-26 08.14.17.000000 PM
    testing Oracle in-place restore and point-in-time recovery for GCNV
  7. 복구가 완료되면 listener.ora 및 tnsnames.ora 파일을 새 호스트 이름 또는 IP 주소와 일치하도록 수정하는 등의 추가 단계를 수행해야 합니다. 필요한 경우 systemd 서비스를 설정하여 데이터베이스를 종료하고 다시 시작하여 복원 및 복구 프로세스를 완료하십시오.

참고 Oracle 제어 파일의 중복 복사본이 데이터베이스 구성에 구현된 경우. DB 복원 후 복원된 데이터베이스에 일관되지 않은 제어 파일이 있을 수 있습니다. 이 경우 로그 볼륨에 있는 제어 파일을 사용하여 데이터 볼륨의 제어 파일을 덮어써서 문제를 해결할 수 있습니다.

Google Cloud NetApp Volumes 스냅샷 또는 볼트 백업을 사용하여 Oracle 데이터베이스를 새 호스트로 복제하는 방법

Details

Google Cloud NetApp Volumes 스냅샷 또는 볼트 백업을 사용하여 새 호스트로 Oracle 데이터베이스를 복제하는 것은 장애 발생 시 새 호스트에서 Google Cloud NetApp Volumes 스냅샷 또는 볼트 백업을 사용하여 Oracle 데이터베이스를 복원 및 복구하는 방법을 설명하는 이전 섹션과 동일합니다. 그러나 복제된 데이터베이스의 이름을 변경하는 것은 추가 단계로 필요할 수 있으며, 이는 Oracle dbnewid 유틸리티를 사용하여 쉽게 수행할 수 있습니다. DB 복제는 UAT 테스트, 개발 또는 기타 목적으로 유용할 수 있습니다.

자동화된 클론 생성 및 클론 새로 고침이 필요한 일부 고객의 경우, Google Cloud NetApp Volumes 스냅샷 또는 볼트 백업을 사용하여 클론 생성 및 새로 고침 프로세스를 자동화하는 데 참조할 수 있는 Ansible 플레이북 샘플을 NetApp Solutions Engineering 팀에 요청해 주시기 바랍니다. NetApp Solutions Engineering 팀에 요청을 제출하는 링크는 다음과 같습니다:"자동화 요청"

추가 정보를 찾을 수 있는 곳

이 문서에 설명된 정보에 대해 자세히 알아보려면 다음 문서 및/또는 웹사이트를 검토하세요.