oracle data guard DGBroker方式之DG安装(2/2)

一、本次安装为一主一丛

        1、一主两从的话,就是在pfile里还有listener.ora与tnsname.ora多加点配置,哈哈嚯

服务器       主机名配置
172.30.11.12DG18核16G
172.30.11.13DG28核16G

        2、设置hosts,两台都一样哦

                vim /etc/hosts

                

二、配置listner.ora

       1、 cd $ORACLE_HOME/network/admin

        vim listener.ora

# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listene
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = orcl)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = porcl)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = orcl)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = porcl_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = orcl)
    )
  )

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

ADR_BASE_LISTENER = /u01/app/oracle

        2、从的就把上面的porcl改成sorcl,DG1改为DG2。(如果是一主两从的话,第二个从的,就把porcl改成dorcl,DG1改成DG3)

三、配置tnsnames.ora

        1、vim tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
PORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DG1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = porcl)
    )
  )

SORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DG2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = sorcl)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = DG1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

        2、tnsnames.ora配置都一样,就是记得把HOST = DG1改为对应的主机名,主的是DG1,从的是DG2或者DG3

        3、如果是一主两从的话,配置如下

        

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
PORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DG1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = porcl)
    )
  )

SORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DG2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = sorcl)
    )
  )

DORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DG3)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dorcl)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = DG1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

        4、配置完tnsnames.ora文件后,重加载下,输入指令

                lsnrctl reload

        5、请在每台服务器用tnsping指令去ping一下,是否能通

                例:tnsping porcl、tnsping sorcl、tnsping orcl

        

四、 修改主库修改db_unique_name

        alter system set db_unique_name='porcl' scope=spfile;

        

五、主库修改standby_file_management

        alter system set standby_file_management=auto scope=spfile;

六、主库打开强制日志和dg_broker

        alter database force logging;

        alter system set dg_broker_start=true scope=spfile;

七、增加备库日志

        select group#,type,member from v$logfile;   查看redologs日志信息

        增加你的日志多一个

        alter database add standby logfile;

八、重启数据库

       强制启动数据库读取spfile文件内容

        startup force;

九、生成pfile文件

        create pfile from spfile;

        看你自己的数据库实例名是什么,就对应生成什么,我的是orcl,就是initorcl.ora,如果是hello,生成的就是initohello.ora文件

十、修改pfile文件

       1、 cd $ORACLE_HOME/dbs

        

         vim initorcl.ora,将以下内容填入

*.fal_server='sorcl'
*.log_archive_config='dg_config=(porcl,sorcl)'
*.log_archive_dest_1='location=/u01/app/oracle/arch_log/arch'
*.LOG_ARCHIVE_DEST_2='SERVICE=sorcl LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=sorcl'
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'

       2、如果是一主两从,则填入以下

*.fal_server='sorcl'
*.log_archive_config='dg_config=(porcl,sorcl,dorcl)'
*.log_archive_dest_1='location=/u01/app/oracle/arch_log/arch'
*.LOG_ARCHIVE_DEST_2='SERVICE=sorcl LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=sorcl'
*.LOG_ARCHIVE_DEST_3='SERVICE=dorcl LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dorcl'
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'
*.LOG_ARCHIVE_DEST_STATE_3='ENABLE'

        3、将主库关闭,用当前的initorcl.ora启动

                shutdown immediate;

                startup pfile='$ORACLE_HOME/dbs/initorcl.ora';

        4、将pfile的内容打回spfile,以后数据库正常开关,都会以新的spfile内容启动了

               create spfile from pfile='$ORACLE_HOME/dbs/initorcl.ora';

                startup force;

