Oracle-Rman对接华为云OBS进行数据库备份恢复指南

chongchongly 发表于 2019/05/17 11:21:26 2019/05/17
【摘要】 当前众多客户需要基于云存储实现低成本的数据库备份和恢复。而Oracle中的备份模块实现了和云存储的对接,可以很好的解决这个问题;华为云的对象存储是作为云存储可以作为客户数据库备份的存储池,以低成本,高可靠方式实现数据存储。本文讲述了基于oracle的osb模块将oracle数据库备份到华为云存储OBS桶中,以及从华为云OBS桶恢复数据到oracle便于企业对接使用。

1      概述

1.1      背景介绍

当前众多客户需要基于云存储实现低成本的数据库备份和恢复。而Oracle中的备份模块实现了和云存储的对接,可以很好的解决这个问题;华为云的对象存储是作为云存储可以作为客户数据库备份的存储池,以低成本,高可靠方式实现数据存储。本文讲述了基于oracle的osb模块将oracle数据库备份到华为云存储OBS桶中,以及从华为云OBS桶恢复数据到oracle便于企业对接使用。

1.2      实验测试环境

本文将以Windows 和Linux下 oracle11g 数据库为例进行备份和恢复的演示

测试条件准备如下:

OBS:华为公有云,华南-广州 Region 

ECS1:华为公有云,华南-广州 Region,4vCPUs | 8GB | s3.xlarge.2 CentOS 6.9 64bit,Oracle版本:11.2.0.1.0

ECS2:华为公有云,华南-广州 Region,4vCPUs | 8GB | s3.xlarge.2 CentOS 6.9 64bit,Oracle版本:11.2.0.4.0

WIN1:华为公有云,华南-广州 Region,4vCPUs | 8GB | s3.xlarge.2 Windows Server 2008 R2 64bit,Oracle版本:11.2.0.1.0

2      当前设备上备份和恢复数据库(Linux)

说明:本例演示采用了Rracle-Raman默认无并发的设置,如果需要增加数据库备份和恢复的性能,需要设置并发数,具体参考5.3章节。另外,本例采用指定桶的方式,即将备份数据上传到指定的桶中,备份也可采用不指定桶的方式,具体请参考5.4章节。

2.1      创建表和插入数据

说明:在正常情况下,客户使用时可以略过本节,本节创建表和数据只为举例说明使用。

前提:

Oracle数据库安装完成。

 

创建表和插入数据过程:

 

1.      切换到oracle用户

su - oracle

     image.png                                         

2.      进入数据库控制台,如果数据库还没有启动则需要执行 startup 命令启动数据库

sqlplus / as sysdba

show parameter checkpoint

      image.png

3.      创建表和插入数据,效果如下,其中test为新建的表

select * from test

    image.png

2.2      oracle安装osb模块

1.          获取osb模块

