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

설정에 따라 환경 변수 경로를 수정해야 할 수 있습니다.

기본 데이터베이스 설정

  1. 기본 데이터베이스를 호스팅하는 첫 번째 베어메탈 솔루션 서버에 로그인합니다.

  2. /etc/oratab 파일에서 oraenv 명령어가 기본 데이터베이스의 환경 변수를 설정할 수 있도록 항목을 추가합니다. 인스턴스 이름을 각 노드에서 실행 중인 인스턴스와 일치하도록 수정하고 Oracle 데이터베이스 홈의 전체 경로를 지정합니다.

    DBDG_SITE11:ORACLE_HOME:N
    
  3. 기본 데이터베이스에 연결할 수 있도록 ORACLE_SID 환경 변수를 설정합니다.

    source oraenv <<< "DBDG_SITE11"
    

    The Oracle base has been set to /apps/oracle/oracle_base 응답이 수신됩니다.

데이터베이스 로깅 구성 및 플래시백 데이터베이스 사용 설정

  1. SQL*Plus를 시작한 후 데이터베이스에 추가된 nologging 테이블스페이스가 로깅되도록 force logging을 사용 설정합니다.

    sqlplus / as sysdba
    
    ALTER DATABASE FORCE LOGGING;
    
  2. archivelog modeflashback database가 사용 설정되었는지 확인합니다.

    ARCHIVE LOG LIST;
    SELECT LOG_MODE, FLASHBACK_ON FROM V$DATABASE;
    

    archivelog modeflashback database가 중지되어 있으면 다음 SQL 명령어를 사용하여 이들을 사용 설정합니다.

    1. 필요한 사항을 변경할 수 있도록 클러스터링된 데이터베이스를 중지합니다.

       srvctl stop database -d 
      
    2. 필요한 SQL 명령어를 실행하여 archivelog modeflashback 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;
      
    3. 클러스터링된 데이터베이스를 다시 시작합니다.

       srvctl start database -d DBDG_SITE1
      

Data Guard용 데이터베이스 준비

  1. 기본 데이터베이스를 호스팅하는 첫 번째 베어메탈 솔루션 서버에 로그인하고 기본 데이터베이스에 연결할 수 있도록 ORACLE_SID 환경 변수를 설정합니다.

    source oraenv <<< "DBDG_SITE11"
    

    The Oracle base has been set to /apps/oracle/oracle_base 응답이 수신됩니다.

  2. 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;
    
  3. 데이터베이스에 대기 재실행 로그가 있는지 확인합니다. 각 스레드에는 온라인 재실행 로그 그룹 수보다 많은 대기 재실행 로그 그룹이 있어야 합니다.

    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
    
  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;
    
  5. 대기 재실행 로그가 구성에 맞게 설정되어 있는지 확인합니다.

    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
    
  6. SQL*Plus를 종료합니다.

    EXIT;
    

데이터베이스 매개변수 및 비밀번호 파일을 대기 서버에 복사

  1. 데이터베이스 매개변수 파일을 만들고 대기 서버에 복사합니다.

    1. 대기 데이터베이스 매개변수 파일(pfile)의 폴더를 만듭니다.

      mkdir /home/oracle/backup
      
    2. SQL*Plus를 시작한 후 대기 데이터베이스 pfile을 만듭니다.

      sqlplus / as sysdba
      
      CREATE PFILE='/home/oracle/backup/initDBDG_SITE21.ora' FROM SPFILE;
      
    3. 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
      
  2. SYS 원격 로그인 비밀번호가 안전하게 저장되었는지 확인합니다. 비밀번호를 모르면 재설정합니다.

  3. 비밀번호 파일을 대기 클러스터에 복사합니다.

    1. srvctl 명령어를 사용하여 비밀번호 파일 위치를 가져옵니다.

      srvctl config database -db DBDG_SITE1 | grep -i password
      

      다음 출력에서는 ASM의 비밀번호 파일 저장소 위치를 보여줍니다.

        Password file: +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663
      
    2. asmcmd 명령어를 사용하여 로컬 파일 시스템에서 비밀번호 파일의 임시 복사본을 만듭니다.

      asmcmd cp +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663 /tmp/orapwDBDG_SITE21
      
    3. 비밀번호 파일을 대기 위치의 첫 번째 베어메탈 솔루션 서버에 복사한 후 기본 위치의 베어메탈 솔루션 서버에서 임시 복사본을 삭제합니다.

      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 대기 데이터베이스를 만듭니다.