使用 RMAN 备份从对象存储恢复数据库
本文介绍了如何恢复存储在对象存储中的恢复管理器 (RMAN) 备份。
先决条件
您将需要以下信息:
- 要将数据库还原到的新数据库系统(请参见下面的假设)。有关详细信息,请参阅创建数据库系统概览。
- Oracle Database Cloud 备份模块必须安装在数据库系统上。有关更多信息,请参见 Back Up a Database to Object Storage Using RMAN 中的 Installing the Backup Module on the DB System 。
假设
以下过程假定如下:
- 已创建新数据库系统来托管还原的数据库,新数据库系统上不存在其他数据库。可以还原到具有现有数据库的数据库系统,但这超出了本主题的范围。
-
原始数据库将丢失,剩下的全部是最新的 RMAN 备份。该过程假定数据库系统(包括数据库)不再存在。
注:未包括在最近备份中的任何数据都将丢失。
- 原始数据库在上次备份时使用的 Oracle Wallet 和/或加密密钥可用。
- RMAN 备份包含截至最新备份的控制文件和 spfile 的副本,以及执行完整数据库恢复所需的所有数据文件和归档日志备份。
- 恢复期间将不使用 RMAN 目录。
在数据库系统上设置存储
-
通过 SSH 连接到数据库系统。
ssh -i <private_key_path> opc@<db_system_ip_address> -
以 opc 身份登录,然后向 root 用户执行 sudo。使用带有连字符的
sudo su -调用 root 用户的配置文件,该配置文件将 PATH 设置为 dbcli 目录 (/opt/oracle/dcs/bin)。login as: opc sudo su - -
可以使用现有的空数据库主目录或为还原创建新的主目录。使用适用的命令可帮助您完成此步骤。
如果要使用现有数据库主目录,请执行以下操作:
-
使用 Dbhome 命令列出数据库主目录。
dbcli list-dbhomes输出:
ID Name DB Version Home Location ---------------------------------------- -------------------- ---------- --------------------------------------------- 2e743050-b41d-4283-988f-f33d7b082bda OraDB12102_home1 12.1.0.2 /u01/app/oracle/product/12.1.0.2/dbhome_1 -
使用数据库命令可确保数据库主目录未与任何数据库关联。
如有必要,请使用 Dbhome Commands 为还原创建数据库主目录。
-
-
使用 Dbstorage Commands 设置 DATA、RECO 和 REDO 存储的目录。以下示例为 rectest 数据库创建 10GB ACFS 存储。
dbcli create-dbstorage --dbname rectest --dataSize 10 --dbstorage ACFS
注:恢复版本 11.2 数据库时,必须指定 ACFS 存储。
执行数据库还原和恢复
-
通过 SSH 到数据库系统,以 opc 身份登录,然后成为 oracle 用户。
sudo su - oracle -
在
/etc/oratab中为数据库创建一个条目。使用与原始数据库相同的 SID。db1:/u01/app/oracle/product/12.1.0.2/dbhome_1:N -
使用 oraenv 实用程序设置
ORACLE_HOME和ORACLE_SID环境变量。. oraenv -
获取原始数据库的 DBID。这可以从备份介质上的
controlfile自动备份的文件名中获取。文件名将包括包含 DBID 的字符串。字符串的典型格式为c-DDDDDDDDDDDD-YYYYMMDD-NN,其中DDDDDDDDDDDD是 DBID,YYYYMMDD是创建备份的日期,NN是使文件名唯一的序列号。以下示例中的 DBID 为 1508405000。您的 DBID 将有所不同。使用以下 curl 语法对对象存储执行一般性查询。红色参数与安装备份模块时指定的参数相同,如 Back Up a Database to Object Storage Using RMAN 中的 Installing the Backup Module on the DB System 中所述。
curl -u '<user_ID>.com:<auth_token>' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/<object_storage_namespace>要查找区域名称,请参阅区域和可用性域。
例如:
curl -u 'djones@mycompany.com:1cnk!d0++ptETd&C;tHR' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/myobjectstoragenamespace要从控制文件名获取 DBID,请使用以下语法:
curl -u '<user_id>.com:<auth_token>' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/<object_storage_namespace>/<bucket_name>?prefix=sbt_catalog/c-例如:
curl -u 'djones@mycompany.com:1cnk!d0++ptETd&C;tHR' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/myobjectstoragenamespace/dbbackups/?prefix=sbt_catalog/c-在下面的输出样例中,1508405000 是 DBID。
{ "bytes": 1732, "content_type": "binary/octet-stream", "hash": "f1b61f08892734ed7af4f1ddaabae317", "last_modified": "2016-08-11T20:28:34.438000", "name": "sbt_catalog/c-1508405000-20160811-00/metadata.xml" } -
运行 RMAN 并连接到目标数据库。无需创建
pfile或spfile或使用备份controlfile。这些将在以下步骤中恢复。请注意,目标数据库为(not started)。这在这一点上是正常的,也是预期的。rman target /输出:
Recovery Manager: Release 12.1.0.2.0 - Production on Wed Jun 22 18:36:40 2016 Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved. connected to target database (not started) -
使用上面获取的值设置 DBID。
set dbid 1508405000; -
运行以下命令。如果服务器参数文件不可用,RMAN 将尝试使用虚拟服务器参数文件启动实例。ORA-01078 和 LRM-00109 错误是正常的,可以忽略。
STARTUP NOMOUNTstartup failed: ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/u01/app/oracle/product/12.1.0.2/dbhome_1/dbs/initdb1.ora' starting Oracle instance without parameter file for retrieval of spfile Oracle instance started Total System Global Area 2147483648 bytes Fixed Size 2944952 bytes Variable Size 847249480 bytes Database Buffers 1254096896 bytes Redo Buffers 43192320 bytes -
从自动备份恢复服务器参数文件。
SBT_LIBRARY 是安装备份模块时使用
-libDir参数指定的同一库,例如/home/oracle/lib/。OPC_PFILE 与安装备份模块时使用
-configfile参数指定的文件相同,例如/home/oracle/config。set controlfile autobackup format for device type sbt to '%F'; run { allocate channel c1 device type sbt PARMS 'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)'; restore spfile from autobackup; } -
创建 audit_file_dest 的目录。默认值为
/u01/app/oracle/admin/$ORACLE_SID/adump。您可以通过搜索字符串的 spfileaudit_file_dest来查看原始数据库使用的设置。strings ${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora | grep audit_file_dest *.audit_file_dest='/u01/app/oracle/admin/db1/adump' mkdir -p /u01/app/oracle/admin/db1/adump -
如果在原始数据库上启用了块更改跟踪,则为块更改跟踪文件创建目录。这将是
db_create_file_dest下的目录。在spfile中搜索目录的名称。strings ${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora | grep db_create_file_dest *.db_create_file_dest='/u02/app/oracle/oradata/db1' mkdir -p /u02/app/oracle/oradata/db1/<$ORA_UNQNAME if available or database name>/changetracking -
使用还原的服务器参数文件重新启动实例。
STARTUP FORCE NOMOUNT; -
从 RMAN 自动备份恢复控制文件并挂载数据库。
set controlfile autobackup format for device type sbt to '%F'; run { allocate channel c1 device type sbt PARMS 'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)'; restore controlfile from autobackup; alter database mount; } -
恢复和恢复数据库。
RESTORE DATABASE; RECOVER DATABASE; -
RMAN 将使用归档重做日志进行恢复,直到找不到更多日志为止。当 RMAN 在备份中应用了最后一个归档重做日志并且无法再找到任何日志时,发生类似于以下错误是正常的。
unable to find archived log archived log thread=1 sequence=29 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 06/28/2016 00:57:35 RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 29 and starting SCN of 2349563 -
用 resetlogs 打开数据库。
ALTER DATABASE OPEN RESETLOGS;
恢复已完成。自上次备份的归档重做日志起,数据库将具有所有已提交的事务处理。