千家信息网

如何进行Dataguard日常管理

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这期内容当中小编将会给大家带来有关如何进行Dataguard日常管理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。dataguard日常管理1.fail over2
千家信息网最后更新 2026年11月03日如何进行Dataguard日常管理

这期内容当中小编将会给大家带来有关如何进行Dataguard日常管理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

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/sjh20g/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可以,备用数据库可切换

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

上述就是小编为大家分享的如何进行Dataguard日常管理了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

数据 数据库 模式 保护 日志 备用 切换 应用 实例 装载 命令 状态 检查 错误 顺序 管理 内容 功能 常用 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手磨咖啡 互联网是第几次科技革命的成果 重庆互联网络科技 互联网科技排名 互联网女皇 腾讯科技 深圳期待互联网科技 哈尔滨秒房互联网科技有限公司 广州优美互联网科技 互联网系的金融科技公司 互联网金融科技公司干啥的 贵州叶脉互联网科技有限公司所属行业 栖莱科技互联网股份有限公司 知域互联网科技有限公司大骗子 哈尔滨屹滨互联网科技有限公司 晋城互联网科技 恒生互联网科技业指数调整周期 城市宝互联网科技有限公司 有人说阿里系是互联网科技企业 互联网领先科技活动 重庆科技产业互联网有哪些 新华互联网科技学校 互联网科技上市公司 互联网科技实习生岗位职责 宁夏科技产业互联网案例 中国航天科技大学国际工业互联网 乌苏新华互联网科技做什么的 伍佰万互联网科技怎么赚钱 有人说阿里系是互联网科技企业 图游互联网科技 米泉互联网科技专业怎么样
0