DATAGUARD failover切换及配置范例

Oracle DataGuard 故障转移切换 (Failover) FAILOVER切换一般是PRIMARY数据库发生故障后的切换,这种情况是STANDBY数据库发挥其作用的情况。这种切换发生后,可能会造成数据的丢失。而且这个过程不是可逆的,DATA GUARD环境会被破坏。 阅读详情

今天给客户演示了虚拟机上的switchover和failover的切换过程。客户关心的重点自然是failover,我们直接关掉虚拟存储的开关来模拟阵列故障。failover步骤如下

1. 

select NAME,RESETLOGS_TIME,LOG_MODE,OPEN_MODE,PROTECTION_MODE,REMOTE_ARCHIVE, 
DATABASE_ROLE,SWITCHOVER_STATUS,FORCE_LOGGING 
from v$database;


2. 停止日志应用

alter database recover managed standby database cancel;

3. 关闭standby日志传输

alter database recover managed standby database finish force;

4. 切换到primary

alter database commit to switchover to primary with session shutdown;


做这一步的时候,若存在gap,则会报ORA-16139    :Switchover: Media recovery required - standby not in limbo 错误。做测试的时候,若先起主库再起备库,且未等待备库相关日志传输完毕,就会出现这个问题。此时需要强制切换

alter database activate physical standby database;


5. 重启数据库到open状态


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

附上单机到单机的linux下dataguard实施过程。


准备环境

PRIMARY: RHEL 4.7 + oracle 10.2.0.4单机+文件系统  主机名:zhbqdb1

STANDBY: RHEL 4.7 + oracle 10.2.0.4单机 + 文件系统  主机名:zhbqdb2

主机上创建一个库名为zhdydb1的数据库,开启归档模式。备机装好数据软件,版本升级到与主机一致

在主机和备机上配好/etc/hosts并创建数据存放路径

# Do not remove thefollowing line, or various programs
#that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost
172.17.42.29            zhbqdb1
172.17.42.30            zhbqdb2

 

 

创建存放数据文件和归档的目录

 

mkdir /u01/flash_recovery_area
mkdir /u01/oradata
chown oracle:oinstall/u01/flash_recovery_area
chown oracle:oinstall/u01/oradata

主机的配置


打开force logging

SQL> alter database force logging;

 

查看当前数据库是否置于force logging 下:

selectforce_logging from v$database;

创建归档目录

 

 mkdir /u01/flash_recovery_area/ZHDYDB1/arch
 mkdir/u01/flash_recovery_area/ZHDYDB2
 mkdir/u01/flash_recovery_area/ZHDYDB2/arch
 mkdir/u01/flash_recovery_area/ZHDYDB2/archivelog


配置tnsnames

在zhbqdb1上

vi$ORACLE_HOME/network/admin/tnsnames.ora

 

ZHDYDB1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =zhbqdb1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = zhdydb1)
    )
  )
 
ZHDYDB2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =zhbqdb2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = zhdydb2)
    )
  )

 

添加standby redo log file

这里primary库中有7个重做日志组,对应的,需要创建7+1个standby logfilegroup

 

ALTER DATABASE ADD STANDBY LOGFILE GROUP 8
('/u01/oradata/ZHDYDB1/onlinelog/sdbylog8a.log', '/u01/flash_recovery_area/ZHDYDB1/onlinelog/sdbylog8a.log') SIZE 100M;
 
ALTERDATABASE ADD STANDBY LOGFILE GROUP 9
('/u01/oradata/ZHDYDB1/onlinelog/sdbylog9a.log', '/u01/flash_recovery_area/ZHDYDB1/onlinelog/sdbylog9a.log') SIZE 100M;
 
ALTERDATABASE ADD STANDBY LOGFILE GROUP 10
('/u01/oradata/ZHDYDB1/onlinelog/sdbylog10a.log', '/u01/flash_recovery_area/ZHDYDB1/onlinelog/sdbylog10a.log') SIZE 100M;
 
ALTERDATABASE ADD STANDBY LOGFILE GROUP 11
('/u01/oradata/ZHDYDB1/onlinelog/sdbylog11a.log', '/u01/flash_recovery_area/ZHDYDB1/onlinelog/sdbylog11a.log') SIZE 100M;
 
