data guard的主要功能就是作为备库来同步主库的数据变化,一般使用中物理standby使用的比较多。data guard显示威力的一个场景就是swithover了,即主备切换。这种切换方式执行时间很短,能够在一些灾难场景中极大的提高系统的可用性和稳定性。
自己在本地的环境中搭建了一套data guard的环境,开始比较生疏,切换中碰到了不少的问题,最后搭建完成,把切换中的一些细节信息都总结起来,整理成了一个初步的脚本。能够很方便的实现swith over

这个脚本适用于物理standby,在本地环境中反复测试,切换了十多次,还算是比较稳定的。
在脚本中也对需要切换的实例进行了基本的校验,保证不会出现低级错误。比如主库切为主库,备库切为备库等等。
当然对于一些更加细节的信息没有做过滤,比如对于归档gap的判定等。

PRI_DB=`sqlplus -s sys/oracle@$1 as sysdba set feedback off
set pages 0
select database_role from v\\$database;
EOF`
echo $PRI_DB

if [[ $PRI_DB = 'PHYSICAL STANDBY' ]]
then  echo 'PRIMARY DB INSTANCE IS NOT '$1 ',PLEASE CHECK AGAIN'
exit
fi

PRI_DB=$1
#echo $PRI_DB

STD_DB=`sqlplus -s sys/oracle@$2 as sysdba set feedback off
set pages 0
select database_role from v\\$database;
EOF`

if [[ $STD_DB = 'PRIMARY' ]]
then  echo 'STANDBY DB INSTANCE IS NOT '$2 ',PLEASE CHECK AGAIN'
exit
fi

STD_DB=$2

#export ORACLE_SID=$STD_DB
sqlplus -s sys/oracle@$PRI_DB as sysdba break on db_name
set pages 50
set linesize 100
prompt
prompt Primary Instance
prompt ~~~~~~~~~~~~~~~~
select d.dbid            dbid
     , d.name            db_name
     , i.instance_number inst_num
     , i.instance_name   inst_name
     , d.database_role
  from v\$database d,
       v\$instance i;
EOF

#export ORACLE_SID=$STD_DB
sqlplus -s sys/oracle@$STD_DB as sysdba break on db_name
set pages 50
set linesize 100
prompt
prompt Standby Instance
prompt ~~~~~~~~~~~~~~~~
select d.dbid            dbid
     , d.name            db_name
     , i.instance_number inst_num
     , i.instance_name   inst_name
     , d.database_role
  from v\$database d,
       v\$instance i;
EOF

sqlplus  sys/oracle@$STD_DB as sysdba prompt recover managed standby database cancel;
recover managed standby database cancel;
EOF

#export ORACLE_SID=$PRI_DB
sqlplus  sys/oracle@$PRI_DB as sysdba prompt Alter database commit to switchover to physical standby with session shutdown;
Alter database commit to switchover to physical standby with session shutdown;
EOF

sqlplus  sys/oracle@$PRI_DB as sysdba prompt shutdown immediate;
shutdown immediate;
EOF

sqlplus  sys/oracle@$PRI_DB as sysdba prompt startup mount
startup mount
prompt recover managed standby database disconnect from session;
recover managed standby database disconnect from session;
EOF

#export ORACLE_SID=$STD_DB
sqlplus  sys/oracle@$STD_DB as sysdba Select name,switchover_status from v\$database;
prompt alter database recover managed standby database finish force;
alter database recover managed standby database finish force;
select name,switchover_status from v\$database;
prompt alter database commit to switchover to primary;
alter database commit to switchover to primary;

select name,database_role from v\$database;
select instance_name,status from v\$instance;
prompt alter database open;
alter database open;
EOF

切换的日志如下,限于篇幅,适当做了整理。
Primary Instance
~~~~~~~~~~~~~~~~
      DBID DB_NAME     INST_NUM INST_NAME        DATABASE_ROLE
---------- --------- ---------- ---------------- ----------------
1028247664 TEST11G            1 TEST11G          PRIMARY

Standby Instance
~~~~~~~~~~~~~~~~
      DBID DB_NAME     INST_NUM INST_NAME        DATABASE_ROLE
---------- --------- ---------- ---------------- ----------------
1028247664 TEST11G            1 DG11G            PHYSICAL STANDBY

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
idle> recover managed standby database cancel
idle> Media recovery complete.
idle> 
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
sys@TEST11G> Alter database commit to switchover to physical standby with session shutdown
sys@TEST11G> 
Database altered.
sys@TEST11G> 
idle> shutdown immediate
idle> ORA-01507: database not mounted
ORACLE instance shut down.
Connected to an idle instance.
idle> startup mount
idle> ORACLE instance started.
Total System Global Area  435224576 bytes
Fixed Size                  1337044 bytes
Variable Size             272632108 bytes
Database Buffers          155189248 bytes
Redo Buffers                6066176 bytes
Database mounted.
idle> recover managed standby database disconnect from session
idle> Media recovery complete.
NAME      SWITCHOVER_STATUS
--------- --------------------
TEST11G   SWITCHOVER LATENT
idle> alter database recover managed standby database finish force
idle> 
Database altered.
NAME      SWITCHOVER_STATUS
--------- --------------------
TEST11G   TO PRIMARY

