不停机物理Dataguard和switchover切换

版权声明:六兮原创 https://blog.csdn.net/qq_39135609/article/details/85688584

不管经历什么,都不想放弃,当认真做一件事的时候也给了你面对的勇气。
言归正传。。。
搭建DG:

 主库不能停机,通过rman的duplicate命令实现在线创建物理备库。
 角色      db_name      db_unique_name          主机             网络连接字符串
 主库       orcl              orcl         192.168.15.21          orclpri
 备库       orcl              orcl2        192.168.15.164         orclsta

1.主库的操作

开启归档:

shutdown immediate;

alter database mount;

alter database archive log;

alter database open;

【确认主库已开启归档和强制归档force logging,查询语句】

sql>select log_mode,force_logging from v$database;

LOG_MODE     FOR 
------------ --- 
ARCHIVELOG   NO  (说明主库开启了归档,但没有开启force logging)

开启force logging:

sql>alter database force logging;

【确认参数remote_login_passwordfile为EXCLUSIVE(默认值)】

sql>show parameter remote_login_passwordfile

NAME                                 TYPE        VALUE
remote_login_passwordfile            string      EXCLUSIVE 

通过v$pwfile_users再次确认sys用户在密码文件中:

sql>select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS 
------------------------------ ----- ----- -----  
SYS                         TRUE  TRUE  FALSE

【查询主备库目录是否相同】

sql>select name ,value from v$parameter  
where name in ('audit_file_dest','background_dump_dest','control_files',
'core_dump_dest','user_dump_dest') ORDER BY name ASC;

【配置主库参数】

查看主库的db_name和db_unique_name:

sql>show parameter db_name 

NAME                                 TYPE        VALUE 

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

db_name                              string      orcl

sql>show parameter db_unique_name

NAME                                 TYPE        VALUE 

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

db_unique_name                       string      orcl

修改参数:

sql>

alter system set archive_lag_target=1800 scope=spfile;

alter system set processes=2000 scope=spfile;

alter system set DB_UNIQUE_NAME=orcl scope=spfile

alter system set log_archive_config='DG_CONFIG=(orcl ,orcl2)';

alter system set log_archive_dest_1='location=D:\app\interlib\log\ valid_for=(all_logfiles,all_roles) db_unique_name=orcl';

alter system set log_archive_dest_state_1=enable;

alter system set log_archive_dest_state_2=defer;

alter system set log_archive_dest_2='service=orclsta LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=orcl2';

alter system set fal_server=orcl2;

alter system set fal_client=orcl;

alter system set standby_file_management=auto;

alter system set DB_FILE_NAME_CONVERT='D:\app\LCY\oradata\orcl\','D:\app\LCY\oradata\orcl\' scope=spfile;

ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='D:\app\interlib\log\','D:\app\interlib\log\' scope=spfile;

create pfile from spfile;
  1. 启动备库
    【创建备库的参数文件,拷贝主库已生成的参数文件,修改以下参数】
*.db_unique_name='orcl2'
*.fal_client='ORCL2'
*.fal_server='ORCL'
*.log_archive_dest_1='location=D:\app\interlib\log\archivelog  valid_for=(all_logfiles,all_roles) db_unique_name=orcl2'
*.log_archive_dest_2='service=orclpri LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=orcl'

【拷贝主库的密码文件至备库】
【创建备库的spfile】

扫描二维码关注公众号,回复: 4763902 查看本文章
sql>shutdown immediate
sql>create spfile from pfile; 

【启动备库至nomount状态(sqlplus / as sysdba)】

sql>startup nomount 
  1. 主备库监听设置
    【备库的监听设置】

    (SID_DESC = 
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = D:\app\LCY\product\11.2.0\dbhome_1)
       (SID_NAME = orcl)
       )
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.164)(PORT = 1521))
        )
      )
    

    主库:

    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.21)(PORT = 1521))
        )
      )
    

【主备库的tnsnames.ora设置】

