DataGuard角色切换

本文详细介绍了Oracle数据库从主库切换到备用库的过程,包括验证主库能够切换到备用角色、初始化主库上的切换操作、关闭并挂载前主库等步骤。通过具体的SQL命令示例,展示了如何处理切换过程中可能出现的介质恢复需求。
Step 1 Verify that the primary database can be switched to the standby role.
验证主库能够切换到备用角色。
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
idle>:wq




SWITCHOVER_STATUS
--------------------
TO STANDBY


Step 2 Initiate the switchover on the primary database.
在主库上面开始切换
alter database commit to switchover to physical standby with session shutdown ;




Step 3 Shut down and then mount the former primary database.
关闭并且mount上从前的主库。


shutdown abort;
startup mount ;


Step 4 Verify that the switchover target is ready to be switched to the primary role.
验证转换目标已经准备好转换为主库角色
SWITCHOVER_STATUS
--------------------
SWITCHOVER LATENT


这里查询出来的值不为TO_PRIMARY即有点问题。
执行下一步的时候可能会出现问题。


Step 5 Switch the target physical standby database role to the primary role.
转换目标逻辑备用库角色为主库角色。


sys@DEX> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN
*
ERROR at line 1:
ORA-16139: media recovery required


这里提示需要介质恢复。


sys@DEX> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;


Database altered.


sys@DEX> SELECT SWITCHOVER_STATUS FROM V$DATABASE;


SWITCHOVER_STATUS
--------------------
TO PRIMARY


sys@DEX> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;


Database altered.


Step 6 Open the new primary database.
打开新的主库
sys@DEX> ALTER DATABASE OPEN;


Database altered.




Step 7 Verify the switch role .
验证角色转换


主库执行
sys@DEX> alter system switch logfile ;


System altered.


sys@DEX> select sequence# from v$log ;


SEQUENCE#
----------
40
41
42


sys@DEX>




standby库执行


sys@DEX> select sequence# from v$log ;


SEQUENCE#
----------
40
42
41


sys@DEX>







### Data Guard 中 MySQL 主从切换的配置与操作教程 #### 1. 数据库环境准备 在执行主从切换之前,需确保主服务器和从服务器之间的复制关系正常运行。可以通过以下命令验证状态: ```sql SHOW SLAVE STATUS\G; ``` 确认 `Slave_IO_Running` 和 `Slave_SQL_Running` 均为 `Yes` 表明复制功能正常工作[^2]。 #### 2. 设置只读模式 为了防止在切换过程中数据被意外修改,在从服务器上启用只读模式是一个良好的实践。通过编辑 `my.cnf` 文件实现此目的: ```ini [mysqld] read-only=1 ``` 保存文件并重启数据库服务以应用更改。 #### 3. 手动停止从服务器上的复制进程 在正式进行切换前,先暂停从服务器的数据同步活动: ```sql STOP SLAVE; ``` #### 4. 同步最后一批事务日志 确保所有未处理的日志已完全应用于当前的从节点上: ```sql RESET SLAVE ALL; CHANGE MASTER TO MASTER_HOST='new_master_host', MASTER_USER='repl_user', MASTER_PASSWORD='password'; START SLAVE; ``` 这里需要注意替换实际的新主机地址以及相应的用户名密码信息[^3]。 #### 5. 切换角色 (Switchover/Failover) 当一切准备工作就绪之后可以开始真正的角色互换流程: ##### 方法一:计划内的平滑切换(Switchover) 这是推荐的方式用于日常维护场景下的主动切换。 - 在原主库执行如下指令使其进入锁定状态直到完成整个转换周期结束为止; ```sql FLUSH TABLES WITH READ LOCK; SET GLOBAL read_only = ON; UNLOCK TABLES; ``` - 接着按照前面提到过的步骤调整新的master-slave连接参数; ##### 方法二:故障情况下的紧急接管(Failover) 如果遇到不可预见的情况致使原有primary instance失效,则立即采取行动恢复业务连续性至关重要。 - 确认备用实例已经是最新的副本并且没有任何延迟存在(`Seconds_Behind_Master`=0); - 修改应用程序指向新promoted master address; - 更新DNS记录或者负载均衡器设置以便客户端请求能够正确路由到最新的active node上去。 #### 6. 测试验证 完成上述全部环节后务必进行全面的功能性和一致性测试来保证系统的稳定可靠运作状况良好无误。 ```python import pymysql def test_db_connection(host, port, user, password): try: connection = pymysql.connect( host=host, port=int(port), user=user, passwd=password ) cursor = connection.cursor() cursor.execute('SELECT VERSION()') version = cursor.fetchone()[0] print(f'Database Version: {version}') return True except Exception as e: print(e) return False if __name__ == '__main__': result = test_db_connection('localhost', '3306', 'root', '') if not result: raise SystemExit(1) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值