ORACLE DG 주제 3-DG 물리적 백업 데이터베이스 손에 배치

머리말

         저자는 ORACLE DG 멤버십 및 데이터 보호 모드 및 기타 관련 이론적 지식을 소개했으며,이 기사에서는 ORACLE DG 이론과 실습을 결합하는 모드로 들어가 내부 원리와 기본 작동 및 유지 관리 기술을 깊이 이해하게됩니다. ORACLE DG의. 이 문서에서는 rman 복구 방법을 사용하여 ORACLE DG 물리적 대기 데이터베이스 (물리적 대기 데이터베이스)를 구축하는 방법을 설명합니다.

배포 전 계획

         Oracle DG에서는 기본 및 대기 데이터베이스의 DB_NAME이 동일하고 db_unique_name이 달라야합니다. DG는 db_unique_name에 따라 기본 데이터베이스와 대기 데이터베이스를 구분합니다. 이 요구 사항에 따라 다음 표에 표시된대로 활성 및 대기 DG를 계획합니다.

 

기본 db

대기 db

IP

99.12.98.194

55.14.17.100

호스트 이름

t24app1sg

mqserver02n

db_name

T24APDB

T24APDB

db_unique_name

T24APDB

T24APDBDG

추가 정보:

  • 메인 라이브러리

  • 백업 데이터베이스

      Oracle 소프트웨어를 설치 한 후 dbca를 사용하여 빈 Oracle 인스턴스를 만듭니다. 데이터베이스 이름은 기본 라이브러리와 동일합니다. 데이터 파일 경로와 빠른 복구 영역 경로는 기본 라이브러리와 동일한 것이 좋습니다. 동일하지는 않지만 나중에 파일 이름을 변환해야합니다.

메인 라이브러리 구성

메인 라이브러리 아카이브 모드 열기

이 작업에 대한 자세한 단계는 생략되었으며 사용할 수있는 SQL 문만 아래에 나열되어 있습니다.

  • 데이터베이스 아카이브 모드 확인
SQL> archive log list;
  • 아카이브 모드 열기 (이 작업을 수행하려면 데이터베이스가 마운트 --- 12c에 있어야 함)
SQL> alter database archivelog;

db의 강제 로그 쓰기 모드 켜기

일부 Oracle DDL (예 : 테이블 생성)은 NOLOGGING 절을 지원합니다. 즉, 테이블이 생성 될 때 다시 실행 로그가 생성되지 않습니다 . 물리적 대기 데이터베이스는 기본 데이터베이스의 다시 실행 로그에서 가져 오므로 기본 데이터베이스는 FORCE LOGGING 모드.

  • FORCE LOGGING 상태 확인
SQL> select force_logging from v$database;
FORCE_LOGGING
---------------------------------------
NO
  • 강제 로깅 켜기
SQL> ALTER DATABASE FORCE LOGGING;
  • 강제 로깅 모드를 다시 확인하십시오.
SQL> select force_logging from v$database;

보충:

  • 강제 로깅 모드 끄기
SQL> ALTER DATABASE NO FORCE LOGGING;

모니터링 및 tnsname 구성

정상적인 상황에서는 primary db가 정상적으로 모니터링되도록 구성되어 있어야합니다. 구성을 반복 할 필요가 없습니다. 모니터링 상태를 확인하고 모니터를 통해 인스턴스에 연결할 수 있는지 확인하기 만하면됩니다.

  • 모니터링 상태보기
$ lsnrctl status

Service "T24APDB " has 1 instance(s).
  Instance "T24APDB", status READY, has 1 handler(s) for this service...

참고 :이 서비스에는 해당 인스턴스가 있으며 상태는 준비 상태이며 이는 동적 모니터링을 의미합니다. 메인 라이브러리는 정상적으로 사용되었으므로 동적 모니터링이 가능합니다.

  • tns 연결 문자열 (tnsnames.ora) 구성

1. 주 라이브러리 자체에 추가 된 연결 문자열 (클라이언트 액세스에 사용할 수 있음).

T24APDB =

  (설명 =

    (주소 = (프로토콜 = TCP) (호스트 = 99.12.98.194) (포트 = 1521))

    (연결 _ 데이터 =

      (서버 = 전용)

      (SERVICE_NAME = T24APDB)

    )  

  )

구성 후 tnsping을 사용하여 테스트 할 수 있습니다.

