dataguard日常管理

2023-11-02

auther:skate

time:2009-08-02

 


 

dataguard日常管理

1.fail over

2.switchover

3.更改保护模式

4.常用命令和视图

 

 

fail over:

1.如果在dataguard中做了fail over,那么原来的standby 要成为primary要执行如下命令

 

A
首先查看v$archive_gap,然后手动将却是的archive_log拷贝过来,然后执行如下命令:

 

sql> alter database register physical standby 'logfile_patch'

 

B

sql> alter database recover managed standby database cancel;

 

C

sql> alter database recover managed standby database finish ;

sql> alter database recover managed standby database finish force;

 

D

sql> alter dattabase commit to switchover to primary;

 

 

对于老的primary 数据库需要转化为standby 有两种情况:

 

A.对于打开flashback 功能的数据库比较简单,现在新的primary数据库上执行这个命令

 

select standby_became_primary_scn from v$database;


接着在新的standby的数据库上执行

 

flashback database to scn nnnnnn
alter database convert to physical standby;

alter datbase recover managed standby database using current logfile disconnect from session;


在primary数据库上做日志切换,查看新的standby数据库日志是否正常。

select applied from v$archived_log;


B.如果没有开启flashback功能的话,重新创建dataguard

 

 


switchover:

在switchover的时候,最好让两个库不要再有新的session进来,这样可以快速switchover,避免发生异常

 

在switchover应注意的几点:


1.在primary库要有standby logfile。
2.检查v$archive_gap,核查是否日志都已经归档到standby库

 

实际操作:


1.在primary上查看switchover_status


SQL> select database_role,switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS
---------------- --------------------

PRIMARY          TO STANDBY

SQL> select database_role,switchover_status from v$database;

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


状态说明:

TO STANDBY : 没有session连接,可以直接switchover
SESSIONS ACTIVE :还有session连接,不能直接switchiver

 

如果SWITCHOVER_STATUS为to standby则可直接进行switchover,如果为session active则执行以下步骤:

 

(1)检查是否standby没接收到最新的日志,如果没有则在primary手动切换
  SQL> alter system switch logfile;
  系统已更改。

 

  然后在standby恢复

 

  SQL> alter database recover managed standby database cancel;
  数据库已更改。

 

(2)检查是否有活动的sql session
  SQL> SELECT SID, PROCESS, PROGRAM FROM V$SESSION
  2 WHERE TYPE = 'USER'
  3 AND SID <>(SELECT DISTINCT SID FROM V$MYSTAT);
  未选定行


  如果有则将session kill

 

2。如果上述步骤都已执行而primary的switchover_status还是为session active则在正常switchover语句后加上WITH SESSION SHUTDOWN;
  

(1)primary进行switchover

 

SQL> alter database commit to switchover to physical standby WITH SESSION SHUTDOWN;   ---在没有活动的session下,不带WITH SESSION SHUTDOWN 选项,我也测试switchover成功

数据库已更改。


(2)重启原primary数据库到mount

 

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


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


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

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             176163716 bytes
Database Buffers          427819008 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
SQL>


查看原primary的switchover的角色

 

SQL> select database_role,switchover_status from v$database;

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

SQL>

 

(3)检查原standby的switchover_status


SQL> select database_role,switchover_status from v$database;

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


(4)置于恢复模式

 

SQL> alter database recover managed standby database using current logfile disconnect from session;

数据库已更改。

SQL>

 


3。切换原standby to primary
  
   如果上述standby的SWITCHOVER_STATUS为to primary则正常切换,否则检查是否有活动sql session,有则kill掉
  再次检查SWITCHOVER_STATUS,如果仍然不为to primary则在切换语句后加with session shutdown.

 

  (1)切换standby to primary(standby需要置于接收日志的mount状态)


SQL> alter database commit to switchover to primary with session shutdown;

数据库已更改。

 

SQL> select open_mode from v$database;

OPEN_MODE
----------
MOUNTED

 

SQL> shutdown immediate;
ORA-01109: 数据库未打开


已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             234883972 bytes
Database Buffers          369098752 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL>

 

查看原standby库switchover后的角色

SQL> select database_role from v$database;

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

SQL>

 

