| |||
|
作者:Porus Homi Havewala
Unix shell 脚本和 cron 作业更快速、更高效的替代工具。
2014 年 1 月
下载
Oracle Enterprise Manager
Oracle Database
Oracle 一直随数据库软件安装一起提供一个强大的工具 Oracle Recovery Manager (RMAN),用于以完整或增量备份方式备份和恢复 Oracle 数据库。脚本放置在 Unix 级别的 shell 脚本包装器中,然后使用 Unix cron 作业工具计划。这些脚本需要进行测试、验证和维护。
虽然对一两个数据库来说,此任务易于管理,但对供应的每个新数据库或每台新数据库服务器都必须重复执行一遍相同的任务,设置此类备份所需的时间会相应地增加。
在这篇技术文章中,我们将了解 DBA 如何使用 Enterprise Manager Cloud Control 12c 为上千个数据库生成和计划 RMAN 数据库备份,相比于以前用耗时的手动方式对待备份的每个数据库执行 Unix shell 脚本和 cron 作业,这种方法更轻松、更高效。
而且,使用 Enterprise Manager 也无需针对每个新数据库版本持续维护自定义的 RMAN 脚本。Oracle 每发布一个新的 Oracle 数据库版本,随之出现的未来 Oracle Enterprise Manager 数据库插件版本就会自动适应这个新版本以及该版本中的任何特殊特性,从而无需维护 RMAN 脚本。在 Enterprise Manager 中设置备份时可使用新的 RMAN 特性(如压缩、加密、块更改跟踪等)。
采用 Enterprise Manager 方法,您无需编写任何脚本(Enterprise Manager 将创建 RMAN 脚本并进行调度)也无需使用 Unix cron 作业工具,只需使用 Oracle Enterprise Manager Cloud Control 即可生成和计划数据库备份。这样,生产效率的提高以及整个方法的自动化可为您节省时间和成本。
假设您要备份的数据库已经是 Enterprise Manager 系统中的一个目标,即数据库服务器上已经安装了 Enterprise Manager Agent,该数据库已被发现并且提升为受管目标。
通过 Targets > Databases 转到 Database 主页,单击数据库名称。显示主页后(确保使用 SYSDBA 凭证登录数据库),创建快速恢复区 (FRA) 帮助自动执行备份。
可从 Target 菜单中选择 Availability > Backup & Recovery > Recovery Settings 创建 FRA:
只需指定 FRA 的位置和大小 (GB)。
单击 Apply。
记得根据数据库大小以及具体的备份方式(例如是要使用数据文件的映像副本,还是只是压缩备份集,后者所占空间小得多)指定合适的大小。也可以稍后调整 FRA 的大小,但如果它耗尽空间,可能会停止生成存档日志(如果采用 Archivelog 模式),此后数据库不再处理任何事务,除非空间问题得到解决。
创建 FRA 之后,下一步是启用数据库的 ARCHIVELOG 模式。这样您就可以执行联机备份和时间点恢复。可以在创建 FRA 的页面上启用 ARCHIVELOG Mode,如下所示:
设置 ARCHIVELOG 模式之后,Enterprise Manager 将提示您重新启动数据库,然后立即备份整个数据库。
数据库现在以 ARCHIVELOG 模式打开,您可以继续备份。
在 Database 主页中选择 Availability > Backup & Recovery > Backup Settings。将显示以下页面:
在 Device 选项卡的 Disk Settings 部分,Parallelism 选 1(默认值),Disk Backup Type 选 Compressed Backup Set。选择更大的并行度将增加到磁盘备份位置的并发 RMAN 流的数量;此特性需小心使用,因为它依赖于磁盘的处理能力。使用此类设置可提高备份速度,但这也依赖于磁盘子系统结构。
Disk Backup Type 的选项包括创建 Backup Set、Compressed Backup Set 或 Image Copy。选择 Compressed 选项可充分利用备份空间。此类备份压缩是在 Oracle 10g 中引入的,广受 DBA 欢迎。
除了备份集,还可以选择 Image Copy 作为备份类型。这将创建每个数据文件的精确副本。这对快速恢复也很有用,我们将在下面讨论。
保留 Disk Backup Location 为空,以便使用 FRA,前提是已经创建了 FRA。
使用 Test Disk Backup 按钮确保正确生成了磁盘备份。这要求填写此选项卡底部的 Host Credentials 部分。测试会将一些测试备份文件写到磁盘备份位置,并通知您是否成功。
类似地,如果您想在磁带上创建备份,则需填写 Tape Settings 部分。
在页面的其他部分,可以指定 Oracle Secure Backup (OSB) 域和参数。Oracle 集成的安全磁带备份管理系统 OSB 可取代可能无法与 Oracle RMAN 和 Oracle Enterprise Manager 紧密集成的第三方磁带备份解决方案。
OSB 不仅保护 Oracle 9i、10g、11g 和 12c 数据库,还保护整个环境,包括异构应用程序文件系统(OSB 10.2 及更高版本)。您可以在这里阅读有关 Oracle Secure Backup 的更多信息。
如果使用的是第三方供应商的介质管理器,您可以在 Media Management Settings 部分指定库参数。
现在转到 Backup Set 选项卡。
在此选项卡中,可以指定 Maximum Backup Piece (File) Size 以及 Compression Algorithm(选择 Basic、Low、Medium 或 High 压缩)。
Release 可以选择 Default,也可以选择特定版本(如 11.2.0.0.0)以保存该数据库版本的算法定义。
您还可以优化压缩的 CPU 使用率,尤其是通过避免预压缩块处理。
单击 Policy 选项卡。
在 Backup Policy 选项卡中,可以指定在每次数据库备份或数据库结构更改时自动备份数据库控制文件和服务器参数文件 (SPFILE)。
注:强烈建议指定此自动备份,因为这些是对数据库非常重要的文件。由于您使用 RMAN 的 nocatalog 模式,因此最重要的是确保控制文件的安全并确定它已备份,因为控制文件包含所有备份的历史记录。
如果未指定 Autobackup Disk Location,则默认为 FRA。
还可以跳过先前已经备份的未更改的只读或脱机数据文件,进一步优化数据库备份。这些数据文件无需重新备份。
也可以在此选项卡上启用 Block Change Tracking,为此指定一个文件名。此特性是在 Oracle 10g 中引入的,大大提高了增量备份速度,因为这个特殊文件(大小仅数十 MB)跟踪了所有数据库块更改。这种情况下,RMAN 进程执行增量备份时就无需扫描整个数据文件寻找发生更改的块。
9i 中执行增量备份期间就是进行这种全面扫描,因此导致该版本中增量备份要慢得多。10g 及后续版本中不再出现这种情况。块更改跟踪令增量备份的速度大大提高。
Policy 选项卡的下半部分显示 Retention Policy 和 Archived Redo Log Deletion Policy:
基于冗余度选择保留策略,而不是基于恢复窗口。选择 Retain at least the specified number of full backups for each datafile,输入 1 作为任意一次保留的备份数 — 这就是冗余度。(实际上,1 是默认设置。)
结果是生成新备份时将旧备份标记为过时 — 因为任何时候只保留一份备份。然后可以通过如下 RMAN 维护命令删除过时备份:
DELETE NOPROMPT OBSOLETE DEVICE TYPE DISK;
如果使用恢复窗口(“Retain backups that are necessary for a recovery to any time within the specified number of days”),则必须指定天数而不是备份数。这种情况下应保留备份,从而允许将数据库恢复到指定的天数。
假设在 RMAN Retention Policy 中指定 7 天的恢复窗口,这表示保留的数据库备份最多可以恢复到最近 7 天。不过,在磁盘上保留多个数据库备份会对空间有影响。必须考虑以下因素:
数据库管理员必须牢记上述所有因素,并且密切监视其后几周的可用数据库备份空间,如果需要可调整 Recovery Window,或将 Retention Policy 从 Recovery Window 改为 Redundancy。
“Archived Redo Log Deletion Policy”部分指定存档重做日志的删除策略,FRA 已满时可采取下面任何一种删除策略:
如果是 Oracle Data Guard 配置中的主数据库而不是备份数据库,页面上还显示另外一个选项 Delete archived redo log files,它有两个子选项:
还可以同时选择 Delete archived redo log files 和 Delete archived redo logs after they have been backed up the specified number of times。此选项删除已应用或传输到所有远程目标的存档重做日志,同时还在考虑是否已将指定数量的存档日志备份备份到第三方设备之后删除存档日志。
主数据库可用的选项讨论完了。至于备用数据库,主要有三个选项:
单击 OK 在数据库控制文件中保存备份设置(因为使用的不是 RMAN 目录数据库)。
为了确认更改后的设置,请在命令提示符处登录 RMAN。执行 show all 命令将显示 RMAN 配置:
在 Enterprise Manager Cloud Control 12c 的 Backup Settings 选项卡中所做修改已经保存为 RMAN 中的配置设置。这些设置存储在 PROD 数据库的控制文件中。
# default 注释显示未更改的配置设置;反之,无此注释的设置已被修改。Backup optimization 为 ON,controlfile autobackup 为 ON,parallelism 为 1,使用一个压缩备份集。这些就是前面各页中更改的全部设置。
我们现在开始计划数据库备份。
在 Enterprise Manager Cloud Control 12c 控制台中,从 PROD 数据库的主页中选择 Availability > Backup & Recovery > Schedule Backup。
在 Schedule Backup 屏幕的 Customized Backup 部分,选择 Whole Database,然后单击 Schedule Customized Backup。
在 Customized Backup 部分,还可以备份表空间、数据文件或者仅备份存档日志。此页上的最后一个选项是备份磁盘上的所有恢复文件 (All Recovery Files on Disk)。选择此选项可将数据库的 FRA 备份到磁带。
只有 Oracle Database 10g 或更高版本才能创建 FRA。此区域存储所有 RMAN 备份片段、映像副本和存档日志。备份 FRA 将创建备份的备份 — 这是 Oracle 建议的理想情况 — 保存到便宜的磁盘(即不是一级甚至二级磁盘),而不是磁带上。然后只要出现任何生产问题,DBA 就可以从基于可用磁盘的备份执行快速恢复,而无需等待找到磁带,再将磁带备份还原到磁盘。
然后可以将包含基于硬盘的数据库备份的 FRA 备份到磁带,每周一次,允许异地磁带备份和现场磁盘备份。这将是一个合适的 Oracle 备份策略。
下一步:Schedule Customized Backup:Options 页。
首先,选择 Full Backup 作为 Backup Type,然后选中 Use as the base of an incremental backup strategy。我们将在周日生成此类型的完整备份,每天生成数据库的增量备份。
选择 Online Backup 作为 Backup Mode,然后向下滚动到 Advanced 部分。
选择 Also back up all archived logs on disk 以及 Delete all archived logs from disk after they are successfully backed up。
选择这些选项将备份配置为在完整数据库备份中包括所有存档日志,并在备份后从磁盘删除存档日志。要删除标记为过时的备份(根据保留策略),请选择 Delete obsolete backups。
单击 Encryption 图标展开,显示适用于目标数据库版本的 Encryption 域。备份加密于 Oracle Database 10g 第 2 版中首次引入,适用于所有后续版本。
请注意,如果想使用 RMAN 在磁盘上创建加密备份,必须使用 Oracle 的 Advanced Security 选件。您必须确保获得使用此选件的许可,因为 Oracle Database 企业版 (EE) 许可并不自动意味着许可您使用 Advanced Security 选件。
另一选择是使用 Oracle Secure Backup (OSB) 在磁带上创建加密备份。同样,您也必须确保获得使用此产品的许可。OSB 必须单独安装。
如果决定选择 Use Recovery Manager Encryption,可以选择使用 Oracle 钱夹加密和使用口令加密。在下面的域中指定口令并确认。这将同时使用这两种方法对备份进行加密。而且,由于在需要还原 RMAN 备份时可以任选钱夹或口令,因此操作更灵活。默认情况下,选择 AES128 作为 Encryption Algorithm。本例中决定不使用加密。
转到下一页。
Disk Backup Location 显示为 FRA。本例中此项配置为 /app/oracle/flash_recovery_area。您可以根据公司标准为此位置命名。
转到下一页,即 Schedule 屏幕。在此设置希望执行备份的日期和时间。
有三个选项。可以安排备份运行一次,立即执行;运行一次,稍后执行;或按定义的日程重复执行。
第二个选项和第三个选项允许您指定希望运行备份的开始日期和时间,以及与指定时间关联的时区。Repeating 选项还让您可以选择频率类型(如天或周)和频率。例如,如果选择 days 作为频率类型,1 作为频率,备份将在指定的时间每天运行一次。
可按选择的频率类型和频率无限重复,也可以重复至指定的日期和时间。还显示当前时间作为建议的备份设置。我们建议用次日凌晨 3 点,以便在活动较少的时间开始备份。
由于我们需要每周执行一次完整数据库备份,所以选择 Weekly 作为 Frequency Type。在 Days of the Week 下,我们选择了 Sunday。
选中 Repeat until Indefinite 单选按钮,这意味着备份计划将无限继续,无终止日期或时间。
转到下一页。即 Scheduled Customized Backup:Review 屏幕。
Enterprise Manager Cloud Control 12c 根据前面各屏幕中确定的输入条件生成了将用于备份的 RMAN 脚本。
RMAN 命令执行一次完整的数据库和存档日志备份。备份后删除存档日志,之后执行维护命令删除过时的磁盘备份。这些操作源自前面在 Cloud Control 备份设置和备份计划向导页面中指定的内容。
要修改生成的脚本然后提交,请单击 Edit RMAN Script。一经修改,就无法返回向导的前面各页。然而,您可能希望更改 RMAN 脚本以包括其他维护命令,这些命令将交叉检查备份和存档日志,并删除过期的备份和存档日志。这些命令可以包括:
allocate channel for maintenance device type disk; crosscheck backup; delete noprompt expired backup; delete noprompt obsolete device type disk; crosscheck archivelog all; delete noprompt expired archivelog all; release channel;
单击 Submit Job。成功提交作业之后,可以选择 View Job 查看作业的状态和进度:
单击 Status 列中的 Succeeded 链接可查看输出详情。
RMAN 输出如下所示:
下面复制了此步骤的完整 RMAN 输出。
Output Log
Recovery Manager:Release 11.2.0.2.0 - Production on Mon Feb 11
03:17:35 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates.All rights
reserved.
RMAN>
connected to target database:PROD (DBID=nnnnnnnnnnn)
using target database control file instead of recovery catalog
RMAN>
echo set on
RMAN> set command id to 'BACKUP_PROD.ORACLE_021113031732';
executing command:SET COMMAND ID
RMAN> backup incremental level 0 cumulative device type disk tag
'BACKUP_PROD.ORACLE_021113031732' database;
Starting backup at 11-FEB-13
allocated channel:ORA_DISK_1
channel ORA_DISK_1:SID=28 device type=DISK
channel ORA_DISK_1:starting compressed incremental level 0 datafile
backup set
channel ORA_DISK_1:specifying datafile(s) in backup set
input datafile file number=00001 name=/app/oracle/product/oradata/prod/system01.dbf
input datafile file number=00002
name=/app/oracle/product/oradata/prod/sysaux01.dbf
input datafile file number=00005
name=/app/oracle/product/oradata/prod/example01.dbf
input datafile file number=00003
name=/app/oracle/product/oradata/prod/undotbs01.dbf
input datafile file number=00004
name=/app/oracle/product/oradata/prod/users01.dbf
input datafile file number=00006
name=/app/oracle/product/11.2.0/dbhome_1/dbs/demo_01.dbf
channel ORA_DISK_1:starting piece 1 at 11-FEB-13
channel ORA_DISK_1:finished piece 1 at 11-FEB-13
piece
handle=/app/oracle/flash_recovery_area/PROD/backupset/2013_02_11/
o1_mf_nnnd0_BACKUP_PROD_ORACLE_0_8kkfsjn2_.bkp
tag=BACKUP_PROD.ORACLE_021113031732 comment=NONE
channel ORA_DISK_1:backup set complete, elapsed time:00:01:05
Finished backup at 11-FEB-13
Starting Control File and SPFILE Autobackup at 11-FEB-13
piece
handle=/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807074321_8kkfvkvb_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 11-FEB-13
RMAN> backup device type disk tag
'BACKUP_PROD.ORACLE_021113031732' archivelog all not backed up
delete all input;
Starting backup at 11-FEB-13
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1:starting compressed archived log backup set
channel ORA_DISK_1:specifying archived log(s) in backup set
input archived log thread=1 sequence=187 RECID=1 STAMP=807074323
channel ORA_DISK_1:starting piece 1 at 11-FEB-13
channel ORA_DISK_1:finished piece 1 at 11-FEB-13
piece
handle=/app/oracle/flash_recovery_area/PROD/backupset/2013_02_11/
o1_mf_annnn_BACKUP_PROD_ORACLE_0_8kkfvmfh_.bkp
tag=BACKUP_PROD.ORACLE_021113031732 comment=NONE
channel ORA_DISK_1:backup set complete, elapsed time:00:00:01
channel ORA_DISK_1:deleting archived log(s)
archived log file
name=/app/oracle/flash_recovery_area/PROD/archivelog/2013_02_11/
o1_mf_1_187_8kkfvm0n_.arc RECID=1 STAMP=807074323
Finished backup at 11-FEB-13
Starting Control File and SPFILE Autobackup at 11-FEB-13
piece handle=/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807074324_8kkfvnot_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 11-FEB-13
RMAN> allocate channel for maintenance type disk;
released channel:ORA_DISK_1
allocated channel:ORA_MAINT_DISK_1
channel ORA_MAINT_DISK_1:SID=28 device type=DISK
RMAN> delete noprompt obsolete device type disk;
RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 1
Deleting the following obsolete backups and copies:
Type Key Completion Time Filename/Handle
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Backup Set 3 11-FEB-13
Backup Piece 3 11-FEB-13
/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807074321_8kkfvkvb_.bkp
deleted backup piece
backup piece handle=/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807074321_8kkfvkvb_.bkp RECID=3 STAMP=807074321
Deleted 1 objects
RMAN> release channel;
released channel:ORA_MAINT_DISK_1
RMAN> exit;
Recovery Manager complete.
研究 RMAN 输出,我们可以清楚地了解备份作业期间发生的整个事件序列。
首先,创建了数据库的压缩完整备份集。这是一个增量级为 0 的累积备份,可用作增量备份策略的基础。完成此数据库备份后,还创建了控制文件和 SPFILE 自动备份,因为我们先前确定希望在每次备份时自动备份这些文件。
然后创建压缩存档日志备份集来备份存档日志。备份成功后,因为包含了 delete input 子句,所以 RMAN 从磁盘位置删除存档日志。
但如果在数据库恢复过程中需要任何这些删除的存档日志怎么办?在这种恢复(无论是完整还是不完整)过程中,Oracle 使用存档日志应用所有更改,以便将数据库还原到任意时间点(这就是存档日志记录的主要用途)。因此恢复可能需要部分或全部存档日志。过去,DBA 必须从压缩的 Unix 磁带存档(或 tar)的存档手动还原存档日志,然后将还原的存档日志放入 Oracle 控制的恢复可以访问的目录中。DBA 需手动搜索所有必需的存档日志文件。RMAN 则无需手动搜索和还原存档日志,而是自动找到所需的存档日志备份集并提取恢复所需的存档日志。
这是使用 RMAN 作为 Oracle 首选数据库备份机制的另一巨大好处。备份完成时,我们看到 FRA 中的相应子目录中创建了数据库备份、存档日志备份、控制文件和 SPFILE 自动备份以及所有 RMAN 备份片段,如下所示:
/app/oracle/flash_recovery_area/PROD/backupset/2013_02_11
/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11
/app/oracle/flash_recovery_area/PROD/archivelog/2013_02_11
因为数据库使用 FRA,Oracle 将使用数据库名称 PROD 自动创建目录结构,并为 backupset、autobackup 和 archivelog 创建子目录。前两个子目录将用于备份和自动备份,archivelog 子目录用于存储数据库在存档日志模式下生成的正常存档日志。
此外,还针对生成备份的日期创建另一个子目录。每次生成备份时,如果到日期级别的目录结构不存在,就会创建这个子目录。我们在 RMAN 输出中可以看到,存档日志备份后又进行了一次控制文件和 SPFILE 自动备份。一经配置,这些自动备份将在任何 RMAN 数据库备份或存档日志备份完成后自动发生。
接下来是维护操作。备份文件和存档日志文件的名称已经由 RMAN 编录,作为控制文件记录条目存在。在通过包括的维护命令启动的 RMAN 维护活动(包括前面列出的其他命令)中,对这些条目进行交叉检查,验证他们确实位于磁盘上。
如果文件物理上并不存在,就将对应的条目标记为过期(即找不到)。类似地,由于此作业中的数据库备份、存档日志备份和自动备份都已经成功,所以检查先前的备份和自动备份文件的条目,看看根据保留策略是否仍需保留。
如果不再需要,就将它们标记为过时。之后,依次使用“delete noprompt expired...”和“delete noprompt obsolete...”命令删除控制文件记录中所有过期或过时的数据库备份、存档日志备份和控制文件备份条目,以及存档日志文件条目。对于过时记录,还要从磁盘删除实际的物理备份文件。维护命令显然对于空间管理非常重要。
要管理数据库的当前备份,请选择 Availability> Backup & Recovery > Manage Current Backups。将显示以下屏幕。
在此屏幕上,可以按以下状态搜索备份:All、Available、Expired、Unavailable 或 Other。
可以选择是查看 Datafile、Archived Redo Log、SPFILE 还是 Control File 备份,Completion Time 为一个月内、一周内、两天内、一天内、8 小时内,或者查看所有备份。
可以使用此页上的按钮执行 RMAN 维护命令,如 Crosscheck All、Delete All Obsolete 和 Delete All Expired。如果空间不足,这是快速、简便地执行 RMAN 维护的方式。
您还可以选择 Catalog Additional Files,如您可能已经生成的数据文件的操作系统副本、筛选器快照文件等。目录编制允许 RMAN 使用此类文件。
我们已经准备每周日生成数据库的完整备份。下一步是计划每天的增量备份。
从 PROD 数据库的主页中选择 Availability > Backup & Recovery > Schedule Backup。在 Schedule Backup 屏幕中,选择 Customized Backup 部分中的 Whole Database。然后单击 Schedule Customized Backup。
此时,我们选择 Incremental Backup。这将创建一个 1 级累积增量备份,每周日进行的是 0 级备份。
其他设置同前,只是此备份的计划不同,如以下屏幕截图所示:
将增量备份安排为每周除周日(此时执行完整备份)外每天都执行。所选时间同前(即 3am),即本例中假设数据库活动最少的时间。
生成 RMAN 脚本显示在 Review 屏幕上,如下所示:
RMAN 脚本发出备份增量级别 1“cumulative… database”命令。成功完成后,此作业的完整输出显示如下:
Output Log
Recovery Manager:Release 11.2.0.2.0 - Production on Mon Feb 11
04:11:52 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates.All rights
reserved.
RMAN>
connected to target database:PROD (DBID=nnnnnnnnn)
using target database control file instead of recovery catalog
RMAN>
echo set on
RMAN> set command id to 'INCREMENTAL_BACKUP_021113041150';
executing command:SET COMMAND ID
RMAN> backup incremental level 1 cumulative device type disk tag
'INCREMENTAL_BACKUP_021113041150' database;
Starting backup at 11-FEB-13
allocated channel:ORA_DISK_1
channel ORA_DISK_1:SID=28 device type=DISK
channel ORA_DISK_1:starting compressed incremental level 1 datafile
backup set
channel ORA_DISK_1:specifying datafile(s) in backup set
input datafile file number=00001
name=/app/oracle/product/oradata/prod/system01.dbf
input datafile file number=00002
name=/app/oracle/product/oradata/prod/sysaux01.dbf
input datafile file number=00005
name=/app/oracle/product/oradata/prod/example01.dbf
input datafile file number=00003
name=/app/oracle/product/oradata/prod/undotbs01.dbf
input datafile file number=00004
name=/app/oracle/product/oradata/prod/users01.dbf
input datafile file number=00006
name=/app/oracle/product/11.2.0/dbhome_1/dbs/demo_01.dbf
channel ORA_DISK_1:starting piece 1 at 11-FEB-13
channel ORA_DISK_1:finished piece 1 at 11-FEB-13
piece
handle=/app/oracle/flash_recovery_area/PROD/backupset/2013_02_11/
o1_mf_nnnd1_INCREMENTAL_BACKUP_0_8kkjz9kf_.bkp
tag=INCREMENTAL_BACKUP_021113041150 comment=NONE
channel ORA_DISK_1:backup set complete, elapsed time:00:00:01
Finished backup at 11-FEB-13
Starting Control File and SPFILE Autobackup at 11-FEB-13
piece
handle=/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807077514_8kkjzbpg_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 11-FEB-13
RMAN> backup device type disk tag
'INCREMENTAL_BACKUP_021113041150' archivelog all not backed up
delete all input;
Starting backup at 11-FEB-13
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1:starting compressed archived log backup set
channel ORA_DISK_1:specifying archived log(s) in backup set
input archived log thread=1 sequence=188 RECID=2 STAMP=807077515
channel ORA_DISK_1:starting piece 1 at 11-FEB-13
channel ORA_DISK_1:finished piece 1 at 11-FEB-13
piece
handle=/app/oracle/flash_recovery_area/PROD/backupset/2013_02_11/
o1_mf_annnn_INCREMENTAL_BACKUP_0_8kkjzd2b_.bkp
tag=INCREMENTAL_BACKUP_021113041150 comment=NONE
channel ORA_DISK_1:backup set complete, elapsed time:00:00:01
channel ORA_DISK_1:deleting archived log(s)
archived log file
name=/app/oracle/flash_recovery_area/PROD/archivelog/2013_02_11/
o1_mf_1_188_8kkjzcwg_.arc RECID=2 STAMP=807077515
Finished backup at 11-FEB-13
Starting Control File and SPFILE Autobackup at 11-FEB-13
piece
handle=/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807077517_8kkjzf99_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 11-FEB-13
RMAN> allocate channel for maintenance type disk;
released channel:ORA_DISK_1
allocated channel:ORA_MAINT_DISK_1
channel ORA_MAINT_DISK_1:SID=28 device type=DISK
RMAN> delete noprompt obsolete device type disk;
RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 1
Deleting the following obsolete backups and copies:
Type Key Completion Time Filename/Handle
– – – – – – – – – – – – – – – – – – – – – – – – –
Backup Set 5 11-FEB-13
Backup Piece 5 11-FEB-13
/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807074324_8kkfvnot_.bkp
Backup Set 7 11-FEB-13
Backup Piece 7 11-FEB-13
/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807077514_8kkjzbpg_.bkp
deleted backup piece
backup piece
handle=/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807074324_8kkfvnot_.bkp RECID=5 STAMP=807074324
deleted backup piece
backup piece
handle=/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807077514_8kkjzbpg_.bkp RECID=7 STAMP=807077514
Deleted 2 objects
RMAN> release channel;
released channel:ORA_MAINT_DISK_1
RMAN> exit;
Recovery Manager complete.
我们可以看到,数据库增量备份之后是自动备份控制文件和 SPFILE,接着是存档日志备份和另一个自动备份。
在靠近输出末尾的位置,可以看到有些过时自动备份已被所含维护命令删除。
选择 Availability>Backup & Recovery> Manage Current Backups。增量备份现在出现在列表中。
在 Schedule Backup 屏幕上,您还可以创建 Oracle 建议的备份,如下所示:
如果选择此选项,将生成一个 RMAN 脚本按照此策略执行备份,如下所示:
使用这个自动生成的脚本,RMAN 将对第一个备份执行完整数据库复制,创建数据文件副本而不是 RMAN 备份片段。因此,每天将执行一次增量累积备份,将所有改动更新到数据文件副本。
这意味着数据文件副本备份始终与生产数据库同步。这样做的好处是,万一发生紧急情况,可以轻松切换到此备份,将其用作生产数据库,无需还原备份或恢复数据库。
这种切换到备份并将其用作生产数据库的概念极大缩短了恢复时间,它是 Oracle Database 10g 中引入的 Oracle Recovery Manager (RMAN) 众多高级特性之一。
对于中小型数据库,可以每晚执行完整数据库备份,没人会抱怨备份所需的少量磁盘空间或者问为何要在非常短的时间间隔内执行备份。但是比如说,当数据库大小超过 200 GB 时,就该重新考虑备份策略了。
大多数实际数据库场景下,即便对小型数据库而言,制定一个正确的、经过验证的备份策略也非常重要。定期测试所有数据库的 RMAN 备份是 DBA 必须履行的一项职责。
考虑一个更大的数据库,有约 500 GB 的数据库文件。显然,不适合每天进行完整数据库备份。您可以采用更好的备份策略,每周日进行一次完整数据库备份,然后周一到周六执行增量数据库备份。
这种计划可以将数据库恢复到上一周的任意时间,您只需先还原周日的完整数据库备份,然后应用相应的增量备份。
Oracle Database(10g 及更高版本)在 RMAN 中提供了一个非常有用的工具,许多 DBA 都不知道。您可以每隔一段时间生成数据库所有数据文件的一个映像副本,然后每天进行增量备份,这实际上是用所有增量更改刷新数据库的映像副本。数据文件副本每天在运行增量备份时得到更新,所以变得与生产数据库中一样。
这对大型数据库非常有用,因为它们在闪回恢复区总是有最新刷新的数据文件副本,可在紧急情况下进行故障切换。这种情况下,数据文件副本实际上变成了生产数据库。从技术角度来说,无需从备份还原文件即可恢复数据库,加速和简化了整个恢复过程。如果使用类似这种基于增量更新备份的备份策略,有助于最大限度缩短数据库的介质恢复时间。
如果每天刷新数据文件副本,恢复时应用的重做(存档或联机)永远不会超过一天。如果使用 Oracle Enterprise Manager 计划 RMAN 备份,此工具是可见的且易于理解。
诸如此类新特性在数据库的每个版本都有增强,显示在 Enterprise Manager 中并进行了清晰的解释,因此在 DBA 培训中起到重要作用。现在您可以像以前一样生成 1 级增量备份,但同时加上这种映像副本刷新,即可保持映像副本与生产数据库同步。
使用 Enterprise Manager Cloud Control 12c,DBA 现在首次可以一次性生成和计划整组数据库的 RMAN 备份。从 10.2 版起,对任何数据库都可以这么做。Enterprise Manager 中认证为目标的那些较早版本的数据库(如 9.2.0.8)不能使用组备份特性;但还是可以通过它们在 Enterprise Manager 中的主页单独生成备份。
这可能会进一步减轻管理负担,朝着正确方向迈出了一步,因为您无需通过 Enterprise Manager 中每个数据库目标的菜单生成和计划备份。
首先要创建一个数据库组。从 Enterprise Manager 主菜单中选择 Targets > Groups。将显示以下屏幕:
现在还没有组。在页面上选择 Create > Group。
现在可以在显示的屏幕上创建一个组。
我们将该组命名为 Sai Database Group,并添加了三个数据库目标作为组成员。
创建组之后,选择 Targets > Groups 并在显示的列表中单击该组名即可打开 Group 主页。
在 Group 主页上,有一个名为 Backup Configurations 的新菜单选项。这是 Enterprise Manager Cloud Control 12c 及更高版本的一个特性。
选择此选项后,将显示以下屏幕。
如屏幕中所述,备份配置包含备份一组数据库所需的设置。如果使用 Oracle Secure Backup,它还可以包含文件备份设置。
单击 Create 启动一个新的备份配置。
我们已将新的备份配置命名为 Sai Backup Configuration。显示了三个选项卡:Storage、Policy 和 Recovery Catalog。
在 Storage 选项卡中,指定 Database Backup Disk Settings,如 Parallelism 度、Backup Location 和 Disk Backup Type,以及是正常的 backup set、compressed backup set 还是 image copy。我们选择的是 Parallelism 3 和 compressed backup set。
您还可以在此选项卡中指定数据库备份的 Tape Settings。
转到 Policy 选项卡。
在 Policy 选项卡上,您可以指定是否希望覆盖数据库级别设置的 RMAN Retention 策略。在本例中,我们选择否。
您可以设置 Maximum Backup Piece Size(单位为 MB),也可以指定是否要覆盖在数据库级别设置的 Backup Optimization 和/或表空间排除。
还可以为所有要备份的数据库设置 Compression Algorithm。
屏幕的下半部分显示可为所有备份设置的 Encryption 选项。
我们决定不加密备份。
转到 Recovery Catalog 选项卡。
在此选项卡中,可以指定用于所有备份的公共恢复目录。在本例中,我们使用 Control File 记录每个数据库的备份。
单击 Save 创建备份配置。
从 Database Group 菜单中选择 Schedule Backup。
这将允许您计划整个组的数据库备份。将显示以下屏幕。
计划组备份时,可以决定是备份组中的所有数据库还是仅备份选定的数据库。
从 10.2 起,任何数据库版本均可以生成此类组备份。
请注意,可以在此类组操作中包括不同版本和平台的数据库。
单击 Next。
在此步骤中,您需要设置用于此组备份操作中所有数据库的数据库和主机凭证。
单击 Next 继续。
在此步骤中,可以指定数据库备份类型是 Full 还是 Incremental,模式是 Online 还是 Offline,以及与设置单个数据库备份时类似的其他选项。
单击 Next。
在 Settings 步骤中,指定使用 Disk 还是 Tape 进行备份,并选择先前创建的备份配置。
这些设置将应用于备份中的所有数据库。
单击 Next。
在 Schedule 步骤中,我们指定这个完整备份将于每周日 3am 执行。
单击 Next。
图 37:检查组备份
现在显示 Review 屏幕。单击 Submit 计划这组备份。作业提交并成功完成,如下所示:
我们可以看到,组备份实际上是一个复杂的部署过程,并行遍历所提供的数据库和 Oracle 主目录列表。
我们还可以看到,它备份了三个数据库,并且为所有数据库备份了存档日志。
可以选择其中任何步骤查看步骤详情,如屏幕截图中所示。下面复制了 PROD 数据库的组备份的输出详情:
Step:Prebackup (Succeeded)
Checking RMAN repository settings...
Step:Backup (Succeeded)
Recovery Manager:Release 11.2.0.2.0 - Production on Mon Feb 11 08:31:40 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates.All rights reserved.
RMAN>
connected to target database:PROD (DBID=nnnnnnnnnnn)
using target database control file instead of recovery catalog
RMAN>
echo set on
RMAN> set command id to 'SBDP_JOB_BACKUP_DA_021113083133';
executing command:SET COMMAND ID
RMAN> SET COMPRESSION ALGORITHM 'BASIC' OPTIMIZE FOR LOAD TRUE;
Executing command:SET compression
RMAN> run {
2> allocate channel oem_backup_disk1 type disk format '%U';
3> allocate channel oem_backup_disk2 type disk format '%U';
4> allocate channel oem_backup_disk3 type disk format '%U';
5> backup incremental level 0 cumulative force as COMPRESSED
BACKUPSET tag 'SBDP_JOB_BACKUP_DA_021113083133' database;
> backup as COMPRESSED BACKUPSET tag
'SBDP_JOB_BACKUP_DA_021113083133' archivelog all not backed up
delete all input;
7> release channel oem_backup_disk1;
8> release channel oem_backup_disk2;
9> release channel oem_backup_disk3;
10> }
allocated channel:oem_backup_disk1
channel oem_backup_disk1:SID=259 device type=DISK
allocated channel:oem_backup_disk2
channel oem_backup_disk2:SID=29 device type=DISK
allocated channel:oem_backup_disk3
channel oem_backup_disk3:SID=263 device type=DISK
Starting backup at 11-FEB-13
channel oem_backup_disk1:starting compressed incremental level 0
datafile backup set
channel oem_backup_disk1:specifying datafile(s) in backup set
input datafile file number=00001
name=/app/oracle/product/oradata/prod/system01.dbf
input datafile file number=00006
name=/app/oracle/product/11.2.0/dbhome_1/dbs/demo_01.dbf
channel oem_backup_disk1:starting piece 1 at 11-FEB-13
channel oem_backup_disk2:starting compressed incremental level 0
datafile backup set
channel oem_backup_disk2:specifying datafile(s) in backup set
input datafile file number=00002
name=/app/oracle/product/oradata/prod/sysaux01.dbf
input datafile file number=00004
name=/app/oracle/product/oradata/prod/users01.dbf
channel oem_backup_disk2:starting piece 1 at 11-FEB-13
channel oem_backup_disk3:starting compressed incremental level 0
datafile backup set
channel oem_backup_disk3:specifying datafile(s) in backup set
input datafile file number=00005
name=/app/oracle/product/oradata/prod/example01.dbf
input datafile file number=00003
name=/app/oracle/product/oradata/prod/undotbs01.dbf
channel oem_backup_disk3:starting piece 1 at 11-FEB-13
channel oem_backup_disk3:finished piece 1 at 11-FEB-13
piece
handle=/app/oracle/product/11.2.0/dbhome_1/dbs/0co1mgre_1_1
tag=SBDP_JOB_BACKUP_DA_021113083133 comment=NONE
channel oem_backup_disk3:backup set complete, elapsed time:
00:00:16
channel oem_backup_disk2:finished piece 1 at 11-FEB-13
piece
handle=/app/oracle/product/11.2.0/dbhome_1/dbs/0bo1mgre_1_1
tag=SBDP_JOB_BACKUP_DA_021113083133 comment=NONE
channel oem_backup_disk2:backup set complete, elapsed time:
00:00:36
channel oem_backup_disk1:finished piece 1 at 11-FEB-13
piece
handle=/app/oracle/product/11.2.0/dbhome_1/dbs/0ao1mgre_1_1
tag=SBDP_JOB_BACKUP_DA_021113083133 comment=NONE
channel oem_backup_disk1:backup set complete, elapsed time:
00:00:46
Finished backup at 11-FEB-13
Starting backup at 11-FEB-13
current log archived
channel oem_backup_disk1:starting compressed archived log backup
set
channel oem_backup_disk1:specifying archived log(s) in backup set
input archived log thread=1 sequence=189 RECID=3
STAMP=807093148
channel oem_backup_disk1:starting piece 1 at 11-FEB-13
channel oem_backup_disk1:finished piece 1 at 11-FEB-13
piece
handle=/app/oracle/product/11.2.0/dbhome_1/dbs/0do1mgst_1_1
tag=SBDP_JOB_BACKUP_DA_021113083133 comment=NONE
channel oem_backup_disk1:backup set complete, elapsed time:
00:00:01
channel oem_backup_disk1:deleting archived log(s)
archived log file
name=/app/oracle/flash_recovery_area/PROD/archivelog/2013_02_11/
o1_mf_1_189_8kl07wsw_.arc RECID=3 STAMP=807093148
Finished backup at 11-FEB-13
Starting Control File and SPFILE Autobackup at 11-FEB-13
piece
handle=/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807093150_8kl07ybh_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 11-FEB-13
released channel:oem_backup_disk1
released channel:oem_backup_disk2
released channel:oem_backup_disk3
RMAN> run {
2> allocate channel oem_backup_disk1 type disk format '%U'
maxpiecesize 1000 G;
3> allocate channel oem_backup_disk2 type disk format '%U'
maxpiecesize 1000 G;
4> allocate channel oem_backup_disk3 type disk format '%U'
maxpiecesize 1000 G;
5> backup force as COMPRESSED BACKUPSET tag
'SBDP_JOB_BACKUP_DA_021113083133' current controlfile;
6> release channel oem_backup_disk1;
7> release channel oem_backup_disk2;
8> release channel oem_backup_disk3;
9> }
allocated channel:oem_backup_disk1
channel oem_backup_disk1:SID=259 device type=DISK
allocated channel:oem_backup_disk2
channel oem_backup_disk2:SID=29 device type=DISK
allocated channel:oem_backup_disk3
channel oem_backup_disk3:SID=263 device type=DISK
Starting backup at 11-FEB-13
channel oem_backup_disk1:starting compressed full datafile backup
set
channel oem_backup_disk1:specifying datafile(s) in backup set
including current control file in backup set
channel oem_backup_disk1:starting piece 1 at 11-FEB-13
channel oem_backup_disk1:finished piece 1 at 11-FEB-13
piece
handle=/app/oracle/product/11.2.0/dbhome_1/dbs/0fo1mgsv_1_1
tag=SBDP_JOB_BACKUP_DA_021113083133 comment=NONE
channel oem_backup_disk1:backup set complete, elapsed time:
00:00:01
Finished backup at 11-FEB-13
Starting Control File and SPFILE Autobackup at 11-FEB-13
piece
handle=/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807093153_8kl081xm_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 11-FEB-13
released channel:oem_backup_disk1
released channel:oem_backup_disk2
released channel:oem_backup_disk3
RMAN> allocate channel for maintenance type disk; allocated channel:ORA_MAINT_DISK_1
channel ORA_MAINT_DISK_1:SID=259 device type=DISK
RMAN> delete noprompt obsolete device type disk;
RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 1
Deleting the following obsolete backups and copies:
Type Key Completion Time Filename/Handle
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Backup Set 2 11-FEB-13
Backup Piece 2 11-FEB-13
/app/oracle/flash_recovery_area/PROD/backupset/2013_02_11/
o1_mf_nnnd0_BACKUP_PROD_ORACLE_0_8kkfsjn2_.bkp
Backup Set 4 11-FEB-13
Backup Piece 4 11-FEB-13
/app/oracle/flash_recovery_area/PROD/backupset/2013_02_11/
o1_mf_annnn_BACKUP_PROD_ORACLE_0_8kkfvmfh_.bkp
Backup Set 6 11-FEB-13
Backup Piece 6 11-FEB-13
/app/oracle/flash_recovery_area/PROD/backupset/2013_02_11/
o1_mf_nnnd1_INCREMENTAL_BACKUP_0_8kkjz9kf_.bkp
Backup Set 8 11-FEB-13
Backup Piece 8 11-FEB-13
/app/oracle/flash_recovery_area/PROD/backupset/2013_02_11/
o1_mf_annnn_INCREMENTAL_BACKUP_0_8kkjzd2b_.bkp
Backup Set 9 11-FEB-13
Backup Piece 9 11-FEB-13
/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807077517_8kkjzf99_.bkp
Backup Set 14 11-FEB-13
Backup Piece 14 11-FEB-13
/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807093150_8kl07ybh_.bkp
Backup Set 15 11-FEB-13
Backup Piece 15 11-FEB-13
/app/oracle/product/11.2.0/dbhome_1/dbs/0fo1mgsv_1_1
deleted backup piece
backup piece
handle=/app/oracle/flash_recovery_area/PROD/backupset/2013_02_11/
o1_mf_nnnd0_BACKUP_PROD_ORACLE_0_8kkfsjn2_.bkp RECID=2
STAMP=807074256
deleted backup piece
backup piece
handle=/app/oracle/flash_recovery_area/PROD/backupset/2013_02_11/
o1_mf_annnn_BACKUP_PROD_ORACLE_0_8kkfvmfh_.bkp RECID=4
STAMP=807074323
deleted backup piece
backup piece
handle=/app/oracle/flash_recovery_area/PROD/backupset/2013_02_11/
o1_mf_nnnd1_INCREMENTAL_BACKUP_0_8kkjz9kf_.bkp RECID=6
STAMP=807077513
deleted backup piece
backup piece
handle=/app/oracle/flash_recovery_area/PROD/backupset/2013_02_11/
o1_mf_annnn_INCREMENTAL_BACKUP_0_8kkjzd2b_.bkp RECID=8
STAMP=807077516
deleted backup piece
backup piece
handle=/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807077517_8kkjzf99_.bkp RECID=9
STAMP=807077517
deleted backup piece
backup piece
handle=/app/oracle/flash_recovery_area/PROD/autobackup/2013_02_11/
o1_mf_s_807093150_8kl07ybh_.bkp RECID=14
STAMP=807093150
deleted backup piece
backup piece
handle=/app/oracle/product/11.2.0/dbhome_1/dbs/0fo1mgsv_1_1 RECID=15
STAMP=807093152
Deleted 7 objects
RMAN> release channel;
released channel:ORA_MAINT_DISK_1
RMAN> exit;
Recovery Manager complete.
Step:Post Backup (Succeeded)
从 Enterprise Manager 菜单选择 Enterprise > Provisioning 和 Patching > Procedure Activity 可以查看已完成的组备份作业。
组备份现在显示在 Manage Current Backups 屏幕中。
这个新的组备份特性可以帮助 DBA 在组级别为大量数据库设置 RMAN 备份,无需在 Enterprise Manager 中打开每个数据库主页在数据库级别设置和计划 RMAN 备份。如果使用得当,可以节省大量时间,特别是在云自助用户创建的自助数据库的情况下。
如果使用了 Oracle Secure Backup,组备份特性还允许备份 Oracle 主目录和其他文件系统。
Oracle Database 12c 新特性
全新的 Oracle Database 12c(2013 年 6 月发布)提出了容器数据库 (CDB) 和可拔插数据库 (PDB) 的新概念。如果使用 Enterprise Manager 备份 12c 数据库,可以在计划 Customized Backup 时,选择要在 RMAN 备份中备份 Whole Database、Container Database Root 还是 Pluggable Databases。
这是在 Schedule Backup 页面(通过 Enterprise Manager 中的 Database target 菜单中的 Availability > Backup and Recovery > Schedule Backup)上,如以下屏幕截图所示:
在下一页中,我们需要选择要备份的 PDB。
我们只选择将三个 PDB 中的两个包括在此 Customized Backup 中,如以下屏幕截图所示:
在下一页中,我们可以决定对选定 PDB 执行完整备份还是增量备份。
生成的 RMAN 脚本显示 PDB 备份命令。这演示了 Oracle Database 12c 中 RMAN 现在对 CDB 和 PDB 概念的理解。
我们已经看到 RMAN 无法备份单个模式,一直以来难以在单个模式级别执行时间点恢复 (PITR),因为模式可以轻松分发到多个表空间。使用容器数据库中的 PDB 的好处是您可以轻松地在容器数据库级别生成 RMAN 备份,但在 PDB 级别执行 PITR。这是 Oracle Database 12c 多承租方架构一个明显的技术优势。
Oracle 数据库向来需要一个可靠的数据库策略。因此能够使用 RMAN 的所有现代技术轻松生成和计划数据库备份(如通过 Enterprise Manager 完成)具有极其重要的意义。
Enterprise Manager 允许集中控制数据库备份。可以为大型企业的所有数据库生成和计划 RMAN 备份,使用一致的备份策略,并可随时参考所有以前的 RMAN 输出日志,因为这些日志就存储在 Enterprise Manager Cloud Control 信息库中。无需使用中央 RMAN 目录,因为有关备份的信息均可从 Enterprise Manager 集中获得。通过 Enterprise Manager Cloud Control 12c 中新增的组备份特性,可以更快地为 Enterprise Manager 组中包括的所有数据库(即使多达数千个)生成 RMAN 备份。
Porus Homi Havewala 是 Oracle 新加坡企业技术项目办公室的高级经理,同时也是 Oracle Enterprise Manager 技术的东盟区域中小企业和业务发展带头人。作为 Oracle 10g 和 Oracle 11g 的 Oracle 双认证大师 (OCM),Porus 拥有超过 25 年的 IT 从业经验,包括超过 18 年的 Oracle 技术使用经验。他著有两本书:《Oracle Enterprise Manager Cloud Control 12c:Managing Data Center Chaos》(2012 年,Packt Publishing 出版)和《Oracle Enterprise Manager Grid Control:Advanced OEM Techniques for the Real World》(2010 年,Rampant TechPress 出版),他还是博文 Oracle Enterprise Manager Cloud Control 12c 的作者。