ALTERDATABASE ADD STANDBY LOGFILE GROUP 12
('/u01/oradata/ZHDYDB1/onlinelog/sdbylog12a.log', '/u01/flash_recovery_area/ZHDYDB1/onlinelog/sdbylog12a.log') SIZE 100M;
 
ALTERDATABASE ADD STANDBY LOGFILE GROUP 13
('/u01/oradata/ZHDYDB1/onlinelog/sdbylog13a.log', '/u01/flash_recovery_area/ZHDYDB1/onlinelog/sdbylog13a.log') SIZE 100M;
 
ALTERDATABASE ADD STANDBY LOGFILE GROUP 14
('/u01/oradata/ZHDYDB1/onlinelog/sdbylog14a.log', '/u01/flash_recovery_area/ZHDYDB1/onlinelog/sdbylog14a.log') SIZE 100M;
 
ALTERDATABASE ADD STANDBY LOGFILE GROUP 15
('/u01/oradata/ZHDYDB1/onlinelog/sdbylog15a.log', '/u01/flash_recovery_area/ZHDYDB1/onlinelog/sdbylog15a.log') SIZE 100M;

 

查看状态

SELECTGROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
 
columnmember  format a50
selectgroup#,member from v$logfile order by group#;


 

创建密码文件及初始化文件

确定primary和standby中各有一个路径用于rman备份: /bak/dgbak

 

若primary中不存在密码文件,创建一个

orapwdfile=$ORACLE_HOME/dbs/orapwzhdydb1 password=aaa entries=5
 
cp$ORACLE_HOME/dbs/orapwzhdydb1 /bak/dgbak
mv/bak/dgbak/orapwzhdydb1 /bak/dgbak/orapwzhdydb2


SQL> create pfile='/bak/dgbak/initzhdydb2.ora' from spfile;

 

修改初始化参数

alter system setdb_unique_name=zhdydb1 scope=spfile;
alter system setLOG_ARCHIVE_CONFIG='DG_CONFIG=(zhdydb1,zhdydb2)'  scope=spfile;
 
alter system setLOG_ARCHIVE_DEST_1='LOCATION=/u01/flash_recovery_area/ZHDYDB1/archivelog  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=zhdydb1'
scope=spfile;
 
alter system setLOG_ARCHIVE_DEST_2='SERVICE=zhdydb2 LGWR SYNC AFFIRM  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=zhdydb2'  scope=spfile;

alter system setLOG_ARCHIVE_DEST_STATE_1=ENABLE  scope=spfile;
alter system setLOG_ARCHIVE_DEST_STATE_2=ENABLE scope=spfile;
 
alter system setLOG_ARCHIVE_MAX_PROCESSES=10 scope=spfile;
alter system setlog_archive_format='%t_%s_%r.dbf' scope=spfile;
 
alter system setSTANDBY_ARCHIVE_DEST='LOCATION=/u01/flash_recovery_area/ZHDYDB1/arch'  scope=spfile;
 
 
alter system setremote_login_passwordfile='EXCLUSIVE' scope=spfile;
 
alter system set FAL_SERVER=zhdydb2  scope=spfile;
alter system set FAL_CLIENT=zhdydb1  scope=spfile;
 
alter system set db_file_name_convert='/u01/oradata/ZHDYDB1/','/u01/oradata/ZHDYDB2/'scope=spfile;
 
alter system set log_file_name_convert='/u01/flash_recovery_area/ZHDYDB1/','/u01/flash_recovery_area/ZHDYDB2/'scope=spfile;
 
 
alter system set STANDBY_FILE_MANAGEMENT=AUTO  scope=spfile;


重启到mount 状态后

 

ALTERDATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY; --将保护级别升级为最大可用

selectdatabase_role,protection_mode,protection_level,switchover_status fromv$database; 

DATABASE_ROLE  PROTECTION_MODE    PROTECTION_LEVEL  SWITCHOVER_STATUS

------------------------------------ -------------------- --------------------

PRIMARY          MAXIMUM AVAILABILITY UNPROTECTED          TO STANDBY

 

重启数据库

 

 

RMAN备份到/bak/dgbak下并将相关文件传输到standby中

