10g Data Guard physical standby的主备库角色转换测试(switchover & failover)

本文详细阐述了Oracle数据库角色转换(switchover)与故障切换(failover)的过程,包括准备工作、操作步骤及注意事项。通过具体示例,展示了如何在主备库之间进行角色互换和故障切换,以及在不同模式下的数据一致性与恢复策略。
1、角色转换前的准备工作
1)主库上确认fal_server、db_file_name_convert、log_file_name_convert、standby_file_management、log_archive_dest_n的设置
fal_server=orcldg
db_file_name_convert='E:\oracle\product\10.2.0\oradata\ORCLDG\', 'E:\oracle\product\10.2.0\oradata\ORCL\'
log_file_name_convert='E:\oracle\product\10.2.0\oradata\ORCLDG\', 'E:\oracle\product\10.2.0\oradata\ORCL\'
standby_file_management=auto
SQL> show parameter log_archive_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1                   string      location=E:\oracle\product\10.2.0\arch valid_for=(all_logfiles,all_roles) db_unique_name=ORCL
log_archive_dest_2                   string      service=7502 arch valid_for=(online_logfiles,primary_role) db_unique_name=ORCLDG

2)在主库创建standby redo log
alter database add standby logfile 'E:\oracle\product\10.2.0\oradata\ORCL\DGREDO01.log' size 50M;
alter database add standby logfile 'E:\oracle\product\10.2.0\oradata\ORCL\DGREDO02.log' size 50M;
alter database add standby logfile 'E:\oracle\product\10.2.0\oradata\ORCL\DGREDO03.log' size 50M;
alter database add standby logfile 'E:\oracle\product\10.2.0\oradata\ORCL\DGREDO04.log' size 50M;

3)备库上确认fal_server、db_file_name_convert、log_file_name_convert、standby_file_management、log_archive_dest_n的设置
fal_server=orcl
db_file_name_convert='E:\oracle\product\10.2.0\oradata\ORCL\', 'E:\oracle\product\10.2.0\oradata\ORCLDG\'
log_file_name_convert='E:\oracle\product\10.2.0\oradata\ORCL\', 'E:\oracle\product\10.2.0\oradata\ORCLDG\'
standby_file_management=auto
SQL> show parameter log_archive_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1                   string      location=E:\oracle\product\10.2.0\arch2 valid_for=(all_logfiles,all_roles) db_unique_name=ORCLDG
log_archive_dest_2                   string      service=7501 arch valid_for=(online_logfiles,primary_role) db_unique_name=ORCL

4)备库创建online redo log
原先data guard刚配置好的时候,备库中只是在控制文件中记录了online redo log的信息,但是实际磁盘上并没有online redo log,在备库执行恢复的时候会去检测并创建,摘录alert日志如下:

Thu Mar 06 10:04:13 2014
alter database recover managed standby database disconnect from session
MRP0 started with pid=13, OS id=2684
Managed Standby Recovery not using Real Time Apply
Thu Mar 06 10:04:19 2014
Errors in file e:\oracle\product\10.2.0\admin\orcldg\bdump\orcldg_mrp0_2684.trc:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\REDO01.LOG'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。

Thu Mar 06 10:04:19 2014
Errors in file e:\oracle\product\10.2.0\admin\orcldg\bdump\orcldg_mrp0_2684.trc:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\REDO01.LOG'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。

Clearing online redo logfile 1 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\REDO01.LOG
Clearing online log 1 of thread 1 sequence number 36
Thu Mar 06 10:04:19 2014
Errors in file e:\oracle\product\10.2.0\admin\orcldg\bdump\orcldg_mrp0_2684.trc:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\REDO01.LOG'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。

Thu Mar 06 10:04:19 2014
Completed: alter database recover managed standby database disconnect from session
Thu Mar 06 10:04:20 2014
Clearing online redo logfile 1 complete


5)确保备库处于archivelog和force logging模式
SQL> select log_mode,force_logging from v$database;
 
LOG_MODE     FORCE_LOGGING
------------ -------------
ARCHIVELOG   YES

6)确保备库存在和主库一致的临时文件
主库:
SQL> select name from v$tempfile;
 
NAME
------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF

备库:
SQL> select name from v$tempfile;
 
NAME
------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\TEMP01.DBF

2、switchover(主库和备库角色互换,一般是主库在硬件升级或软件升级的时候进行switchover)
1)关闭备库,打开主库,并在主库上执行一些变更:
startup mount
alter system set log_archive_dest_2='service=7502 arch valid_for=(online_logfiles,primary_role) db_unique_name=ORCLDG' scope=spfile;
alter database set standby database to maximize performance;--现在data guard是最大性能保护模式
alter database open;
SQL> select * from hr.test;

        ID
----------
         1
         2
         3
         4

