【生产篇】_Oracle ADG同步技术 ——DBA必备的一种“后悔药”

Oracle ADG的基本概念 备库与主库相比,可能暂时落后,但当它再次变为可用时,备用数据库将自动同步,而不会丢失数据。由于同步重做传输,这种模式可潜在地影响响应时间和吞吐量。可以通过配置一个低延迟网络,并为它分配足够应用高峰事务负载的带宽来将这种影响减到最小。最大可用模式适用于想要在生产站点上出现严重中断时确保获得零数据丢失保护,但不想让生产数据库受网络/备用服务器故障影响的企业。为防止备库发生网络故障,最好设置reopen参数,即使出现网络故障,也不会引发主库挂起,这时主库将从最大可用模式切换到最大性能模式。 阅读详情
													note-taker:Ethan_Yang
												recording time: 2019/09/23
														number of docs:11

【引言】

所有高可用性方案的本质就是“冗余”,当然预算开支也会随着高可用性要求的提升而变得异常昂贵。
大家在构建数据库架构的时候,在不考虑预算限制的前提下,往往都内含满足这么几个要求:高可用性、支持高并发、支持负载均衡、具有可扩展性,SLA会要求满足99.99%、99.999%或者更高逼格的99.9999%。在这几个要求中,个人认为高可用性是首要满足的,该要求可保障数据库架构中某台服务器异常不能正常提供数据服务时,数据库层面仍可提供稳定的数据服务。
Oracle层面的高可用性架构为RAC,熟悉此架构的朋友都知道,RAC能满足高可用性、高并发访问的要求,但这只体现在计算资源的冗余,数据源还是一个,当数据源出现损坏或异常时,便不能提供数据服务。此情况的一个解决方案是:使用RAC+ADG架构,通过构建ADG standby 库来保障数据层面的冗余。
在这里插入图片描述

根据自己的使用经验,接下来本文大致介绍ADG常用的2种用法:

1. 主库异常下的高可用性切换
2. 人为误操作下的数据恢复方法

ADG用途1:主库异常下的高可用性切换
1.此架构可满足当RAC主环境出现异常不能提供数据服务时,切换至ADG同步库以保障最短时间内恢复业务使用。常规切换时间大致在分钟级别,但这个时候需要更改应用程序的数据库连接;大部分应用程序为java开发,使用jdbc连接数据库的示例如下:

oracle URL:
jdbc:oracle:thin:@db-service-ip:1521:SID
jdbc:oracle:thin:@//db-service-ip:1521:SERVICENAME
MySQL URL:
jdbc:mysql://localhost:3306/数据库名称

如上,连接数据库实例需要三个信息:库服务器ip、库端口号、实例名/service。

当RAC环境异常需要切换至ADG库后,如RAC和ADG的实例名称配置不变的前提下,
应用程序链接数据库的信息由原来的RAC的service-ip/scan-ip更改为ADG的ip地址即可。此情况下,java程序中如有多处连接库的语句,可把db-service-ip设置为应用程序全局变量,此时只改db-service-ip的参数即可。但修改应用程序连接库配置后往往需要重启应用程序,从而导致业务中断时间包含:库的切换时间+应用程序修改库连接配置和重启时间,业务中断时间较长。

一个问题:这种情况下,如何缩短业务中断时间?
答案是:可以在ADG服务器上启动一个vip,此vip是RAC的service-ip/scan-ip,这样可省去应用程序修改库连接配置和重启的时间,大大缩减业务中断时长。具体在ADG服务器启动vip的命令如下:

[root@-rac]# ifconfig enp25s0f0:0 vip/24 up
其中,enp4s0f1为网卡信息,可在ADG服务器上通过命令ip a 或者/etc/sysconfig/network-scripts/路径下网卡信息来查看;vip设置为和RAC的service-ip/scan-ip一致。

    [root@-rac2 network-scripts]# cd /etc/sysconfig/network-scripts/
    [root@approd-rac2 network-scripts]# ls
    ifcfg-enp25s0f0  ifdown       ifdown-ppp       ifup-bnep   ifup-post  
   ...    

