Database CLI와 함께 Oracle Data Guard 사용
이 문서에서는 데이터베이스 CLI를 사용하여 Oracle Cloud Infrastructure에서 FFO(Fast-Start Failover)로 Data Guard를 설정하는 방법에 대해 설명합니다. 이 문서의 항목에서는 기본 및 대기 데이터베이스를 준비한 다음 기본 데이터베이스에서 리두 데이터를 전송하여 대기 데이터베이스에 적용하도록 Data Guard를 구성하는 방법에 대해 설명합니다.
Oracle은 데이터베이스 CLI 대신 콘솔을 사용하여 Oracle Cloud Infrastructure에서 Data Guard를 설정하고 사용할 것을 권장합니다.
주:
이 문서에서는 Data Guard 및 FSFO에 대해 잘 알고 있다고 가정합니다. 자세한 내용은 DB 시스템에서 Oracle Data Guard 사용을 참조하십시오.
필요 조건
이 항목의 절차를 수행하려면 기본 및 대기 데이터베이스에 대해 다음 정보가 필요합니다.
- db_name(또는 oracle_sid)
- db_unique_name
- oracle 홈 디렉토리(또는 데이터베이스 홈)
데이터베이스 정보 찾기
이 항목의 뒷부분에 설명된 대로 기본 및 대기 DB 시스템을 실행하고 데이터베이스를 생성한 후 해당 시스템의 CLI를 사용하여 필요한 데이터베이스 정보를 찾을 수 있습니다.
- DB 시스템에 SSH로 접속합니다.
ssh -i <private_key_path> opc@<db_system_ip_address>
opc
로 로그인한 다음sudo
을root
사용자에게 로그인합니다.sudo su -
를 하이픈과 함께 사용하여 루트 사용자의 프로파일을 호출합니다. 그러면PATH
이 dbcli 디렉토리(/opt/oracle/dcs/bin
)로 설정됩니다.sudo su -
- db_name(또는 oracle_sid) 및 db_uniqueName를 찾으려면
dbcli list-databases -j
명령을 실행합니다.
출력:dbcli list-databases -j
[ { "id" : "80ad855a-5145-4f8f-a08f-406c5e4684ff", "name" : "dbtst", "dbName" : "dbtst", "databaseUniqueName" : "dbtst_phx1cs", "dbVersion" : "12.1.0.2", "dbHomeId" : "2efe7af7-0b70-4e9b-ba8b-71f11c6fe287", "instanceOnly" : false, . . .
- Oracle 홈 디렉토리(또는 데이터베이스 홈)를 찾으려면
dbcli list-dbhomes
명령을 실행합니다. DB 시스템에 데이터베이스 홈이 여러 개 있는 경우 위에 표시된dbcli list-databases -j
명령 출력에서 "dbHomeId"과 일치하는 홈을 사용하십시오.
출력:dbcli list-dbhomes
ID Name DB Version Home Location Status ---------------------------------------- -------------------- ---------------------------------------- --------------------------------------------- ---------- 2efe7af7-0b70-4e9b-ba8b-71f11c6fe287 OraDB12102_home1 12.1.0.2.160719 (23739960, 23144544) /u01/app/oracle/product/12.1.0.2/dbhome_1 Configured 33ae99fe-5413-4392-88da-997f3cd24c0f OraDB11204_home1 11.2.0.4.160719 (23054319, 23054359) /u01/app/oracle/product/11.2.0.4/dbhome_1 Configured
기본 DB 시스템 생성
기본 DB 시스템이 아직 없는 경우 DB 시스템 생성 개요에 설명된 대로 기본 DB 시스템을 생성합니다. DB 시스템에는 초기 데이터베이스가 포함됩니다. DB 시스템에서 사용 가능한 데이터베이스 명령을 사용하여 추가 데이터베이스를 생성할 수 있습니다.
대기 DB 시스템 생성
주:
대기 데이터베이스는 기본 데이터베이스와 동일한 db_name를 가져야 하지만 db_unique_name가 달라야 합니다. 대기 및 기본에 대해 동일한 데이터베이스 이름을 사용하는 경우 아래 설명된 dbcli create-database
명령을 실행하기 전에 dbcli delete-database
명령을 사용하여 대기 DB 시스템에서 데이터베이스를 삭제해야 합니다. 데이터베이스 삭제 및 생성을 완료하는 데 몇 분 정도 걸립니다. dbcli
명령은 루트 사용자로 실행해야 합니다.
- DB 시스템 생성 개요에 설명된 대로 대기 DB 시스템을 생성하고 DB 시스템이 프로비전을 완료하고 사용 가능해질 때까지 기다립니다.
가용성 및 재해 복구를 위해 기본 DB 시스템과 다른 가용성 도메인에 대기 DB 시스템을 생성할 수 있습니다(권장). 기본 DB 시스템의 클라우드 네트워크에서 대기 DB 시스템을 생성하여 두 시스템이 라우팅 가능한 단일 네트워크에 있도록 할 수 있습니다.
- DB 시스템에 SSH로 접속합니다.
ssh -i <private_key_path> opc@<db_system_ip_address>
opc
로 로그인한 다음sudo
을root
사용자에게 로그인합니다.sudo su -
를 하이픈과 함께 사용하여 루트 사용자의 프로파일을 호출합니다. 그러면PATH
이 dbcli 디렉토리(/opt/oracle/dcs/bin
)로 설정됩니다.sudo su -
- DB 시스템에는 초기 데이터베이스가 포함되지만
dbcli create-database
명령을--instanceonly
매개변수와 함께 사용하여 대기 데이터베이스를 생성해야 합니다. 이 파라미터는 데이터베이스 저장 영역 구조만 생성하고 데이터베이스를 nomount 모드로 시작합니다(다른 데이터베이스 파일은 생성되지 않음).--instanceonly
를 사용할 때는 혼동을 피하기 위해--dbname
및--adminpassword
매개변수가 모두 필요하며 기본 데이터베이스의 dbname 및 관리 비밀번호와 일치해야 합니다.다음 예제 명령은 admin 암호를 묻는 메시지를 표시한 다음 dbname이라는 데이터베이스의 저장 영역 구조를 생성합니다.
dbcli create-database --dbname <same as primary dbname>;--databaseUniqueName <different from primary uniquename>;--instanceonly --adminpassword
플러그인할 수 있는 데이터베이스를 사용하는 경우
--cdb
매개변수도 지정하십시오.전체 명령 구문은 Database Commands을 참조하십시오.
dbcli create-database
명령이 대기 데이터베이스를 생성할 때까지 몇 분 정도 기다리십시오.dbcli list-jobs
명령을 사용하여 생성 작업이 성공적으로 실행되었는지 확인한 다음dbcli list-databases
명령을 사용하여 데이터베이스가 구성되었는지 확인할 수 있습니다.
기본 DB 시스템 준비
기본 DB 시스템을 준비하려면 정적 리스너를 구성하고, tnsnames.ora를 업데이트하고, 일부 데이터베이스 설정 및 매개변수를 구성해야 합니다.
정적 리스너 구성
RMAN 및 Data Guard Broker가 사용할 정적 리스너를 생성합니다.
- 기본 DB 시스템에 SSH로 접속하고,
opc
또는root
사용자로 로그인하고, Grid OS 사용자에sudo
로 로그인합니다.sudo su - grid
/u01/app/<version>/grid/network/admin/listener.ora
를 편집하고 다음 콘텐츠를 추가합니다. 여기에 표시된 첫번째 정적 리스너는 선택 사항입니다. 두번째DGMGRL
정적 리스너는 버전 12.1 이상 데이터베이스의 경우 선택 사항이지만 버전 11.2 데이터베이스에 필요합니다.SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <primary_db_unique_name>.<primary_db_domain>) (SID_NAME = <primary_oracle_sid>) (ORACLE_HOME=<oracle_home_directory>) (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin") ) (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <primary_db_unique_name>_DGMGRL.<primary_db_domain>) (SID_NAME = <primary_oracle_sid>) (ORACLE_HOME=<oracle_home_directory>) (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin") ) )
- 변경 사항을 저장한 다음 리스너를 재시작합니다.
srvctl stop listener srvctl start listener
tnsnames.ora에 네트 서비스 이름 추가
oracle 유저로 $ORACLE_HOME/network/admin/tnsnames.ora
를 편집하고 standby database net 서비스 이름을 추가합니다.
<standby db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <standby db_unique_name>.<standby db_domain>)
)
)
위 예제에서는 이름 분석이 작동하고 있으며 <standby_server>.<domain>
를 기본 데이터베이스에서 분석할 수 있다고 가정합니다. IP 주소를 단일 클라우드 네트워크(VCN) 내에서 라우팅할 수 있는 경우 대기 서버의 전용 IP 주소를 사용할 수도 있습니다.
기본 데이터베이스 매개변수 구성
참고:
기본 및 대기 호스트의 디렉토리 구조가 다른 경우 여기서 설명되지 않은 추가 매개변수(예: log_file_name_convert
매개변수)를 설정해야 할 수 있습니다. 디렉토리 구조가 서로 다른 호스트에 대한 대기 데이터베이스를 생성하는 방법은 RMAN 설명서를 참조하십시오.
- oracle 유저로 자동 standby file 관리를 활성화합니다.
alter system set standby_file_management=AUTO;
- Broker 구성 파일 이름 및 위치를 식별합니다. 이에 사용되는 명령은 데이터베이스 저장 영역 유형에 따라 다릅니다. 데이터베이스 스토리지 유형을 잘 모르는 경우 DB 시스템에서 데이터베이스 명령을 사용합니다.
ACFS 데이터베이스 저장소의 경우 다음 명령을 사용하여 중계자 구성 파일을 설정합니다.
alter system set dg_broker_config_file1='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr1<Primary db_unique_name>.dat'; alter system set dg_broker_config_file2='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr2<Primary db_unique_name>.dat';
ASM 데이터베이스 저장 영역의 경우 다음 명령을 사용하여 Broker 구성 파일을 설정합니다.
alter system set dg_broker_config_file1='+DATA/<Primary db_unique_name>/dr1<db_unique_name>.dat'; alter system set dg_broker_config_file2='+DATA/<Primary db_unique_name>/dr2<db_unique_name>.dat';
- 데이터베이스에 대해 Broker DMON 프로세스를 활성화합니다.
alter system set dg_broker_start=true;
- 모든 데이터베이스 트랜잭션에 대해 데이터베이스 로깅을 강제 적용합니다.
alter database force logging ;
- 온라인 리두 로그(ORL)를 기반으로 SRL(대기 리두 로그)을 추가합니다. 새로 시작된 DB 시스템에는 크기가 1073741824인 세 개의 ORL이 있으므로 크기가 동일한 네 개의 SRL을 생성합니다.
아래 질의를 사용하여 ORL의 수와 크기(바이트)를 확인할 수 있습니다.
출력:select group#, bytes from v$log;
GROUP# BYTES ---------- ---------- 1 1073741824 2 1073741824 3 1073741824
모든 ORL은 같은 크기여야 합니다.
SRL은 ORL과 크기가 같아야 하지만 ORL보다 SRL이 하나 이상 있어야 합니다. 위 예제에는 세 개의 ORL이 있으므로 네 개의 SRL이 필요합니다. 따라서 현재 리두 로그와 1을 더한 다음 리두 로그와 동일한 크기를 사용합니다.
alter database add standby logfile thread 1 size <size>;
SRL 그룹에는 멤버가 하나만 있어야 합니다(기본적으로 DB 시스템은 SRL 그룹당 하나의 멤버만 사용하여 생성됨). 이렇게 하려면 다음 구문을 사용하여 파일의 이름을 지정할 수 있습니다.
alter database add standby logfile thread 1 group 4 (<logfile name with full path>) size 1073741824, group 5(<logfile name with full path>) size 1073741824 ...
ASM/OMF 구성의 경우 위 명령은 <logfile name with full path> 대신 디스크 그룹을 사용합니다.
alter database add standby logfile thread 1 group 4 (+RECO) size 1073741824, group 5(+RECO) size 1073741824 ...
참고:
로그 스위치가 10분마다 자주 발생하지 않도록 ORL 및 SRL의 크기를 조정해야 합니다. 이를 위해서는 응용 프로그램에 대한 지식이 필요하며 배치 후 조정해야 할 수 있습니다. 자세한 내용은 Use Standby Redo Logs and Configure Size Appropriately을 참조하십시오.
- 올바른 수의 SRL을 생성했는지 확인합니다.
select group#, bytes from v$standby_log;
- 데이터베이스가 ARCHIVELOG 모드여야 합니다.
archive log list
- 데이터베이스 플래시백을 사용으로 설정합니다. db_flashback_retention_target에 권장되는 최소값은 120분입니다.
alter database flashback on ; alter system set db_flashback_retention_target=120;
- 데이터베이스가 새로 생성된 경우 단일 스위치 리두 로그를 수행하여 아카이브를 활성화합니다. (RMAN 복제(duplicate)를 실행하기 전에 적어도 하나의 로그를 아카이브해야 합니다.)
alter system switch logfile;
대기 데이터베이스 준비
대기 데이터베이스를 준비하기 전에 대기 데이터베이스의 홈이 기본 데이터베이스 홈의 버전과 동일한지 확인하십시오. (기본 및 대기 데이터베이스가 모두 동일한 데이터베이스 버전으로 새로 생성된 경우 데이터베이스 홈은 동일합니다.) 그렇지 않은 경우 동일한 버전의 데이터베이스 홈을 생성합니다. Dbhome 명령을 사용하여 버전을 확인하고 필요에 따라 새 데이터베이스 홈을 만들 수 있습니다.
대기 DB 시스템을 준비하려면 정적 리스너를 구성하고, tnsnames.ora를 업데이트하고, TDE 전자 지갑을 구성하고, 임시 비밀번호 파일을 생성하고, 접속을 확인하고, RMAN DUPLICATE를 실행하고, FLASHBACK을 사용으로 설정하고, 데이터베이스 서비스를 생성해야 합니다.
정적 리스너 구성
RMAN 및 Data Guard Broker가 사용할 정적 리스너를 생성합니다.
- 대기 DB 시스템에 SSH로 접속하고,
opc
또는root
사용자로 로그인하고, Grid OS 사용자에sudo
로 로그인합니다.sudo su - grid
- 다음 내용을
/u01/app/<db_version>/grid/network/admin/listener.ora.
에 추가합니다.RMAN DUPLICATE의 경우 아래와 같은 첫번째 정적 리스너가 필요합니다. 두번째 DGMGRL 정적 리스너는 데이터베이스 버전 12.2.0.1 및 12.1.0.2의 경우 선택 사항이지만 데이터베이스 버전 11.2.0.4에 필요합니다.
SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <standby db_unique_name>.<standby db_domain>) (SID_NAME = <standby oracle_sid>) (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <standby db_unique_name>_DGMGRL.<standby db_domain>) (SID_NAME = <standby oracle_sid>) (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) )
- 리스너를 재시작합니다.
srvctl stop listener srvctl start listener
- 정적 리스너를 사용할 수 있는지 확인합니다. 아래 예제 출력은 데이터베이스 버전 12.1.0.2에 대한 것입니다. 이때
...status UNKNOWN
메시지가 예상됩니다.
출력:lsnrctl status
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 29-SEP-2016 21:09:25 Copyright (c) 1991, 2014, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production Start Date 29-SEP-2016 21:09:19 Uptime 0 days 0 hr. 0 min. 5 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/12.1.0.2/grid/network/admin/listener.ora Listener Log File /u01/app/grid/diag/tnslsnr/dg2/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.1.24)(PORT=1521))) Services Summary... Service "dg2_phx2hx.oratst.org" has 1 instance(s). Instance "dg2", status UNKNOWN, has 1 handler(s) for this service... Service "dg2_phx2hx_DGMGRL.oratst.org" has 1 instance(s). Instance "dg2", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully
tnsnames.ora에 네트 서비스 이름 추가
oracle 유저로 standby database 네트 서비스 이름을 $ORACLE_HOME/network/admin/tnsnames.ora
에 추가합니다. $ORACLE_HOME는 standby database가 실행 중인 데이터베이스 홈입니다.
<Primary db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <primary_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <primary db_unique_name).<primary db_domain>)
)
)
<Standby db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <standby db_unique_name>.<db_domain>)
)
)
TDE 전자 지갑을 Standby System으로 복사
scp -i <private key> primary_server:/opt/oracle/dcs/commonstore/wallets/tde/<primary db_unique_name>/* standby_server:/opt/oracle/dcs/commonstore/wallets/tde/<standby db_unique_name>
대기 시스템 구성 설정
oracle 유저로 데이터베이스 버전 11.2.0.4에 대해 다음 디렉토리를 생성합니다. 이 단계는 버전 12.2.0.1 및 버전 12.1.0.2에 대해 선택 사항입니다.
mkdir -pv /u03/app/oracle/redo/<standby db_unique_name uppercase>/controlfile
감사 파일 대상 생성
oracle 유저로 감사 파일 대상으로 사용할 다음 디렉토리를 생성합니다.
mkdir -p /u01/app/oracle/admin/<db_name>/adump
그렇지 않으면 나중에 사용된 RMAN 복제(duplicate) 명령이 실패합니다.
임시 암호 파일 만들기
oracle 유저로 임시 Password file을 생성합니다.
orapwd file=$ORACLE_HOME/dbs/orapw<standby oracle_sid> password=<admin password for primary> entries=5
비밀번호는 반드시 기본 데이터베이스의 관리 비밀번호와 동일해야 합니다. 그렇지 않으면 아래의 RMAN
중복 단계가 RMAN-05614: Passwords for target and auxiliary connections must be the same when using active duplicate.
와 함께 실패합니다.
Standby Database를 사용할 수 있는지 확인
- oracle 유저로 환경 변수를 설정합니다.
. oraenv
$ORACLE_HOME/dbs/init<standby sid_name>.ora
을 다음 콘텐츠로 바꿉니다.db_name=<Primary db_name> db_unique_name=<standby db_unique_name> db_domain=<standby db_domain>
- standby에서 spfile을 제거합니다.
/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile$ORACLE_SID.ora
spfile을 지정하지 않고 데이터베이스를 nomount 모드로 시작해야 하지만 원래 init 파일에 spfile 매개변수가 포함되어 있어
RMAN
중복 단계가 작동하지 않습니다. ORACLE_UNQNAME
환경 변수가DB_UNIQUE_NAME
를 가리키도록 설정합니다.export ORACLE_UNQNAME =db_unique_name
주:
이 단계를 수행하지 않으면 전자 지갑이 열리지 않고 후속 단계에서RMAN DUPLICATE
명령을 실행하지 못합니다.- 앞에서 사용한
dbcli create-database --instanceonly
명령은 대기 데이터베이스를 읽기/쓰기 모드로 기본 데이터베이스로 열므로 아래의 nomount 단계로 진행하기 전에 데이터베이스를 종료해야 합니다.sqlplus / as sysdba shutdown immediate
- nomount 모드로 데이터베이스를 시작하십시오.
startup nomount
데이터베이스 연결 확인
primary database와 standby database 간의 연결을 확인합니다.
- 리스너 포트 1521이 기본 및 대기 DB 시스템에 사용되는 보안 리스트에 열려 있는지 확인합니다. 자세한 내용은 DB 시스템에 대한 보안 목록 업데이트를 참조하십시오.
- primary database에서 standby database에 연결합니다.
sqlplus sys/<password>@<standby net service name> as sysdba
- 대기 데이터베이스에서 기본 데이터베이스에 접속합니다.
sqlplus sys/<password>@<primary net service name> as sysdba
RMAN DUPLICATE 명령 실행
oracle 유저로 standby DB 시스템에서 RMAN DUPLICATE 명령을 실행합니다.
primary database가 큰 경우 추가 채널을 할당하여 성능을 향상시킬 수 있습니다. 새로 설치된 데이터베이스의 경우 일반적으로 한 채널이 몇 분 안에 데이터베이스 복제를 실행합니다.
RMAN DUPLICATE 명령으로 생성된 오류가 없는지 확인합니다. 오류가 발생하면 $ORACLE_HOME/dbs
아래에 RMAN DUPLICATE의 일부로 생성된 경우 spfile이 아닌 init.ora
파일을 사용하여 데이터베이스를 재시작하십시오.
다음 예에서는 별도로 지정하지 않는 한 <Standby db_unique_name>에 대해 소문자를 사용합니다.
ACFS 저장소 레이아웃의 경우 다음 명령을 실행합니다.
rman target sys/<password>@<primary alias> auxiliary sys/<password>@<standby alias> log=rman.out
run { allocate channel prim1 type disk;
allocate auxiliary channel sby type disk;
duplicate target database for standby from active database
dorecover
spfile
parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase >/'
set db_unique_name='<Standby db_unique_name>'
set db_create_file_dest='/u02/app/oracle/oradata/<Standby db_unique_name>'
set dg_broker_config_file1='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr1<Standby db_unique_name>.dat'
set dg_broker_config_file2='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr2<Standby db_unique_name>.dat'
set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
set instance_name='<Standby db_unique_name>'
;
}
ASM 저장 영역 레이아웃의 경우 다음 명령을 실행합니다.
rman target sys/<password>@<primary alias> auxiliary sys/<password>@<standby alias> log=rman.out
run {
allocate channel prim1 type disk;
allocate auxiliary channel sby type disk;
duplicate target database for standby from active database
dorecover
spfile
parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase>/'
set db_unique_name='<Standby db_unique_name>'
set dg_broker_config_file1='+DATA/<Standby db_unique_name>/dr1<Standby db_unique_name>.dat'
set dg_broker_config_file2='+DATA/<Standby db_unique_name>/dr2<Standby db_unique_name>.dat'
set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
set instance_name='<Standby db_unique_name>'
;
}
데이터베이스 FLASHBACK 활성화
- Data Guard 최적의 사용법으로, 기본 데이터베이스와 대기 데이터베이스에서 모두
db_flashback_retention_target
를 120분 이상으로 설정합니다.alter database flashback on; alter system set db_flashback_retention_target=120;
- standby database가 제대로 생성되었는지 확인합니다.
select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE,SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
데이터베이스 서비스 생성
Oracle은 srvctl을 사용하여 대기 데이터베이스에 대한 데이터베이스 서비스를 생성할 것을 권장합니다.
ACFS 저장소 레이아웃의 경우
- 공유 디렉토리를 생성하고 spfile 파일을 복사합니다.
mkdir -pv /u02/app/oracle/oradata/<Standby db_unique_name>/dbs cp $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora /u02/app/oracle/oradata/<Standby db_unique_name>/dbs
- 기존 데이터베이스 서비스를 중지하고 제거합니다.
srvctl stop database -d <standby db_unique_name> srvctl remove database -d <standby db_unique_name>
- 데이터베이스 서비스를 생성합니다.
srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora' -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name> srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>" srvctl config database -d <standby db_unique_name>
- 데이터베이스 서비스를 시작합니다.
srvctl start database -d <standby db_unique_name>
$ORACLE_HOME/dbs
에서 파일을 정리합니다.rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
- spfile 파일의 새 위치를 참조할
$ORACLE_HOME/dbs/init<standby oracle_sid>.ora
파일을 생성합니다.SPFILE='/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora'
- standby database를 정지한 다음
srvctl
를 사용하여 시작합니다.srvctl stop database -d <standby db_unique_name> srvctl start database -d <standby db_unique_name>
ASM 저장 영역 레이아웃의 경우
- +DATA 아래에 spfile 파일을 생성해 보십시오.
create pfile='init<standby oracle_sid>.ora' from spfile ; create spfile='+DATA' from pfile='init<standby oracle_sid>.ora' ;
- 기존 데이터베이스 서비스를 중지하고 제거합니다.
srvctl stop database -d <standby db_unique_name> srvctl remove database -d <standby db_unique_name>
- 데이터베이스 서비스를 생성합니다.
srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx' -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name> srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>" srvctl config database -d <standby db_unique_name>
- 데이터베이스 서비스를 시작합니다.
srvctl start database -d <standby db_unique_name>
$ORACLE_HOME/dbs
에서 파일을 정리합니다.rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
- spfile 파일의 새 위치를 참조할
$ORACLE_HOME/dbs/init<standby oracle_sid>.ora
파일을 생성합니다.SPFILE='+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx'
- 데이터베이스를 정지하고 srvctl을 사용하여 standby database를 시작합니다.
srvctl start database -d <standby db_unique_name>
Data Guard 구성
다음 단계를 수행하여 Data Guard 구성을 완료하고 기본 데이터베이스에서 리두 전송을 사용으로 설정하고 대기 데이터베이스에서 리두 적용을 사용으로 설정합니다.
- primary 또는 standby DB 시스템에서
dgmgrl
명령행 유틸리티를 실행하고 sys 인증서를 사용하여 primary database에 연결합니다.connect sys/<sys password>@<primary tns alias>
- Data Guard 구성을 생성하고
dgmgrl
명령행 유틸리티에서 기본 및 대기 데이터베이스를 식별합니다.create configuration mystby as primary database is <primary db_unique_name> connect identifier is <primary tns alias>; add database <standby db_unique_name> as connect identifier is <standby tns alias> maintained as physical;
dgmgrl
명령행 유틸리티에서 Data Guard 구성을 사용으로 설정합니다.enable configuration;
- Data Guard 설정이 제대로 수행되었는지 확인합니다. SQL 프롬프트에서 기본 및 대기 데이터베이스 모두에서 다음 SQL을 실행합니다.
select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database;
- Data Guard 프로세스가 대기 데이터베이스에서 시작되었는지 확인합니다.
select PROCESS,PID,DELAY_MINS from V$MANAGED_STANDBY;
- primary 및 standby에서 파라미터 구성을 확인합니다.
show parameter log_archive_dest_ show parameter log_archive_config show parameter fal_server show parameter log_archive_format
- Data Guard 구성이
dgmgrl
명령행 유틸리티에서 작동하는지 확인합니다. 특히 리두 전달 및 리두 적용이 작동하고 대기 데이터베이스가 기본 데이터베이스 뒤에서 비합리적으로 지연되지 않는지 확인합니다.show configuration verbose show database verbose <standby db_unique_name> show database verbose <primary db_unique_name>
불일치, 오류 또는 경고를 해결해야 합니다. 또한 primary에서 트랜잭션을 실행하고 standby에서 트랜잭션이 표시되는지 확인할 수 있습니다.
- 양방향으로 switchover 및 failover를 수행하여 Data Guard 구성이 예상대로 작동하는지 확인합니다. 각 작업 후에
show configuration
를 실행하고dgmgrl
명령행 유틸리티에 오류나 경고가 없는지 확인합니다.주의:
이 단계는 재량에 따라 선택 사항입니다. 어떤 이유로든 구성이 유효하지 않으면 스위치오버 및/또는 페일오버가 실패하고 기본 데이터베이스를 시작하기가 어렵거나 불가능할 수 있습니다. 가용성에 영향을 주는 기본 복구가 필요할 수 있습니다.
switchover to <standby db_unique_name> switchover to <primary db_unique_name> #connect to standby before failover: connect sys/<sys password>@<standby db_unique_name> failover to <standby db_unique_name> reinstate database <primary db_unique_name> #connect to primary before failover: connect sys/<sys password>@<primary db_unique_name> failover to <primary db_unique_name> reinstate database <standby db_unique_name>
Observer 구성(선택사항)
고가용성 및 내구성을 위한 모범 사례는 기본, 대기 및 관찰자를 별도의 가용성 도메인에서 실행하는 것입니다. observer는 특정 대상 standby database로 failover할지 여부를 결정합니다. Observer에 사용되는 서버에는 Oracle SQL NET 및 Broker를 포함하는 Oracle Client Administrator 소프트웨어가 필요합니다. dgmgrl
명령행 유틸리티에서 다음 명령을 실행합니다.
- 앞에서 설명한 대로 primary database와 standby database 모두에 대해 TNS alias 이름을 구성하고 두 데이터베이스에 대한 연결을 확인합니다.
- 보호 모드를 maxavailability 또는 maxperformance로 변경합니다(FSFO의 경우 maxprotection이 지원되지 않음).
최대 가용성을 사용으로 설정하려면 다음을 수행합니다.
edit database <standby db_unique_name> set property 'logXptMode'='SYNC'; edit database <primary db_unique_name> set property 'logXptMode'='SYNC'; edit configuration set protection mode as maxavailability;
최대 성능을 사용으로 설정하려면 다음과 같이 하십시오.
edit configuration set protection mode as maxperformance; edit database <standby db_unique_name> set property 'logXptMode'='ASYNC'; edit database <primary db_unique_name> set property 'logXptMode'='ASYNC';
최대 성능을 위해
FastStartFailoverLaglimit
등록 정보는 허용되는 최대 데이터 손실 양을 기본적으로 30초로 제한합니다. - 다음 등록 정보도 고려해야 합니다.
show configuration verbose
를 실행하여 현재 값을 확인합니다.- FastStartFailoverPmyShutdown
- FastStartFailoverThreshold
- FastStartFailoverTarget
- FastStartFailoverAutoReinstate
(
show configuration
를 실행하면 관찰자가 시작될 때까지Warning : ORA-16819: fast-start failover observer not started
오류가 발생합니다.) - Broker에서 Fast-Start Failover 사용:
Enable fast_start failover
- Fast-Start Failover 및 연관된 설정을 확인합니다.
show fast_start failover
- Broker에서 Observer를 시작합니다(포그라운드에서 실행되지만 백그라운드에서 실행될 수도 있습니다).
start observer
- 오류나 경고 없이 Fast-Start Failover가 활성화되었는지 확인합니다.
show configuration verbose
- 항상 양방향으로 페일오버를 테스트하여 모든 작업이 예상대로 작동하는지 확인합니다. primary database의 shutdown abort를 수행하여 FSFO가 제대로 실행 중인지 확인합니다.
observer가 standby database로 failover를 시작해야 합니다. 보호 모드가 maxprotection으로 설정된 경우 FastStartFailoverLaglimit 값에 따라 일부 데이터 손실이 발생할 수 있습니다.