orclsta =  
  (DESCRIPTION =  
    (ADDRESS_LIST =  
      (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.15.164)(PORT = 1521))  
     )  
    (CONNECT_DATA =  (sid = orcl))  
   )  
orclpri =  
  (DESCRIPTION =  
    (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.15.21)(PORT = 1521))  
    (CONNECT_DATA =  (SERVER = DEDICATED) (sid =orcl))  
   )  

3)测试主备是否互通(主备库都拼)

tnsping orclpri
tnsping orclsta
  1. 复制主库至备库
    【备库执行恢复】在执行恢复之前,一定要保证三点:

A.备份文件在备库的目录一定要和主库的一样;
B.备库存放数据文件等相应的目录都已存在;
C.备库处于nomount状态

$ rman target sys/lcy123@orclpri AUXILIARY sys/lcy123@orclsta  
RMAN>  DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;

【启用日志传送】之前把log_archive_dest_state_2设为defer,现在在主备库中把它设为enable

sql>alter system set log_archive_dest_state_2=enable; (主备一定要都执行)

【验证结果】

A.主 sql>select database_role from v$database;
 
备 sql>select database_role from v$database;
 
B.主库插入一条数据 
sql>INSERT INTO "SCOTT"."DEPT" ("DEPTNO", "DNAME", "LOC")
 VALUES ('12', 'OPERATIONS', 'OPERATIONS');
sql>commit;
sql>alter system switch logfile;

C.备库:启动redo应用、暂停redo应用 打开数据库,查询数据是否被同步过来

sql>alter database recover managed standby database disconnect from session;
sql>alter database recover managed standby database cancel;
sql>alter database open;
sql>select open_mode from v$database;
 
sql>select * from scott.dept;

【启用redo】在主备库上分别创建standby redo log

sql>select group#, type, member from v$logfile;
sql>
alter database add standby logfile group 4 ('d:\app\LCY\oradata\orcl\redo04.log') size 50m;
alter database add standby logfile group 5 ('d:\app\LCY\oradata\orcl\redo05.log') size 50m;
alter database add standby logfile group 6 ('d:\app\LCY\oradata\orcl\redo06.log') size 50m; 

【启用实时备库redo应用】

sql>alter database recover managed standby database using current logfile  disconnect from session;
sql>select sequence#,applied from v$archived_log order by sequence# asc;

A、 switchover切换

切换前:
主库IP:192.168.15.21
备库IP:192.168.15.164
【主备库执行】

sqlplus / as sysdba
查看主库的基本信息:
SQL>select open_mode,protection_mode,database_role,switchover_status from v$database;

查看备库的基本信息:

SQL>select open_mode,protection_mode,database_role,switchover_status from v$database;

【192.168.15.21主库执行】

SQL>alter database commit to switchover to physical standby with session shutdown;
SQL>shutdown abort;
SQL>startup
SQL>select open_mode  from v$database;
    OPEN_MODE
    ----------------------------------------
    READ ONLY
    
SQL>select database_role from v$database;

   DATABASE_ROLE
 --------------------------------
   PHYSICAL STANDBY

【192.168.15.164备库执行】

SQL>alter database commit to switchover to primary with session shutdown;
SQL>alter database open;
SQL>select switchover_status,database_role from v$database;
SQL>select open_mode,protection_mode,database_role from v$database;
 
sql>alter database recover managed standby database using current logfile  disconnect from session;

【主库插入一条数据】

sql>INSERT INTO "SCOTT"."DEPT" ("DEPTNO", "DNAME", "LOC") VALUES ('13', 'OPERATIONS', 'OPERATIONS');
sql>commit;
sql>alter system switch logfile;

【备库执行查询】

sql>select * from scott.dept;

【主库执行切换】

sql>alter system switch logfile;
sql>select sequence#,applied from v$archived_log order by sequence# asc;

【备库执行】

sql>select sequence#,applied from v$archived_log order by sequence# asc;

至此DG就搭建完毕了。

猜你喜欢

转载自blog.csdn.net/qq_39135609/article/details/85688584