最后还要查看两个库的alert.log内容,看是否正常

 


dataguard保护模式:

在更改dataguard的保护模式,一定要在primary库上执行;在primary更改的保护模式都会应用到standby库
在更改保护模式时, 还要注意修改 log_archive_dest_n

 

SQL> alter system set log_archive_dest_2='SERVICE=orcldg LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg';


实际操作: 

在primary库上:

 

SQL> select open_mode,protection_mode,protection_level from v$database;

OPEN_MODE  PROTECTION_MODE      PROTECTION_LEVEL
---------- -------------------- --------------------
READ WRITE MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

SQL> alter database set standby database to maximize protection;
alter database set standby database to maximize protection
*
第 1 行出现错误:
ORA-01126: 数据库必须已装载到此实例并且不在任何实例中打开


SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             239078276 bytes
Database Buffers          364904448 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。


SQL> alter database set standby database to maximize protection;

数据库已更改。

 

SQL> alter database open;

数据库已更改。

SQL>

 

在standby库上:

 

 

正常来说,当primary更改完保护模式后,在standby也会随着更改


SQL> select open_mode ,protection_mode,protection_level from v$database;

OPEN_MODE  PROTECTION_MODE      PROTECTION_LEVEL
---------- -------------------- --------------------
MOUNTED    MAXIMUM PROTECTION   MAXIMUM PROTECTION

 


注意
当保护模式更改顺序:

maximize protection --->  maximize availability ----> maximize performance

 

当在把dataguard的保护级别按这上面的顺序减低的时候, 不需要primary库在mount状态,
primary在open状态就可以直接执行保护模式更改命令

 

primary的保护模式:

 

SQL> select open_mode ,protection_mode,protection_level from v$database;

OPEN_MODE  PROTECTION_MODE      PROTECTION_LEVEL
---------- -------------------- --------------------
MOUNTED    MAXIMUM PROTECTION   MAXIMUM PROTECTION


执行保护模式更改:

 

SQL> alter database set standby database to maximize protection;

数据库已更改。

 

SQL> alter database set standby database to maximize availability;

数据库已更改。

 

 

在查看primary的保护模式:

 

SQL> select open_mode,protection_mode,protection_level from v$database;

OPEN_MODE  PROTECTION_MODE      PROTECTION_LEVEL
---------- -------------------- --------------------
READ WRITE MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

SQL>

 


当保护模式更改顺序:

maximize protection <---  maximize availability <---- maximize performance

当在把dataguard的保护级别按这上面的顺序升高的时候, 需要primary库在mount状态,如果在open更改会报如下错误:

 

SQL> select open_mode,protection_mode,protection_level from v$database;

OPEN_MODE  PROTECTION_MODE      PROTECTION_LEVEL
---------- -------------------- --------------------
READ WRITE MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

SQL> alter database set standby database to maximize protection;
alter database set standby database to maximize protection
*
第 1 行出现错误:
ORA-01126: 数据库必须已装载到此实例并且不在任何实例中打开

 

 

步骤:
1. primary库先 shutdown immediate
2. startup mount
3. alter database set standby database to maximize protection;
4. alter database open

 

 

dataguard常用命令和视图

 

 

查看当前保护模式
SQL> select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;

 

查看日志传送方式
SQL> select dest_name,archiver from v$archive_dest;

 

首先停止standby的自动恢复状态
SQL> alter database recover managed standby database finish;

 

添加standby logfile
SQL> alter database add standby logfile group 4 ('/oracle/product/10.2.0/db_1/oradata/sjh10g/redo04.log') size 50m;

 

更改保护模式
alter database set standby database to maximize protection;
alter database set standby database to maximize availability;
alter database set standby database to maximize performancen;

 

更改传输方式
SQL> alter system set log_archive_dest_2='SERVICE=orcldg LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg';


解决方法:将主备库的flashback打开:
启动到mount
SQL> select FLASHBACK_ON from v$database;
SQL> alter database flashback on;


取消自动恢复模式:
alter database recover managed standby database cancel;
alter database recover managed standby database finish;
alter database recover managed standby database finish force;

 

switchover 到 primary
alter dattabase commit to switchover to primary;
alter database commit to switchover to primary with session shutdown;

 

 