SQL> insert into hr.test values(5);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

在主库归档日志目录下产生一个归档日志,在备库上没有

SQL> insert into hr.test values(6);--id=6这条数据还在联机重组日志中

已创建 1 行。

SQL> commit;

提交完成。

2)主库上检查是否支持switchover,如果v$database.switchover_status列为to standby表示支持,不然就要重新检查下data guard的配置

SQL> select database_role,open_mode,switchover_status from v$database;

DATABASE_ROLE    OPEN_MODE  SWITCHOVER_STATUS
---------------- ---------- --------------------
PRIMARY          READ WRITE SESSIONS ACTIVE

状态是sessions active,看联机文档的描述:
If the value in the SWITCHOVER_STATUS column is SESSIONS ACTIVE, perform the 
steps described in Section A.4, "Problems Switching Over to a Standby Database" on 
page A-4 to identify and terminate active user or SQL sessions that might prevent a 
switchover from being processed. If, after performing these steps, the SWITCHOVER_
STATUS column still displays SESSIONS ACTIVE, you can successfully perform a 
switchover by appending the WITH SESSION SHUTDOWN clause to the ALTER 
DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY statement 
described in Step 2.

--不过我当前是没有其他session连着的,不知道为什么是显示这个状态,不过可以使用with session shutdown这个选项

3)将主库转换为备库
SQL> alter database commit to switchover to physical standby with session shutdown;
alter database commit to switchover to physical standby with session shutdown
*
第 1 行出现错误:
ORA-16416: 切换目标与主目标不同步

因为我故意制造了主库和备库的日志间隙,备库重新同步后,应该没问题,可以顺利切换:
备库:
SQL> alter database recover managed standby database disconnect from session;

数据库已更改。

主库:
SQL> alter system switch logfile;--把第6条记录也同步过去

系统已更改。

备库上应用完毕后,主库上执行:
SQL> alter database commit to switchover to physical standby with session shutdown;--执行成功

数据库已更改。

SQL> select database_role,open_mode,switchover_status from v$database;
select database_role,open_mode,switchover_status from v$database
                                                      *
第 1 行出现错误:
ORA-01507: 未装载数据库

主库执行这个操作后,数据库被卸载,但是实例还是启动着的

摘录alert日志如下:
alter database commit to switchover to physical standby with session shutdown
Thu Mar 06 12:52:14 2014
Stopping background process CJQ0
Thu Mar 06 12:52:14 2014
Stopping background process QMNC
Thu Mar 06 12:52:15 2014
SMON: disabling tx recovery
Thu Mar 06 12:52:15 2014
Stopping Job queue slave processes
Thu Mar 06 12:52:15 2014
Job queue slave processes stopped
Active process 7396 user 'SYSTEM' program 'ORACLE.EXE (SHAD)'
Active process 4820 user 'SYSTEM' program 'ORACLE.EXE (SHAD)'
CLOSE: waiting for server sessions to complete.
CLOSE: all sessions shutdown successfully.
Thu Mar 06 12:52:17 2014
SMON: disabling cache recovery
Thu Mar 06 12:52:17 2014
Block change tracking service stopping.
Thu Mar 06 12:52:17 2014
Stopping background process CTWR
Thu Mar 06 12:52:18 2014
Shutting down archive processes
Archiving is disabled
Thu Mar 06 12:52:23 2014
ARCH shutting down
ARC1: Archival stopped
Thu Mar 06 12:52:28 2014
ARCH shutting down
ARC0: Archival stopped
Thu Mar 06 12:52:29 2014
Thread 1 closed at log sequence 40
Successful close of redo thread 1
Thu Mar 06 12:52:30 2014
ARCH: Noswitch archival of thread 1, sequence 40
ARCH: End-Of-Redo Branch archival of thread 1 sequence 40
ARCH: Archiving is disabled due to current logfile archival
Clearing standby activation ID 1353650526 (0x50af115e)
The primary database controlfile was created using the
'MAXLOGFILES 16' clause.
There is space for up to 13 standby redo logfiles
Use the following SQL commands on the standby database to create
standby redo logfiles that match the primary database:
ALTER DATABASE ADD STANDBY LOGFILE 'srl1.f' SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE 'srl2.f' SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE 'srl3.f' SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE 'srl4.f' SIZE 52428800;
Archivelog for thread 1 sequence 40 required for standby recovery
MRP0 started with pid=10, OS id=7948
Managed Standby Recovery not using Real Time Apply
Online logfile pre-clearing operation disabled by switchover
Media Recovery Log E:\ORACLE\PRODUCT\10.2.0\ARCH\ARC00040_0825872308.001
Identified End-Of-Redo for thread 1 sequence 40
Thu Mar 06 12:52:39 2014
Media Recovery End-Of-Redo indicator encountered
Thu Mar 06 12:52:39 2014
Media Recovery Applied until change 12315123290436
Resetting standby activation ID 1353650526 (0x50af115e)
Thu Mar 06 12:52:41 2014
Completed: alter database commit to switchover to physical standby with session shutdown