十一、将密码文件及initorcl传输到从服务器DG2

       1、 scp initorcl.ora orapworcl oracle@DG2:$ORACLE_HOME/dbs/

        2、然后请对应修改initorcl.ora里的

                 *.db_unique_name='porcl'为*.db_unique_name='sorcl'

                *.fal_server='sorcl'为*.fal_server='porcl'

                 *.LOG_ARCHIVE_DEST_2='SERVICE=porcl LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=porcl'

        3、将从库的数据库执行以下操作,跟主库上面一样,我列出指令就好了,不解释

                shutdown immediate

                startup pfile='$ORACLE_HOME/dbs/initorcl.ora';

                create spfile from pfile='$ORACLE_HOME/dbs/initorcl.ora';

                startup force;

十二、在备库中克隆

        1、备库先把数据库打开到nomount状态

                shutdown immediate

                startup nomount

        2、登录rman

                rman target sys/oracle@porcl auxiliary sys/oracle@sorcl nocatalog;

                 

                如果是一主两从的话,在DG3上也是执行这个指令连接rman,只是把sorcl改成 dorcl,如下:

                rman target sys/oracle@porcl auxiliary sys/oracle@dorcl nocatalog;

            3、进行克隆,这个指令不能出现任何错误

                RMAN> duplicate target database for standby nofilenamecheck from active database;

十三、在主库上进入DGBroker

           1、dgmgrl /   (可以用help查看对应的指令帮助)

       2、创建主库

                DGMGRL>CREATE CONFIGURATION dgc as PRIMARY DATABASE IS porcl CONNECT IDENTIFIER IS porcl;

       3、创建从库

                DGMGRL>ADD DATABASE sorcl as CONNECT IDENTIFIER IS sorcl;

                一主两从,则再创建从库dorcl

                DGMGRL>ADD DATABASE dorcl as CONNECT IDENTIFIER IS dorcl;

        4、激活dgbroker

                DGMGRL>enable configuration;

        5、至此,搭建完成,可以去建表及切换库验证了,从库切为主库指令为

                DGMGRL>switchover to sorcl;

十四、主库宕机切换

        1、若我们主库宕机了,并且在短时间内启动不回来了,经过协商,允许丢失一部分数据的情况下,可以强制将从库切换为主库,临时接管生产,那接下来,看我的操作,哈哈嚯。

        2、在从库上执行登录DGBroker

                dgmgrl /

                DGMGRL>connect sys 

                DGMGRL>failover to sorcl;

十五、主库恢复

        1、 夜深人静的时候,生产不活跃了,我们就该把主库恢复回来,接着看,哈哈嚯

        2、将主库启动到nomount

                shutdown immediate

                startup nomount

        3、登录rman

                rman target sys/oracle@sorcl auxiliary sys/oracle@porcl

        4、数据克隆

                RMAN> duplicate target database for standby nofilenamecheck from active database;

        5、删除和重新添加备库

                DGMGRL> remove database porcl;

                DGMGRL> add database porcl;

                DGMGRL> disable configuration;

                DGMGRL> enable configuration;

                DGMGRL> show configuration;    (查看数据库状况,如下)

Configuration - dgc

  Protection Mode: MaxPerformance
  Databases:
    sorcl - Primary database
    porcl - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS

        6、又可以把主库切回来了

                DGMGRL>swichover to porcl;

                SQL> alter database open;

十六、keepalived配合着主从使用

        1、一般情况下,主从都搭配着LVS来做高可用,当keepalived检测到主库down机,立刻切换到从库,虚拟IP不变,这样,生产就不会那么鸡肋,至少不需要去改配置里的数据库IP地址

        2、先关闭linux selinux(不关,一会儿执行不了脚本)

                vim /etc/selinux/config

                将SELINUX=enforceing改为SELINUX=disabled

                重启服务器,reboot

        3、查看当前selinux状态

                getenforce

        4、安装keepalived

                yum install -y keepalived

         5、编辑keepalived.conf,使用的抢占模式

                1)、cd /etc/keepalived,将以下内容插入DG1

global_defs {
  router_id DG1 #一般是主机名称,通过hostname获取
}
 
#定义脚本。固定间隔时间执行
vrrp_script chk_oracle {
 script "/script/check_oracle_status.sh" #检测oracle状态
 interval 20
 weight -30
 fall 3
 rise 2
}
 