switchover 到 standby
alter database commit to switchover to physical standby WITH SESSION SHUTDOWN;


flashback database to scn nnnnnn
alter database convert to physical standby
alter datbase recover managed standby database using current logfile disconnect from session;
alter database register physical standby 'logfile_patch'

 

常用视图:

 

v$managed_standby
v$archive_dest
v$archive_dest_status
v$archive_gap
v$archiveg_log
v$dataguard_status
v$database
v$log_history
v$log
v$logfile

 

 

注意事项:


1、如果在主库执行 alter database clear unarchived logfile或alter database open resetlogs ,则dataguard要重建。

 

2、在连续恢复模式下工作之前,需要保证之前所有的归档日志己经应用到备用库上。因为在连续恢复模式的情况下,oracle不会应用之前的

 

归档日志,而只会应用后面陆续到来的归档日志。

 

3、出现归档日志gap时,需要找出相应的归档日志, 然后将这些归档日志copy到备用节点的standby_archive_dest和

 

log_archive_dest目录下面。需要注意的是log_archive_dest目录下也需要copy。然后ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE;

 

4、新建表、表空间、datafile都能通过日志应用到备库,但新建一个临时表空间,rename datafile 均不能应用到备库上.

 

5、应当实时察看standby库的alert文件,就能清晰明了地知道主备更新的情况。这也是排错的重要方法,切记!!

 

 failover和switchover

 

Failover : 将主数据库offline,备用数据库online,这种操作由系统和软件失败引起。 即使在备用数据库上应用重做日志,也可能出现数

 

据丢失的现象,除非备用数据库运行在 guaranteed protection 模式。 原主数据库重新使用时必须重新启动实例。 其它的备用数据库也

 

需重新启动实例。

 

Switchover : 故意将主数据库offline,而将另一备用数据库online,它能够切换到备用数据库而不需同步操作。如:可使用 Switchover

 

完成系统的平滑升级。 即使在备用数据库上不应用重做日志,也不会造成数据的丢失。 数据库不需重新启动实例。这使主数据库几乎能立即

 

在备用数据库上恢复它的功能,因此可经常进行定期维护而不需中断操作。   Failover和Switchover的区别为:当Failover发生,备用

 

数据库切换为主数据库之后,它丢失了备用数据库的所有能力,也就是说,不能再返回到备用模式;而Switchover可以,备用数据库可切换

 

为主数据库,也可从主数据库再切换回备用数据库。

 

 

 