idle> alter database commit to switchover to primary
idle> 
Database altered.
NAME      DATABASE_ROLE
--------- ----------------
TEST11G   PRIMARY
idle> 
INSTANCE_NAME    STATUS
---------------- ------------
DG11G            MOUNTED
idle> alter database open
idle> 
Database altered.

dataguard switchover的自动化脚本实现相关推荐

  1. python自动化办公脚本下载-python自动化脚本

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 运维自动化,已经成为运维必不可少的一部分,下面附上自己写的监控nginx_stat ...

  2. python_selenium之第一个自动化脚本

    python_selenium之第一个自动化脚本 上一节介绍了xpath的使用,接下来完成第一个自动化脚本 一.步骤: 1. 这里使用火狐浏览器,首先打开火狐浏览器 2. 使浏览器窗口最大化 3.输入 ...

  3. lua自动化脚本关于文本读写和特殊不可见字符转换的处理

    lua自动化脚本关于文本读写和特殊不可见字符转换的处理 因为lua在读写文本中可能还会碰到一些比较变态的不可见字符,%s," "这些转换不了,所以需要做特殊的处理. 参考菜鸟教程的 ...

  4. 2.4 编写第一个自动化脚本

    编写一个简单的自动化脚本 1 #coding=utf-8 2 from Selenium import webdriver 3 driver = webdriver.Firefox() 4 drive ...

  5. Jenkins构建自动化脚本执行无界面解决方法

    场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...

  6. unittest+discover批量处理自动化脚本

    自动化的目的就是批量执行脚本代替手动测试的繁重劳动,单个脚本的执行较为容易,但是事实上自动化脚本时很多的,因此需要批量执行,这个时候需要用到unittest模块里的discover方法进行多个自动化脚 ...

  7. 什么是python自动化脚本_Python自动化

    龙源期刊网 http://www.qikan.com.cn Python 自动化 作者:张焱 来源:<电子技术与软件工程> 2017 年第 22 期 随着人工智能的发展,机器代替人工,已经 ...

  8. crt脚本怎么添加等待时间_secureCRT自动化脚本(之定时任务)

    有时候需要每天定时拉取服务器上的日志文件到跳板机,而又苦于没有权限操作crontab命令,怎么办呢??? 一些windows远程登录软件(Putty,cygwin,secureCRT--)可以帮忙哦~ ...

  9. 【Python】5个方便好用的Python自动化脚本

    相比大家都听过自动化生产线.自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作效率. 编程世界里有各种各样的自动化脚本,来完成不同的任务. 尤其Python非常适合编 ...

最新文章

  1. centos --- phpunit 安装过程
  2. oracle数据库从关闭到启动,Oracle数据库的启动和关闭详细过程
  3. Android中实现照片滑动时左右进出的动画的xml代码
  4. html5中高德、腾讯、百度 地图api调起手机app
  5. python取数组最后一个元素_Python Json。只获取json数组中的最后一个元素
  6. leetcode20. 有效的括号
  7. ios textView显示不全
  8. ggplot2:可视化设计师的神器,了解一下
  9. 史上最后一位数学全才——庞加莱
  10. 2021高考厦门科技中学成绩查询,2021年厦门重点高中名单及排名,厦门高中高考成绩排名榜...
  11. linux安装jdk1.8
  12. php iconv translit,php iconv translit for removing accents: not working as excepted?
  13. Java实现给PDF文件加水印、图片、签名(含测试类)
  14. Flask Marshmallow基本使用
  15. 中断上下文中的preempt count
  16. 飞桨《百度构架师手把手教深度学习》结营体验
  17. 用一年的数据预测下一年数据_一年的招聘数据中的经验教训
  18. 使用pandas清洗携程旅游数据
  19. android 字体大小换算,Android单位换算与UI适配
  20. 陇原战“疫“2021 复现Re

热门文章

  1. PHP key() 函数
  2. MySQL数据库常用的操作命令(一)
  3. Nacos长连接诉求分析
  4. JVM内存划分、Linux用户态、内核态简介
  5. 关于如何收集,标准化和集中化处理Golang日志的一些建议
  6. RabbitMQ——事务
  7. 初识MyBatis-Plus
  8. Linux基础命令---tracepath
  9. 3011C语言_基础知识
  10. 关于BaseAdapter在listView中的使用