Data Guard 기본 데이터베이스 준비
Data Guard가 작동하려면 기본 데이터베이스와 대기 데이터베이스 최소 하나 이상이 필요합니다. 베어메탈 솔루션에서 Data Guard를 설정하기 전에 기본 데이터베이스를 만듭니다.
이 가이드 전체에서 사용되는 예시는 다음과 같습니다.
데이터베이스 고유 이름 | 서버 호스트 이름 | RAC 인스턴스 이름 | 역할 |
---|---|---|---|
DBDG_SITE1 | site1db1, site1db2 | DBDG_SITE11, DBDG_SITE12 | 기본 |
DBDG_SITE2 | site2db1, site2db2 | DBDG_SITE21, DBDG_SITE22 | 대기 |
이 가이드에서 Oracle을 실행하는 베어메탈 솔루션 서버는 다음 환경 변수로 구성됩니다.
환경 변수 이름 | 값 |
---|---|
ORACLE_BASE | /apps/oracle/oracle_base |
ORACLE_HOME | /apps/oracle/19.0.0/db_home1 |
설정에 따라 환경 변수 경로를 수정해야 할 수 있습니다.
기본 데이터베이스 설정
기본 데이터베이스를 호스팅하는 첫 번째 베어메탈 솔루션 서버에 로그인합니다.
/etc/oratab
파일에서oraenv
명령어가 기본 데이터베이스의 환경 변수를 설정할 수 있도록 항목을 추가합니다. 인스턴스 이름을 각 노드에서 실행 중인 인스턴스와 일치하도록 수정하고 Oracle 데이터베이스 홈의 전체 경로를 지정합니다.DBDG_SITE11:ORACLE_HOME:N
기본 데이터베이스에 연결할 수 있도록
ORACLE_SID
환경 변수를 설정합니다.source oraenv <<< "DBDG_SITE11"
The Oracle base has been set to /apps/oracle/oracle_base
응답이 수신됩니다.
데이터베이스 로깅 구성 및 플래시백 데이터베이스 사용 설정
SQL*Plus를 시작한 후 데이터베이스에 추가된
nologging
테이블스페이스가 로깅되도록force logging
을 사용 설정합니다.sqlplus / as sysdba
ALTER DATABASE FORCE LOGGING;
archivelog mode
및flashback database
가 사용 설정되었는지 확인합니다.ARCHIVE LOG LIST; SELECT LOG_MODE, FLASHBACK_ON FROM V$DATABASE;
archivelog mode
및flashback database
가 중지되어 있으면 다음 SQL 명령어를 사용하여 이들을 사용 설정합니다.필요한 사항을 변경할 수 있도록 클러스터링된 데이터베이스를 중지합니다.
srvctl stop database -d
필요한 SQL 명령어를 실행하여
archivelog mode
및flashback database
를 사용 설정합니다.STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE FLASHBACK ON; ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=1440 SID='*' SCOPE=BOTH; ALTER DATABASE OPEN; SHUTDOWN IMMEDIATE; EXIT;
클러스터링된 데이터베이스를 다시 시작합니다.
srvctl start database -d DBDG_SITE1
Data Guard용 데이터베이스 준비
기본 데이터베이스를 호스팅하는 첫 번째 베어메탈 솔루션 서버에 로그인하고 기본 데이터베이스에 연결할 수 있도록
ORACLE_SID
환경 변수를 설정합니다.source oraenv <<< "DBDG_SITE11"
The Oracle base has been set to /apps/oracle/oracle_base
응답이 수신됩니다.SQL*Plus를 시작한 후 Data Guard 구성 및 서비스에 필요한 데이터베이스 초기화 매개변수를 수정합니다.
sqlplus / as sysdba
ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SID='*' SCOPE=SPFILE; ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=8 SID='*' SCOPE=BOTH; ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SID='*' SCOPE=SPFILE; ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SID='*' SCOPE=BOTH;
데이터베이스에 대기 재실행 로그가 있는지 확인합니다. 각 스레드에는 온라인 재실행 로그 그룹 수보다 많은 대기 재실행 로그 그룹이 있어야 합니다.
SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD# UNION SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
다음 예시에는 스레드당 4개의 온라인 재실행 로그가 있으며 대기 재실행 로그 그룹이 없습니다. 온라인 재실행 로그 그룹이 4개 있으므로 각 스레드에 대해 5개의 대기 재실행 로그 그룹을 만들어야 합니다.
Logfile groups in thread 1: 4 Logfile groups in thread 2: 4
대기 재실행 로그 그룹이 충분히 있으면 이 단계를 건너뜁니다. 대기 재실행 로그 그룹의 크기는 각 온라인 재실행 로그 그룹의 크기와 동일해야 합니다. 다음 PL/SQL 코드를 사용하여 필요한 대기 재실행 로그 그룹 수를 만듭니다.
SET FEEDBACK OFF SET SERVEROUTPUT ON DECLARE CURSOR cur_thread IS SELECT THREAD# THREAD, COUNT(*) COUNT FROM V$LOG GROUP BY THREAD#; standbylog_count NUMBER := 0; standbylog_group NUMBER := 0; standbylog_size NUMBER := 0; last_group_number NUMBER; sqlstmt VARCHAR2(200); BEGIN SELECT MAX(GROUP#), MAX(BYTES) INTO last_group_number, standbylog_size FROM V$LOG; standbylog_group := last_group_number + 1; FOR rec_thread IN cur_thread LOOP standbylog_count := rec_thread.count + 1; FOR i IN 1..standbylog_count LOOP sqlstmt := 'ALTER DATABASE ADD STANDBY LOGFILE THREAD ' || rec_thread.thread || ' GROUP ' || TO_CHAR(standbylog_group) || ' SIZE ' || standbylog_size || ';'; DBMS_OUTPUT.PUT_LINE( sqlstmt); standbylog_group := standbylog_group + 1; END LOOP; END LOOP; END; / SET FEEDBACK ON
다음 예시 출력은 두 스레드 각각에 대해 5개의 대기 재실행 로그 그룹을 만들도록 지시합니다.
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 9 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 11 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 12 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 13 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 14 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 15 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 16 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 17 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 18 SIZE 2147483648;
대기 재실행 로그가 구성에 맞게 설정되어 있는지 확인합니다.
SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD# UNION SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
다음 출력에는 스레드당 온라인 재실행 로그 그룹 4개와 스레드당 대기 재실행 로그 그룹 5개가 있습니다.
Logfile groups in thread 1: 4 Logfile groups in thread 2: 4 Standby logfile groups in thread 1: 5 Standby logfile groups in thread 2: 5
SQL*Plus를 종료합니다.
EXIT;
데이터베이스 매개변수 및 비밀번호 파일을 대기 서버에 복사
데이터베이스 매개변수 파일을 만들고 대기 서버에 복사합니다.
대기 데이터베이스 매개변수 파일(
pfile
)의 폴더를 만듭니다.mkdir /home/oracle/backup
SQL*Plus를 시작한 후 대기 데이터베이스
pfile
을 만듭니다.sqlplus / as sysdba
CREATE PFILE='/home/oracle/backup/initDBDG_SITE21.ora' FROM SPFILE;
SQL*Plus를 종료한 후
pfile
을 대기 위치의 첫 번째 베어메탈 솔루션 서버에 복사합니다.EXIT;
scp /home/oracle/backup/initDBDG_SITE21.ora ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/initDBDG_SITE21.ora
SYS 원격 로그인 비밀번호가 안전하게 저장되었는지 확인합니다. 비밀번호를 모르면 재설정합니다.
비밀번호 파일을 대기 클러스터에 복사합니다.
srvctl
명령어를 사용하여 비밀번호 파일 위치를 가져옵니다.srvctl config database -db DBDG_SITE1 | grep -i password
다음 출력에서는 ASM의 비밀번호 파일 저장소 위치를 보여줍니다.
Password file: +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663
asmcmd
명령어를 사용하여 로컬 파일 시스템에서 비밀번호 파일의 임시 복사본을 만듭니다.asmcmd cp +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663 /tmp/orapwDBDG_SITE21
비밀번호 파일을 대기 위치의 첫 번째 베어메탈 솔루션 서버에 복사한 후 기본 위치의 베어메탈 솔루션 서버에서 임시 복사본을 삭제합니다.
scp /tmp/orapwDBDG_SITE21 ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/orapwDBDG_SITE21 rm /tmp/orapwDBDG_SITE21
데이터베이스 연결 구성
기본 데이터베이스 위치의 각 베어메탈 솔루션 서버에서 $ORACLE_HOME/network/admin/tsnames.ora
파일을 수정하여 넷 서비스 구성을 업데이트합니다.
파일에는 데이터베이스에 하나씩, 이후에 삭제할 데이터베이스 중복 중에 사용된 임시 항목 등 항목이 3개 있습니다.
DBDG_SITE1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE1_SCAN_HOSTNAME)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DBDG_SITE1) (UR=A)
)
)
DBDG_SITE2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE2_SCAN_HOSTNAME)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DBDG_SITE2) (UR=A)
)
)
DBDG_SITE2_FOR_DUPLICATION =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = site2db1)(PORT = 1523))
(CONNECT_DATA =
(SERVER = DEDICATED)
(INSTANCE_NAME = DBDG_SITE21) (UR=A)
)
)
이제 Data Guard 구성에서 기본 데이터베이스를 사용할 준비가 되었습니다.
다음 단계
다음으로 Data Guard 대기 데이터베이스를 만듭니다.