如何在 Oracle 云上故障切换并恢复 Oracle 数据库
2018-06-26 22:40:34
详情:
在本文中,我们将介绍如何在 Oracle 云上故障切换并恢复 Oracle 数据库。
注:要使用本文中介绍的操作步骤,您需要两个 Oracle 云数据库实例。此外,这些操作步骤是在 Oracle Database 11g 上执行的;但它们应当适用于更高版本,例如 Oracle Database 12c 第 1 版和第 2 版。
创建主数据库实例
登录到您的 Oracle 云服务帐户。然后转至 Oracle Database Cloud Service 页面,创建一个新服务:
- 在 Service Name 中,输入Primary
。
- 从 Service Level 列表中,选择 Oracle Database Cloud Service。
- 从 Metering Frequency 列表中,选择适合您环境的频率。
- 从 Software Release 列表中,选择 Oracle Database 11g Release 2。
- 从 Software Edition 列表中,选择 Enterprise Edition。
- 从 Database Type 列表中,选择 Single Instance。
然后,单击 Next 继续。
图 1.创建新服务
在 Service Details 屏幕上,执行以下操作:
- 在 DB Name (SID) 中,输入ORCL
。
- 设置您的管理密码并确认密码(这将是您的 sys 密码)。
- 在 Usable Database Storage (GB) 中,输入25
。
- 从 Compute Shape 列表中,选择 OC3 -1 OCPU, 7.5GB RAM(这是最低要求)。
- 在 SSH Public Key 中,输入rsa-key-20170111.pub
。
然后,单击 Next 继续。
图 2.指定服务详细信息
最后,检查配置并单击 Create 创建主云数据库。
图 3.创建主云数据库实例
几分钟后,主云数据库实例已成功创建。
图 4.主数据库已创建
单击服务名称 (Primary) 打开数据库的主页面。
图 5.主数据库的主页面
在尝试连接到云端的主数据库实例之前,您必须启用 dblistener 访问规则。执行以下操作:
a.打开数据库服务,从菜单中选择 Access Rules。
图 6.选择 Access Rules 项目
b.对于 ora_p2_dblistener 规则,从 Actions 菜单中选择 Enable。
图 7.启用 ora_p2_dblistener 规则
创建备用数据库实例
登录到您的 Oracle 云服务帐户。然后转至 Oracle Database Cloud Service 页面,创建一个新服务:
- 在 Service Name 中,输入Standby
。
- 从 Service Level 列表中,选择 Oracle Database Cloud Service。
- 从 Metering Frequency 列表中,选择适合您环境的频率。
- 从 Software Release 列表中,选择 Oracle Database 11g Release 2。
- 从 Software Edition 列表中,选择 Enterprise Edition。
- 从 Database Type 列表中,选择 Single Instance。
然后,单击 Next 继续。
图 8.创建另一个新服务
在 Service Details 屏幕上,执行以下操作:
- 在 DB Name (SID) 中,输入ORCL
。
- 设置您的管理密码并确认密码(这将是您的 sys 密码)。
- 在 Usable Database Storage (GB) 中,输入25
。
- 从 Compute Shape 列表中,选择 OC3 -1 OCPU, 7.5GB RAM(这是最低要求)。
- 在 SSH Public Key 中,输入rsa-key-20170111.pub
。
单击 Next 继续。
注:此虚拟数据库随后会被删除。
图 9.指定服务详细信息
最后,检查配置并单击 Create 创建备用云数据库。
图 10.创建备用云数据库实例
几分钟后,备用云数据库实例已经成功创建。
图 11.备用数据库已创建
单击服务名称 (Standby) 打开数据库的主页面。
图 12.备用数据库的主页面
在尝试连接到云端的备用实例之前,您必须启用 dblistener 访问规则。执行以下操作:
a.打开数据库服务,从菜单中选择 Access Rules。
图 13.选择 Access Rules 项目
b.对于 ora_p2_dblistener 规则,从 Actions 菜单中选择 Enable。
图 14.启用 ora_p2_dblistener 规则
打开 PuTTY 可执行文件的两个不同实例,使用 SSH 连接到两台机器。
图 15.使用 PuTTY 连接到两台机器
注:在下图中,主实例显示为黑色背景,备用实例显示为黄色背景。
检查每个服务器上的主机名和
pmon
进程。
图 16.检查主机名和
pmon
进程删除默认的备用数据库。
图 17.删除备用数据库
在接下来的步骤中,您将手动重新创建备用数据库
此外,由于您需要在接下来的步骤中配置 Data Guard 代理,因此请在主服务器和备用服务器上的
listener.ora
文件中为其命令行界面 (DGMGRL) 添加一个静态条目。(Data Guard 代理是 Oracle Database 企业版提供的一个分布式管理框架。)SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = STBY_DGMGRL) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1) (SID_NAME = STBY) ) (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = STBY) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1) (SID_NAME = STBY) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = Standby.compute-aeetisalat78358.oraclecloud.internal)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
图 18.配置
listener.ora
文件现在,重新启动监听器。
图 19.重新启动监听器
使用主服务器和备用服务器的公共 IP 地址配置
tnsnames.ora
文件。配置完地址之后,就可以在控制台上看到它们。
图 20.验证
tnsnames.ora
文件的配置确保
tnsping
命令在两端均有效。
图 21.运行
tnsping
命令在备用服务器上创建 pfile 和密码文件。同时,为备用数据库创建必要的目录。
图 22.在备用服务器上创建目录
在主服务器上,设置创建备用数据库所需的以下参数:
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG = 'DG_CONFIG=(ORCL,STBY)'SCOPE=BOTH; ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archive VALID_FOR=(ONLINE_LOGFILES, ALL_ROLES)DB_UNIQUE_NAME=ORCL'; ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=STBY LGWR ASYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES, PRIMARY_ROLE) DB_UNIQUE_NAME=STBY'; ALTER SYSTEM SET FAL_SERVER =STBY SCOPE=BOTH; ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT = AUTO SCOPE = BOTH; ALTER DATABASE FORCE LOGGING;
使用
nomount
选项和pfile
子句启动备用数据库。然后,在主服务器中,使用 Oracle Recovery Manager (Oracle RMAN)rman target
命令检查两个连接。
图 23.启动备用数据库并检查连接
在主服务器中,使用 Oracle RMAN
duplicate
命令配置备用数据库实例。
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASEDORECOVER SPFILE set control_files='/u02/app/oracle/oradata/STBY/control01.ctl','/u03/app/oracle/fast_recovery_area/STBY/control02.ctl' SET db_unique_name='STBY' COMMENT 'Is standby' SET LOG_ARCHIVE_DEST_2='SERVICE=ORCLASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=ORCL' SET FAL_SERVER='ORCL' COMMENT 'Is primary' set db_recovery_file_dest='/u01/app/' set db_file_name_convert='/ORCL/','/STBY/' set log_file_name_convert='/ORCL/','/STBY/' NOFILENAMECHECK;
等待一段时间之后,备用数据库便会成功创建并以挂载状态运行。
图 24.备用数据库以挂载状态运行
现在,以只读模式启动备用数据库并开始恢复。同时确认物理数据库功能是否正常。
在主服务器上:
create table test as select * from dict;
在备用服务器上:
alter database open; ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=STBY'; ALTER SYSTEM SET LOG_ARCHIVE_DEST_2= 'SERVICE=ORCL LGWR ASYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES, PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL' scope=both; recover managed standby database using current logfile disconnect;
图 25.打开备用数据库并开始恢复
在未启用闪回技术的情况下手动故障切换至备用数据库
故障切换是在生产(主)数据库发生故障时激活备用数据库的过程,以便尽可能降低数据丢失的风险。这是一个不可逆的过程。启用故障切换流程之后,备用数据库会切换作为主数据库运行,而您需要重新创建备用数据库。
在一种最糟糕的情况下,当 Data Guard 主数据库不可用于生产环境时,您可以通过以下步骤将备用数据库激活为主生产数据库。
在备用数据库中,运行以下 SQL 语句:
recover managed standby database cancel; recover managed standby database finish; alter database activate standby database; startup force
图 26.激活备用数据库
由于我们在两端都未启用闪回技术,因此需要手动将之前的主数据库重新创建为物理备用数据库。
图 27.手动重新创建之前的主数据库
以“nomount”状态启动之前的主数据库。然后,在备用机器机中运行 Oracle RMAN
duplicate
命令来恢复它:
duplicate target database for standby from active database nofilenamecheck;
图 28.启动之前的主数据库并恢复它
等待一段时间之后,之前的主数据库会被重新创建为备用数据库,并以挂载状态运行。
图 28.之前的主数据库以挂载状态运行
现在,以只读模式启动备用数据库并开始恢复。同时确认物理数据库功能是否正常。
在主服务器上:
SQL> alter database open read only; SQL> recover managed standby database using current logfile disconnect; SQL> Select count(*) from test; COUNT(*) ---------- 0 SQL> select name,db_unique_name,database_role,open_mode from v$database; NAME DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE --------- ------------------------------ ---------------- -------------------- ORCL ORCL PHYSICAL STANDBY READ ONLY WITH APPLY
在备用服务器上:
SQL> Select count(*) from test; COUNT(*) ---------- 2666 SQL> delete from test; 2666 rows deleted. SQL> commit; Commit complete. SQL> Select count(*) from test; COUNT(*) ---------- 0
Figure 30.打开备用数据库并开始恢复
通过 Data Guard 代理执行故障切换后,使用闪回技术恢复备用数据库
如今,硬件崩溃已经是一种非常普遍的现象。因此,为 Data Guard 创建一个灾难恢复 (DR) 配置对于任何大小的数据库都是非常有帮助的。但是,数据库的大小决定了 DBA 应当使用什么样的工具来重新创建主数据库并设置 DR 配置。
如果数据库非常小,那么使用 Oracle RMAN duplicate 命令执行简单的“冷拷贝”就足够了。然而,当涉及庞大的数据仓库或数据集市时,这种方式就太耗时了。因此,建议使用 Oracle 数据库的 Oracle 闪回数据库功能来恢复备用数据库。
在主服务器上,挂载数据库、配置闪回保留、启动 Oracle 闪回数据库功能并打开数据库,具体运行的语句如下:
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=2g scope=both; ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/u01/app/' scope=both; ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=240; ALTER DATABASE FLASHBACK ON; ALTER DATABASE OPEN;
在备用机器上,取消恢复、挂载数据库、配置闪回保留、启用 Oracle 闪回数据库功能、以只读模式打开数据库并开始恢复过程,具体运行的语句如下:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; STARTUP FORCE MOUNT; alter system set DB_RECOVERY_FILE_DEST_SIZE=2g scope=both; alter system set db_recovery_file_dest='/u01/app/' scope=both; ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=240; ALTER SYSTEM FLASHBACK ON; ALTER DATABASE OPEN READ ONLY; recover managed standby database using current logfile disconnect from session;
图 31.在两个机器上启用闪回技术的结果
接下来,我们将配置 Data Guard 代理。
主数据库服务器和备用数据库服务器的详细信息如下:
主服务器:Primary.compute-aeetisalat78358.oraclecloud.internal
数据库:ORCL
备用服务器:StandBy-1.compute-aeetisalat78358.oraclecloud.internal
数据库:STBY1
在主数据库服务器和备用数据库服务器上,启动 Data Guard 代理进程:
a.通过将DG_BROKER_START
参数的值设置为TRUE
来启用代理进程。
ALTER SYSTEM SET DG_BROKER_START=TRUE SCOPE=BOTH;
b.确保两个服务器上的listener.ora
文件都包含一条针对 DGMGRL 命令行界面的静态条目。(这是之前在第 9 步中添加的。)
c.在主服务器上,运行以下语句,创建 Data Guard 代理配置:
DGMGRL> CREATE CONFIGURATION 'Cloud DG' as PRIMARY DATABASE IS'ORCL' CONNECTIDENTIFIER IS 'ORCL'; Configuration "CloudDG" created with primary database "ORCL" DGMGRL> show CONFIGURATIONConfiguration - CloudDG Protection Mode :MaxPerformance Members: ORCL - Primary database Fast-Start Failover:DISABLED Configuration Status: DISABLED
d.运行以下语句,将备用数据库添加到配置中:
DGMGRL> ADD DATABASE 'STBY' as CONNECT IDENTIFIER IS 'STBY';Database "STBY" added DGMGRL> show CONFIGURATIONConfiguration - CloudDG Protection Mode :MaxPerformance Databases: ORCL - Primary database STBY - Physical standby database Fast-Start Failover:DISABLED Configuration Status: DISABLED
e.运行以下语句,启用配置:
DGMGRL> enable CONFIGURATIONEnabled. DGMGRL> show CONFIGURATIONConfiguration - CloudDG Protection Mode: MaxPerformance Databases: ORCL - Primary database STBY - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS
图 32.启用代理的结果
现在,要继续此模拟,我们需要让主数据库崩溃。
图 33.主数据库崩溃之后的状态
现在,运行以下命令,故障切换至备用服务器:
DGMGRL> failover to 'STBY'Performing failover NOW, please wait… Failover succeeded, new primary is "STBY"
图 34.执行故障切换
注:现在,备用数据库已成为主数据库。
恢复数据库。
由于我们已经配置了 Oracle 闪回数据库,因此您可以使用以下命令恢复数据库,而无需还原备份:
DGMGRL> reinstate database 'ORCL';
图 35.恢复数据库
否则,我们需要配置闪回数据库功能才能自动恢复数据库。如图 35 所示,恢复任务失败,因为未配置闪回功能通过
Reinstate Database <数据库名称>
命令自动恢复数据库。现在,我们将返回原始配置。执行切换操作,如图 36 所示。
图 36.执行切换操作
总结
可以看到,无论是否使用 Oracle 闪回数据库功能,在云平台上执行故障切换都是一个简便易行的过程。
我们希望本文能为您提供一些帮助,欢迎继续阅读本专栏关于 Oracle 云的后续文章。
关于作者
Joel Pérez 是一位资深 DBA 和 Oracle ACE 总监,同时还是 Oracle 高可用性架构、Oracle 数据库云管理以及 Oracle Database 11g 和 12c 领域的 Oracle 认证大师。他在 Oracle 技术领域拥有超过 17 年的实践经验,致力于从事云、高可用性 (HA)、灾难恢复、升级、复制以及与 Oracle 数据库相关的大部分领域的设计和实施工作。目前,他在云和恩墨(北京)信息技术有限公司担任云技术、Oracle 高可用架构和高可用性领域的首席技术专家和架构师。
Skant Gupta 是 Oracle Database 12c 的 Oracle 认证云专家,Oracle Database 11g 中的 Oracle Real Application Clusters (Oracle RAC) 的 Oracle 认证专家以及 Oracle Database 10g、11g 和 12c 的 Oracle 认证专家。他目前任职于英国的 Vodafone Technology,此前曾在迪拜的 Etisalat 担任高级 DBA。他拥有六年的 Oracle 技术经验,主要致力于云、数据库和高可用性解决方案、Oracle WebLogic Suite 和 Oracle GoldenGate。他经常在全球各地的 Oracle 用户组活动上发表演讲,最近刚在美国、阿联酋和印度的活动上发表了演讲。
网上报名 免费试学+报名即可领取免费资料