Oracle DataGuard一主两备

环境描述

(仅限个人学习交流使用,未涉及任何企商业务)

Primary:               Standby1:               Standby2:
IP:192.1678.66.51      IP:192.1678.66.52       IP:192.1678.66.53
SID:orcl               SID:orcl                SID:orcl
db_unique_name:orcl1   db_unique_name:orcl2    db_unique_name:orcl3
global_name:orcl       global_name:orcl        global_name:orcl
instance建立完成       仅Oracle软件             仅Oracle软件

DataGuard

[主库]参数文件更改:

SQL> ALTER PROFILE "DEFAULT" LIMIT
     FAILED_LOGIN_ATTEMPTS UNLIMITED
     PASSWORD_LIFE_TIME UNLIMITED
     PASSWORD_LOCK_TIME UNLIMITED
     PASSWORD_GRACE_TIME UNLIMITED;

[主库]查看并增加online log日志文件:

SQL> SET LINESIZE 300;
     COL MEMBER FORMAT A64;
     SELECT A.GROUP#, A.BYTES/1024/1024 AS SIZE_MB, A.STATUS, B.TYPE, B.MEMBER FROM V$LOG A, V$LOGFILE B WHERE A.GROUP# = B.GROUP# ORDER BY A.GROUP#, B.MEMBER;

    GROUP#    SIZE_MB STATUS           TYPE    MEMBER
---------- ---------- ---------------- ------- ------------------------------------
         1        200 INACTIVE         ONLINE  /data/oradata/ORCL/redo01.log
         2        200 INACTIVE         ONLINE  /data/oradata/ORCL/redo02.log
         3        200 CURRENT          ONLINE  /data/oradata/ORCL/redo03.log

[主库]增加online log日志组:

SQL> alter database add logfile group 4 ('/data/oradata/ORCL/redo04a.log', '/data/oradata/ORCL/redo04b.log') size 50M;
SQL> alter database add logfile group 5 ('/data/oradata/ORCL/redo05a.log', '/data/oradata/ORCL/redo05b.log') size 50M;
SQL> alter database add logfile group 6 ('/data/oradata/ORCL/redo06a.log', '/data/oradata/ORCL/redo06b.log') size 50M;

[主库]切换日志(为切换当前组CURRENT状态)

SQL> alter system switch logfile;

[主库]切换日志(切换当前组INACTIVE)

SQL> alter system checkpoint;

[主库]删除原online log组

SQL> alter database drop logfile group 1;
SQL> alter database drop logfile group 2;
SQL> alter database drop logfile group 3;

[主库]增加online log组

SQL> alter database add logfile group 1 ('/data/oradata/ORCL/redo01a.log', '/data/oradata/ORCL/redo01b.log') size 50M;
SQL> alter database add logfile group 2 ('/data/oradata/ORCL/redo02a.log', '/data/oradata/ORCL/redo02b.log') size 50M;
SQL> alter database add logfile group 3 ('/data/oradata/ORCL/redo03a.log', '/data/oradata/ORCL/redo03b.log') size 50M;
验证:
SQL> select a.group#, a.bytes/1024/1024 as size_mb, a.status, b.type, b.member from v$log a, v$logfile b where a.group# = b.group# order by a.group#, b.member;

    GROUP#    SIZE_MB STATUS           TYPE    MEMBER
---------- ---------- ---------------- ------- ----------------------------------------------------------------
         1         50 UNUSED           ONLINE  /data/oradata/ORCL/redo01a.log
         1         50 UNUSED           ONLINE  /data/oradata/ORCL/redo01b.log
         2         50 UNUSED           ONLINE  /data/oradata/ORCL/redo02a.log
         2         50 UNUSED           ONLINE  /data/oradata/ORCL/redo02b.log
         3         50 UNUSED           ONLINE  /data/oradata/ORCL/redo03a.log
         3         50 UNUSED           ONLINE  /data/oradata/ORCL/redo03b.log
         4         50 CURRENT          ONLINE  /data/oradata/ORCL/redo04a.log
         4         50 CURRENT          ONLINE  /data/oradata/ORCL/redo04b.log
         5         50 UNUSED           ONLINE  /data/oradata/ORCL/redo05a.log
         5         50 UNUSED           ONLINE  /data/oradata/ORCL/redo05b.log
         6         50 UNUSED           ONLINE  /data/oradata/ORCL/redo06a.log
         6         50 UNUSED           ONLINE  /data/oradata/ORCL/redo06b.log

