如何进行Dataguard日常管理

网友投稿 355 2023-12-13

如何进行Dataguard日常管理

这期内容当中小编将会给大家带来有关如何进行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日常管理了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何分析DB2 SSL配置遇到的一个问题
下一篇:如何进行Oracle AWR报告指标的解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~