----end---

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dataguard日常管理 的相关文章

  • 使用 ASP.NET 2.0 处理过期会话的最有效方法是什么

    在我们正在建设的网站上 当用户的会话结束时 我们需要能够将用户重定向到默认页面 乍一看 我们使用 Session End 和 Response Redirect 来完成这项工作 Sub Session End ByVal sender As
  • 通过分布式数据库聚合作业优化网络带宽

    我有一个分布式 联合数据库 结构如下 数据库分布在三个地理位置 节点 每个节点集群有多个数据库 关系数据库是 PostgreSQL MySQL Oracle 和 MS SQL Server 的混合体 非关系数据库是 MongoDB 或 Ca
  • PassportJS - 自定义回调并将 Session 设置为 false

    是否可以使用自定义回调并禁用会话 在文档中 它显示了如何禁用会话和自定义回调 但如何组合它们 app get login function req res next passport authenticate local function
  • 删除 mysql 数据库中超过 3 个月的行的作业

    我们使用 mysql 服务器作为集中式日志系统 我希望有一项工作来定期删除 清理超过 3 个月的表条目 做这个的最好方式是什么 提前致谢 hinling 您是否在字段中存储项目的创建日期 If so DELETE FROM myTable
  • 术语 SSTable 和 LSM Tree 之间有什么区别

    这两个术语可以互换使用吗 我读过有关 SSTable 工作原理的文章 通常文章都会开始提到 LSM Tree 然而 它们似乎是同一件事 我什么时候应该使用一个术语而不是另一个术语 对于凡人来说 SSTables 和 LSM Trees 的最
  • 使用python shelve跨平台

    我希望得到关于 Python 中的书架 数据库的一些建议 问题 我在 Mac 上创建了一个数据库 我想在 Windows 7 上使用该数据库 我使用 Python 3 2 MacOS 10 7 和 win 7 当我在 Mac 上打开并保存我
  • 有很多数据库视图可以吗?

    我很少 每月 每季度 使用 Microsoft SQL Server 2005 数据库视图生成数百份 Crystal Reports 报告 在我不读取这些视图的所有时间里 这些视图是否会浪费 CPU 周期和 RAM 因为我很少从视图中读取数
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • 如何记录数据库代码以查看数据库对象之间的依赖关系? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想为我的宠物项目编写文档 我的 PostgreSQL 数据库中有 30 个表 近 50 个视图和大约 30 个函数 存储过程 我想看
  • 使用 ActiveAndroid 库存储 HashMap

    我有一堂课 Table name Control public class Control extends Model Column private String name Column private Map
  • REST - 复杂的应用程序

    我正在努力将 RESTful 原则应用到我正在开发的新 Web 应用程序中 特别是 为了实现 RESTful 每个 HTTP 请求本身都应该携带足够的信息 以便其接收者对其进行处理 从而与 HTTP 的无状态性质完全一致 该应用程序允许用户
  • iOS 解析如何通过 URL 下载文件

    我正在将 parse 用于我的聊天应用程序 当我上传文件时 我保留该 url 并将该 url 发送给其他用户 然后其他用户可以通过该 URL 下载文件 这是我上传文件的代码 void uploadBlob NSData blob fileN
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • 如何使用sql脚本更改列的属性

    如何使用 sql 脚本更改列的属性 这是我尝试过但出现错误的方法 ALTER TABLE dbo tblBiometricPattern COLUMN BiometricPatternID TINYINT NOT NULL IDENTITY
  • SQL Server 批量插入 - “批量加载数据转换错误”

    bulk insert dbo A FROM d AData csv WITH FIELDTERMINATOR ROWTERMINATOR n 将批量数据插入数据库时 在检查可疑数据后 我遇到了无法解释的错误 消息 4867 16 级 状态
  • Hibernate saveOrUpdate 与更新与保存/持久

    我正在努力理解休眠方法之间的细微差别 saveOrUpdate update save persist 我知道网站上有一些类似的问题 Hibernate中不同的保存方式有什么区别 https stackoverflow com questi
  • Facebook API - fql_query,无效会话

    我正在尝试使用 PHP 库查询 Facebook 我读到的内容不应该需要会话密钥 或者更确切地说 对于我的情况 它不应该需要会话密钥 但下面的代码给出了以下错误 Session密钥无效或不再有效 http wiki developers f
  • 私人聊天系统MYSQL查询显示发送者/接收者的最后一条消息

    在这里我延伸一下我之前的问题 私人聊天系统MYSQL查询ORDERBY和GROUPBY https stackoverflow com questions 10929366 private chat system mysql query o
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • Android:打开和关闭SQLite数据库

    我正在开发Android应用程序 我经常在其中访问本地数据库 该数据库可以从不同的主题访问 因此我遇到了数据库的协调问题 我使用以下open and close method public void open mDb mDbHelper g