2. 기본 라이브러리에서 대기 라이브러리로 TNS 연결 문자열을 늘립니다.

T24APDBDG =

  (설명 =

      (주소 = (프로토콜 = TCP) (호스트 = 55.14.17.100) (포트 = 1521))

          (연결 _ 데이터 =

           (서버 = 전용)

           (SERVICE_NAME = T24APDBDG)

      )  

  )

대기 데이터베이스가 모니터링하도록 구성되지 않았기 때문에이 TNS는 당분간 테스트 할 수 없습니다.

데이터 가드 매개 변수 추가

  • spfile에서 pfile 생성 (편집을 위해 pfile 재생성)
SQL> create pfile='/home/oracle/T24APDB_PR.ora' from spfile;
  • DG 구성 매개 변수를 추가하도록 pfile 수정 (기본 라이브러리 vim T24APDB_PR.ora)
*.db_unique_name='T24APDB '

说明:db_unique_name严格区分大小写


*.log_archive_config='dg_config=(T24APDB,T24APDBDG)'

说明:dg_config参数指定的是DG环境中的db_unique_name,所有unique name通过逗号分割;

        

*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name= T24APDB '

说明:valid_for参数的含义是当本数据库处于all_roles即任何角色时到往本地路径log_archive_dest_1下归档all_logfiles(online redo log和standby redo log),若为ASM管理,location环境ASM路径(如+ARCH);


*.log_archive_dest_2='service=T24APDBDG reopen=120 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=T24APDBDG'

说明:valid_for参数的含义是当数据库为primary_role主库角色时往远程路径log_archive_dest_2下归档online_logfiles(online redo log)。其中的service= T24APDBDG,指定归档传输TNS路径;lgwr:指定redo data传输使用的传输方式,lgwr async的组合表示redo data使用lgwr进程采用异步传输的方式同步到db_unique_name 为T24APDBDG 的standby db;


*.log_archive_dest_state_1=enable

*.log_archive_dest_state_2=enable

说明:启用归档目的地,该参数对应的值有三个,分别如下:

enable:启用归档目的地

defer:禁用归档目的地

ALTERNATE:作为备用归档目的地


*.standby_file_management='auto'

说明:该参数的意思是standby db的文件管理方式是auto,而非manual。设置该参数值为auto主要目的是:主库如果添加、删除表空间或者数据文件时,会自动在备库相应的添加、删除表空间或者数据文件。


*.fal_server='T24APDBDG'

说明:指定故障转移的目标端(主库)。即出现故障时往tnsname='T24APDBDG'指定的目标端切。通常不会设置故障转移的自动切换,都是dba按照自己的意愿,往最适合接管  primary db的standby db上去切。


*.fal_client='T24APDB

说明:指定发送故障的客户端,即本地db。

최종 새 pfile 구성은 다음과 같습니다.

새 pfile로 기본 라이브러리를 다시 시작하십시오.

SQL> shutdown immediate
SQL> create spfile from pfile='/home/oracle/T24APDB_PR.ora'
SQL> startup

가능한 오류 :

ORA-01078: failure in processing system parameters
ORA-16032: parameter LOG_ARCHIVE_DEST_1 destination string cannot be translated
ORA-19801: initialization parameter DB_RECOVERY_FILE_DEST is not set

이유 : DB_RECOVERY_FILE_DEST가 구문 분석되지 않아 log_archive_dest_state_1 구문 분석 실패가 발생했습니다.

수정 계획 : LOG_ARCHIVE_DEST_1 매개 변수 앞에 pfile 파일에 DB_RECOVERY_FILE_DEST를 넣습니다.

대기 리두 로그 파일 생성

     스탠바이 리두 로그 파일을 추가하는 목적은 스탠바이 DB 측에 스탠바이 리두 로그를 생성하는 대신 후속 rman 복제가 실행될 때 메인 라이브러리에서 직접 스탠바이 리두 로그를 복사하는 것입니다. 기본 라이브러리에서 직접 복사하면 다음과 같은 이점이 있습니다.

1. 기본 데이터베이스와 대기 데이터베이스에 동일한 대기 리두 로그가 있는지 확인하여 대기 데이터베이스에서 생성하는 문제를 줄이고 기본 및 대기 데이터베이스가 정확히 동일한 지 확인합니다. 따라서 전환 중에 직접 전환 할 수 있습니다. 변경 사항