[主库]查看并开启归档模式

SQL> select force_logging,log_mode,flashback_on from v$database;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database force logging;
SQL> alter database archivelog;
SQL> alter database open;
验证:
SQL> select force_logging,log_mode,flashback_on from v$database;

FORCE_LOGGING                           LOG_MODE     FLASHBACK_ON
--------------------------------------- ------------ ------------------
YES                                     ARCHIVELOG   NO

[主库]修改参数文件

SQL> alter system set INSTANCE_NAME='orcl' scope=spfile;
SQL> alter system set DB_UNIQUE_NAME='orcl1' scope=spfile;
SQL> alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl1,orcl2,orcl3)' scope=both; 
SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=/data/archlog/orcl valid_for=(all_logfiles,all_roles) db_unique_name=orcl1' scope=spfile;
SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=orcl2 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=orcl2' scope=both;
SQL> alter system set LOG_ARCHIVE_DEST_3='SERVICE=orcl3 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=orcl3' scope=both;
SQL> alter system set LOG_ARCHIVE_FORMAT='ARC_%T_%S_%R.arc' scope=spfile;
SQL> alter system set LOG_ARCHIVE_MAX_PROCESSES=5 scope=both;
SQL> alter system set FAL_CLIENT=orcl1 scope=both; 
SQL> alter system set FAL_SERVER=orcl2,orcl3 scope=both;
SQL> alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=both;
SQL> alter system set log_archive_dest_state_2=defer scope=both;
SQL> alter system set log_archive_dest_state_3=defer scope=both;
因为涉及到spfile的修改,所以应该重启数据库
SQL> shutdown immediate;
SQL> startup;
SQL> create pfile from spfile;

[主库]修改并配置listener.ora监听文件

编辑文件与netmgr配置的并无区别
# listener.ora Network Configuration File: /u01/app/oracle/product/19.3.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl1)
      (ORACLE_HOME = /u01/app/oracle/product/19.3.0/db_1)
      (SID_NAME = orcl1)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.51)(PORT = 1521))
  )

ADR_BASE_LISTENER = /u01/app/oracle

[主库]修改并配置tnsnames.ora文件

LOCAL_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.51)(PORT = 1521))


ORCL1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.51)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

ORCL2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.52)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

ORCL3 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.53)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

[主库]查询并配置standby redolog

SQL> set linesize 300;
SQL> col member format a64;
SQL> select a.group#, a.bytes/1024/1024 as size_mb, a.status, b.type, b.member from v$standby_log a, v$logfile b where a.group# = b.group# order by a.group#, b.member;

alter database add standby logfile group 7  ('/data/oradata/ORCL/standby_redo07a.log','/data/oradata/ORCL/standby_redo07b.log') size 50M;
alter database add standby logfile group 8  ('/data/oradata/ORCL/standby_redo08a.log','/data/oradata/ORCL/standby_redo08b.log') size 50M;
alter database add standby logfile group 9  ('/data/oradata/ORCL/standby_redo09a.log','/data/oradata/ORCL/standby_redo09b.log') size 50M;
alter database add standby logfile group 10 ('/data/oradata/ORCL/standby_redo10a.log','/data/oradata/ORCL/standby_redo10b.log') size 50M;
alter database add standby logfile group 11 ('/data/oradata/ORCL/standby_redo11a.log','/data/oradata/ORCL/standby_redo11b.log') size 50M;
alter database add standby logfile group 12 ('/data/oradata/ORCL/standby_redo12a.log','/data/oradata/ORCL/standby_redo12b.log') size 50M;
alter database add standby logfile group 13 ('/data/oradata/ORCL/standby_redo13a.log','/data/oradata/ORCL/standby_redo13b.log') size 50M;

验证:
SQL> select a.group#, a.bytes/1024/1024 as size_mb, a.status, b.type, b.member from v$standby_log a, v$logfile b where a.group# = b.group# order by a.group#, b.member;
    GROUP#    SIZE_MB STATUS     TYPE    MEMBER
---------- ---------- ---------- ------- ----------------------------------------
         7         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo07a.log
         7         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo07b.log
         8         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo08a.log
         8         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo08b.log
         9         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo09a.log
         9         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo09b.log
        10         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo10a.log
        10         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo10b.log
        11         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo11a.log
        11         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo11b.log
        12         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo12a.log
        12         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo12b.log
        13         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo13a.log
        13         50 UNASSIGNED STANDBY /data/oradata/ORCL/standby_redo13b.log

