暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle日常运维之DG常用运维命令及常见问题解决

数据与人 2020-12-15
2085

Oracle日常运维之DG常用运维命令及常见问题解决


1> DG库启动、关闭标准操作
Dataguard关闭
1)、先取消日志应用

    alter database recover managed standby database cancel;


    2)、正常关闭DG库

      Shutdown immediate;

      Dataguard开启
      1)、数据库先启动到nomount状态

        1 startup nomount;


        2)、然后数据库在启动到standby mount状态

          alter database mount standby database;


          3)、最后开启日志应用

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


            2> DG监听、TNS配置及说明

            1、监听、TNS配置路径

              $ORACLE_HOME/network/admin

              2、监听配置

                SID_LIST_oradb =
                (SID_LIST =
                (SID_DESC =
                (GLOBAL_DBNAME = oradb)
                (ORACLE_HOME = $ORACLE_HOME)
                (SID_NAME = oradb)
                )
                )


                oradb =
                (DESCRIPTION =
                (ADDRESS = (PROTOCOL = TCP)(HOST = ip )(PORT = 1521))
                )


                3、 TNS配置

                  oradb_primary =
                  (DESCRIPTION =
                  (ADDRESS_LIST =
                  (ADDRESS = (PROTOCOL = TCP)(HOST = primary_ip)(PORT = 1521))
                  )
                  (CONNECT_DATA =
                  (SERVICE_NAME = oradb)
                  )
                  )


                  oradb_standby =
                  (DESCRIPTION =
                  (ADDRESS_LIST =
                  (ADDRESS = (PROTOCOL = TCP)(HOST = standby_ip)(PORT = 1521))
                  )
                  (CONNECT_DATA =
                  (SERVICE_NAME = oradb)
                  )
                  )


                  3> DG归档文件系统使用率100%解决办法
                  1、 查看归档目录

                  2、 查询归档目录使用情况
                  AIX (df -g)
                  HPUX (bdf)
                  Linux (df -h)
                  3、 手动清理归档日志步骤
                  (1)、登陆数据库实例查询最新日志应用号

                    select PROCESS,STATUS,SEQUENCE#,BLOCKS from V$MANAGED_STANDBY;

                    用SEQUENCE#去和主库对 MRP0为日志应用进程 RFS为日志传输进程

                      PROCESS STATUS SEQUENCE# BLOCKS
                      --------- ------------ ---------- ----------
                      ARCH CLOSING 116489 1063
                      ARCH CONNECTED 0 0
                      ARCH CLOSING 116491 200
                      ARCH CLOSING 116490 1642
                      MRP0 APPLYING_LOG 116492 4194304


                      (2)、查看是否部署了删除归档日志脚本,如果存在,手工执行脚本删除过期日志
                      (3)如果删除脚本不存在,首先手工删除部分应用过的日志,再部署自动删除归档日志脚本

                      4> DG GAP问题分析解决办法
                      1、 查询GAP

                        SQL> select PROCESS,STATUS,SEQUENCE#,BLOCKS from V$MANAGED_STANDBY;


                        PROCESS STATUS SEQUENCE# BLOCKS
                        --------- ------------ ---------- ----------
                        ARCH CLOSING 511899 1971
                        ARCH CLOSING 511892 308
                        ARCH CLOSING 511895 1399
                        ARCH CLOSING 511887 1404
                        ARCH CONNECTED 0 0
                        ARCH CLOSING 511900 1591
                        MRP0 WAIT_FOR_GAP 511901 0
                        RFS IDLE 0 0


                        2、 GAP原因分析
                        (1)、归档空间满,日志无法传输
                        (2)、网络延迟导致日志传输速度慢
                        (3)、DG监听没有启动导致日志无法传输
                        (4)、DG本身日志缺失
                        (5)、DG库宕机故障

                        3、 常规GAP解决办法
                        DG备库GAP恢复操作过程:

                        1) 在主库查找所缺日志的备份片

                          select 'catalog device type '|| '''SBT_TAPE''' ||' backuppiece ''/'||HANDLE||''';' from 
                          (select distinct a.HANDLE from v$backup_piece_details a, v$backup_archivelog_details b
                          where set_count = id2 and b.thread#=1 and b.SEQUENCE# >缺失的sequence号 and b.SEQUENCE#<缺失的sequence号) ;

                          2)、在DG库上注册备份集

                            rman target 
                            configure CHANNEL device type 'SBT_TAPE' PARMS 'ENV=(NB_ORA_CLIENT=主机名)';
                            catalog device type 'SBT_TAPE' backuppiece '/al_XXXXXXXXXXXXXXXXX';


                            3)、注册完了 第一个配置的参数清除下

                              CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' CLEAR;

                              使用oracle用户rman target

                                RMAN>catalog start with '归档路径';

                                3)检查日志是否开始应用

                                DG库ORA-01111错误处理
                                1、 问题描述:主库添加数据文件,DG库同步时发现无法同步添加导致报错
                                2、 问题原因:
                                1) DG库standby_file_management参数没有设置为auto
                                2) DG库对应文件系统剩余空间不足以添加数据文件
                                3、解决办法:

                                如果主备文件系统剩余空间不一致,先清理目标目录的历史文件(如归档日志、dmp包等)

                                  alter system set standby_file_management=manual;
                                  alter database create datafile '/u01/oracle/product/db11gr2/dbs/UNNAMED00070' as '/oradb/datafile/oradb/oradb.dbf';
                                  alter system set standby_file_management=auto;
                                  打开应用:
                                  alter database recover managed standby database parallel 4 disconnect from session;


                                  5> DG库报错

                                  1、归档出现ORA-03113错误

                                    SQL> select dest_name,status,error from v$archive_dest;
                                    DEST_NAME STATUS ERROR
                                    ------------------------------ --------------------------------------
                                    LOG_ARCHIVE_DEST_1 VALID
                                    LOG_ARCHIVE_DEST_2 ERROR ORA-03113: end-of-file on communication channel

                                    解决办法:

                                    在主库执行

                                      SQL> alter system set log_archive_dest_state_2= enable;


                                      这个命令式手动触发主库区尝试连接备库。
                                      其实这种情况下,只要保证主备库之间的网络和配置是正确的。

                                      dataguard会自动恢复这个错误。这个周期默认是300秒,
                                      也可以在log_archive_dest_1的参数中添加reopen参数指定这个主备库之间失败后继续尝试的周期

                                      2、 ORA-01031: insufficient privileges错误

                                        SQL> select dest_name,status,error from v$archive_dest;
                                        DEST_NAME STATUS ERROR
                                        3 ---------------------- -----------------------------------------------
                                        LOG_ARCHIVE_DEST_1 VALID
                                        LOG_ARCHIVE_DEST_2 ERROR ORA-01031: insufficient Privileges

                                        解决办法:

                                        统一主备库的数据库密码文件,或者重建密码文件,sys密码设置成一样。
                                        然后在主库执行

                                          SQL> alter system set log_archive_dest_state_2= enable;



                                          3、 ORA-16191: Primary log shipping client not logged on standby

                                            SQL> select dest_name,status,error from v$archive_dest;
                                            DEST_NAME STATUS ERROR
                                            ------------------------------ -----------
                                            LOG_ARCHIVE_DEST_1 VALID
                                            LOG_ARCHIVE_DEST_2 ERROR ORA-16191: Primary log shipping client not logged on standby

                                            解决办法:

                                            统一主备库的数据库密码文件,或者重建密码文件,sys密码设置成一样。
                                            然后在主库执行

                                              SQL> alter system set log_archive_dest_state_1= enable;

                                               

                                              注意事项

                                              建议在主备库的涉及到名称地方都统一用小写字母,避免在配置过程出现莫名的错误。
                                              如果在主库执行

                                                alter database clear unarchived logfile

                                                alter database open resetlogs


                                                则dataguard要重建。
                                                在连续恢复模式下工作之前,需要保证之前所有的归档日志己经应用到备用库上。因为在连续恢复模式的情况下,oracle不会应用之前的归档日志,而只会应用后面陆续到来的归档日志。
                                                新建表、表空间、datafile都能通过日志应用到备库,但新建一个临时表空间和rename datafile均不能应用到备库上。
                                                出现归档日志gap时,需要找出相应的归档日志,然后将这些归档日志copy到备用节点的log_archive_dest目录下面。然后

                                                  ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE;

                                                  应当实时察看standby库的alert文件,就能清晰明了地知道主备更新的情况。这也是排错的重要方法。





                                                  往期回顾


                                                  Oracle日常运维之详解DG日志传输服务(参数解析)
                                                  Oracle日常运维之极端情况下DG加快恢复速度--在standby端执行,千万不可在primary端调整


                                                  客官长按关注

                                                  吾辈自强不息

                                                  文章转载自数据与人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                  评论