ADG用途2:人为误操作下的数据恢复方法
数据库在上述客观因素下,还有一个常犯的主观因素导致库异常:人为操作失误。

这种情况下有常规的3种常用方法:

  1. 在另一个环境中做库恢复,恢复到事故点前一刻,找到正确的数据后,把数据导入到生产环境中;在数据库较小,业务中断时间较短的情况下,可以采用此方案;
  2. 使用Oracle Flashback进行恢复,Oracle Flashback是一组Oracle数据库特性,闪回允许你查看过去一个时间数据库对象的状态,或者不借助数据库恢复,就可以恢复数据库对象到之前的一个时间状态;
  3. 使用logminner,LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 在线/归档日志文件中的具体内容,特别是该工具可以分析出所有对于数据库操作的DML和DDL语句。该工具特别适用于调试、审计或者回退某个特定的事务。

上述三种情况要么恢复时间长;要么额外占用存储空间;要么人为分析复杂;比如Flashback/Logmnr(如果是DML类,可以使用闪回查询或者logmnr挖掘;如果是drop,可以使用flashback table,但若是字段的更改或者truncate等操作,上述就无法起到作用了)。

这里抛出一个问题:

在库到了T级别,业务不允许过长或不允许中断的情况,如何办?

一个方案:这种场景下就可以借助ADG端恢复。有同学问ADG不是实时同步吗,怎么能恢复到人为误操作前的数据,ADG有个参数为delay,利用延迟应用日志时间差,来迅速将standby recover到故障时间点之前,然后利用逻辑exp&imp来实现表级恢复。

操作步骤如下:

  1. 使用如下命令延迟同步库日志应用
    在备库指定delay属性,备库延迟60分钟应用主库日志
    sql> alter database recover managed standby database delay 60 disconnect from session;
    此参数单位为分钟,这里示例同步库与主库有60分钟的数据更新间隔,即有60分钟的“后悔药”;当然,也可以设置为任何时间段,恢复时间/日志应用时间和standby端口服务器性能、日志量有关。举例,我处管理的一个T级别的数据库,全备恢复为16个小时,我处设置的delay间隔一天为60*24=1140。

2. 需要恢复数据库时,使用如下步骤:
2.1 在standby端,执行时间点不完全恢复

SQL> alter database recover managed standby database cancel;
SQL>ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE until time ’2019-07-03 17:00:0’;

2.2 逻辑导出导入;然后用逻辑备份的方式exp/expdp异常点前的数据,imp/impdp方式导入主库中,即可达到恢复数据的目的。

3. 然后主库恢复原有时间间隔
SQL> alter database recover managed standby database cancel;
SQL>alter database recover managed standby database delay 60 disconnect from session;

【总结】

  1. 本文重点引出了Oracle的一种高可用性架构RAC+ADG,点出RAC的局限性,描述了ADG的2种用途,简单一句话就是借助ADG构建的一份“数据冗余”,在RAC环境异常的情况下,提供一种短时间内恢复业务使用的方法;
  2. 同时,ADG也是一种“后悔药”,在人为误操作又不对主库操作的情况下,以最小代价恢复错误操作;
  3. 后续本公众号将给出具体的一个操作案例。

To be continued.

如果大家觉得此文有帮助,欢迎扫描关注如下微信公众号在这里插入图片描述

Oracle几种ADG搭建方式汇总 阅读详情

相关推荐

Oracle:ADG基础知识学习一20230515

以下为20230515所学习的adg基础知识一,温故而知新。

MaHoneChen1994的博客 662

Oracle ADG相关介绍

ADG原理、相关参数、增量修复

DBA成长之路 7857

Oracle【实战指南】19c ADG容灾配置与同步模式深度解析

本文详细解析了Oracle 19c Active Data Guard(ADG)容灾方案的实战配置与核心同步模式。内容涵盖从环境规划、主备库搭建到三种同步模式(最大性能、最大可用性、最大保护)的深度对比与选择策略,旨在帮助DBA构建高可用、高可靠的数据库容灾体系,确保业务连续性。