此插件包可以从oracle官网获取最新版本(参考链接:https://docs.oracle.com/en/database/oracle/oracle-database/12.2/rcmrf/oracle-secure-backup-osb-cloud-module.html#GUID-964AADD2-3405-4476-8698-E9F2133CB5B7),也可从本文档最后的附录中链接获取。

图中把插件osbws_installer.zip的压缩包放到$ORACLE_HOME/lib目录下并解压

image.png

使用命令unzip osbws_installer.zip解压完成后如下图

image.png

根据客户自己OBS服务的AK、SK、location和endpoint参数配置,执行OBS插件的安装命令

说明:AK、SK获取参考链接:https://support.huaweicloud.com/utiltg-obs/obs_11_0004.html;

location、endpoint的获取参考链接:https://developer.huaweicloud.com/endpoint)

java -jar osbws_install.jar -AWSID 客户AK -AWSKey 客户SK -walletDir $ORACLE_HOME/osbws_wallet -libDir $ORACLE_HOME/lib -location OBS服务的地域 -awsEndPoint OBS服务的endpoint

image.png

检查安装结果后进入RMAN进行进行环境配置

cat $ORACLE_HOME/dbs/osboracle.ora

image.png

本例采用指定桶备份上传的方式,下图中指定桶obs-oracle-zoudanhong,桶location为cn-south-1。(即使用者需要保证在OBS平台下已经指定名称的桶,且桶区域与上一步OSB配置参数location一致,如果没有这样的桶,可在OBS平台新建一个桶)

图片.png

2.3      RMAN进行数据库备份到OBS桶

root用户名密码登录数据库所在设备ECS1后连接RMAN(连接命令rman target /),执行如下命令将数据库备份到OBS桶,其中标红的部分与数据库名有关,根据实际值进行修改。

run {

allocate channel ch1 type

sbt parms='SBT_LIBRARY=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libosbws.so,

SBT_PARMS=(OSB_WS_PFILE=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/osbwsorcl.ora)';

backup channel=ch1 database format='ora_%d_%I_%T_%s_%t_%c_%p.dbf' plus archivelog;

backup channel=ch1  current controlfile  format='%d_%I_%T_%s_%t_%c_%p.conf';

backup channel=ch1 spfile format='ora_%d_%I_%T_%s_%t_%c_%p.spf' ;

release channel ch1;

}

image.png

image.png

 

执行完成后,登陆OBS控制台,将会看指定桶obs-oracle-zoudanhong中已经生成了备份数据。

图片.png

2.4      修改数据库数据

说明:本步骤是为了进行数据恢复而做的准备,实际环境运行不需要此步骤

进入数据库查看归档信息:

archive log list;

image.png

向原数据库中增加了一条数据b并提交数据

insert into test values('b');

commit;

image.png

删除归档数据(由于本机有最新的临时数据,为防止备份后的数据恢复后本地自动添加上最新临时数据,需要手工删除归档;异机恢复时不需要此步骤操作)

image.png

2.5      RMAN进行数据库从OBS桶中读取数据进行恢复操作

执行命令关闭数据库

shutdown immediate;

image.png

执行命令使数据库至nomount状态

startup nomount;

image.png

然后执行如下命令从华为OBS恢复controlfile文件,其中controlfile名称,通过rman命令list backup列举出所有的备份文件(参考4.5章节样例),参考2.3章节中备份命令中的备份文件的命名规则设置,根据自己需要选择需要恢复的文件,记下其Handle名称

run {

allocate channel ch1 type

sbt parms='SBT_LIBRARY=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libosbws.so,

SBT_PARMS=(OSB_WS_PFILE=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/osbwsorcl.ora)';

restore controlfile from 'ORACLE_1880733115_20190507_5_1007656283_1_1.conf';

release channel ch1;

}

image.png

切换数据库至mount状态,然后从OBS读取并恢复数据文件。特别注意的是,在执行restore和recover命令后,一定要加入 until sequence xxxx或者until SCN xxxx这个条件,其中 xxxx 为图中执行恢复数据后标红的实际值

alter database mount;

image.png

run {

allocate channel ch1 type

sbt parms='SBT_LIBRARY=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libosbws.so,

SBT_PARMS=(OSB_WS_PFILE=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/osbwsorcl.ora)';

restore database from tag='TAG20190507T163102';

recover database from tag='TAG20190507T163102';

release channel ch1;

}

说明:上图中的tag值相当于每个备份的ID号,通过rman命令list backup列举出所有的备份文件(参考4.5章节样例),根据自己需要选择需要恢复的文件(需要确保与前面恢复的控制文件是一致的),记下其tag值

image.png

image.png

image.png

打开数据库,查询2.3中修改后的数据库已经正确恢复到2.1创建时的状态

alter database open resetlogs;

image.png

3      当前设备数据库备份后在另一台设备上恢复(Linux)

3.1      创建表和插入数据

参考2.1章节。

3.2      oracle安装osb模块

参考2.2章节。记得要在两台设备上都要安装osb模块。

3.3      RMAN进行数据库备份到OBS桶

这里使用在2.3章节中备份的文件。

3.4      RMAN进行数据库从OBS桶中读取数据进行恢复操作

查看2.3章节中ECS1中数据库的dbid,并登录ECS2设备,将dbid设置到设备ECS2中

select dbid from v$database;

image.png

set dbid=XXX;

image.png

执行命令关闭数据库

shutdown immediate;

image.png

执行命令使数据库至nomount状态

startup nomount;

image.png

然后执行如下命令从华为OBS恢复controlfile文件,其中controlfile名称,通过在ECS1上执行rman命令list backup列举出所有的备份文件(参考4.5章节样例),参考2.3章节中备份命令中的备份文件的命名规则设置,根据自己需要选择需要恢复的文件,记下其Handle名称。

其中标红的部分osbwsoracle与数据库名有关,根据ECS2实际值进行修改,注意与ECS1不同。

run {

allocate channel ch1 type

sbt parms='SBT_LIBRARY=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libosbws.so,

SBT_PARMS=(OSB_WS_PFILE=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/osbwsoracle.ora)';

restore controlfile from 'ORACLE_1880733115_20190507_5_1007656283_1_1.conf';

release channel ch1;

}

image.png

切换数据库至mount状态,然后从OBS读取并恢复数据文件。特别注意的是,在执行restore和recover命令后,一定要加入 until sequence xxxx或者until SCN xxxx这个条件,其中 xxxx 为图中执行恢复数据后标红的实际值

其中标红的部分osbwsoracle与数据库名有关,根据ECS2实际值进行修改,注意与ECS1不同。

alter database mount;

image.png

run {

allocate channel ch1 type

sbt parms='SBT_LIBRARY=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libosbws.so,

SBT_PARMS=(OSB_WS_PFILE=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/osbwsoracle.ora)';

restore database from tag='TAG20190507T163102';

recover database from tag='TAG20190507T163102';

release channel ch1;

}

说明:上图中的tag值相当于每个备份的ID号,通过rman命令list backup列举出所有的备份文件(参考4.5章节样例),根据自己需要选择需要恢复的文件(需要确保与前面恢复的控制文件是一致的),记下其tag值

image.png

image.png

打开数据库,查询2.3中被删除的数据库,已经正确恢复

alter database open resetlogs;

image.png

图中出现的UPGRADE错误,是由于两个设备的数据库版本不一致,相当于从ECS1的11.2.0.1.0的oracle版本恢复到ECS2的11.2.0.4.0的oracle版本,需要执行命令alter database open UPGRADE

image.png

4      当前设备上备份和恢复数据库(Windows)

说明:本例演示采用了Rracle-Raman默认无并发的设置,如果需要增加数据库备份和恢复的性能,需要设置并发数,具体参考5.3章节。另外,本例采用指定桶的方式,即将备份数据上传到指定的桶中,备份也可采用不指定桶的方式,具体请参考5.4章节

4.1      创建表和插入数据

说明:在正常情况下,客户使用时可以略过本节,本节创建表和数据只为举例说明使用。

前提:

Oracle数据库安装完成。

 

创建表和插入数据过程:

1.          oracle数据库安装完成

2.          打开cmd命令行

image.png

3.          进入数据库控制台,如果数据库还没有启动则需要执行 startup 命令启动数据库

sqlplus / as sysdba

show parameter checkpoint

image.png

4.          创建表和插入数据,效果如下,其中test为新建的表

select * from test

image.png

4.2      oracle安装osb模块

1.          设置ORACLE_HOME和ORACLE_SID变量

            从注册表中找到这两个变量,记下实际值,并通过set命令设置到cmd中

image.png

image.png

2.          获取osb模块

此插件包可以从oracle官网获取最新版本(参考链接:https://docs.oracle.com/en/database/oracle/oracle-database/12.2/rcmrf/oracle-secure-backup-osb-cloud-module.html#GUID-964AADD2-3405-4476-8698-E9F2133CB5B7),也可从本文档最后的附录中获取。

图中把插件osbws_installer.zip的压缩包解压

image.png

将解压后的文件osbws_install.jar复制到$ORACLE_HOME\lib目录下

image.png

根据客户自己OBS服务的AK、SK、location和endpoint参数配置,进入$ORACLE_HOME\lib目录下执行OBS插件的安装命令

说明:AK、SK获取参考链接:https://support.huaweicloud.com/utiltg-obs/obs_11_0004.html;

location、endpoint的获取参考链接:https://developer.huaweicloud.com/endpoint)

java -jar osbws_install.jar -AWSID 客户AK -AWSKey 客户SK -walletDir %ORACLE_HOME%\osbws_wallet -libDir %ORACLE_HOME%\BIN -location OBS服务的地域 -awsEndPoint OBS服务的endpoint

image.png

本例采用指定桶备份上传的方式,下图中指定桶obs-win-oracle-zoudanhong,桶location为cn-south-1。(即使用者需要保证在OBS平台下已经指定名称的桶,且桶区域与上一步OSB配置参数location一致,如果没有这样的桶,可在OBS平台新建一个桶)

图片.png

4.3      RMAN进行数据库备份到OBS桶

登录ECS1设备连接RMAN(连接命令rman target /),执行如下命令将数据库备份到OBS桶,其中标红的部分与数据库名有关,根据实际值进行修改。

run {

allocate channel ch1 type

sbt parms='SBT_LIBRARY=C:\app\Administrator\product\11.2.0\dbhome_1\BIN\oraosbws.dll,

SBT_PARMS=(OSB_WS_PFILE=C:\app\Administrator\product\11.2.0\dbhome_1\database\osbwsor.ora)';

backup channel=ch1 database format='ora_%d_%I_%T_%s_%t_%c_%p.dbf' plus archivelog;

backup channel=ch1  current controlfile  format='%d_%I_%T_%s_%t_%c_%p.conf';

backup channel=ch1 spfile format='ora_%d_%I_%T_%s_%t_%c_%p.spf' ;

release channel ch1;

}

image.png

image.png

执行完成后,登陆OBS控制台,将会看指定桶obs-win-oracle-zoudanhong中已经生成了备份数据

图片.png

 

4.4      修改数据库数据

向原数据库中增加了一条数据b并提交数据

insert into test values('b');

commit;

image.png

查询下图中的归档数据并删除(由于本机有最新的临时数据,为防止备份后的数据恢复后本地自动添加上最新临时数据,需要手工删除归档;异机恢复时不需要此步骤操作)

 

image.png

4.5      查询备份文件的handle名和TAG值

通过rman命令list backup列举出所有的备份文件,参考2.3中备份命令中的备份设置,根据自己需要选择需要备份的文件(需要确保与前面恢复的控制文件是一致的),记下其Handle名称和TAG值。

 

image.png

image.png

 

4.6      RMAN进行数据库从OBS桶中读取数据进行恢复操作

执行命令使数据库至nomount状态

image.png

然后执行如下命令从华为OBS恢复controlfile文件,命令中的标红部分使用实际值,其中controlfile名称参考4.5章节

run {

allocate channel ch1 type

sbt parms='SBT_LIBRARY=C:\app\Administrator\product\11.2.0\dbhome_1\BIN\oraosbws.dll,

SBT_PARMS=(OSB_WS_PFILE=C:\app\Administrator\product\11.2.0\dbhome_1\database\osbwsor.ora)';

restore controlfile from 'OR_2932857089_20190509_5_1007812302_1_1.conf';

release channel ch1;

}

image.png

切换数据库至mount状态,然后从OBS读取并恢复数据文件。命令中的标红部分controlfile使用实际值,参考4.5章节

特别注意的是,在执行restore和recover命令后,一定要加入 until sequence xxxx 或者until SCN xxxx这个条件,其中 xxxx 为图中执行恢复数据后标红的实际值

alter database mount;

image.png

run {

allocate channel ch1 type

sbt parms='SBT_LIBRARY=C:\app\Administrator\product\11.2.0\dbhome_1\BIN\oraosbws.dll,

SBT_PARMS=(OSB_WS_PFILE=C:\app\Administrator\product\11.2.0\dbhome_1\database\osbwsor.ora)';

restore database from tag='TAG20190509T114912';

recover database from tag='TAG20190509T114912';

release channel ch1;

}

image.png

image.png

image.png

打开数据库,查询2.3中修改后的数据库已经正确恢复到2.1创建时的状态

alter database open resetlogs;

image.png

5      注意事项

5.1      oracle的自带osb模块在安装时长时间download无反应

oracle12以上的版本中自带了osb模块,如果安装时长时间download无反应,可以考虑去官网下载最新osb模块进行安装,或使用代理服务器进行安装。

注:通常上午下载速度较快

5.2      数据库所在的设备与OBS桶不在一个区域,备份恢复时间长

数据库所在的设备与OBS桶不在一个区域,比如数据库安装在华北的虚拟机,而将数据备份到华南的OBS桶,则在备份和恢复时由于网速的关系,耗费时间较长。

解决方案:建议数据库和OBS桶在同一个区域,或者是较近的区域。

5.3      oracle数据库备份和恢复默认没有并发,如果要提高带宽性能,需要增加并发设置

目前实测最高的数据库备份上传带宽性能最高在8Gbit/s,最高的数据库恢复下载带宽性能最高在17Gbit/s,并发数在15并发左右。

登录rman,先进行osb对接和并发参数配置,此处以并发数15为例:

configure channel device type sbt parms='SBT_LIBRARY=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libosbws.so ENV=(OSB_WS_PFILE=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/osbwsdb.ora)';

configure default device type to SBT;

configure device type SBT parallelism 15;

备份命令如下:

backup database format='ora_%d_%I_%T_%s_%t_%c_%p.dbf' plus archivelog;

backup current controlfile format='%d_%I_%T_%s_%t_%c_%p.conf';

backup spfile format='ora_%d_%I_%T_%s_%t_%c_%p.spf';

恢复时命令如下,其中红色部分根据实际情况填写:

restore controlfile from 'DB_1771527802_20190513_932_1008137953_1_1.conf';

restore database from tag='TAG20190513T035229';

recover database from tag='TAG20190513T035229';

5.4      oracle数据库备份和恢复优先采用指定OBS桶的方式进行备份和恢复

oracle数据库备份和恢复对接OBS桶,可以采用指定已存在的OBS桶进行对接,也可以不指定OBS桶的方式进行对接,如果采用后一种方式,则OSB插件会根据就否存在oracle-data-account为前缀,且桶所在区域与OSB插件配置时的location一致的桶,如果存在就直接使用此OBS桶,如果不存在会根据oracle-data-account前缀和OSB插件配置时的location新创建一个OBS桶。oracle-data-account中的account与OSB插件生成的配置文件中的“CREDENTIAL_ALIAS”有关。

图片.png

注:目前不指定桶的方式可能会出现一些由于OSB插件造成的不可控的问题,建议使用指定桶的方式进行备份和恢复。

具体信息还可参考oracle官网对指定桶参数OSB_WS_BUCKET的介绍:https://docs.oracle.com/database/121/RCMRF/web_services.htm#RCMRF90491

    

图片.png

6      附录

osb模块下载参考链接:https://chongchongbucket005.obs.cn-north-1.myhuaweicloud.com/oracle/osbws_installer.zip


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。