rman target / <<END
crosscheck archivelog all;
run{
backup format '/bak/dgbak/db_%u_%d_%s'  database;
}
crosscheck archivelog all;
run{
 sql"alter system archive log current";
 backupformat '/bak/dgbak/ar_%t_%s_%p' archivelog all;
}
run{
backup as compressed backupset
format='/bak/dgbak/standby.ctl'
tag='standby'
current controlfile for standby reuse;
}
crosscheck archivelog all;
run{
 sql"alter system archive log current";
 backupformat '/bak/dgbak/ar_%t_%s_%p' archivelog all ;
}
exit
END


 

-----------------------------------------------------------------------------------------------

 

cd/bak/dgbak
scp *zhbqdb2:/bak/dgbak
 
scp$ORACLE_HOME/network/admin/tnsnames.ora zhbqdb2:$ORACLE_HOME/network/admin


备机的配置



创建必要的目录

 

mkdir /u01/oradata/ZHDYDB2
mkdir /u01/flash_recovery_area/ZHDYDB2
mkdir /u01/oradata/ZHDYDB2/onlinelog
mkdir/u01/flash_recovery_area/ZHDYDB2/onlinelog
 mkdir/u01/flash_recovery_area/ZHDYDB2/arch
 mkdir/u01/flash_recovery_area/ZHDYDB2/archivelog
 mkdir/u01/flash_recovery_area/ZHDYDB1
 mkdir/u01/flash_recovery_area/ZHDYDB1/arch
 mkdir/u01/flash_recovery_area/ZHDYDB1/archivelog
 
mkdir -p /opt/app/admin
mkdir -p/opt/app/admin/zhdydb1
cd/opt/app/admin/zhdydb1
mkdir adump  bdump cdump  dpdump  pfile udump


将相关文件移到对应的位置

cd/bak/dgbak/

mv initzhdydb2.ora orapwzhdydb2 $ORACLE_HOME/dbs/

 

编辑初始化参数

vi$ORACLE_HOME/dbs/initzhdydb2.ora

去掉参数:

*.remote_listener='LISTENERS_ORADB'

*.local_listener='LISTENERS_ORADB'

 

修改以下参数

*.cluster_database=false

 

确定此时standby环境变量里的ORACLE_SID为zhdydb2

 

sqlplus / assysdba

startup nomount

 

create spfilefrom pfile;
shutdownimmediate
startup nomount
 
altersystem set LOG_ARCHIVE_CONFIG='DG_CONFIG=(zhdydb1,zhdydb2)'  scope=spfile;
 
altersystem set db_unique_name=zhdydb2 scope=spfile;
altersystem set
LOG_ARCHIVE_DEST_1='LOCATION=/u01/flash_recovery_area/ZHDYDB2/archivelog  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=zhdydb2'
scope=spfile;
 
 
altersystem set
LOG_ARCHIVE_DEST_2='SERVICE=zhdydb1LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=zhdydb1' 
scope=spfile;
 
altersystem set
STANDBY_ARCHIVE_DEST='LOCATION=/u01/flash_recovery_area/ZHDYDB2/arch'  scope=spfile sid='*';
 
alter system set db_file_name_convert='/u01/oradata/ZHDYDB2/','/u01/oradata/ZHDYDB1/'scope=spfile;
 
alter system set log_file_name_convert='/u01/flash_recovery_area/ZHDYDB2/','/u01/flash_recovery_area/ZHDYDB1/'scope=spfile;
 
altersystem set FAL_SERVER=zhdydb1 scope=spfile;
altersystem set FAL_CLIENT=zhdydb2 scope=spfile;
alter system set STANDBY_FILE_MANAGEMENT=AUTO  scope=spfile;


shutdown immediate

克隆数据库

前面已经将zhdydb1中的tnsnames.ora复制到standby中,此时再创建一个到客户端的软连接:

ln -s$ORACLE_HOME/network/admin/tnsnames.ora $MY_CLIENT/network/admin/tnsnames.ora
ls -l$MY_CLIENT/network/admin/

 

SQL> startup nomount;

 

rman target sys/aaa@zhdydb1 auxiliary / <<EOF
 
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO'/bak/dgbak/%F';
 
DUPLICATE TARGET DATABASE FOR STANDBY NOFILENAMECHECK  DORECOVER;
 
EOF

 

重建standby的redo logfile group