--在switchover的过程中会归档主库当前的联机重做日志

SQL> shutdown immediate
ORA-01507: 未装载数据库

ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  603979776 bytes
Fixed Size                  1250380 bytes
Variable Size             373296052 bytes
Database Buffers          222298112 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
SQL> select database_role,switchover_status from v$database;--主库已经成功switchover为备库

DATABASE_ROLE    SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY TO PRIMARY

4)备库上检查是否支持switchover,如果v$database.switchover_status列为to primary表示支持,不然就要重新检查下data guard的配置
下面在备库上进行操作
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE

5)将备库转换为主库
SQL> alter database commit to switchover to primary with session shutdown;

数据库已更改。

SQL> select database_role,switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS
---------------- --------------------
PRIMARY          SESSIONS ACTIVE

此时备库已经变为新的主库,打开新的主库
SQL> alter database open;

数据库已更改。

SQL> select * from hr.test;--数据是同步过来的,没有丢失

        ID
----------
         1
         2
         3
         4
         5
         6

已选择6行。

6)验证新的主库的功能
SQL> insert into hr.test values(7);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

归档日志已经写入新的主库和新的备库归档目的地,备库开启恢复后,数据同步成功
新的备库:
SQL> alter database recover managed standby database disconnect from session;

数据库已更改。

SQL> alter database recover managed standby database cancel;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL> select * from hr.test;

        ID
----------
         7
         1
         2
         3
         4
         5
         6

已选择7行。

--至此,switchover演示完毕

3、failover(failover之后,原主库不再是data guard配置的一部分,failover一般就是指主库遭遇故障,启动不起来,需要切换为备库的情况)
在上述的switchover之后,原备库orcldg(网络服务器名为7502)变为新的主库,原主库orcl(网络服务器名为7501)变为新的备库

sqlplus sys/oracle@7502 as sysdba
SQL> select database_role from v$database;

DATABASE_ROLE
----------------
PRIMARY

sqlplus sys/oracle@7501 from v$database;
SQL> select database_role from v$database;

DATABASE_ROLE
----------------
PHYSICAL STANDBY

1)将备库关闭,主库打开,在主库上执行一些修改:
SQL> select * from hr.test;

        ID
----------
         7
         1
         2
         3
         4
         5
         6

已选择7行。

SQL> insert into hr.test values(8);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into hr.test values(9);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into hr.test values(10);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into hr.test values(11);--id=11这条数据所在的日志未切换,未归档,还在联机重做日志文件中

已创建 1 行。

SQL> commit;

提交完成。

在主库的归档目录(E:\oracle\product\10.2.0\arch2)下产生了42、43、44这三个归档日志文件,主库当前联机重做日志文件的sequence number为45,这些日志在备库上不存在

2)现在将主库shutdown abort,模拟故障

3)在备库上确认归档文件与主库是否连续,如果不连续,需要将主库上的归档日志文件复制到备库,并注册到备库控制文件中

将备库启动到mount状态,查询v$archive_gap视图,返回0条记录,但是实际上备库和主库是存在归档间隙的,可能因为主库目前是关闭状态,所以这个视图查询不出来,但我们知道,主库和备库之间差42、43、44这三个归档日志文件。
将主库的归档目录(E:\oracle\product\10.2.0\arch2)下的42、43、44这三个归档日志文件,复制到备库的归档目录(E:\oracle\product\10.2.0\arch)下,并将这些日志注册到备库的控制文件中:
SQL> alter database register physical logfile 'E:\oracle\product\10.2.0\arch\ARC00042_0825872308.001';

数据库已更改。

SQL> alter database register physical logfile 'E:\oracle\product\10.2.0\arch\ARC00043_0825872308.001';

数据库已更改。

SQL> alter database register physical logfile 'E:\oracle\product\10.2.0\arch\ARC00044_0825872308.001';

数据库已更改。

4)在备库上应用这些归档日志
SQL> alter database recover managed standby database finish force;

数据库已更改。

5)切换备库为主库
SQL> alter database commit to switchover to primary;

数据库已更改。

SQL> select database_role from v$database;

DATABASE_ROLE
----------------
PRIMARY

SQL> alter database open;

数据库已更改。

SQL> select * from hr.test;

        ID
----------
         7
         1
         2
         3
         4
         5
         6
         8
         9
        10

已选择10行。

--可以看到,备库已经顺利failover为主库(原主库已经不是data guard的一部分),但是看到hr.test表中只有10条数据,id=11那条数据已经丢失了,所以说在maximum performance保护模式下,如果主库异常宕机,需要切换为备库的话,会造成一定数据的丢失(丢失联机重做日志中的数据)。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26524307/viewspace-1102698/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26524307/viewspace-1102698/