weixin_29309475的博客 134

数据库学习整理

数据库学习整理 Oracle数据库 oracle常用语句整理 资料:https://www.cnblogs.com/chinafine/articles/1755405.html 一、sql语句的三种类型 DML(操纵) insert update delete select DDL(定义) create alter drop DCL(控制) grant revoke commit rollback savepoint lock 查看表结构 --命令窗口查看表结构 describe employ

qq_45372365的博客 2503

高效解除Oracle DataGuard同步的实战指南

本文提供了高效解除Oracle DataGuard同步的实战指南。针对备用库故障、资源调配等场景,详细阐述了解除前的备份检查、核心四步操作(切换模式、清理参数、删除备用日志、重启验证)以及备用库的善后处理。重点强调了操作的安全性与彻底性,帮助DBA在确保主库稳定的前提下,干净利落地完成DataGuard架构的拆分。

weixin_29284657的博客 47

Oracle数据库存储双活配置实战:从概念到落地

存储作为数据库架构中的基石,一旦发生故障往往意味着业务中断甚至数据丢失,传统的备份恢复难以满足核心业务对RTO的严苛要求。存储双活技术通过让两台存储阵列同时承载读写、实时互为镜像,实现了RPO=0的Active-Active高可用模式,配合Oracle RAC与多路径软件,可将故障切换时间压缩至分钟级甚至秒级。本文从存储高可用的基础概念出发,剖析双活存储的工作原理与仲裁机制,并结合Data Guard、RMAN等容灾手段厘清其适用边界。针对Oracle生产环境,梳理了存储一致性组、主机多路径配置、ASM联动

weixin_32306957的博客 300

oracle同步数据adg_Oracle ADG同步技术,DBA必备的一种“后悔药”

【此为本人的第8篇文章】【引言】所有高可用性方案的本质就是“冗余”,当然预算开支也会随着高可用性要求的提升而变得异常昂贵。大家在构建数据库架构的时候,在不考虑预算限制的前提下,往往都内含满足这么几个要求:高可用性、支持高并发、支持负载均衡、具有可扩展性,SLA会要求满足99.99%、99.999%或者更高逼格的99.9999%。在这几个要求中,个人认为高可用性是首要满足的,该要求可保障数...

weixin_29322553的博客 2847

Oracle跨平台迁移:RMAN+XTTCONVERT 2.0实战指南

Oracle跨平台迁移是企业数据库升级中的关键挑战,其核心在于解决字节序差异(如AIX big-endian→Linux little-endian)、物理块兼容性与元数据一致性问题。RMAN作为Oracle原生备份恢复引擎,通过backup for transport、convert datafile和incremental level 1等机制,为跨平台表空间迁移提供底层支撑;XTT(Cross Platform Transportable Tablespaces)则定义了元数据缝合与平台适配的标准化流

weixin_33851604的博客 369

【生产篇】_ADG实操:如何吃下这颗“后悔药”

Note-taker:Ethan_Yang Recording time: 2019/09/23 Location:BJ T3 number of docs:11 【引言】 之前的一篇公众推文介绍了ADG的两种用途,详见...

db_murphy的博客 979

Fofa API高阶玩法:用Python批量获取漏洞资产(含OA系统扫描实战)

本文详细介绍了如何利用Python结合Fofa API实现自动化漏洞资产收集的高阶实战技巧。通过构建健壮的客户端、设计精准查询语法、实现多线程批量采集,并以OA系统漏洞扫描为例,演示了从资产发现、过滤验证到报告生成的全流程,旨在提升安全运维与应急响应的效率。

weixin_28607671的博客 498

【数据分析生命周期全揭秘】从零开始打造你的数据科学项目 | 最全指南

在当今数据驱动的世界中,数据科学正在颠覆传统行业,成为企业决策和价值创造的重要引擎。然而,如何科学、系统地开展一个数据分析项目?这是很多人关心的核心问题。本篇文章基于经典数据分析课程内容,深入解读数据分析生命周期的每个阶段,让你快速掌握从“发现问题”到“落地应用”的完整流程。如果你正在学习或准备从事数据分析领域,这篇文章一定会对你大有帮助!数据分析生命周期的六大阶段数据分析生命周期的六个阶段相辅相成,每个阶段都至关重要:发现问题:明确需求,提出假设。数据准备:清洗、转换和可视化数据。