alter database drop standby logfile group 8
/
alter database drop standby logfile group 9
/
alter database drop standby logfile group 10
/
alter database drop standby logfile group 11
/
alter database drop standby logfile group 12
/
alter database drop standby logfile group 13
/
alter database drop standby logfile group 14
/
alter database drop standby logfile group 15
/


ALTER DATABASE ADD STANDBY LOGFILE GROUP 8
('/u01/oradata/ZHDYDB2/onlinelog/sdbylog8a.log', '/u01/flash_recovery_area/ZHDYDB2/onlinelog/sdbylog8a.log') SIZE 100M;
 
ALTER DATABASE ADD STANDBY LOGFILE GROUP 9
('/u01/oradata/ZHDYDB2/onlinelog/sdbylog9a.log', '/u01/flash_recovery_area/ZHDYDB2/onlinelog/sdbylog9a.log') SIZE 100M;
 
ALTER DATABASE ADD STANDBY LOGFILE GROUP 10
('/u01/oradata/ZHDYDB2/onlinelog/sdbylog10a.log', '/u01/flash_recovery_area/ZHDYDB2/onlinelog/sdbylog10a.log') SIZE 100M;
 
ALTER DATABASE ADD STANDBY LOGFILE GROUP 11
('/u01/oradata/ZHDYDB2/onlinelog/sdbylog11a.log', '/u01/flash_recovery_area/ZHDYDB2/onlinelog/sdbylog11a.log') SIZE 100M;
 
ALTER DATABASE ADD STANDBY LOGFILE GROUP 12
('/u01/oradata/ZHDYDB2/onlinelog/sdbylog12a.log', '/u01/flash_recovery_area/ZHDYDB2/onlinelog/sdbylog12a.log') SIZE 100M;
 
ALTER DATABASE ADD STANDBY LOGFILE GROUP 13
('/u01/oradata/ZHDYDB2/onlinelog/sdbylog13a.log', '/u01/flash_recovery_area/ZHDYDB2/onlinelog/sdbylog13a.log') SIZE 100M;
 
ALTER DATABASE ADD STANDBY LOGFILE GROUP 14
('/u01/oradata/ZHDYDB2/onlinelog/sdbylog14a.log', '/u01/flash_recovery_area/ZHDYDB2/onlinelog/sdbylog14a.log') SIZE 100M;
 
ALTER DATABASE ADD STANDBY LOGFILE GROUP 15
('/u01/oradata/ZHDYDB2/onlinelog/sdbylog15a.log', '/u01/flash_recovery_area/ZHDYDB2/onlinelog/sdbylog15a.log') SIZE 100M;


 

查看状态

SELECTGROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
 
columnmember  format a50
selectgroup#,member from v$logfile order by group#;


启动standby

添加一个监听,将数据库名zhdydb1和实例名zhdydb2注册到监听中

netca

netmgr

 

 

启动监听

重新启动standby数据库

SQL> STARTUP NOMOUNT;

SQL> ALTER DATABASE MOUNT STANDBY DATABASE;

ALTERDATABASE RECOVER MANAGED STANDBY DATABASE [ using current logfile ] DISCONNECT FROMSESSION;

 

关闭standby

ALTERDATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

SHUTDOWNIMMEDIATE;

 

lsnrctl stop

 

检查dg的同步情况

分别在primary和standby中执行如下sql语句

SELECT THREAD#, MAX(SEQUENCE#) AS"LAST_APPLIED_LOG" FROM V$LOG_HISTORY GROUP BY THREAD#;

查询从Primary接收到的所有归档(Standby 端)
SQL> SELECT REGISTRAR, CREATOR, THREAD#, SEQUENCE#, FIRST_CHANGE#,NEXT_CHANGE# FROM V$ARCHIVED_LOG;

 

查看alert日志

tail -f$ORACLE_BASE/admin/zhdydb1/bdump/alert_zhdydb1.log

tail -f$ORACLE_BASE/admin/zhdydb1/bdump/alert_zhdydb2.log

 

GAP处理

1) 查看是否有日志GAP:

    SQL> SELECT UNIQUE THREAD#,MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG;

 SQL> SELECTTHREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;


2) 如果有,则拷贝过来

3) 手工的注册这些日志:

SQL> ALTERDATABASE REGISTER LOGFILE '路径';

switchover

主库切成备库:

1. 查询当前的状态:

  SQL> selectswitchover_status from v$database;

  若状态为sessions active,把连到主库的会话关闭掉。或切换时加上with sessionshutdown子句来断开这些会话

 

2. 切换到physical standby

  SQL> alterdatabase commit to switchover to physical standby with session shutdown;

 

3. 关闭数据库

  SQL> shutdownimmediate

 

4. 启动数据库

  SQL> startupnomount;

  SQL> alterdatabase mount standby database;

  SQL> alterdatabase recover managed standby database using current logfile disconnect fromsession;

 

备库切成主库

1. 执行完上面的步骤以后,把原备库切成主库

  SQL> alterdatabase commit to switchover to primary;

 

2. 把数据库启动到open状态

  SQL> alterdatabase open;

failover

当primary库遇到故障的时候,此时我们需要做一个failover(故障切换),把备库切到主库顶上应用

步骤如下(在备库中操作):

 

1. 结束apply进程

  SQL> alter database recover managed standby database finish force;

 

2. 切换成主库

  SQL> alter database commit to switchover to primary;

 

3. 启动到open状态

  SQL> alter database open;


物理DG的failover切换 注:failover切换后原来的主库将不可用,必须重新搭建,所以该实验请慎重选择。 1.在主库端模拟数据库意外宕机 [oracle@rhel6_lhr oradg11g]$ sqlplus / as sysdba 连接到: SQL&gt; select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique... 阅读详情

相关推荐

Oracle dataguard 正常切换和应急切换

Oracle dataguard 正常切换和应急切换 oracle dataguard提供异地容灾方案,能有效的防止单点故障和提供高可用技术,这里介绍dataguard正常主备切换和应急切换(应急切换模拟主库出现问题无法还原,备库脱离dataguard接管主库对外提供服务) 1)Oracle dataguard环境搭建 传送门:Linux 安装orac

willson的专栏 1万+

dataguard 主备切换方式switchover 和 failover 操作步骤

dataguard 切换方式有两种方式:switchover 和 failover。(1)Switchover :无损转换,通常是用户手动触发或者有计划的让其自动触发,比如硬件升级、软件升级之类的。switchover是有计划的,正常的切换,不会破坏数据库DG关系。通常它给你带来的工作量非常小并且都是可预计的。其执行分两个阶段,第一步,primary 数据库转换为standby 角色,第二步,standby 数据库转换为 primary 角色,primary 和 standby 只是简单的角色互换。

老苏畅谈运维 2101

Oracle DataGuard自动切换实战:从配置到故障恢复

本文详细介绍了Oracle DataGuard实现自动切换的完整实战流程。通过配置DataGuard Broker和快速启动故障切换(FSFO),系统能在主库故障时自动将备库提升为新主库,将业务中断时间缩短至分钟级,极大保障了业务连续性。文章从环境检查、关键参数设置、监听配置到DGMGRL命令行操作,逐步解析了配置要点与常见错误排查方法。

weixin_29210759的博客 202

Oracle dataguard主备库创建闪回点及快照数据库与物理standby的切换方法

dg主备库创建闪回点: Create Guaranteed Restore Points (optional) The standard switchover fallback options should suffice for successfully backing out of a switchover. However, if you want an additional fallb

lk的窝 4163

Oracle ADG 切换方式详解:Switchover 与 Failover 操作指南

Switchover 和 Failover 是 Oracle Data Guard 中两种关键的灾难恢复和高可用保障机制。前者适用于计划内维护,后者用于紧急故障响应。理解其原理、掌握操作步骤、并严格完成状态验证,是确保数据库业务连续性的基础。建议结合定期演练和监控工具,构建安全可靠的数据库容灾体系。

huanhuanzhou blog 1264

(第48天)DataGuard SwitchOver/FailOver 切换

上一章讲了如何使用 DG Broker 进行 ADG 一键切换,虽然很方便,但是生产中使用的不多,常用的切换方式还是手动切换(前提是未配置 DG Broker)。

LuciferLiu_DBA 399

DataGuard(一主一备一级联之failover)

fail over 1 failover介绍 failover转换,主要考虑的是如何减少数据量的丢失,如果可以允许数据丢失,可以直接切换备库为主库,不必在进行下面的讨论! ...

cuimiwan3140的博客 519