2. 주 데이터베이스에 여러 세트의 dg standby 데이터베이스가있는 경우 모든 dg standby 데이터베이스의 standby redo 로그가 정확히 동일하므로 관리에 편리합니다.

대기 리두 로그 생성 원칙 :

  • 각 대기 리두 로그 파일은 적어도 리두 소스 데이터베이스의 리두 로그에서 가장 큰 리두 로그 파일만큼 커야합니다.

각 대기 리두 로그는 최소한 온라인 리두 로그만큼 큽니다.

  • 대기 리두 로그에는 리두 소스 데이터베이스의 각 리두 스레드에 대해 리두 소스 데이터베이스의 리두 로그보다 하나 이상의 리두 로그 그룹이 있어야합니다.

대기 리두 로그의 수는 온라인 리두 로그의 수보다 적어도 하나 더 많습니다.

  • 리두 로그 쿼리
select group#,type,member from v$logfile;

  • 대기 리두 로그 추가
alter database add standby logfile '/odata/datafile/standby_01.log' size 100m;
alter database add standby logfile '/odata/datafile/standby_02.log' size 100m;
alter database add standby logfile '/odata/datafile/standby_03.log' size 100m;
alter database add standby logfile '/odata/datafile/standby_04.log' size 100m;
  • 리두 로그를 다시 쿼리합니다.
select group#,type,member from v$logfile;

대기 데이터베이스 구성

대기 데이터베이스가 기본 데이터베이스 디렉토리와 동일한 지 확인하십시오.

동일하지 않은 경우 나중에 변환이 필요하며 여기서 생략됩니다.

프로덕션 대기 데이터베이스 용 비밀번호 파일

복구 하려면 백업 데이터베이스RMAN 기본 데이터베이스를 통해 대기 데이터베이스에 원격으로 로그인 해야하므로 여기서 대기 데이터베이스 SYS 사용자의 비밀번호를 구성해야합니다. 다음과 같은 중앙 집중식 방법이 있습니다.

  1. 기본 라이브러리의 orapwT24APDB 비밀번호 파일을 대기 라이브러리에 직접 복사하십시오.
  2. orapwd 명령을 사용하여 암호 파일 만들기
orapwd file='/u01/app/oracle/product/12.1.0/dbhome_1/dbs/orapwT24APDBDG' password=TEST

  • 대기 초기화 매개 변수 생성

메인 라이브러리와 유사하게 스탠바이 라이브러리 (vim initT24APDBDG.ora)의 DG 파라미터를 생성합니다. 다음과 같이 :

* .db_name = 'T24APDB'

* .db_recovery_file_dest = '/ data / T24APDBDG'

* .db_recovery_file_dest_size = 48318382080

* .db_unique_name = 'T24APDBDG'

* .dispatchers = '(PROTOCOL = TCP) (서비스 = eppsXDB)'

* .fal_client = 'T24APDBDG'

* .fal_server = 'T24APDB'

* .log_archive_config = 'dg_config = (T24APDB, T24APDBDG)'

* .log_archive_dest_1 = 'LOCATION = USE_DB_RECOVERY_FILE_DEST VALID_FOR = (ALL_LOGFILES, ALL_ROLES) DB_UNIQUE_NAME = T24APDBDG'

* .log_archive_dest_2 = 'SERVICE = T24APDB LGWR SYNC VALID_FOR = (ONLINE_LOGFILES, PRIMARY_ROLE) DB_UNIQUE_NAME = T24APDB'

* .log_archive_dest_state_1 = '사용 가능'

* .log_archive_dest_state_2 = '사용 가능'

pfile을 사용하여 마운트 해제 상태로 대기 시작

  • spfile 파일 이름 바꾸기
$ mv spfileT24APDBDG.ora spfileT24APDBDG.ora.bak
  • pfile을 탑재하지 않은 상태로 데이터베이스를 시작합니다.
SQL> startup nomount;

대기 데이터베이스 측에서 모니터링 구성

대기 데이터베이스가 마운트 해제 상태이기 때문에 SYS 사용자를 통해 연결하려면 정적 리스너 (vim listener.ora)를 구성해야합니다.

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = T24APDBDG)

      (SID_NAME=T24APDBDG)

      (ORACLE_HOME = /u01/app/oracle/product/12.1.0/dbhome_1)

      (SERVICE_NAME=T24APDBDG)

    )

  )