/备库1/
–注意检查.bash_profile
[主库]准备备库参数、密码文件(不要忘记传输密码文件,否则也会导致主备无法同步)

$ cd /data/oradata/ORCL/
SQL> create pfile from spfile;
# scp initorcl.ora orapworcl oracle@192.168.66.52:/u01/app/oracle/product/19.3.0/db_1/dbs/

[备库]建立对应的文件路径

$ mkdir -p /u01/app/oracle/admin/orcl/adump
$ mkdir -p /data/oradata/ORCL/
$ mkdir -p /data/archlog/orcl

[备库]修改pfile配置文件

*.db_name='orcl' --主备保持一致
*.db_unique_name='orcl2'
*.fal_client='ORCL2'
*.fal_server='ORCL1','ORCL3'
*.log_archive_dest_1='LOCATION=/data/archlog/orcl valid_for=(all_logfiles,all_roles) db_unique_name=orcl2'
*.log_archive_dest_2='SERVICE=orcl1 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=orcl1'
利用此pfile创建spfile
SQL> create spfile from pfile;

[备库]修改并配置listener.ora监听文件

# listener.ora Network Configuration File: /u01/app/oracle/product/19.3.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/19.3.0/db_1)
      (SID_NAME = orcl)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.52)(PORT = 1521))
  )

ADR_BASE_LISTENER = /u01/app/oracle

[备库]修改并配置tnsnames.ora文件

LOCAL_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.52)(PORT = 1521))


ORCL1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.51)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

ORCL2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.52)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

ORCL3 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.53)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

使用tnsping进行测试;

[主库]备份主库数据文件

# mkdir -p /data/rmanbackup
# chown -R oracle:oinstall /data
$ rman target /
RMAN> run{
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
backup as compressed backupset full database format '/data/rmanbackup/Full_%U.bak';
sql "alter system archive log current";
backup as compressed backupset filesperset 12 format '/data/rmanbackup/Arch_%d_%T_%s_full.bak' archivelog all;
BACKUP format '/data/rmanbackup/cont_%T_%s' current controlfile;
release channel d1;
release channel d2;
release channel d3;
release channel d4;
}
SCP传输:
# scp /data/rmanbackup/\* oracle@192.168.66.52:/data/rmanbackup  

[备库]数据恢复

RMAN> startup nomount
RMAN> restore standby controlfile from '/data/rmanbackup/cont_20230802_99'
RMAN> alter database mount;
RMAN> restore database;
RMAN> recover database;

[备库]配置standby在线日志

$ sqlplus / as sysdba
/*执行restore之后,数据库中有日志组,但是操作系统中并没有实际的日志文件*/
SQL> alter database drop standby logfile group 7 ;
SQL> alter database drop standby logfile group 8 ;
SQL> alter database drop standby logfile group 9 ;
SQL> alter database drop standby logfile group 10;
SQL> alter database drop standby logfile group 11;
SQL> alter database drop standby logfile group 12;
SQL> alter database drop standby logfile group 13;

SQL> alter database add standby logfile group 7  ('/data/oradata/ORCL/standby_redo07a.log','/data/oradata/ORCL/standby_redo07b.log') size 50M;
SQL> alter database add standby logfile group 8  ('/data/oradata/ORCL/standby_redo08a.log','/data/oradata/ORCL/standby_redo08b.log') size 50M;
SQL> alter database add standby logfile group 9  ('/data/oradata/ORCL/standby_redo09a.log','/data/oradata/ORCL/standby_redo09b.log') size 50M;
SQL> alter database add standby logfile group 10 ('/data/oradata/ORCL/standby_redo10a.log','/data/oradata/ORCL/standby_redo10b.log') size 50M;
SQL> alter database add standby logfile group 11 ('/data/oradata/ORCL/standby_redo11a.log','/data/oradata/ORCL/standby_redo11b.log') size 50M;
SQL> alter database add standby logfile group 12 ('/data/oradata/ORCL/standby_redo12a.log','/data/oradata/ORCL/standby_redo12b.log') size 50M;
SQL> alter database add standby logfile group 13 ('/data/oradata/ORCL/standby_redo13a.log','/data/oradata/ORCL/standby_redo13b.log') size 50M;

[主库]开启通道

SQL> alter system set log_archive_dest_state_2=enable scope=both; 

[备库]应用日志

SQL> alter database recover managed standby database using current logfile disconnect from session;
SQL> alter database recover managed standby database cancel;
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect;

