oracle 12c DG搭建 切换 故障诊断 详细

 

  • 内容

     单机对单机的实时同步

     11G开始实现读写分离,备库是mount状态,可以实时同步,备库而且可以读,做报表应用。(10G 备库就是备库,不能读)

  •  

                                               主库                                       备库

         实例名                           prod                                        sbdb

         静态监听                       1522                                       1522

         dbca                              需要                                        不需要

         oracle_unqname           prod                                        sbdb

       (配置文件)

         oracle_sid                      prod                                        sbdb

      (配置文件)

        globalname(装库)           prod

        sid(装库)                         prod

        listener global_dbname  prod                                        prod

        listener sid_name           prod                                        sbdb

        初始化参数

        db_name                       prod                                          prod

        instance_name              prod                                          sbdb

        db_unique_name           prod                                          sbdb

        tnsnames.ora                tnsprod,tnssbdb                        tnsprod,tnssbdb

        service_name                prod                                          prod

        (tnsname.ora)

        服务名                           prod                                        prod(业务端代码不需要更改连接)

        (lsnrctl 中的service 对应 listener.ora global_dbname)                                     

  • 主库参数配置

查看数据库参数的命令,show parameter *****

(1)可以在数据库级别或表空间级别设置FORCE LOGGING选项。优先级是从数据库到表空间。如果创建或更改了表空间以启用FORCE LOGGING,则该表空间中的任何更改都将进入重做日志并可用于恢复。

 

同样,如果创建或更改数据库以启用FORCE LOGGING,则数据库中的任何更改(临时段和临时表空间除外)都将在重  做日志中用于恢复。

desc v$database

select force_logging from v$database;

alter database force logging;

(2)启用归档,查看的方式两种,11g需要开启,12c默认开启

   archive log list;

   select log_mode from v$database;

两个参数

log_archive_format

alter system set log_archive_format=’%t_%s_%r.arc’ scope=spfile;( 静态变量,要重启数据库)

log_archive_dest    (下一步中修改_1 和_2)

 

shutdown immediate

startup mount

alter database archivelog;

alter database open;

 

(3)静态监听

listener.ora文件配置

 

LISTENER1=

(

       DESCRIPTION_LIST=

       (

              DESCRIPTION=

              (

                     ADDRESS_LIST=

                     (

                            ADDRESS=(PORTOCOL=TCP)(HOSTNAME=oracle12cpri)(PORT=1522)

                     )

              )

       )     

)

 

SID_LIST_LISTENER1=

(

       SID_LIST=

       (

              SID_DESC=

                     (GLOBAL_DBNAME=prod)

                     (SID_NAME=prod)

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

       )

)

 

由配置文件可以看出:sid_name实例名prod,global_dbname对外的服务名prod。

文件三个注意点

标红的地方命名要一致

global_dbname 对应 (lsnrctl status listener)services

sid_name 对应  (lsnrctl status listener) instance

 

(4)初始化参数

db_unique_name

alter system set db_unique_name=’prod’ scope=spfile;      prod要加引号,不加引号就是大写

log_archive_config

alter system set log_archive_config=’DG_CONFIG=(prod,sbdb)’ scope=both;

log_archive_dest_1

alter system set log_archive_dest_1=’LOCATION=/u01/arch VALID_FOR=