Dataguard故障切换(Switchover和Failover)及利用Flashback进行恢复.docx

Dataguard故障切换(Switchover和Failover)及利用Flashback进行恢复

DataGuard强制切换(failover)

failover切换   执行以下步骤完成Data Guard环境的Failover切换,为了使 failover过程尽量不丢失数据,在执行真正的切换是要尽量处理主数据库到standby数据库redo日志的传输问题,并将它们注册到standby数据库。 1: 处理缺失的redo    查找、传递和注册缺失的redo日志     这里假设主数据库出现故障

小伟的博客 2661

Dynamics 365 F&O新手必看:Visual Studio 2019搭建项目框架全流程(含Model避坑指南)

本文详细介绍了如何在Visual Studio 2019中为Dynamics 365 Finance and Operations搭建企业级项目框架,包括Model分层策略、Solution管理及开发工作流优化。特别提供了Model避坑指南和实用配置建议,帮助新手快速上手并避免常见错误。

weixin_30505225的博客 381

Windows Server 2019/2022 RDS 授权实战:3步激活许可证服务器,解决120天宽限期问题

本文详细介绍了Windows Server 2019/2022 RDS授权实战,提供3步激活许可证服务器的完整解决方案,解决120天宽限期问题。涵盖远程桌面授权服务器配置、许可证激活方法及组策略设置,确保企业合规使用远程桌面服务。

weixin_32705179的博客 972

DataGuard主从切换Switchover&Failover

DataGuard主从切换1.DataGuard Swithover1.1.验证主库是否可进行切换为备库1.2.在主库进行切换1.3.关闭主库并启动到mount1.4.验证备库可以切换角色1.5.切换备库角色为PRIMARY1.6.启动新主库1.7.在新备库启动同步1.8.在新备库查看同步状态2.DataGuard Failover2.1.将未投递日志传输到备库2.2.确认备库日志应用状态2.3.停止日志同步2.4.应用所有日志2.5.验证备库可以切换角色2.6.切换备库角色为PRIMARY2.7.打开数据

DBA大董的博客 5552

ADS重新安装失败排查指南:从注册表清理到环境变量配置

本文详细解析了ADS重新安装失败的常见原因及解决方案,包括注册表残留清理、license路径锁定处理和环境变量配置。通过分步指南和实用技巧,帮助工程师高效解决安装问题,确保软件正常运行。

weixin_42524708的博客 455

【DATAGUARD】物理dg配置客户端无缝切换--Fast-Start Failover的配置(2)

【DATAGUARD】物理dg配置客户端无缝切换--Fast-Start Failover的配置(2) 【DATAGUARD】物理dg配置客户端无缝切换--Fast-Start Failover的配置 一.2.2实验环境介绍 项目 ...

446

手把手教你用Simulink搭建IEEE33节点配电网模型(附赠两本电力系统书籍)

本文详细介绍了如何使用Simulink搭建IEEE33节点配电网模型,涵盖从基础配置到高级应用的完整流程。通过MATLAB脚本自动化参数注入、监测系统部署和典型应用场景实战,帮助读者快速掌握配电仿真模型的核心技术。附赠两本电力系统经典书籍资源,助力深入学习与研究。

weixin_29073241的博客 248

西门子【Automation Framework V1.2】AF架构:从软件栈到高效自动化项目的构建蓝图

本文深入解析西门子Automation Framework V1.2 (AF架构) 的核心价值与实施蓝图。该框架通过定义标准化的软件栈(如TIA Portal V19、STEP7、WinCC Unified)和严格的安装配置流程,将自动化项目开发从依赖个人经验的“手工作坊”模式,转变为高效、可复制的工业化模式。遵循此架构,工程师能快速构建稳定可靠的项目基础,规避环境冲突,从而专注于核心工艺与逻辑设计,大幅提升团队协作与项目交付效率。

weixin_29230059的博客 428

Oracle DG Broker 进行 SwitchOver & Failover,Failover后恢复主从同步

前一篇 https://blog.youkuaiyun.com/Hehuyi_In/article/details/94384431介绍了SwitchOver & Failover的概念、区别及利用sql操作的方法。可以看到利用sql来执行需要在主从库均进行操作,命令也多,较为复杂,本篇来看如何利用DG Broker来简化这些操作。 一、DG Broker安装与配置 1.DG Brok...