/备库2/
–注意检查.bash_profile
[主库]准备备库参数、密码文件(不要忘记传输密码文件,否则也会导致主备无法同步)

$ cd /data/oradata/ORCL/
SQL> create pfile from spfile;
# scp initorcl.ora orapworcl oracle@192.168.66.53:/u01/app/oracle/product/19.3.0/db_1/dbs/

[备库]建立对应的文件路径

$ mkdir -p /u01/app/oracle/admin/orcl/adump
$ mkdir -p /data/oradata/ORCL/
$ mkdir -p /data/archlog/orcl

[备库]修改pfile配置文件

*.db_name='orcl' --主备保持一致
*.db_unique_name='orcl3'
*.fal_client='ORCL3'
*.fal_server='ORCL1','ORCL2'
*.log_archive_dest_1='LOCATION=/data/archlog/orcl valid_for=(all_logfiles,all_roles) db_unique_name=orcl3'
*.log_archive_dest_3='SERVICE=orcl1 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=orcl1'
利用此pfile创建spfile
SQL> create spfile from pfile;

[备库]修改并配置listener.ora监听文件

# listener.ora Network Configuration File: /u01/app/oracle/product/19.3.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/19.3.0/db_1)
      (SID_NAME = orcl)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.53)(PORT = 1521))
  )

ADR_BASE_LISTENER = /u01/app/oracle

[备库]修改并配置tnsnames.ora文件

LOCAL_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.53)(PORT = 1521))


ORCL1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.51)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

ORCL2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.52)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

ORCL3 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.53)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

使用tnsping进行测试;

[备库]建立备份目录

# mkdir -p /data/rmanbackup
# chown -R oracle:oinstall /data

[主库]备份主库数据文件

$ rman target /
RMAN> run{
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
backup as compressed backupset full database format '/data/rmanbackup/Full_%U.bak';
sql "alter system archive log current";
backup as compressed backupset filesperset 12 format '/data/rmanbackup/Arch_%d_%T_%s_full.bak' archivelog all;
BACKUP format '/data/rmanbackup/cont_%T_%s' current controlfile;
release channel d1;
release channel d2;
release channel d3;
release channel d4;
}
SCP传输:
# scp /data/rmanbackup/\* oracle@192.168.66.53:/data/rmanbackup  

[备库]数据恢复

RMAN> startup nomount
RMAN> restore standby controlfile from '/data/rmanbackup/cont_20230803_117'
RMAN> alter database mount;
RMAN> restore database;
RMAN> recover database;

[备库]配置standby在线日志

$ sqlplus / as sysdba
/*执行restore之后,数据库中有日志组,但是操作系统中并没有实际的日志文件*/
SQL> alter database drop standby logfile group 7 ;
SQL> alter database drop standby logfile group 8 ;
SQL> alter database drop standby logfile group 9 ;
SQL> alter database drop standby logfile group 10;
SQL> alter database drop standby logfile group 11;
SQL> alter database drop standby logfile group 12;
SQL> alter database drop standby logfile group 13;


SQL> alter database add standby logfile group 7  ('/data/oradata/ORCL/standby_redo07a.log','/data/oradata/ORCL/standby_redo07b.log') size 50M;
SQL> alter database add standby logfile group 8  ('/data/oradata/ORCL/standby_redo08a.log','/data/oradata/ORCL/standby_redo08b.log') size 50M;
SQL> alter database add standby logfile group 9  ('/data/oradata/ORCL/standby_redo09a.log','/data/oradata/ORCL/standby_redo09b.log') size 50M;
SQL> alter database add standby logfile group 10 ('/data/oradata/ORCL/standby_redo10a.log','/data/oradata/ORCL/standby_redo10b.log') size 50M;
SQL> alter database add standby logfile group 11 ('/data/oradata/ORCL/standby_redo11a.log','/data/oradata/ORCL/standby_redo11b.log') size 50M;
SQL> alter database add standby logfile group 12 ('/data/oradata/ORCL/standby_redo12a.log','/data/oradata/ORCL/standby_redo12b.log') size 50M;
SQL> alter database add standby logfile group 13 ('/data/oradata/ORCL/standby_redo13a.log','/data/oradata/ORCL/standby_redo13b.log') size 50M;

[主库]开启通道

SQL> alter system set log_archive_dest_state_3=enable scope=both; 

[备库]应用日志

SQL> alter database recover managed standby database using current logfile disconnect from session;
SQL> alter database recover managed standby database cancel;
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值