如何进行Dataguard日常管理

56次阅读
没有评论

共计 8519 个字符,预计需要花费 22 分钟才能阅读完成。

这期内容当中丸趣 TV 小编将会给大家带来有关如何进行 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 可以,备用数据库可切换

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

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-18发表,共计8519字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)