Hehuyi_In的博客 4353

注意力机制模块:CVPR 2026 新宠:MLLA(多尺度线性注意力)即插即用,在 YOLO 和 ConvNeXt 上全面涨点

MLLA核心创新点与实践价值摘要(146字) 清华大学LeapLab团队通过解构Mamba模型,发现其核心优势源于遗忘门机制与块设计,而非传统SSM架构。基于此提出的MLLA模块创新性地将这两项设计融入线性注意力框架:1)用位置编码替代循环计算保留遗忘门的位置感知能力;2)通过门控投影+DWConv+MLP重构高效块结构。在COCO检测任务中,MLLA使小目标AP提升11.6%而仅损失6%FPS,支持ONNX/TensorRT全链路部署,代码已开源。该工作为高分辨率视觉任务提供了近乎零代价的性能提升方案。

ZXSXJ的博客 155

Oracle DG 手动 SwitchOver & Failover,Failover后利用闪回恢复同步

一、 概述 Oracle数据库以主/备角色之一运行,可以通过以下方法更改数据库角色: SwitchOver:在主库正常运行时进行,可翻转数据库主备角色。SwitchOver没有数据丢失,通常在预期的主库维护前进行。 Failover:在主库故障时进行,可把备库activate为主库。Failover后主从关系不会自动恢复,可以使用代理的恢复功能恢复主从关系。Failover可能有数据丢失,丢...

Hehuyi_In的博客 8565

踩坑2周总结:Python+YOLO26搭建工业级多路视频分析应用,从单路卡顿到16路4K稳跑30FPS

本文分享了工业级多路视频分析系统的实战经验,针对智慧物流园区的车辆违停和人员安全监测需求,提出了一套完整的解决方案。作者通过踩坑实践,总结出多路视频分析的四大核心痛点:视频流解码瓶颈、推理调度混乱、内存占用爆炸和部署兼容性差。 文章详细介绍了技术选型方案,推荐使用FFmpeg+PyAV进行硬件加速解码、YOLO26+TensorRT INT8量化推理、单进程多线程的生产者-消费者架构,以及内存池复用等技术组合。该方案在RTX 4070 Ti上实现了16路4K视频30FPS稳定运行,GPU利用率达85%以上,

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 955

Python爬虫实战:逆向工程与异步爬虫技术,高效抓取国家知识产权局专利数据

相比于传统的Selenium,Playwright由微软开发,支持多浏览器(Chromium, Firefox, WebKit),API更现代,执行速度更快,并且能轻松录制用户操作生成代码。通常,列表中的摘要信息是缩略的,我们需要进入每个专利的详情页获取完整信息(如主权要求、法律状态等)。我们的第一步是手动操作一遍搜索流程,并用Playwright的“录制”功能或开发者工具,找出真正返回专利数据的那一个或多个网络请求。以友好的、对人类行为模拟的方式爬取数据是基本的网络礼仪,也能有效避免你的IP被封锁。

2201_76125261的博客 2419

dataguard如何实现切换_实战dataguard主从切换

前言:众所周知DataGuard一般的切换分成两种,一种是系统正常的情况下的切换这种方式为:switchover是无损切换,不会丢失数据;另外一种方式属于灾难情况下的切换,这种情况下一般主库已经启动不起来了,为failover,有可能会丢失数据,并且切换后原primary 数据库也不再是该data guard 配置的一部分了。本文先简单的介绍在正常情况下运行的系统切换测试;整个dataguard的...

weixin_39794385的博客 282

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

oracle auto failover,Oracle学习之DATAGUARD(九) 自动Failover

Oracle提供了一种快速自动故障转移架构(Fast-Start Failover).当主库发生故障时,FSFO会自动的将指定的从数据库转换成主数据库。此功能需要一个第三个的程序Observer来实现。Observer用于维护主数据库和目标备库的连接,监控配置状况及必要时执行故障转移。如果可能的话,当失败的主库重新联机后,Observer尝试恢复数据库,并将其转换成从库。Observer最好是部署...

weixin_28741099的博客 498

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: SOLARIS下RAC中的vip无法正常启动的解决办法
下一篇: imp导入时出现imp-00017 ora-06550的解决办法
小灰狼W
博客等级 码龄18年 908粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值