RMAN 백업을 사용하여 오브젝트 스토리지에서 데이터베이스 복구
이 문서에서는 오브젝트 스토리지에 저장된 RMAN(Recovery Manager) 백업을 복구하는 방법에 대해 설명합니다.
선행 조건
다음이 필요합니다.
- 데이터베이스를 복원할 새 DB 시스템입니다(아래 가정 참조). 자세한 내용은 DB 시스템 생성 개요를 참조하십시오.
- Oracle Database Cloud Backup 모듈이 DB 시스템에 설치되어 있어야 합니다. 자세한 내용은 RMAN을 사용하여 오브젝트 스토리지에 데이터베이스 백업의 DB 시스템에 백업 모듈 설치를 참조하십시오.
가정
아래 절차는 다음을 가정합니다.
- 복원된 데이터베이스를 호스트하기 위해 새 DB 시스템이 생성되었으며 새 DB 시스템에 다른 데이터베이스가 존재하지 않습니다. 기존 데이터베이스가 있지만 이 항목의 범위를 벗어난 DB 시스템으로 복원할 수 있습니다.
-
원본 데이터베이스가 손실되어 남아 있는 모든 백업이 최신 RMAN 백업입니다. 이 프로시저는 DB 시스템(데이터베이스 포함)이 더 이상 존재하지 않는다고 가정합니다.
주: 가장 최근 백업에 포함되지 않은 데이터는 모두 손실됩니다.
- 마지막 백업 시 원래 데이터베이스에서 사용된 Oracle Wallet 및/또는 암호화 키를 사용할 수 있습니다.
- RMAN 백업에는 최신 백업의 제어 파일 및 spfile 복사본은 물론 완전 데이터베이스 복구를 수행하는 데 필요한 모든 데이터 파일 및 아카이브 로그 백업이 포함됩니다.
- 복원 중에는 RMAN 카탈로그가 사용되지 않습니다.
DB 시스템의 저장 영역 설정
-
DB 시스템에서 SSH로 접속합니다.
ssh -i <private_key_path> opc@<db_system_ip_address> -
opc로 로그인한 다음 root 유저에게 sudo를 입력합니다.
sudo su -를 하이픈과 함께 사용하여 루트 사용자의 프로파일을 호출합니다. 그러면 PATH가 dbcli 디렉토리(/opt/oracle/dcs/bin)로 설정됩니다.login as: opc sudo su - -
기존의 빈 데이터베이스 홈을 사용하거나 복원할 새 데이터베이스 홈을 만들 수 있습니다. 적용 가능한 명령을 사용하여 이 단계를 완료합니다.
기존 데이터베이스 홈을 사용하려는 경우
-
데이터베이스 홈을 나열하려면 Dbhome 명령을 사용합니다.
dbcli list-dbhomes출력:
ID Name DB Version Home Location ---------------------------------------- -------------------- ---------- --------------------------------------------- 2e743050-b41d-4283-988f-f33d7b082bda OraDB12102_home1 12.1.0.2 /u01/app/oracle/product/12.1.0.2/dbhome_1 -
데이터베이스 명령을 사용하여 데이터베이스 홈이 데이터베이스와 연관되지 않았는지 확인합니다.
필요한 경우 Dbhome 명령을 사용하여 복원을 위한 데이터베이스 홈을 만듭니다.
-
-
Dbstorage 명령을 사용하여 DATA, RECO 및 REDO 스토리지에 대한 디렉토리를 설정합니다. 다음 예에서는 rectest 데이터베이스에 대해 10GB의 ACFS 스토리지를 만듭니다.
dbcli create-dbstorage --dbname rectest --dataSize 10 --dbstorage ACFS
주: 버전 11.2 데이터베이스를 복원할 때는 ACFS 스토리지를 지정해야 합니다.
데이터베이스 복원 및 Recovery 수행
-
DB 시스템에 SSH를 사용하고 opc로 로그인한 다음 oracle 유저로 로그인합니다.
sudo su - oracle -
데이터베이스에 대한 항목을
/etc/oratab에 생성합니다. 원본 데이터베이스와 동일한 SID를 사용합니다.db1:/u01/app/oracle/product/12.1.0.2/dbhome_1:N -
oraenv 유틸리티를 사용하여
ORACLE_HOME및ORACLE_SID환경 변수를 설정합니다.. oraenv -
원본 데이터베이스의 DBID를 가져옵니다. 백업 매체에 있는
controlfile자동 백업의 파일 이름에서 가져올 수 있습니다. 파일 이름에는 DBID를 포함하는 문자열이 포함됩니다. 문자열의 일반적인 형식은c-DDDDDDDDDDDD-YYYYMMDD-NN입니다. 여기서DDDDDDDDDDDD은 DBID,YYYYMMDD는 백업이 생성된 날짜,NN는 파일 이름을 고유하게 만드는 시퀀스 번호입니다. 다음 예의 DBID는 1508405000입니다. DBID가 다릅니다.다음 컬 구문을 사용하여 오브젝트 스토리지에 대한 일반적인 쿼리를 수행할 수 있습니다. 빨간색의 매개변수는 Back Up a Database to Object Storage Using RMAN의 Installing the Backup Module on the DB System에 설명된 대로 백업 모듈을 설치할 때 지정한 매개변수와 동일합니다.
curl -u '<user_ID>.com:<auth_token>' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/<object_storage_namespace>지역 이름을 조회하려면 지역 및 가용성 도메인을 참조하십시오.
예:
curl -u 'djones@mycompany.com:1cnk!d0++ptETd&C;tHR' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/myobjectstoragenamespace제어 파일 이름에서 DBID를 가져오려면 다음 구문을 사용합니다.
curl -u '<user_id>.com:<auth_token>' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/<object_storage_namespace>/<bucket_name>?prefix=sbt_catalog/c-예:
curl -u 'djones@mycompany.com:1cnk!d0++ptETd&C;tHR' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/myobjectstoragenamespace/dbbackups/?prefix=sbt_catalog/c-아래 예제 출력에서 1508405000은 DBID입니다.
{ "bytes": 1732, "content_type": "binary/octet-stream", "hash": "f1b61f08892734ed7af4f1ddaabae317", "last_modified": "2016-08-11T20:28:34.438000", "name": "sbt_catalog/c-1508405000-20160811-00/metadata.xml" } -
RMAN을 실행하고 Target Database에 연결합니다.
pfile또는spfile를 만들거나 백업controlfile를 사용할 필요가 없습니다. 다음 단계에서 복원됩니다. 대상 데이터베이스는(not started)입니다. 이것은 정상이며 이 시점에서 예상된다.rman target /출력:
Recovery Manager: Release 12.1.0.2.0 - Production on Wed Jun 22 18:36:40 2016 Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved. connected to target database (not started) -
위에서 얻은 값을 사용하여 DBID를 설정합니다.
set dbid 1508405000; -
다음 명령을 실행합니다. 서버 파라미터 파일을 사용할 수 없는 경우 RMAN은 더미 서버 파라미터 파일을 사용하여 Instance를 시작하려고 시도합니다. ORA-01078 및 LRM-00109 오류는 정상이며 무시할 수 있습니다.
STARTUP NOMOUNTstartup failed: ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/u01/app/oracle/product/12.1.0.2/dbhome_1/dbs/initdb1.ora' starting Oracle instance without parameter file for retrieval of spfile Oracle instance started Total System Global Area 2147483648 bytes Fixed Size 2944952 bytes Variable Size 847249480 bytes Database Buffers 1254096896 bytes Redo Buffers 43192320 bytes -
자동 백업에서 서버 파라미터 파일을 복원합니다.
SBT_LIBRARY는 백업 모듈이 설치될 때
-libDir매개변수로 지정된 라이브러리와 동일합니다(예:/home/oracle/lib/).OPC_PFILE은 백업 모듈이 설치될 때
-configfile매개변수로 지정된 파일과 동일합니다(예:/home/oracle/config).set controlfile autobackup format for device type sbt to '%F'; run { allocate channel c1 device type sbt PARMS 'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)'; restore spfile from autobackup; } -
audit_file_dest에 대한 디렉토리를 만듭니다. 기본값은
/u01/app/oracle/admin/$ORACLE_SID/adump입니다. spfile에서audit_file_dest문자열을 검색하여 원본 데이터베이스에서 사용하는 설정을 확인할 수 있습니다.strings ${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora | grep audit_file_dest *.audit_file_dest='/u01/app/oracle/admin/db1/adump' mkdir -p /u01/app/oracle/admin/db1/adump -
원본 데이터베이스에서 블록 변경 사항 추적(Block Change Tracking)이 활성화된 경우 블록 변경 사항 추적 파일의 디렉토리를 생성합니다. 이 디렉토리는
db_create_file_dest아래의 디렉토리가 됩니다.spfile에서 디렉토리 이름을 검색합니다.strings ${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora | grep db_create_file_dest *.db_create_file_dest='/u02/app/oracle/oradata/db1' mkdir -p /u02/app/oracle/oradata/db1/<$ORA_UNQNAME if available or database name>/changetracking -
복원된 서버 파라미터 파일을 사용하여 Instance를 재시작합니다.
STARTUP FORCE NOMOUNT; -
RMAN 자동 백업에서 제어 파일을 복원하고 데이터베이스를 마운트합니다.
set controlfile autobackup format for device type sbt to '%F'; run { allocate channel c1 device type sbt PARMS 'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)'; restore controlfile from autobackup; alter database mount; } -
데이터베이스를 복원하고 Recovery합니다.
RESTORE DATABASE; RECOVER DATABASE; -
RMAN는 더 이상 찾을 수 없을 때까지 아카이브된 리두 로그를 사용하여 Recovery합니다. RMAN이 백업에서 마지막으로 아카이브된 리두 로그를 적용했으며 더 이상 로그를 찾을 수 없는 경우 아래와 유사한 오류가 발생하는 것은 정상입니다.
unable to find archived log archived log thread=1 sequence=29 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 06/28/2016 00:57:35 RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 29 and starting SCN of 2349563 -
resetlogs를 사용하여 데이터베이스를 엽니다.
ALTER DATABASE OPEN RESETLOGS;
복구가 완료되었습니다. 마지막으로 백업된 아카이브된 리두 로그를 기준으로 데이터베이스에 커밋된 트랜잭션이 모두 포함됩니다.