(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=prod’ scope=both;

Log_archive_dest_2

alter system set log_archive_dest_2=’SERVICE=tnssbdb LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=sbdb’ scope=both;

 

配置tnsnames.ora文件

复制prod ()里面代码,修改prod 为tnssbdb, host=oracle12csta

Port =1522, service_name 不变,因为主备机是同一访问名称。

 

db_file_name_convert  数据文件   (select * from v$dbfile;)

alter system set db_file_name_convert=’/u01/app/oracle/oradata/sbdb’,’/u01/app/oracle/oradata/prod’ scope=spfile;

log_file_name_convert   重做日志文件  (select * from v$logfile)

alter system set db_file_name_convert=’/u01/app/oracle/oradata/sbdb’,’/u01/app/oracle/oradata/prod’ scope=spfile;

 

standby_file_management

alter system set standby_file_management=auto;   不加引号就是大写

 

fal_client    本端作为客户端

alter system set fal_client=’tnsprod’ scope=both;

fal_server   对端备机作为服务端

alter system set fal_server=’tnssbdb’ scope=both;

 

  • 物理备库的参数配置

(1)拷贝密码文件,主备库sys用户密码要保持一致

cd $ORACLE_HOME/dbs

scp orapwprod oracle12csta:/u01/app/oracle/product/12.2.0/dbhome_1/dbs

在备机  mv orapwprod orapwsbdb

(2)备机 dbs目录下

touch initsbdb.ora,

主库的spfileprod.ora复制过来,  切记主库的spfileprod.ora 不要改动,是二进制文件

db_name不变,log_archive_config不变,其他的都要按照主库的配置初始化参数改掉,并创建对应目录

(3) 备机 sqlplus / as sysdba

create spfile from pfile;

$ORACLE_HOME/dbs 下面会根据initsbdb.ora产生一个spfilesbdb.ora

stratup nomount    默认寻找.ora文件

如果报错内容,更改备机的initsbdb.ora文件配置,重新 create spfile from pfile;   startup nomount

(4) 配置静态监听

主机拷贝一份,hostname ,sid_name 要改成备库

global_dbname 和主库一致,因为对外服务

备库一定要配置静态监听,因为nomount 状态下只有静态监听才能连进来实例

(5) tns 配置

主机的tnsnames.ora 文件补全

tnssbdb =

(

       DESCRIPTION=

              (

                     ADDRESS=(PROTOCOL=TCP)(HOST=oracle12csta)(PORT=1522)

)

(

       CONNECT_DATA=

              (SERVER=DEDICATED)

              (SERVICE_NAME=prod)

)

)

 

tnsprod =

(

       DESCRIPTION=

              (

                     ADDRESS=(PROTOCOL=TCP)(HOST=oracle12cpri)(PORT=1522)

)

(

       CONNECT_DATA=

              (SERVER=DEDICATED)

              (SERVICE_NAME=prod)

)

)

 

备机把主库的文件scp,只留上面的tnsprod  tndsbdb

并做 tnsping 测试

tnsping tnsprod       tnsping tnssbdb

主备库都连接下

sqlplus sys/ora123@tnsprod as sysdba

sqlplus sys/ora123@tnssbdb as sysdba

 

参数检查

db_unique_name

compatible

log_archive_config

log_archive_dest_1

log_archive_dest_2

log_archive_dest_state_2:   enable-启用    defer-禁用

db_file_name_convert

log_file_name_convert

standby_file_management

log_archive_format

 

至此,准备工作做好,备库处于 unmount 状态

select status from v$instance;

started     已经启动的状态

 

  • 使用duplicate创建物理standby

主库  

rman target sys/ora123@tnsprod       必须用这种输入密码的方式

connect auxiliary sys/ora123@tnssbdb

duplicate target database for standby from active database nofilenamecheck;

此时检查下,/u01/app/oracle/oradata/sbdb 会有数据,和主库prod 下面一致

 

  • 添加standby 日志组并开启同步

standby 日志组个数:redo 日志组+1

主库:

select * from v$logfile;   看到有三组redo.log,和对应路径

select * from v$log;      看到BYTES每组大小50M

alter database add standby logfile group 4 (‘/u01/app/oracle/oradata/prod/stredo04.log’) size 50M;

alter database add standby logfile group 5 (‘/u01/app/oracle/oradata/prod/stredo05.log’) size 50M;

alter database add standby logfile group 6 (‘/u01/app/oracle/oradata/prod/stredo06.log’) size 50M;

alter database add standby logfile group 7 (‘/u01/app/oracle/oradata/prod/stredo07.log’) size 50M;

一般redo日志后缀不以.log结尾

查看standby日志组   select * from v$standby_log;

 

备库:此时备库要处于mount状态,

startup nomount   alter database mount;

select * from v$instance;     mounted

alter database add standby logfile group 4 (‘/u01/app/oracle/oradata/sbdb/stredo04.log’) size 50M;

alter database add standby logfile group 5 (‘/u01/app/oracle/oradata/sbdb/stredo05.log’) size 50M;

alter database add standby logfile group 6 (‘/u01/app/oracle/oradata/sbdb/stredo06.log’) size 50M;

alter database add standby logfile group 7 (‘/u01/app/oracle/oradata/sbdb/stredo07.log’) size 50M;

 

如果 目录写错了,执行下面

alter database drop logfile group 4;

 

开启同步:

备库:

alter database open;

开启实时同步

alter database recover managed standby database using current logfile disconnect from session;

日志切换才同步语句

alter database recover managed standby database disconnect from session;

停止同步

alter database recover managed standby database cancel;

select open_mode,database_role,protection_mode,protection_level from v$database;

打开实时同步,open_mode 是read only with apply

不打开,是 read only

查看主库的  是  read  write

  • 三种保护模式

最大性能   maximize performance     |   LGWR ASYNC NOAFFIRM

最高可用    maximize availability生产上用,网络问题会自动切换到最高性能模式,网络恢复后转成最高可用     | LGWR SYNC AFFIRM

最高保护   maximize protection            | LGWR SYNC AFFIRM

SYNC:主库commit之前,等待备库接受完日志数据,至少一个备库

ASYNC:主库commit之前,不等待

AFFIRM:日志信息写到备库standby_log后,通知主库日志就收完毕

NOAFFIRM:不用等日志信息写到备库standby日志,就通知主库日志接收完毕

最大性能 到 最高可用,前提:log_archive_dest_2 = LGWR SYNC AFFIRM

主备库都执行:Alter database set standby database to maximize availability;

检查:

select open_mode,database_role,protection_mode,protection_level from v$database;

测试下:主库create table t(id int);   insert into t values(200);

备库:select * from t;

此时主备数据库的状态都是 open

 

如果同步没有成功,再检查下主备库的参数是否正确,可能会是

log_archive_dest_state_2:   enable-启用  没有开启

然后shutdown immediate  startup主备库,备库开启实时同步

alter database recover managed standby database using current logfile disconnect from session;

 

到此dg搭建完成

下面是查看dataguard 的状态,解决一些dg遇到的问题

 

 

  • 启动顺序

先监听后实例,先备库后主库

关闭顺序

先关主库,再关备库

视图:

(1)v$database

open_mode    

read only,read and write,read only with apply,mount

database_role

physical standby,logical standby,primary,snapshot standby

protection_mode

maximize availability,maximize protection,maximize performance,

resynchronization(重新同步模式),unprotected

(2)v$managed_standby (备库执行)

process    ( ps – ef | grep ora 可以看到) ARCH 归档,MRPO日志实时同步,RFS远程日志接收进程

select process,pid,status,sequence# from v$managed_standby; process: ARCH:归档进程

MRP0:用来应用接收的日志media recovery process(开启了实时应用或者非实时应用

RFS:remote file server,接收远程日志文件

pid: 操作系统进程号

status:

CONNECTED:和主库建立了网络连接

CLOSING:进程已经完成归档,并且关闭了归档日志文件

WRITING:进程正在写redo数据到归档文件。

APPLYING_LOG:正在应用日志到备库,开启实时应用 WAIT_FOR_LOG:等待归档日志完成(开启非实时应用,或者主备之间不通)

alter database recover managed standby database disconnect;

sequence#:归档日志序列号

archive log list   sequence 142

alter system switch logfile;    sequence 会增加1

(3)v$standby_log 备库查询

select group#,sequence#,archived,status from v$standby_log;

对比:
   select * from v$log;

select * from v$logfile;

select * from v$standby_log;

(4) v$archive_dest_status

status: VALID:有效 INACTIVE:非活动的 DEFERRED:手工禁用(可用临时禁用同步)

alter system set log_archive_dest_state_2=’defer’  临时进用同步的命令

alter system set log_archive_dest_state_2=’enable’  开启

type: LOCAL:主库 PHYSICAL:物理standby LOGICAL:逻辑standby SNAPSHOT:快照standby

error,synchronization_status,synchronized 这三个字段可以帮助查看dg不同步的故障

(5) v$dataguard_status

备库查询

select * from v$dataguard_status t order by t."TIMESTAMP" desc

message字段,可以查看DG的一些报错

 

  •  数据库新建用户,分权限

create user test identified by test;

grant sysoper,connect,resource to test;

 

  • 日志GAP

模拟故障:

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

alter system set log_archive_state_2=’defer’;

主库   插入一条表数据

alter system switch logfile;    三次

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

主库:log archive list;      sequence 会和备库不一样,主库的protection_level = ‘重新同步模式’

备库:select * from v$managed_standby

MRPO 进程 会显示:wait_for_log, 说明现在没有应用日志(正常应该是applying_log)

主库:  主库的squence# 会多于备库

Select t.”sequence#”,t.”applied”, from v$archived_log t where id=1;

备库:

Select t.”sequence#”,t.”archived” from v$archived_log t where id=1;

Select * from v$archive_dest_status;

Error 字段会出现报错,像改成defer 的话,不会报错

 

主库不可用,需要自己手动操作

把gap掉的日志文件,archive log list 主库路径下的文件拷过去

备库没有注册过去rman target /         list archive all;看到没有主库的那几个日志文件,需要手工注册

少量的话:alter database register logfile ‘/u01/arch/***’;

大量的话:rman>catalog start with ‘/u01/arch/’;

查看备库alert文件

/u01/app/oracle/diag/rdbms/sbdb/sbdb/trace/alert_sbdb.log

自动应用,不行的话,重新开始备库日志同步即可

  • 角色互换
  • switchover 主备互换,不丢失数据

主备库检查下参数,(实际上,只要insert into 一条数据,同步参数就没问题)

主库检查 standby redo log, select * from v$standby_log;

select t."NAME",t."DATABASE_ROLE",t."SWITCHOVER_STATUS" from v$database t;  

SWITCHOVER_STATUS:

to standby:                  可切换

session active:有会话连接      可切换

备库查询:NOT ALLOWED

验证是否有gap:

select t."STATUS", t."GAP_STATUS"  from v$archive_dest_status t where t."DEST_ID" = 2;

最保险的还要执行,insert

操作

alter database commit to switchover to physical standby;

有会话的话,

alter database commit to switchover to physical standby with session shutdown;

startup主库

alter database recover managed standby database using current logfile disconnect;

 

备库:

select t."NAME",t."DATABASE_ROLE",t."SWITCHOVER_STATUS" from v$database t;

SWITCHOVER_STATUS:

to primary

session active

alter database commit to switchover to primary;

alter database commit to switchover to primary with session shutdown;

shutdown immediate;

startup

insert 测试下 ,查看下模式

select open_mode,database_role,protection_mode,protection_level from v$database;

注意:生产环境的话  ,库运行时间长的话,直接切换会花费很长时间

主备库执行:alter system flush buffer_cache;

alter system checkpoint;

shutdown immediate

然后重启主备库,备库打开实时同步,在进行切换

failover故障转移主库坏了,备库转主库,最大保护和最大可用不丢失数据(相对switchover)

步骤:

停止备库日志应用

alter database recover managed standby database cancel;

关闭备库的日志传输

注意要先解决GAP,解决后执行下面这条语句

alter database recover managed standby database finish force;

若解决不了,执行下面,结果就是会丢失数据

alter database active physical standby database;

切换主库

alter database commit to switch to primary with session shutdown;

检查:

select open_mode,database_role from v$database;

read write     database_role

  • 快照数据库

将备库置于可读写的模式。模拟上线测试或者业务测试 

注意:备库可以接受主库的日志,但是不能进行apply应用。  

步骤: (1).配置快速恢复区

备库: db_recovery_file_dest_size(先设置大小) db_recovery_file_dest

alter system set db_recovery_file_dest_size=10g;

alter system set db_recovery_file_dest='/u01/flash';

flashback database需要开启

(2).关闭redo apply应用

alter database recover managed standby database cancel;

(3).切换为snapshot快照数据库

alter database convert to snapshot standby;

select status from v$database;   mounted   要打开

alter database open

select open_mode,database_role from v$database;

read write(与主相同)    snapshot standby

测试:insert

到此,物理备库->快照数据库

.快照数据库->物理备库,切回

(5).关闭数据库,置于mount

shutdown immediate

startup mount

(6).执行切回命令 alter database convert to physical standby;

实例是nomount状态    v$instance status 是 started

关闭实例,启动到open

alter database recover managed standby database using current logfile disconnect;开启实时应用

insert 测试

注意: snapshot读写模式至少打开一次,才能转换回物理备库

命令                                 状态                               v$instance status

startup                            open                               open

startup nomount             nomount                         started

startup mount                 mount                             mounted

alter system open           open                               open

发布了6 篇原创文章 · 获赞 0 · 访问量 2018
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览