AI手套的博客 1741

【生产篇】:如何提速oracle增备_块跟踪备份

【引言】 一个实际生产案例,因数据库数据量的增大,全备需68个小时,增备也需11小时。此场景下,如发生需要库恢复的场景,所需时长基本不能忍受,鉴于如下之前的两篇文章,使用dataguard 的delay参数做了24小时的日志延迟应用,可确保24小时内的任意恢复,大大缩短了异常时恢复数据的时间。 《ADG实操:如何吃下这颗“后悔药”》 《Oracle ADG同步技术,DBA必备的一种“后悔药”》 但...

db_murphy的博客 444

[原创]Linux 802.11n CSI tool Monitor模式

Linux 802.11n CSI tool Monitor模式 使用AP模式的缺陷在于ping 命令速度比较慢,且不能精确控制发送的参数,比如接收的包数量是不可控的。Monitor模式可以调制发送速率、发包数量、发送天线个数、HT模式、short/long guard interval等等,因此调通Monitor模式是必须的。期间参考了博主沃一德的CSI Tool安装使用讲解,对他的工作表示感...

u014645508的博客 1万+

【精品篇】oracle库手动误操后,如何使用Logminer进行恢复

【引言】 《ADG实操:如何吃下这颗“后悔药”》 《Oracle ADG同步技术,DBA必备的一种“后悔药”》 之前的这两篇文章讲述了dataguard恢复人为误操作的方法;当时在文中也简单介绍了其用途“LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 在线/归档日志文件中的具体内容,特别是该工具可以分析出所有对于数据库操作的D...

db_murphy的博客 481

Robosuite实战:通过Xbox手柄实现机械臂6-DoF精准控制的完整指南

本文详细介绍了如何通过Xbox手柄实现机械臂的6-DoF精准控制,结合Robosuite仿真环境与MuJoCo物理引擎,提供从环境配置到代码实现的完整指南。文章重点解析了手柄映射原理、核心控制代码以及数据采集优化技巧,帮助开发者高效完成机械臂控制任务。

weixin_29169505的博客 419

Altium Designer 16安装教程(Windows11、小白教程)

Altium Designer 16在Windows11中的超详细安装教程

qq_47003770的博客 1万+

oracle 12c 卡住 配置选项_神技_如何快捷下载Oracle补丁的方法?!

【引言】如何下载到Oracle系列产品的最新补丁,本文将讲解一种简洁快捷的方法,可谓粗暴直接。大家都知道Oracle官方发布补丁的频度为每三个月,最近一次的补丁集已经在2020年的7月份进行发布,后续四个季度的PSU发布时间Oracle官网也已经进行了发布,见下图链接:https://www.oracle.com/security-alerts/如何最快下载到Oracle系列产品的最...

weixin_42363854的博客 180

微信小程序 - 详解苹果ios手机请求不到数据访问不了接口,但安卓却可以正常访问。wx.request苹果手机IOS请求失败、安卓可以请求成功(微信小程序上线后苹果手机不能访问接口,网络请求失败排查)

微信小程序上线后,苹果手机请求不到数据,安卓可以,微信小程序,安卓可以调接口,苹果调不了的解决方案,微信小程序:IOS访问不了接口,安卓可以正常访问,微信小程序ios版本连接不了服务器,小程序Android可以请求,ios请求失败wx.request,成功上线的小程序,安卓机可以正常访问使用,苹果微信小程序不执行请求,苹果系统无法加载数据,微信小程序 iOS 网络失败,微信小程序接口请求在ios端报错,苹果手机真机调试微信小程序出现网络请求失败,微信小程序 安卓正常 ios调接口显示网络请求失败,微信小程序

🏆 前端领域优质创作者 4361

mysql如何植入到oracle_ORACLE 12C EM 端口5500如何关闭及修改

