用PXE方法从裸机批量推Oracle11gR2 RAC成套环境,并用Shell脚本在推出的RAC节点上批量部署32个Oracle11gR2 RAC备份恢复案例场景的方法
中国科学院ARP项目实施顾问,上海Oracle用户组成员唐波
摘要
本文前半段介绍:用PXE推送端主机,把原先处于裸机状态的三台一套PXE被推送端主机批量推成Oracle 11gR2 RAC环境的方法。在每套推出的Oracle 11gR2RAC环境中,都包含已自动安装并配置好的三台主机:一台共享磁盘主机和两台节点主机。每套推出的Oracle 11gR2 RAC环境中的两台节点主机都已自动挂接上该套环境内部的共享磁盘主机。两台节点主机各配备一个分布式虚拟磁带库,并且做好所有操作系统层面的配置:包括vip、scan-vip、ntp,各种rpm包和操作系统参数等。
本文后半段介绍:如何复用以上的PXE推送端主机作为部署平台,在每套推出的Oracle11gR2 RAC环境中部署32个Oracle11gR2 RAC备份恢复案例场景脚本。脚本基于网络执行并批量部署;脚本同时支持下载到每一台Oracle11gR2RAC节点主机本地运行。脚本能模拟和评测每一套环境每一个备份恢复场景的恢复结果。
本文中所提及的所有原创程序均提供下载和md5sum文件。读者使用这些程序不应出于商业目的,作者对使用这些程序可能带来的一切后果不承担任何法律责任。
目录
1.PXE概览
1.1PXE概览
1.2IP地址规划
2.PXE推送端主机的搭建
2.1 PXE推送端主机的搭建
2.2下载将要用于推送的安装软件
2.3 从PXE被推送端主机收集MAC地址
3.PXE被推送端主机:Oracle11gR2 RAC环境共享磁盘主机
4.PXE被推送端主机:Oracle11gR2 RAC环境节点主机
4.1共享存储
4.2分布式虚拟磁带库
4.3时间同步
4.4grid用户和 oracle用户
4.5ssh等价性脚本
4.6其他
4.7安装
5.用Shell脚本在推出的节点上批量部署32个Oracle11gR2RAC备份恢复案例场景
5.1备份恢复案例场景模拟脚本工作原理
5.2在PXE推送端主机上安装备份恢复案例场景模拟脚本
5.3在Oracle 11gR2 RAC环境节点主机部署备份恢复案例场景模拟脚本
5.3.1在PXE推送端主机上准备IP地址列表
5.3.2在PXE推送端主机上初始化实验脚本
6. Oracle11gR2 RAC环境“dd”和“rever”,在后续特定实验前通过“rever”初始化环境
7.Oracle11gR2 RAC备份恢复案例一:完全恢复类场景批量模拟以及恢复要点
7.1 1a_users表空间在线损坏
7.21b_下线user表空间损坏
7.3 1c_只读user表空间损坏
7.4 1d_users表空间热备
7.5 3_system表空间离线损坏
7.6 4_tbsocp05_test没有备份的表空间损坏
8. Oracle11gR2 RAC备份恢复案例二:不完全恢复类场景批量模拟以及恢复要点
8.1 5_基于时间的不完全恢复
8.2 6a_基于log序列号的不完全恢复
8.3 6b_基于cancel的不完全恢复
8.4 7a_当前控制文件和数据文件完好_日志文件全部损坏_正常关机不完全恢复_数据不丢_不需备份
8.5 7b_当前控制文件和数据文件完好_日志文件全部损坏_不正常关机不完全恢复
8.6 8a_当前控制文件损坏_不完全恢复_用控制文件二进制备份_数据不丢_不需备份
8.7 8b_当前控制文件损坏_完全恢复_用控制文件脚本_不需备份
8.8 9a_当前控制文件损坏_下线user表空间不完全恢复_用控制文件二进制备份_数据不丢_不需备份
8.9 9b_当前控制文件损坏_下线user表空间完全恢复_用控制文件脚本_不需备份
8.10 9c_当前控制文件损坏_只读user表空间不完全恢复_用控制文件二进制备份_数据不丢_不需备份
8.11 9d_当前控制文件损坏_只读user表空间完全恢复_用控制文件脚本_不需备份
8.1210a_当前控制文件损坏_备份时下线user表空间不完全恢复_用控制文件二进制备份_数据不丢_不需备份
8.13 10b_当前控制文件损坏_备份时下线user表空间完全恢复_用控制文件脚本_不需备份
8.14 10c_当前控制文件损坏_备份时只读user表空间不完全恢复_用控制文件二进制备份_数据不丢_不需备份
8.15 10d_当前控制文件损坏_备份时只读user表空间完全恢复_用控制文件脚本_不需备份
9. Oracle11gR2 RAC备份恢复案例三:进阶不完全恢复类场景批量模拟以及恢复要点
9.1 11a_当前控制文件和日志文件全部损坏_不完全恢复_用控制文件二进制备份
9.2 11b_当前控制文件和日志文件全部损坏_不完全恢复_用控制文件脚本
9.3 12a_当前控制文件和日志文件全部损坏_备份时下线user表空间不完全恢复_用控制文件二进制备份
9.4 12b_当前控制文件和日志文件全部损坏_备份时下线user表空间不完全恢复_用控制文件脚本
9.5 12c_当前控制文件和日志文件全部损坏_备份时只读user表空间不完全恢复_用控制文件二进制备份
9.6 12d_当前控制文件和日志文件全部损坏_备份时只读user表空间不完全恢复_用控制文件脚本
9.7 13a_当前控制文件损坏_新建tbsocp05_test2表空间不完全恢复_用控制文件二进制备份_数据不丢_不需备份
9.8 13b_当前控制文件损坏_新建tbsocp05_test3表空间完全恢复_用控制文件脚本_不需备份
9.9 14_删除表空间不完全恢复
9.10 15_穿越incarnation不完全恢复
总结
正文
1.PXE概览
1.1 PXE概览
PXE(Pre-bootExecution Environment)是由Intel设计的协议,它可以使裸机通过网络启动,并被安装上操作系统。协议分为推送端和被推送端两端。
PXE推送端主机是一台协同运行着dhcpd、tftpd、nfs、dns、vsftpd和httpd的标准Linux服务器。
PXE 被推送端程序从网卡的ROM中激活。当计算机引导时,BIOS把PXE被推送端程序调入内存执行,并显示出命令菜单。经用户选择后,PXE 被推送端将放置在PXE 推送端主机的操作系统通过网络下载到本地运行,继而实现kernel启动。启动后PXE被推送端实际上是主动从PXE推送端主机下载安装程序和安装选项文件,完成后续安装步骤。
1.2IP地址规划
为了能够把下文叙述清楚,我们设定在192.168.0.0/24网段工作。操作系统分别使用6系RHEL和5系OEL。如果使用其他6系EnterpriseLinux和5系Enterprise Linux(如:CentOS,RHEL或OEL,包括它们的32位或64位发行版)步骤大同小异,本文同样适用。
主机 |
操作系统 |
外网IP |
内网IP |
主机名 |
PXE推送端主机 |
RedHat Enterprise Linux 6.1 x86_64(或其他6系Enterprise Linux和5系Enterprise Linux) |
192.168.0.254 |
无 |
server1.example.com |
PXE被推送端主机之Oracle 11gR2 RAC环境共享磁盘主机 |
RedHat Enterprise Linux 6.1(或其他6系Enterprise Linux) |
192.168.0.50+x (x取值范围1到39) |
172.31.118.50+x (x取值范围1到39) |
station50+x.example.com (x取值范围1到39) |
PXE被推送端主机之Oracle 11gR2 RAC环境节点主机(第一台) |
Oracle Enterprise Linux 5.4(或其他5系Enterprise Linux) |
IP:192.168.0.x VIP:192.168.0.200+x SCAN-VIP1:192.168.0.100+x SCAN-VIP2: 192.168.0.150+x (x取值范围1到39) |
172.31.118.x (x取值范围1到39) |
stationx.example.com (x取值范围1到39) |
PXE被推送端主机之Oracle 11gR2 RAC环境节点主机(第二台) |
同上 |
IP:192.168.0.1+x VIP:192.168.0.201+x SCAN-VIP3:192.168.0.101+x (x取值范围1到39) |
172.31.118.1+x (x取值范围1到39) |
station1+x.example.com (x取值范围1到39) |
推送时以上IP规划通过PXE推送端主机上的dhcpd配置文件里的MAC固定配置来实现。以上VIP规划通过PXE推送端主机上的Kickstart配置文件中“%post节”编程来实现。而以上三个SCAN-VIP规划则通过PXE推送端主机的dns服务器配置文件配合PXE推送端主机上的Kickstart配置文件中“%post节”编程来实现。
2.PXE推送端主机的搭建
2.1 PXE推送端主机的搭建
如上所述PXE推送端主机是一台协同运行着dhcpd、tftpd、nfs、dns、vsftpd和httpd的标准Linux服务器。由于本文立足于Oracle技术分享,所以并不打算详细介绍这些服务器的具体配置。 为了方便读者搭建PXE推送端主机,作者编写了一个一步到位的搭建程序“bcp-install”。
“bcp-install”的功能只有一个:帮助你在3分钟之内配置好:一台协同运行着dhcpd、tftpd、nfs、dns、vsftpd和httpd的标准Linux服务器。此程序实际上是一个shell编程的自解压安装包,因此不论操作系统是32位和64位;也不论是在6系Enterprise Linux还是在5系EnterpriseLinux上都能运行。
运行该搭建程序前,仅仅要求读者自行安装好一台EnterpriseLinux 主机。 这台主机只需要配备一块网卡,其IP和主机名应根据1.2 IP地址规划里说明的设置好。安装这台主机过程中除了保证“/usr”空间不小于20G、“/var”空间不小于15G(如果不分区安装,只要保证“/”不小于45G)和挑包时装上ftp服务器以外没有特殊要求。为了使脚本“bcp-install”能顺利运行成功,需要把安装这台主机操作系统时所用到的整张光盘包含的所有内容,保持完整目录结构直接拷贝至/var/ftp/pub/下。之后运行“bcp-install”:
[root@server1 ~]# ./bcp-install …... |
确认把安装这台主机操作系统时所用到的整张光盘包含的所有内容,保持完整目录结构直接拷贝至“/var/ftp/pub/”下,选y继续。
至此PXE推送端主机的搭建便完成了。如果需要了解“bcp-install”具体做了哪些配置,请打开此机上的dhcpd、tftpd、nfs、dns、vsftpd和httpd的相应配置文件,辅以Linux相关的知识阅读即可。
2.2 下载将要用于推送的安装软件
推送所需的操作系统 iso镜像和Oracle安装软件是不包含在“bcp-install”中的,需要读者自行下载并放置在如下目录(“/usr/sbin/botang-config-push.d/”目录已由“bcp-install”创建):
所需软件 |
存放路径 |
Oracle Enterprise Linux 5.4 iso镜像文件 |
/usr/sbin/botang-config-push.d/softwarefiles/Lrhel5/IMAGES/issue.iso |
RedHat Enterprise Linux 6.1iso 镜像文件 |
/usr/sbin/botang-config-push.d/softwarefiles/Lrhel6/IMAGES/issue.iso |
linux_11gR2_database_1of2.zip |
/usr/sbin/botang-config-push.d/softwarefiles/O11g/DATABASES/linux_11gR2_database_1of2.zip |
linux_11gR2_database_2of2.zip |
/usr/sbin/botang-config-push.d/softwarefiles/O11g/DATABASES/linux_11gR2_database_2of2.zip |
linux_11gR2_grid.zip |
/usr/sbin/botang-config-push.d/softwarefiles/O11g/DATABASES/linux_11gR2_grid.zip |
osb-10.3.0.3.0_linux32.zip |
/usr/sbin/botang-config-push.d/softwarefiles/O10g/TAPE/osb-10.3.0.3.0_linux32.zip |
2.3 从PXE被推送端主机收集MAC地址
推送时,1.2 IP地址规划里的IP规划是通过PXE推送端主机上的dhcpd配置文件里的MAC固定配置来实现。因此需要编写“/etc/dhcpd.conf”或“/etc/dhcp/dhcpd.conf”配置文件以固定MAC和IP对应关系。如果读者使用并运行过“bcp-install”,PXE推送端主机里已安装好一个文本处理工具:“botang-create-dhcpconf”。读者只需要编写“/usr/sbin/workstation.list2”和“/usr/sbin/workstation.list”两个文件。这两个配置文件前者是PXE被推送端主机两块网卡的MAC地址列表,后者是PXE被推送端主机第一块网卡的MAC地址列表。有了这两个文件后,运行“botang-create-dhcpconf”程序,“/etc/dhcpd.conf”和“/etc/dhcp/dhcpd.conf”配置文件就创建好了。
举例如下:
文件名 |
内容 |
/usr/sbin/workstation.list2 |
3-00:07:E9:5C:44:1F 3-00:16:EC:06:6C:15 4-00:07:E9:0F:74:BC 4-00:16:EC:0B:EA:FE …... 53-00:1A:A0:09:28:62 53-00:E0:50:1A:00:37 …... |
/usr/sbin/workstation.list |
3-00:07:E9:5C:44:1F 4-00:16:EC:0B:EA:FE …... 53-00:1A:A0:09:28:62 …... |
自动生成的: /etc/dhcp/dhcpd.conf和/etc/dhcpd.conf |
# Stock gls /etc/dhcpd.conf for RH300 and other classes # : dhcpd.conf,v 1.1.2.2 2007/11/19 03:08:34 mcurry Exp $ ddns-update-style none; subnet 192.168.0.0 netmask 255.255.255.0 { class "virtual" { match if substring (hardware, 1, 3) = 00:16:3e; } #The following lines are standard all of the time. option routers 192.168.0.254; option subnet-mask 255.255.255.0; option domain-name "example.com"; option domain-name-servers 192.168.0.254; default-lease-time 21600; max-lease-time 43200; # Assign IPs 61-80 to Xen domUs pool { allow members of "virtual"; range 192.168.0.101 192.168.0.189; } # Assign IPs 1-20 for classroom systems unless # static IPs are assigned below pool { deny members of "virtual"; range192.168.0.1 192.168.0.89; } #The following lines are examples of kickstart #directives. filename "/var/ftp/pub/workstation.cfg"; #filename "/kickstart/virt_worstation.cfg; # see /root/README.vcracker for details about virt_workstation.cfg next-server server1.example.com; #The following four lines provide an example of an IP #address bound to a specific MAC. # # # # Workstation 192.168.0.1-192.168.0.50 host station3 { hardware ethernet 00:07:E9:5C:44:1F; fixed-address 192.168.0.3; } host station4 { hardware ethernet 00:16:EC:0B:EA:FE; fixed-address 192.168.0.4; } ...... host station53 { hardware ethernet 00:1A:A0:09:28:62; fixed-address 192.168.0.53; } …... } option space PXE; class "PXE" { match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; option vendor-encapsulated-options 01:04:00:00:00:00:ff; option boot-size 0x1; filename "pxelinux.0"; option tftp-server-name "server1.example.com"; option vendor-class-identifier "PXEClient"; vendor-option-space PXE; } |
3.PXE被推送端主机:Oracle 11gR2 RAC环境共享磁盘主机
现在开始推送Oracle11gR2 RAC环境共享磁盘主机。
在PXE推送端主机运行“bcp”:
[root@server1 ~]#bcp …... RAC11grhel5none RAC11grhel6shareddisknone Your Choice: RAC11grhel6shareddisknone …... PUSH CLASSROM MACHINE(c) OR PUSH VIRTUAL MACHINE1(v1) OR PUSH VIRTUAL MACHINE2(v2): (c or v1 or v2) c Input is: "c". Are you sure ?(y/n)y Want rewrite MBR( for before rhel6 should answer "n" ): y |
PXE被推送端主机(裸机,硬盘容量不低于60G),从网卡启动自动被推送。推送过程会在“runningpost-install script”屏幕菜单处停留较久时间,只需等待,不需干预。推送后,PXE被推送端主机会自动重启,重启后进入第一个选项,就成为Oracle11gR2 RAC环境共享磁盘主机。
“bcp”程序的主要功能只有一个:在PXE推送端主机生成安装选项文件:“/var/ftp/pub/workstation.cfg”。读者若需要了解细节请辅以Linux相关的知识阅读。
4.PXE被推送端主机:Oracle 11gR2 RAC环境节点主机
现在开始推送Oracle 11gR2 RAC环境节点主机。
在PXE推送端主机运行bcp:
[root@server1 ~]#bcp …... RAC11grhel5none RAC11grhel6shareddisknone Your Choice:RAC11grhel5none …... PUSH CLASSROM MACHINE(c) OR PUSH VIRTUAL MACHINE1(v1) OR PUSH VIRTUAL MACHINE2(v2): (c or v1 or v2) c Input is: "c". Are you sure ?(y/n)y Want rewrite MBR( for before rhel6 should answer "n" ): y |
PXE被推送端主机(裸机至少两台,每台硬盘容量不低于60G),从网卡启动自动被推送。推送过程会在“runningpost-install script”屏幕菜单处停留较久时间,只需等待,不需干预。推送后,PXE被推送端主机会自动重启,重启后进入第一个选项,就成为Oracle11gR2 RAC环境节点主机。
“bcp”程序的主要功能只有一个:在PXE推送端主机生成安装选项文件:“/var/ftp/pub/workstation.cfg”。读者若需要了解细节请辅以Linux相关的知识阅读。
4.1共享存储
在每套推出的Oracle11gR2 RAC环境中,都包含已自动安装并配置好的三台主机:一台共享磁盘主机和两台节点主机。每套推出的Oracle 11gR2 RAC环境中的两台节点主机都已自动挂接上该套环境内部的共享磁盘主机。该共享磁盘已经从“/dev/sdb5”到“/dev/sdb15”分好11个等大的分区。读者接下来就可以使用“oracleasm”命令(已自动安装)在Oracle11gR2 RAC环境中的两台节点主机上设定asm磁盘。
建议“/dev/sdb5”到“/dev/sdb12”用来创建normal冗余度的asm磁盘组“+DATA”;“/dev/sdb13”到“/dev/sdb15”用来创建external冗余度的asm磁盘组“+FRA”。
4.2 分布式虚拟磁带库
在每套推出的Oracle11gR2 RAC环境中的两台节点主机上,各配备一个分布式虚拟磁带库。
[root@station34 ~]# cd /stage/mhvtl-1.2/kernel/ [root@station34 kernel]# make make -C /lib/modules/2.6.18-164.el5/build SUBDIRS=/stage/mhvtl-1.2/kernel modules make[1]: Entering directory `/usr/src/kernels/2.6.18-164.el5-i686' Building modules, stage 2. MODPOST make[1]: Leaving directory `/usr/src/kernels/2.6.18-164.el5-i686' [root@station34 kernel]# service mhvtl start vtllibrary process PID is 21614 vtllibrary process PID is 21633 [root@station34 ~]# lsscsi -g [1:0:0:0]mediumx STKL7000102-/dev/sg8 [1:0:1:0]tapeIBMULT3580-TD50102/dev/st0/dev/sg0 [1:0:2:0]tapeIBMULT3580-TD50102/dev/st1/dev/sg1 [1:0:3:0]tapeIBMULT3580-TD40102/dev/st2/dev/sg2 [1:0:4:0]tapeIBMULT3580-TD40102/dev/st3/dev/sg3 [1:0:8:0]mediumx STKL800102-/dev/sg9 [1:0:9:0]tapeSTKT10000B0102/dev/st4/dev/sg4 [1:0:10:0]tapeSTKT10000B0102/dev/st5/dev/sg5 [1:0:11:0]tapeSTKT10000B0102/dev/st6/dev/sg6 [1:0:12:0]tapeSTKT10000B0102/dev/st7/dev/sg7 |
osb-10.3.0.3.0_linux32在/stage目录下,读者需要自行安装。安装osb后,利用/stage目录下的osb.sh脚本,在Oracle 11gR2 RAC环境中的两台节点主机上一步到位配置好磁带库:
[root@station34 stage]# ./osb.sh /dev/sg8 /dev/sg9 /dev/sg0 /dev/sg1 /dev/sg2 /dev/sg3 /dev/sg4 /dev/sg5 /dev/sg6 /dev/sg7 Oracle Secure Backup 10.3.0.3.0 Warning: auto-login failed - login token has expired login: admin Password: …... OSB-CATALOG-MFwrite 7 dayskeep 14 days RMAN-DEFAULTcontent manages reuse sexamplecontent manages reuse station34content manages reuse |
以station33、station34和station83这一套环境为例:两台节点主机station33和station34上的虚拟带库分别设置了“mediafamily”:“station33”和“station34”,还设置了一个基于RAC服务的公共“media family”:“sexample”。装好Oracle11gR2 RAC环境后,请在station33或station34主机上,做rman设置,使我们既可以使用磁盘也可以使用分布式虚拟带库做后续备份恢复实验。
[oracle@station34 ~]$ rman target / Recovery Manager: Release 11.2.0.1.0 - Production on Tue Oct 29 10:20:18 2013 Copyright (c) 1982, 2009, Oracle and/or its affiliates.All rights reserved. connected to target database: ORCL (DBID=1343950367) RMAN> show all; using target database control file instead of recovery catalog RMAN configuration parameters for database with db_unique_name ORCL are: CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 1 DAYS; CONFIGURE BACKUP OPTIMIZATION ON; CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE'; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F'; # default CONFIGURE DEVICE TYPE DISK PARALLELISM 8 BACKUP TYPE TO BACKUPSET; CONFIGURE DEVICE TYPE 'SBT_TAPE' PARALLELISM 8 BACKUP TYPE TO BACKUPSET; CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default CONFIGURE CHANNEL 1 DEVICE TYPE 'SBT_TAPE' PARMS'ENV=(OB_MEDIA_FAMILY=station33)'CONNECT'sys/oracle_4U@rdbq1'; CONFIGURE CHANNEL 2 DEVICE TYPE 'SBT_TAPE' PARMS'ENV=(OB_MEDIA_FAMILY=station34)'CONNECT'sys/oracle_4U@rdbq2'; CONFIGURE CHANNEL 3 DEVICE TYPE 'SBT_TAPE' PARMS'ENV=(OB_MEDIA_FAMILY=station33)'CONNECT'sys/oracle_4U@rdbq1'; CONFIGURE CHANNEL 4 DEVICE TYPE 'SBT_TAPE' PARMS'ENV=(OB_MEDIA_FAMILY=station34)'CONNECT'sys/oracle_4U@rdbq2'; CONFIGURE CHANNEL 5 DEVICE TYPE 'SBT_TAPE' PARMS'ENV=(OB_MEDIA_FAMILY=station33)'CONNECT'sys/oracle_4U@rdbq1'; CONFIGURE CHANNEL 6 DEVICE TYPE 'SBT_TAPE' PARMS'ENV=(OB_MEDIA_FAMILY=station34)'CONNECT'sys/oracle_4U@rdbq2'; CONFIGURE CHANNEL 7 DEVICE TYPE 'SBT_TAPE' PARMS'ENV=(OB_MEDIA_FAMILY=station33)'CONNECT'sys/oracle_4U@rdbq1'; CONFIGURE CHANNEL 8 DEVICE TYPE 'SBT_TAPE' PARMS'ENV=(OB_MEDIA_FAMILY=station34)'CONNECT'sys/oracle_4U@rdbq2'; CONFIGURE MAXSETSIZE TO UNLIMITED; # default CONFIGURE ENCRYPTION FOR DATABASE OFF; # default CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_orcl.f'; # default |
4.3 时间同步
每套推出的Oracle11gR2 RAC环境中的两台节点主机都已自动时间同步到该套环境内部的共享磁盘主机上的ntpd时间服务器。
[root@station34 stage]# ntpq ntpq> peer remoterefidst t when poll reachdelayoffsetjitter ============================================================================== *station83.examp .INIT.16 u- 102400.0000.0000.000 ntpq> |
4.4 grid用户和 oracle用户
在每套推出的Oracle11gR2 RAC环境中的两台节点主机上,用户已经被创建好了:“grid”用于安装网格基础架构,“oracle”用于安装数据库。
“grid”用户的环境变量自动配置好了:
# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH # export ORACLE_BASE=/u01/app/grid # export ORACLE_HOME=/u01/app/11.2.0/grid # export ORACLE_SID=+ASM2 # export TNS_ADMIN=$ORACLE_HOME/network/admin export NLS_LANG=american_america.AL32UTF8 export ORACLE_TERM=xterm export EDITOR=vi export PATH=$ORACLE_HOME/bin:$PATH export |
“oracle”用户的环境变量也自动配置好了:
# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH # export ORACLE_BASE=/u01/app/oracle # export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 # export ORACLE_SID=RDBQ2 # export ORACLE_UNQNAME=RDBQ # export TNS_ADMIN=$ORACLE_HOME/network/admin export NLS_LANG=american_america.AL32UTF8 export ORACLE_TERM=xterm export EDITOR=vi export PATH=$ORACLE_HOME/bin:$PATH export |
这里有个基本安装常识:如果在两个用户、两套“ORACLE_HOME”的环境下安装,安装过程中为避免listener注册出现故障,应该先注释掉“ORACLE_BASE”、“ORACLE_HOME”和“TNS_ADMIN”等参数。安装后再释放注释。
4.5 ssh等价性脚本
每套推出的Oracle11gR2 RAC环境中的两台节点主机上都已创建好了ssh等价性脚本:/usr/bin/rac-sshd.sh。安装开始前,在第一台节点上需要用grid身份和oracle身份各执行一次该脚本:
[oracle@station33 stage]$ cat/usr/bin/rac-sshd.sh #!/bin/bash # ssh-keygen, 192.168.0.33->, [email protected]> echo "KEY GEN......" sleep 1 echo echo ssh 192.168.0.33 ssh-keygen -t dsa ssh 192.168.0.34 ssh-keygen -t dsa echo echo # selfconnect, station33->, oracle@station33-> echo "SELF CONNECT......" sleep 1 echo echo ssh station33 cat /home/$USER/.ssh/id_dsa.pub >> /home/$USER/.ssh/authorized_keys echo echo # conterpartconnet, station33.example.com-> , [email protected]> echo "CONTERPART CONNECT......" sleep 1 echo echo scp station34.example.com:/home/$USER/.ssh/id_dsa.pub /tmp/conterpartconnectoracle ssh station33.example.com cat /tmp/conterpartconnectoracle >> /home/$USER/.ssh/authorized_keys echo echo # TEST echo "TEST......" sleep 1 echo echo ssh station33 exit ssh station34 exit ssh station33.example.com exit ssh station34.example.com exit echo echo # 192.168.0.34->, [email protected]> echo "SCP TO CONTERPART ......" sleep 1 echo echo scp /home/$USER/.ssh/known_hosts [email protected]:/home/$USER/.ssh/known_hosts scp /home/$USER/.ssh/authorized_keys [email protected]:/home/$USER/.ssh/authorized_keys echo echo [oracle@station33 stage]$rac-sshd.sh |
4.6 其他
每套推出的Oracle11gR2 RAC环境中的两台节点主机都已经做好所有操作系统层面的配置:包括vip、scan-vip、ntp,各种rpm包和操作系统参数等。所有安装软件都已经下载到“/stage”目录下。推送出的所有主机上的root用户和其他操作系统用户的密码都是“oracle”。
4.7 安装
使用以上环境安装各套Oracle11gR2 RAC环境,系统自检是不会报告任何错误的。全局数据库名和实例名前缀应根据自动生成的.bash_profile文件的规定来建库。比如:
station33,station34和station83这一套的SID就是RDBQ1和RDBQ2。注意所有PXE被推送端主机上生成的脚本和配置文件在推送过程中都是自动根据IP规划变量调整其内容中出现的主机名或SID名的。
如果要继续后面的备份恢复实验,sys、system、sysman和dbsnmp的密码都必须设置成:“oracle_4U”。必需安装示例方案。
具体安装过程都是标准流程,这里略去。如有需要请参考上海Oracle用户组其他成员的相关共享文档。
[root@station33 ~]# crs_stat -t NameTypeTargetStateHost ------------------------------------------------------------ ora.DATA.dgora....up.type ONLINEONLINEstation33 ora.FRA.dgora....up.type ONLINEONLINEstation33 ora....ER.lsnr ora....er.type ONLINEONLINEstation33 ora....N1.lsnr ora....er.type ONLINEONLINEstation34 ora....N2.lsnr ora....er.type ONLINEONLINEstation33 ora....N3.lsnr ora....er.type ONLINEONLINEstation33 ora.asmora.asm.typeONLINEONLINEstation33 ora.eonsora.eons.typeONLINEONLINEstation33 ora.gsdora.gsd.typeONLINEONLINEstation33 ora....network ora....rk.type ONLINEONLINEstation33 ora.oc4jora.oc4j.typeONLINEONLINEstation33 ora.onsora.ons.typeONLINEONLINEstation33 ora.rdbq.dbora....se.type ONLINEONLINEstation33 ora....ry.acfs ora....fs.type ONLINEONLINEstation33 ora.scan1.vipora....ip.type ONLINEONLINEstation34 ora.scan2.vipora....ip.type ONLINEONLINEstation33 ora.scan3.vipora....ip.type ONLINEONLINEstation33 ora....SM1.asm applicationONLINEONLINEstation33 ora....33.lsnr applicationONLINEONLINEstation33 ora....n33.gsd applicationONLINEONLINEstation33 ora....n33.ons applicationONLINEONLINEstation33 ora....n33.vip ora....t1.type ONLINEONLINEstation33 ora....SM2.asm applicationONLINEONLINEstation34 ora....34.lsnr applicationONLINEONLINEstation34 ora....n34.gsd applicationONLINEONLINEstation34 ora....n34.ons applicationONLINEONLINEstation34 ora....n34.vip ora....t1.type ONLINEONLINEstation34 |
5.用Shell脚本在推出的节点上批量部署32个Oracle11gR2RAC备份恢复案例场景
5.1备份恢复案例场景模拟脚本工作原理
基本工作原理是:读者按照以上推送设置的要求安装好成套Oracle11gR2 RAC环境后,复用以上的PXE推送端主机作为部署平台,在每套推出的Oracle11gR2 RAC环境中部署32个Oracle11gR2 RAC备份恢复案例场景脚本。脚本基于网络执行并批量部署;脚本同时支持下载到每一台Oracle11gR2RAC节点主机本地运行。脚本能模拟和评测每一套环境每一个备份恢复场景的恢复结果。
32个备份恢复场景模拟脚本调用一个公共子程序库“bclcustom-subprogram”。在该公共子程序库里面编写了各个备份恢复场景标准步骤。32个备份恢复场景模拟脚本实际上是根据场景模拟需要组合这些标准步骤来完成相应的场景模拟的。
公共子程序库“bclcustom-subprogram”如下:
#### #### 0 Subprograms Begin ###0.1 Normal Structure Begin ### # sub_getting has $1 $2 sub_getting() { echo " " echo "---------------------------------------------- LAB $1 ----------------------------------------------" echo "$2" echo "---------------------------------------------- LAB $1 ----------------------------------------------" echo " " echo " " echo "******************" echo "你的主机信息如下:" echo "******************" ifconfig eth0 | head -n2 | tail -n1 | cut -f 2 -d : | cut -f 1 -d ' ' echo " " hostname echo " " uname -a echo " " echo " " } sub_detecting() { /u01/app/11.2.0/grid/bin/crs_stat -t v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "sqlplus /nolog" <<! conn / as sysdba set echo off set feedback off @/home/oracle/ptable.sql; quit ! fi echo " " } sub_revealing() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "sqlplus /nolog" <<! conn / as sysdba set echo off set feedback off @/home/oracle/ttable.sql; quit ! fi echo " " } sub_resultscoring() { /u01/app/11.2.0/grid/bin/crs_stat -t v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "sqlplus /nolog" <<! connsys/oracle_4U@$v_dbname as sysdba set echo off set feedback off @/home/oracle/rtable.sql; quit ! fi echo " " } sub_clearing() { rm -f /home/oracle/ptable.sql rm -f /home/oracle/ctable.sql rm -f /home/oracle/ttable.sql rm -f /home/oracle/rtable.sql rm -f /usr/bin/bclcustom.sh rm -f /home/oracle/asm rm -f /home/oracle/bclcustom-subprogram } sub_clearing_excludertable() { rm -f /home/oracle/ptable.sql rm -f /home/oracle/ctable.sql rm -f /home/oracle/ttable.sql rm -f /usr/bin/bclcustom.sh rm -f /home/oracle/asm rm -f /home/oracle/bclcustom-subprogram } ### ###0.1 Normal Structure End ###0.2 Database Operation Begin ##0.2.1 Database SRVCTl Operation Begin ## sub_shutdowning_normal() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "/u01/app/oracle/product/11.2.0/dbhome_1/bin/srvctl stop database -d $v_dbname" fi echo " " } ## ##0.2.1 Database SRVCTl Operation End ##0.2.2 Database ASM Operation Begin ## # sub_destroying has $1 sub_destroying() { # $1 : system* ##undotbs1* ##undotbs2* ##sysaux* ##example* ##users* ##group* ##current* # su - grid -c "export ORACLE_SID=+ASM1 ; export ORACLE_HOME=/u01/app/11.2.0/grid ; asmcmd "<<! > /home/oracle/asm find / $1 exit ! sleep 15 sync v_path1=`cut -f 2 -d '+' /home/oracle/asm| tr -d [:blank:]` for i in $v_path1 do v_path2="+"$i su - grid -c "export ORACLE_SID=+ASM1 ; export ORACLE_HOME=/u01/app/11.2.0/grid ; asmcmd "<<! rm $v_path2 exit ! done echo " " } ## ##0.2.2 Database ASM Operation End ##0.2.3 Database SQL Operation Begin ## sub_startuping_node1mount() { if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "sqlplus /nolog" <<! conn / as sysdba startup mount exclusive quit ! fi echo " " } sub_creating() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "sqlplus /nolog" <<! conn sys/oracle_4U@$v_dbname as sysdba set echo off set feedback off @/home/oracle/ctable.sql; quit ! fi echo " " } sub_scripting_controlfile_nocatalog() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` echo "Next moment control script is going to be create ......" echo "Display the spid number of session here: " if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "sqlplus /nolog" <<! conn sys/oracle_4U@$v_dbname as sysdba select instance_number from v\$instance; select spid from v\$process p , v\$sessions , v\$mystatmwhere p.addr=s.paddr and m.sid=s.sidand rownum=1; alter database backup controlfile to trace; quit ! fi echo "" } sub_offlining_users_immediate() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "sqlplus /nolog" <<! connsys/oracle_4U@$v_dbname as sysdba set echo off set feedback off select instance_number from v\$instance; alter tablespace users offline immediate; quit ! fi echo " " } sub_offlining_tbsocp05_test_immediate() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "sqlplus /nolog" <<! connsys/oracle_4U@$v_dbname as sysdba set echo off set feedback off select instance_number from v\$instance; alter tablespace tbsocp05_test offline immediate; quit ! fi echo " " } sub_shutdowning_abort() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "/u01/app/oracle/product/11.2.0/dbhome_1/bin/srvctl stop database -d $v_dbname -o abort" fi } sub_altering_default_tablespace() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "sqlplus /nolog" <<! conn / as sysdba alter database default tablespace example; quit ! fi echo "" } sub_dropping_users() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then echo "***FROM THEN ON: DROP***" su - oracle -c "sqlplus /nolog" <<! conn / as sysdba drop user sh cascade; drop user oe cascade; drop tablespace users including contents and datafiles; quit ! fi echo " " } ## ##0.2.3 Database SQL Operation End ##0.2.4 Database RMAN Operation Begin ## # sub_backingup_controlfile_nocatalog has $1 sub_backingup_controlfile_nocatalog() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "rman target sys/oracle_4U@$v_dbname" <<! backup tag "$1" current controlfile; quit ! fi echo "" } sub_deleting_backup_controlfile_nocatalog() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "rman target sys/oracle_4U@$v_dbname" <<! delete noprompt backup of controlfile; delete noprompt copy of controlfile; ! fi echo "" } sub_resync_catalog() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` v_ip=$(ifconfig | grep'192\.168\.0' | head -n 1| cut -d . -f 4| cut -d ' ' -f 1) grep 'LABS ADD' /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora if [ $? == '1' ] then echo " " >> /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora echo "rcat =" >> /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora echo "(DESCRIPTION =" >> /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora echo "(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.90)(PORT = 1521))" >> /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora echo "(CONNECT_DATA =" >> /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora echo "(SERVER = DEDICATED)" >> /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora echo "(SERVICE_NAME = rcat.example.com)" >> /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora echo ")" >> /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora echo ")" >> /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora echo " " >> /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora echo '#LABS ADD' >> /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora fi if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then echo "***Connecting Catalog***" su - oracle -c "rman target sys/oracle_4U@$v_dbname catalog u90/oracle_4U@rcat" <<! resync catalog; ! fi echo " " } ## ##0.2.4 Database RMAN Operation End ##0.2.5 Database SQL/RMAN Combined Operation Begin ## # sub_onlining_users_nocatalog has $1 sub_onlining_users_nocatalog() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "sqlplus /nolog" <<! connsys/oracle_4U@$v_dbname as sysdba select instance_number from v\$instance; alter tablespace users online; quit ! fi echo " " # rman echo "***AFTER TABLESPACE ONLINE***" echo "***BACKUP AGAIN***" if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "rman target sys/oracle_4U@$v_dbname" <<! backup tag "$1" tablespace users; ! fi echo " " } # sub_offlining_users_nocatalog has $1 sub_offlining_users_nocatalog() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "sqlplus /nolog" <<! connsys/oracle_4U@$v_dbname as sysdba select instance_number from v\$instance; alter tablespace users offline; quit ! fi echo " " # rman if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "rman target sys/oracle_4U@$v_dbname"<<! backup tag "$1" tablespace users; ! fi echo " " } # sub_readingwrite_users_nocatalog has $1 sub_readingwrite_users_nocatalog() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "sqlplus /nolog" <<! connsys/oracle_4U@$v_dbname as sysdba select instance_number from v\$instance; alter tablespace users read write; quit ! fi echo " " # rman echo "***AFTER TABLESPACE REWRITE***" echo "***BACKUP AGAIN***" if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "rman target sys/oracle_4U@$v_dbname" <<! backup tag "$1" tablespace users; ! fi echo " " } # sub_readingonly_users_nocatalog has $1 sub_readingonly_users_nocatalog() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "sqlplus /nolog" <<! connsys/oracle_4U@$v_dbname as sysdba select instance_number from v\$instance; alter tablespace users read only; quit ! fi echo " " # rman if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - oracle -c "rman target sys/oracle_4U@$v_dbname" <<! backup tag "$1" tablespace users; ! fi echo " " } sub_deleting_early_online_backup_users() { v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then echo "***DELETE THE EARLY ONLINE BACKUP OF USERS***" echo "***DELETE THE EARLY READ WRITE BACKUP OF USERS***" su - oracle -c "rman target sys/oracle_4U@$v_dbname" <<! delete noprompt backup of tablespace users; delete noprompt copy of tablespace users; ! sub_deleting_backup_controlfile_nocatalog fi echo " " } ## ##0.2.5 Database SQL/RMAN Combined Operation End ###0.2 Database Operation End ####0 Subprograms End #### |
从以上脚本可以看出,许多实验需要catalog恢复目录。在脚本中规定恢复目录存在于一台IP为192.168.0.90的主机上,服务名为“rcat.example.com”,监听端口为:“1521”。恢复目录用户名为“u90”,密码为“oracle_4U”。请事先准备好该设备。
5.2 在PXE推送端主机上安装备份恢复案例场景模拟脚本
为了方便读者,作者编写了一个一步到位的安装程序“bcl-install”。此程序在PXE推送端主机上安装。
“bcl-install”包含的主要内容就是上面的子程序。“bcl-install”程序实际上是一个shell编程的自解压安装包,因此不论操作系统是32位和64位;也不论是在6系Enterprise Linux还是在5系EnterpriseLinux上都能运行。
[root@server1 ~]# ./bcl-install |
5.3 在Oracle 11gR2 RAC环境节点主机部署备份恢复案例场景模拟脚本
现在准备开始在Oracle11gR2 RAC环境节点主机部署备份恢复案例场景模拟脚本。
5.3.1 在PXE推送端主机上准备IP地址列表
为了指定进行备份恢复案例场景模拟的Oracle11gR2 RAC环境节点主机列表,请编写“/tmp/botang-config-xshare/course/general/v_botang_all_ipsshd_open”文件,把每套要被模拟备份恢复场景的Oracle11gR2 RAC环境节点主机的IP地址以空格隔开写成一行,以192.168.0.33和192.168.0.34举例如下:
[root@server1 ~]# cd /tmp/botang-config-xshare/course/general [root@server1 general]# cat v_botang_all_ipsshd_open 192.168.0.33 192.168.0.34 |
5.3.2 在PXE推送端主机上初始化实验脚本
[root@server1 ~]# bcl --RACGRID11g13 newlabs …... Password Number is: 5. RAC FITABLE The course for you to decide: ? general **************************************************************************************************** 一般注意事项: 1.以下大多数实验要求数据库处于归档模式,一些实验要求有全库备份,请一定注意users表空间要有单独的备份通道(使它自己包含在它自己的备份集中)。 2.把压缩包中各个实验脚本中的*.sql和bclcustom-subprogram放在/home/oracle/下面,以root身份运行Cbclcustom.sh(可以放在任何地方),即可实施破坏并作实验。 3.sys的密码一定要叫做oracle_4U。 4.实验环境的grid和db_home1一定要按照课程环境安装。 5.唯独实验6b和实验15需要在执行完成Cbclcustom.sh之后运行各自文件夹下面的begin-realpost。作进一步破坏,请打开begin-realpost阅读一下就明白了。 6.11g没有实验2。 **************************************************************************************************** RACGRID11g13.ori/ RACGRID11g13.ori/7a_当前控制文件和数据文件完好_日志文件全部损坏_正常关机不完全恢复_数据不丢_不需备份/ RACGRID11g13.ori/7a_当前控制文件和数据文件完好_日志文件全部损坏_正常关机不完全恢复_数据不丢_不需备份/begin-real RACGRID11g13.ori/7a_当前控制文件和数据文件完好_日志文件全部损坏_正常关机不完全恢复_数据不丢_不需备份/bclcustom-subprogram …... |
在PXE推送端主机上初始化实验脚本的目的是:解压缩脚本压缩包“/usr/sbin/botang-config-lesson.d/CUSTOM/RACGRID11g13.ori.tgz”到“/usr/sbin/botang-config-lesson.d/CUSTOM/RACGRID11g13.ori”,供调用。
“/usr/sbin/botang-config-lesson.d/CUSTOM/RACGRID11g13.ori”里每一个文件夹,就是一个备份恢复场景模拟脚本。举例如下:
[root@station90 ~]# cd /usr/sbin/botang-config-lesson.d/CUSTOM/RACGRID11g13.ori/14_删除表空间不完全恢复 [root@station90 14_删除表空间不完全恢复]# ls bclcustom-subprogrambegin-realctable.sqlPbclcustom.shRbclcustom.shttable.sqlvsftpdrestart-prepare begin-prepareCbclcustom.shendptable.sqlrtable.sqlvsftpdrestart-endvsftpdrestart-real [root@station90 14_删除表空间不完全恢复]# |
“bcl”程序在批量部署时,自动完成以下四个阶段工作:
第一阶段:拷贝该场景下“*.sql和“bclcustom-subprogram”到Oracle11gR2 RAC环境节点主机的“/home/oracle”下。
第二阶段:通过ssh调用该场景下的“Pbclcustom.sh”在Oracle 11gR2 RAC环境节点主机运行,其标准输出收集起来形成ftp页面:“ftp://192.168.0.245/pub/bclresult-xx/prepare”,供查阅。“Pbclcustom.sh”会自动判断奇数/偶数节点,会在奇数执行而绕过 偶数节点。“ Pbclcustom.sh”的主要任务是判断Oracle 11gR2RAC环境节点主机的健康状态。
第三阶段:通过ssh调用该场景下的“Cbclcustom.sh”在Oracle 11gR2 RAC环境节点主机运行,其标准输出收集起来形成ftp页面:“ftp://192.168.0.245/pub/bclresult-xx/real”,供查阅。“Cbclcustom.sh”会自动判断奇数/偶数节点,会在奇数执行而绕过 偶数节点。“ Cbclcustom.sh”的主要任务是在Oracle 11gR2RAC环境节点主机搞破坏,模拟场景。
“Cbclcustom.sh”程序会调用“ctable.sql”脚本,后者会在每套Oracle 11gR2 RAC环境节点主机该场景中建立一个表名为“t”打头加上随机数的表。这样保证了每套Oracle11gR2 RAC环境节点在本场景中表名的唯一性。只有现场恢复了,才能找到该表。使得这套程序能适用考试和面试。
“ctable.sql”脚本会伴随着日志切换插入该表“1、2、3、4和5”共5行数值。实验最后的“Rbclcustom.sh”脚本会记住每套Oracle11gR2 RAC环境节点主机该场景中建立的那个表,并查询其数值,评测该备份恢复场景的恢复结果。如该场景是完全恢复能找到“1、2、3、4和5”5行数值;如场景是不完全恢复而且无法找全数值,由于“4和5”两个数值对应的redolog entry是在丢失或不可用的日志上,只能找到“ 1、2和3”(在rac环境下,由于日志thread的交替,可能数值3也找不到)。每个场景的“ctable.sql”都由公共子程序库“bclcustom-subprogram”中的子程序sub_creating
调用,但是每个场景的“ctable.sql”都不一样,即在数据库中做的场景特定操作。
对于编号为“6b”的实验,系统还需自动多走一步:在每套Oracle11gR2 RAC环境节点主机上删除特定日志(每套系统都会判断是哪一个日志),其标准输出收集起来替换盖掉日志序列号形成ftp页面:“ftp://192.168.0.245/pub/bclresult-xx/real-post”。同时暂时锁住“ftp://192.168.0.245/pub/bclresult-xx/real”。
对于编号为“15”的实验,系统还需自动多走两步:在每套Oracle 11gR2 RAC环境节点主机上删除特定日志(每套系统都会判断是哪一个日志),并将该场景恢复掉,制造出一个新 incarnation--“3号化身”,以便让用户之后穿越incarnation恢复到“2号化身”。其标准输出收集起来形成ftp页面:“ftp://192.168.0.245/pub/bclresult-xx/real-post”。
第四阶段:通过ssh调用该场景下的“Rbclcustom.sh”在Oracle 11gR2 RAC环境节点主机运行,其标准输出收集起来形成ftp页面:“ftp://192.168.0.245/pub/bclresult-xx/end”,供查阅。“Rbclcustom.sh”会自动判断奇数/偶数节点,会在奇数执行而绕过 偶数节点。如前所述,“ Rbclcustom.sh”的主要任务是在Oracle11gR2 RAC环境节点主机 评测该备份恢复场景的恢复结果。
特殊的情况:对于每一个场景,要做实验的用户也可自行把压缩包中对应的实验脚本中的“*.sql”和“bclcustom-subprogram”放在Oracle11gR2 RAC环境节点主机“/home/oracle/”下面, 自行以root身份依次运行“Pbclcustom.sh”自检环境-->“Cbclcustom.sh”实施破坏并作实验-->最后运行“Rbclcustom.sh”收集实验结果。所不同的是:标准输出直接在屏幕上,从“prepare”到“real”到“end”的整个过程表名都是“edu234”(而不是随机表名)。
6. Oracle11gR2 RAC环境“dd”和“rever”,在后续特定实验前通过“rever”初始化环境
在开始实验之前,显然要求每套Oracle11gR2 RAC环境都要根据推送时的标准安装好。并都已经开启归档、已经做好rman全库备份(无论磁带机或磁盘备份)。为了方便标识,建议在每套Oracle11gR2 RAC环境中都建一张表:
SQL>conn / as sysdba SQL>create table sys.tname(a varchar2(50)); SQL>insert into sys.tname values ('用户ID'); |
如果读者需要连续做实验,在后续特定实验前,为了避免实验间连续恢复产生的过度复杂性,建议读者通过冷备份rever初始化环境。
每套Oracle11gR2 RAC环境,在做好以上所有工作并准备做第一个实验之前,请手工冷备份整套环境。以“oracle”用户在每套Oracle 11gR2 RAC环境第一台节点主机上运行:“/home/oracle/copy.sh”能达到手工冷备份整套环境的目的。以后可以在任何时候,通过以“oracle”用户运行“/home/oracle/rever.sh”初始化环境。如果该套Oracle11gR2 RAC环境使用磁带机做备份,请以“root”身份运行“copytape-root.sh”备份虚拟磁带库。当以“oracle”用户运行“/home/oracle/rever.sh”初始化环境后,都要再以“root”身份运行“revertape-root.sh”初始化虚拟带库。并重新注册catalog。
通过在PXE推送端主机上运行:
[root@server1 ~]# bcl --RACGRID11g13 0 三个问题都选择y |