内容概要:本文档是一份关于交换路由配置的学习笔记,系统地介绍了网络设的远程管理、交换机与路由器的核心配置技术。内容涵盖Telnet、SSH、Console三种远程控制方式的配置方法;详细讲解了VLAN划分原理及Access、Trunk、Hybrid端口的工作机制,以及端口镜像、端口汇聚、端口隔离等交换技术;深入解析了STP、MSTP、RSTP生成树协议的作用与配置步骤;在路由部分,涵盖了IP地址配置、DHCP服务部署(接口池与全局池)、NAT转换(静态与动态)、静态路由、RIP与OSPF动态路由协议的配置,并介绍了策略路由和ACL访问控制列表的应用;最后简要说明了华为防火墙的安全区域划分与基本安全策略配置。; 适合人群:具一定网络基础知识,从事网络工程、运维或相关技术岗位1-3年的技术人员,以及准参加HCIA/CCNA等认证考试的学习者。; 使用场景及目标:①掌握企业网络中常见的交换与路由配置技能,提升实际操作能力;②理解VLAN、STP、OSPF、NAT、ACL等核心技术原理并能独立完成中小型网络搭建与调试;③通过命令示例熟悉华为设CLI配置逻辑,为项目实施和故障排查提供参考。; 阅读建议:此笔记以实用配置为,建议结合模拟器(如eNSP或Packet Tracer)动手实践每一条命令,对照拓扑理解数据流向,重点关注VLAN间通信、路由选择机制、安全策略控制等关键环节,并注意不同设型号间的命令差异。
多旋翼无人机组合导航系统-多源信息融合算法(Matlab代码实现)内容概要:本文围绕多旋翼无人机组合导航系统,重点介绍了基于多源信息融合算法的设计与实现,利用Matlab进行代码开发。文中采用扩展卡尔曼滤波(EKF)作为核心融合算法,整合GPS、IMU(惯性测量单元)、里程计和电子罗盘等多种传感器数据,提升无人机在复杂环境下的定位精度与稳定性。特别是在GPS信号弱或丢失的情况下,通过IMU惯导数据辅助导航,实现连续可靠的位姿估计。同时,文档展示了完整的算法流程与Matlab仿真实现,涵盖传感器数据预处理、坐标系转换、滤波融合及结果可视化等关键环节,体现了较强的工程实践价值。; 适合人群:具一定Matlab编程基础和信号处理知识,从事无人机导航、智能控制、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多旋翼无人机的高精度组合导航系统设计;②用于教学与科研中理解多传感器融合原理与EKF算法实现;③支持复杂环境下无人机自飞行与定位系统的开发与优化。; 阅读建议:建议结合Matlab代码与理论推导同步学习,重点关注EKF的状态预测与更新过程、多传感器数据的时间同步与坐标变换处理,并可通过修改噪声参数或引入更多传感器类型进行扩展实验。
源码来自:https://pan.quark.cn/s/28c3abaeb160 在高性能计算(High Performance Computing,简称HPC)范畴内,处理器的性能衡量对于改进系统构建及增强运算效能具有关键价值。 本研究聚焦于一种基于ARM架构的处理器展开性能评估,并就其性能与Intel Xeon等流商业处理器进行对比研究,特别是在浮点运算能力、存储器带宽及延迟等维度。 研究选取了高性能计算中的典型任务,诸如Stencils计算方法等,分析了在ARM处理器上的移植编译过程,并借助特定的执行策略提升运算表现。 此外,文章还探讨了ARM处理器在“绿色计算”范畴的应用前景,以及面向下一代ARM服务器级SoC(System on Chip,简称SoC)的性能未来探索方向。 ARM处理器是一种基于精简指令集计算机(Reduced Instruction Set Computer,简称RISC)架构的微处理器,由英国ARM Holdings公司研发。 ARM处理器在移动设、嵌入式系统及服务器级计算领域获得广泛应用,其设计优势体现为高能效比、低成本且易于扩展。 当前的ARMv8架构支持64位指令集,在高性能计算领域得到普遍采用。 在性能测试环节,重点考察了处理器的浮点运算能力,因为浮点运算在科学计算、图形渲染和数据处理等高性能计算任务中扮演核心角色。 实验数据揭示,ARM处理器在双精度浮点运算方面的性能达到475 GFLOPS,相当于Intel Xeon E5-2680 v3处理器性能的66%。 尽管如此,其内存访问带宽高达105 GB/s,超越Intel Xeon处理器。 这一发现表明,在数据密集型应用场景下,ARM处理器能够展现出与流处理器相匹敌的性能水平。 在实践...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值