绿盟软件扫描数据库oracle服务器,报出5500端口如下告警:大家都知道,ORACLE 12C EM的默认启动端口是5500,为防止异常攻击,建议将此端口对应的服务进行关闭,规避受攻击风险。先查看Oracle服务器上所运行的服务,命令如下:[oracle@bkdb ~]$ netstat -nltp | grep 5500(Not all processes could be iden...

weixin_33100285的博客 399

微信小程序:errno: 600001, errMsg: “uploadFile:fail errcode:-101 cronet_error_code:-10001 error_msg:net::E

微信小程序报错uploadFile:fail errcode:-101 cronet_error_code:-10001 error_msg:net::ERR_CONNECTION_RESET, custum ip is invalid, didn't find user's ip,wx.uploadFile errno: 600001 errcode:-101 ?微信小程序wx.uploadFile错误,wx.uploadFile 在真机上报下面的错误,调试工具里没有问题,其它接口在真机/调试工具都正常,

✅ 精选推荐文章 4260

YOLOv13涨点改进 | 全网独家创新、HyperACE改进、注意力改进篇 | CVPR 2025| 引入LRSA局部区域自注意力模块,能提升其在细节捕捉、小目标检测和长距离依赖建模方面的能力

本文提出将LRSA(局部区域自注意力)模块集成到YOLOv13中,通过局部特征交互增强细节捕捉能力、小物体检测精度和长距离依赖建模。LRSA模块采用重叠图像块处理策略,在保持计算效率的同时提升复杂背景下的检测性能。文章详细介绍了模块结构、原理优势,并提供了三种改进方案:1)在主干网络添加LRSA层;2)将关键模块替换为DSC3k2_LRSA;3)采用HyperACE_LRSA结构。配套提供了完整的PyTorch实现代码和YAML配置文件,展示了该模块如何通过局部注意力机制平衡检测精度与推理速度。

Ai缝合怪、助力小伙伴高效发论文 345

mysql补丁如何安装_神技_如何快捷下载Oracle补丁的方法?!

【引言】如何下载到Oracle系列产品的最新补丁,本文将讲解一种简洁快捷的方法,可谓粗暴直接。大家都知道Oracle官方发布补丁的频度为每三个月,最近一次的补丁集已经在2020年的7月份进行发布,后续四个季度的PSU发布时间Oracle官网也已经进行了发布,见下图链接:https://www.oracle.com/security-alerts/如何最快下载到Oracle系列产品的最...

weixin_39964528的博客 2042

Camera2Demo

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

oracle 中文语言集_PLSQL Developer中控制结果集表格自动提交

PLSQL Developer可以说是个让人又爱又憎的工具,“爱”是他的确提供了操作Oracle数据库非常丰富、方便的功能,“憎”是他的一些隐藏配置很可能是个“坑”,就像《PLSQL Developer几个可能的隐患》介绍了几个场景。其他历史文章,《PLSQL Developer中文乱码问题》《PLSQL Developer免密登录》今天朋友碰巧问了个问题,PLSQL Developer...

weixin_39953236的博客 156

深度学习工具包 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")

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

mysql 表字段信息从一张表迁移到另一张表_混淆的行迁移和行链接

开发提出需求,要向一张已经包含100多个字段的表再新增字段,技术上可行,但是这种操作,究竟有何副作用?这里就引出了行迁移和行链接这两个容易混淆的概念,整理一下,算是让自己重新认识下。《Concept》对这两个概念的解释:当第一次向表中插入行,由于行太长,不能存储在一个数据块中时,就会发生行链接,此时,数据会被拆成2个或者多个部分,存储在多个数据块中,这些数据块会构成链式结构,因此叫做行链...

weixin_40008946的博客 158

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Oracle adg主从同步

Oracle ADG 搭建

sx796的博客 3068
上一篇: 【排故篇】_啥是无效对象,出现时如何破?
下一篇: 【生产篇】_ADG实操:如何吃下这颗“后悔药”
db_murphy
博客等级 码龄11年 145粉丝 197原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值