LISTENER =

  (DESCRIPTION=

       (ADDRESS=(PROTOCOL=tcp)(HOST=mqserver02n)(PORT=1521))

  )

注意上面的配置中,SID为实例名,GLOBAL_DBNAME为unique名,serive_name随便起(与主库配置的tnsname一致)。然后启动监听服务并查看。

$ lsnrctl start
$ lsnrctl status

Service "T24APDBDG" has 1 instance(s).
  Instance "T24APDB", status UNKNOWN, has 1 handler(s) for this service...

如上unknown状态的实例即为静态监听注册的实例。其中还有一个nomount状态注册的动态实例。

配置tnsname(vim tnsnames.ora)

T24APDBDG =

  (DESCRIPTION =

     (LOAD_BALANCE = OFF)(FAILOVER=ON)(CONNECT_TIMEOUT=3)(TRANSPORT_CONNECT_TIMEOUT=2)

           (ADDRESS = (PROTOCOL = TCP)(HOST = 55.14.17.100)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = T24APDBDG)

    )

  )

T24APDB =

  (DESCRIPTION =

     (LOAD_BALANCE = OFF)(FAILOVER=ON)(CONNECT_TIMEOUT=3)(TRANSPORT_CONNECT_TIMEOUT=2)

           (ADDRESS = (PROTOCOL = TCP)(HOST = 99.12.98.194)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = T24APDB)

    )

  )

测试主库和备库端tnsname配置是否正确

配置完主备的TNS后即可测试TNS联系连通性,主备都执行如下语句:

$tnsping T24APDB
$tnsping T24APDBDG

使用rman开启duplicate创建备库(主库操作)

  • 在主库上使用rman同时登录主备库,如下:
$ rman target SYS/SYSTEM@T24APDB auxiliary SYS/SYSTEM@T24APDBDG nocatalog

  • 执行duplicate创建备库

run {

allocate auxiliary channel c1 device type disk;

allocate auxiliary channel c2 device type disk;

 

duplicate target database for standby nofilenamecheck dorecover;

release channel c1;

release channel c2;

}

报错1:auxiliary file name /odata/datafile/SYSAUX0422.dbf conflicts with a file used by the target database

原因:目录不对应,主库这边需要加文件转换

解决方案:

     1. 将DG备库shutdown并重新startup 称nomount状态;---因为上面的操作中将备库设置成了mount状态;

     2. 主库rman重新登录两个库;

$ rman target SYS/SYSTEM@T24APDB auxiliary SYS/SYSTEM@T24APDBDG nocatalog

    3. 主库RMAN执行如下duplicate,其中加了文件转换。

run {

duplicate target database for standby from active database 

db_file_name_convert=('/odata/datafile','/data/T24APDBDG');

}

最后成功后如下:

此时备库就获得了主库完全的数据文件拷贝,备库处于mount状态。备库基本搭建完毕。

备库启动实时重做应用redo apply

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

执行完上述语句后,理论上主库与备库已经实时同步了,可以使用v$managed_standby查看备库的状态:

SQL> select process,status from v$managed_standby;

其中,MRP0处于APPLYING_LOG,即代表正常,此时可以查看备库的角色和打开模式。

SYS@T24APDBDG> select database_role,open_mode from v$database;

 

DATABASE_ROLE    OPEN_MODE

---------------- --------------------

PHYSICAL STANDBY MOUNTED

将备库设置为只读状态(可选)

         从ORACLE 11g开始,支持备库应用redo 日志的同时处于redo only状态。这样可以方法进行数据读操作。

SQL> recover managed standby database cancel

SQL> alter database open;

SQL> recover managed standby database using current logfile disconnect;

         说明:以上操作就是先取消日志应用,再打开数据库,最后启用日志应用。查询数据库的打开模式和角色如下图所示--read only with apply。完毕

总结

         本文step-by-step详细讲述了ORACLE物理备库的部署,除了rman的duplicate操作可能需要稍微注意一下,其他步骤应该不难。整个流程包含诸多知识点,如强制归档、归档模式、standby redo log、静态监听等等。读者在部署过程中要仔细琢磨各个步骤的作用,才能做到少出错或出错后懂得如何着手解决。

추천

출처blog.csdn.net/zhaogang1993/article/details/100930774