暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【译】如何Upgrade升级Data Guard

原创 smiling 2022-06-07
1039

原文连接:How to Upgrade with Data Guard
原文作者:Daniel Overby Hansen

您可以将数据库upgrade到新版本,并保持数据保护设置不变。备库可以通过主库的重做隐式升级,升级后不需要重建备库。

过程:
gifanimationforblogcompressed.gif

在下文中,我将使用此设置:
image.png

您应该提前在主库主机和备库用主机上安装新的Oracle Home。 这两个Oracle Home应用相同的补丁,建议总是应用最新的Release Update。

升级前

这个过程在运行预升级补丁之前就开始了 。 已经开始停机,没有用户登录连接到数据库。

禁用 Data Guard Broker

如果您不使用Data Guard Broker,您可以跳过本章并转到停止 Data Guard一章。连接到代理并禁用快速启动故障转移:

DGMGRL SYS@PROD1> disable fast_start failover
复制

接下来,禁用代理配置:

DGMGRL SYS@PROD1> disable configuration
复制

然后,您可以关闭主服务器中的代理。制作代理配置文件的副本。使用以下 SQL 生成命令以复制文件。
记住执行生成的命令:

PROD1 SQL> alter system set dg_broker_start=false scope=both;
PROD1 SQL> select 'host cp ' || value || ' /tmp' as cmd from v$parameter where name like 'dg_broker_config_file%';
PROD1 SQL> --Now, execute the commands
PROD1 SQL> host ls /tmp/dr*.dat
复制

最后,对备库做同样的操作:

PROD2 SQL> alter system set dg_broker_start=false scope=both;
PROD2 SQL> select 'host cp ' || value || ' /tmp' as cmd from v$parameter where name like 'dg_broker_config_file%';
PROD1 SQL> --Now, execute the commands
PROD2 SQL> host ls /tmp/dr*.dat
复制

停止Data Guard

在主库上,将重做日志延迟传输到备库。 严格地说,这不是必需的,但我是本着“安全比后悔好”的原则来做的。 确保验证log_archive_dest_state_2是备库的实际存档目的地:

PROD1 SQL> show parameter log_archive_dest_2
PROD1 SQL> alter system set log_archive_dest_state_2='defer' scope=both;
复制

接下来,取消对备用数据库的重做应用:

PROD2 SQL> alter database recover managed standby database cancel;
复制

最后,关闭数据库:

PROD2 SQL> shutdown immediate
复制

如果您使用 Grid Infrastructure (GI) 来管理数据库,则应该停止并禁用数据库。严格来说,禁用数据库不是必需的,但同样是一种“安全比后悔好”的方法:

[oracle@bm2]$ $ORACLE_HOME/bin/srvctl stop database -d PROD2
[oracle@bm2]$ $ORACLE_HOME/bin/srvctl disable database -d PROD2
复制

Upgrade

现在可以使用自己喜欢的方法升级主数据库。 完成所有升级后任务,并执行必要的测试以验证新数据库版本。

如果在升级期间发生了一些事情,您想要恢复,您可以闪回数据库(or restore on Standard Edition),并简单地撤消升级前的步骤(通过启用数据库,启动数据库,启动重做应用等)。

请记住,在我们开始接触任何东西之前,备用数据库就被留下了,所以如果所有其他数据库都失败了,只需重新启动备用数据库,然后将您的用户连接到它。

请记住,在我们开始操作任何东西之前,备库是被留下来的,所以如果所有其他操作都失败,只需重新启动备用数据库,并将用户连接到它。

After Upgrade

重启Data Guard
当您对升级感到满意,并且您的测试验证了新的数据库版本时,您就可以继续了。

更新备用主机上的侦听器。请务必更新 listener.ora 条目中的 Oracle Home 信息。请注意,您的 listener.ora 可能存储在非默认位置,因此请使用它lsnrctl status来获取位置。最后,重新加载监听器:

[grid@bm2]$ $GRID_HOME/bin/lsnrctl status
[grid@bm2]$ vi $GRID_HOME/network/admin/listener.ora
[grid@bm2]$ $GRID_HOME/bin/lsnrctl reload
复制

对于接下来的命令,我将使用相同的提示符,并且配置以下环境变量:

[oracle@bm2]$ export OLD_HOME=/u01/app/oracle/product/18.0.0.0/dbhome_1
[oracle@bm2]$ export NEW_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
[oracle@bm2]$ export ORACLE_HOME=$NEW_HOME
[oracle@bm2]$ export ORACLE_SID=PROD
[oracle@bm2]$ #Set ORACLE_UNQNAME to DB_UNIQUE_NAME
[oracle@bm2]$ export ORACLE_UNQNAME=PROD2 
复制

接下来,如果备库在默认位置 ($ORACLE_HOME/network/admin) 中使用 TNS_ADMIN,那么请务必将相关的 TNS 别名复制到新的tnsnames.ora 中。主库和备库应该有 TNS 别名。或者,如果同一个 Oracle Home 中没有其他数据库,您可以简单地复制文件:

[oracle@bm2]$ #Back up files
[oracle@bm2]$ cp $NEW_HOME/network/admin/sqlnet.ora $NEW_HOME/network/admin/sqlnet.ora.backup
[oracle@bm2]$ cp $NEW_HOME/network/admin/tnsnames.ora $NEW_HOME/network/admin/tnsnames.ora.backup
[oracle@bm2]$ #Copy from old to new home
[oracle@bm2]$ cp $OLD_HOME/network/admin/sqlnet.ora $NEW_HOME/network/admin
[oracle@bm2]$ cp $OLD_HOME/network/admin/tnsnames.ora $NEW_HOME/network/admin
复制

现在,您可以编辑/etc/oratab并更新有关 Oracle Home 的信息以匹配新的 Oracle Home:

[oracle@bm2]$ vi /etc/oratab
复制

将 SPFile 和密码文件复制到新的 Oracle 主目录:

[oracle@bm2]$ cp $OLD_HOME/dbs/orapw$ORACLE_SID $ORACLE_HOME/dbs
[oracle@bm2]$ cp $OLD_HOME/dbs/spfile$ORACLE_SID.ora $ORACLE_HOME/dbs
复制

如果使用 GI 管理数据库,则必须升级数据库,即更新 Oracle Home 信息,因此 GI 会在正确的 Oracle Home 中启动数据库。接下来,重新启用并启动数据库:

[oracle@bm2]$ $ORACLE_HOME/bin/srvctl upgrade database -db $ORACLE_UNQNAME -oraclehome $ORACLE_HOME
[oracle@bm2]$ $ORACLE_HOME/bin/srvctl modify database -db $ORACLE_UNQNAME -startoption MOUNT -role PHYSICAL_STANDBY
[oracle@bm2]$ $ORACLE_HOME/bin/srvctl enable database -d $ORACLE_UNQNAME
[oracle@bm2]$ $ORACLE_HOME/bin/srvctl start database -d $ORACLE_UNQNAME
复制

或者,如果您不使用 GI,只需启动数据库:

PROD2 SQL> startup mount
复制

重新启用重做日志传输和应用

在主库上重新启用重做日志传输到备库:

PROD1 SQL> alter system set log_archive_dest_state_2='enable' scope=both;
复制

对备库重启redo apply
PROD2 SQL> alter database recover managed standby database disconnect from session;

重新启用 Data Guard Broker

首先,我们需要将代理配置文件复制到新的 Oracle 主目录中。 如果你将你的代理配置文件存储在Oracle Home之外,这可能对你来说没有必要:

[oracle@bm1]$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
[oracle@bm1]$ export ORACLE_UNQNAME=PROD1
[oracle@bm1]$ cp /tmp/dr1$ORACLE_UNQNAME.dat $ORACLE_HOME/dbs
[oracle@bm1]$ cp /tmp/dr2$ORACLE_UNQNAME.dat $ORACLE_HOME/dbs
复制

在备库主机上执行相同操作:

[oracle@bm2]$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
[oracle@bm2]$ export ORACLE_UNQNAME=PROD2 
[oracle@bm2]$ cp /tmp/dr1$ORACLE_UNQNAME.dat $ORACLE_HOME/dbs
[oracle@bm2]$ cp /tmp/dr2$ORACLE_UNQNAME.dat $ORACLE_HOME/dbs
复制

现在,可以在主库和备库上重新启动 Data Guard Broker:

PROD1 SQL> alter system set dg_broker_start=true scope=both;

PROD2 SQL> alter system set dg_broker_start=true scope=both;
复制

最后,启用代理配置和快速启动故障转移:

DGMGRL SYS@PROD1> show configuration
DGMGRL SYS@PROD1> enable configuration
DGMGRL SYS@PROD1> enable fast_start failover
复制

Test
使用代理确保一切正常:

DGMGRL SYS@PROD1> show configuration
DGMGRL SYS@PROD1> show database prod1
DGMGRL SYS@PROD1> show database prod2
复制

您应该SUCCESS列出两个数据库 升级后使用 Data Guard Broker 验证 Data Guard 设置
image.png
让我们尝试进行switchover切换:

DGMGRL SYS@PROD1> switchover to prod2
复制

如果您不使用 Data Guard Broker,则使用常规 SQL 和 SQLPlus 来验证 Data Guard 环境。

结论

升级数据库实际上并不复杂,即使它是数据保护设置的一部分。需要一些额外的工作来处理备库。但好在DR设置在整个过程中都得到了维护。

请留意即将推出的 AutoUpgrade 版本。在撰写本文时,我们的开发人员正在努力简化流程。我们希望数据保护的升级是 100% 自动化的(或尽可能接近自动化)。

延伸阅读

最后修改时间:2022-06-07 10:27:33
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论