# 定义主机信息
vrrp_instance VI_1 {
 state MASTER #主机填写MASTER
 interface eth0 #设置实例绑定的网卡
 garp_master_delay 1
 virtual_router_id 10 #虚拟路由器id号。主从必须一致
 priority 100 #定义优先级,数字越大,优先级越高
 advert_int 1 #心跳频率
 
unicast_src_ip 172.30.11.12 #本机ip
unicast_peer {
 172.30.11.13 #对端ip
}
 
authentication {
 auth_type PASS
 auth_pass cgzair
}
virtual_ipaddress {
 172.30.11.14
}
 
#执行上面定义的脚本
track_script {
 chk_oracle
}
}

                2)、将以下内容插入DG2

        

global_defs {
  router_id DG2 #一般是主机名称,通过hostname获取
}
 
#定义脚本。固定间隔时间执行
vrrp_script chk_oracle {
 script "/script/check_oracle_status.sh" #检测Oracle状态
 interval 20
 weight -30
 fall 3
 rise 2
}
 
# 定义主机信息
vrrp_instance VI_1 {
 state BACKUP #主机填写BACKUP
 interface eth0 #设置实例绑定的网卡
 garp_master_delay 1
 virtual_router_id 10 #虚拟路由器id号。主从必须一致
 priority 90 #定义优先级,数字越大,优先级越高
 advert_int 1 #心跳频率
 
unicast_src_ip 172.30.11.13 #本机ip
unicast_peer {
 172.30.11.12 #对端ip
}
 
authentication {
 auth_type PASS
 auth_pass cgzair
}
virtual_ipaddress {
 172.30.11.14
}
 
#执行上面定义的脚本
track_script {
 chk_oracle
}
}

        6、在root用户下建立Oracle状态检测脚本

                1、mkdir -p /script

                2、建立两个脚本

                        touch check_oracle_status.sh  插入以下内容

#!/bin/bash
userName=`whoami`
echo $userName
if [ $userName == "root" ]; then
        su - oracle -s /bin/bash /script/select.sh
        RETURN=$?
        echo $RETURN
        exit $RETURN
fi

                        touch select.sh       插入以下内容

            

#!/bin/bash
# Oracle数据库连接信息
DB_USER="admin"
DB_PASS="admin"
DB_HOST="172.30.11.12"
DB_PORT="1521"
DB_SID="orcl"
now_date=`date '+%Y-%m-%d %H:%M:%S'`

# 检测数据库连接
check_database() {
    sqlplus -S ${DB_USER}/${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_SID} <<EOF
    exit;
EOF
    if [ $? -eq 0 ]; then
        echo "Database connection successful."
        return 0
    else
        echo "Database connection failed."
        return 1
    fi
}

# 执行简单的查询
execute_query() {
    sqlplus -S ${DB_USER}/${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_SID} <<EOF
    set heading off;
    select sysdate from dual;
    exit;
EOF
    if [ $? -eq 0 ]; then
        echo "Query executed successfully. ${now_date}"  >> /script/oracle_status.log
        return 0
    else
        echo "Query execution failed. ${now_date}" >> /script/error.log
        return 1
    fi
}
# 调用函数检测数据库连接和执行查询
check_database
execute_query

                     3、授权

                                chmod +x check_oracle_status.sh select.sh

                                touch oracle_status.log error.log

                                chown -R oracle:oinstall oracle_status.log error.log

                      4、DG2的keepalived.conf自己去改select.sh里的数据库IP地址就行了

                      5、启动keepalived

                        systemctl start keepalived

                        查看状态

                        systemctl status keepalived

                        6、现在你可以尝试把主库down机试试,看看IP是不是会切到从库

                        SQL>shutdown abort

十七、参考博客

        DGBroker

      oracle 搭建dg步骤解析_AI女的博客-CSDN博客

        失败切换

        https://www.cnblogs.com/vijayfly/p/5086456.html

        LVS+keepalived

        keepalived搭建(本人亲测有效)_keepalive搭建_墨大大的博客-CSDN博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值