随机推荐

  • 最新Visual studio 2017无法支持最新Unity3d 2017相关解决方案

    最近换了台电脑于是乎也就装了最新的VS2017来尝尝鲜 U3D也是用的2017版本 结果在使用过程中发现一些问题 可能有一些问题在老版本上也是会出现的 只是没有发现而已 以后遇到一些相关的坑会陆续在这里更新 希望对大家有帮助 1 我安装了V
  • 磁盘的动态扩容和缩减

    主旨 在日常运维过程中 经常会出现磁盘爆满 不足以维持未来业务量 或者磁盘太大 造成资源浪费的情况 这种情况下最好的方式就是采用磁盘的动态扩容和缩减 LVM是什么 在这里我们推荐使用LVM逻辑卷的方式 为什么使用这个方式呢 这个方式有什么值
  • Android之window中的WSL读取devices

    window中的WSL读取devices步骤 在WSL中下载adb 可以通过windows下载linux版本 然后在WSL中进行安装 SDK Platform Tools 版本说明 Android 开发者 Android Developer
  • 关于curl库的介绍(数据的获得)

    1 function get cookie url params referer 2 3 if url null echo get cookie url null exit 4 if params null echo get params
  • integer对比==与equals区别

    对于 与equals区别在于 在于对象和值两者之间都会比较 而equals只是值得比较 大部分数据情况下最好用equlas integer的取值范围在 128 127之间的 在这之间的值在integerCache cache中产生无论出现多
  • 【小程序】小程序如何实现滑动翻页(类似刷短视频的交互效果)

    在微信小程序中实现上下滑动翻页的效果其实非常简单 可以说一学就会 这篇文章将非常详细地教大家如何实现这一交互 数据准备 首先我们在 Page 的 data 属性中添加两个变量 data biases title Fundenmental A
  • SQL查询语句

    目录 1 回顾SQL查询语句 2 SQL查询子句 3 WHERE子句 4 DISTINCT数据去重 5 GROUP BY子句 5 1 统计函数 5 2 GROUP BY分组 6 ORDER BY子句 7 LIMIT子句 8 SQL多表查询
  • 科技新技术

    3D打印 智慧城市 人脸识别 NFC 无线充电 in cell
  • 基于单边jacobi的奇异值分解(SVD)

    基于单边jacobi的奇异值分解 SVD 对于奇异值分解 SVD 相信很多学过线性代数 高等代数的同学都不会很陌生 但是怎么实现呢 接下来就来详细说说 为了方便讨论 本文所有的讨论仅限定于实数空间 奇异值分解的含义就是将矩阵A分解成一个酉矩
  • springmvc中,post,get请求接收参数的常用方式

    在Spring MVC中 可以使用以下几种方式来接收GET请求中的参数 使用 RequestParam注解 可以将请求参数绑定到方法的参数上 例如 GetMapping example public String example Reque
  • 设置WPF的DataGrid多行显示不同的颜色

    两种方式 1 直接设置样式
  • 基于stm32f103rct6的呼吸灯实现

    一 PWM 在stm32中 输出pwm的方式有很多 第一种是可以用普通IO口输出pwm 第二种是利用定时器的pwm的IO口或复用IO口 pwm端口 STM32 的定时器除了 TIM6 和 7 其他的定时器都可以用来产生 PWM 输出 其中高
  • 大型网站系统设计应考虑的问题

    大型网站系统设计应考虑的问题 1 服务器软件架构 集中服务 微服务 云服务 2 部署方案 分布式 集群部署 3 均衡负载方案 Nginx反向代理实现均衡负载 HAProxy Keepalived双机高可用均衡负载方案 4 缓存方案 redi
  • 导入和导出功能用例设计

    1 用例 2 用例模板 用例模板
  • 【ERP】概念_填制、修改、作废、删除凭证

    目录 1 概述 2 填制凭证 3 修改凭证 无痕修改和有痕修改 4 作废恢复凭证 删
  • 开放API调用了,通过API实现各类脑洞的时刻

    在3月2号 OpenAI公开了ChatGPT相关的API 可以通过API实现对ChatGPT的调用了 POST https api openai com v1 chat completions curl https api openai c
  • vue实现点击复制功能

    实现思路 通过模拟输入框的复制来完成对事件的复制 一 通过点击事件完成创建一个输入框 二 输入框要在正常的编辑状态下原生复制方法才会生效 三 完成上列操作后有移除输入框 代码 a style color 000000 复制链接 a copy
  • 使用canvas做动态背景

    参考自 https blog csdn net kiddd fu article details 78399629 在自己写网页的时候用了一个动态canvas作动态背景原本一直显示有问题 后来发现必须得把script的引用放在最后面 不然无
  • Android Jetpack(2):DataBinding的使用

    Android DataBinding 从入门到进阶 DataBinding 介绍 DataBinding是什么 DataBinding 是谷歌官方发布的一个框架 顾名思义即为数据绑定 是 MVVM 模式在 Android 上的一种实现 用
  • dataguard日常管理

    auther skate time 2009 08 02 dataguard日常管理 1 fail over 2 switchover 3 更改保护模式 4 常用命令和视图 fail over 1 如果在dataguard中做了fail o