RAC 攻击 - Oracle 集群数据库入门/打印版
这是 打印版 的 RAC 攻击 - Oracle 集群数据库入门 当你打印或 预览 此页面时,你不会看到此消息或任何不属于书籍内容的元素。 |
RAC 攻击是一个免费的课程和平台,提供与 Oracle RAC(集群数据库)相关的动手学习实验室。我们相信学习 RAC 的最佳方式是通过大量的动手实践。自 2008 年以来,个人在家和讲师在课堂上都使用过此课程。
最初的贡献者是 Jeremy Schneider、Dan Norris 和 Parto Jalili。该手册在 http://www.ardentperf.com 发布了数年,之后才迁移到这个 wikibook。所有 RAC 攻击内容在 2011 年 5 月该项目启动时以 CC-BY-SA 许可证发布。
要了解即将举办的 RAC 攻击活动或自行组织活动,请访问 活动 页面。你可以使用快捷方式 http://racattack.org/events 随时访问此页面。
本工作簿的目标是帮助学生通过引导示例学习 Oracle RAC 集群数据库。(具体来说,是在 VMware Server 上使用 ASM 或共享文件系统和 Oracle Enterprise Linux 5 的 11gR2 RAC。)活动组织者、课堂讲师或个人在家都可以使用它。
RAC 攻击在深度方面不同于目前可用的其他教程。
- 这里详细记录了每个按键和鼠标点击。
- 该过程从头到尾覆盖——从在笔记本电脑上首次安装 VMware 到运行的集群数据库上的各种实验……以及两者之间的一切。
- 主要工作簿中的实验室经过了彻底且反复的测试。
学生应该能够在 Unix 中导航——例如,使用“ls”列出文件。
大多数现代笔记本电脑和台式电脑都足够强大,可以运行一个双节点虚拟 RAC 集群。简而言之,以下是推荐的最低要求
- 双核 2GHz 32 位处理器 (已经使用单核完成)
- 4GB 内存 (已经使用 3GB 完成)
- 两个物理硬盘——而不是分区 (已经使用一个完成)
- 笔记本电脑的外部硬盘 (已经使用某些 USB 闪存盘完成)
- 50 GB + 10.5 GB 可用空间 (已经使用略少完成)
- Windows XP 或 Vista (Linux & Mac & Windows 7/8 在这些说明中未直接涵盖,但可以下载 包含 VirtualBox 的补充 PDF)
- 阅读:计划你的时间
- 专注于你能够学习的内容。
- 尽可能选择多个具体的学习目标,并花时间研究它们。
- 要有创造力,并进行实验。
- 勇于冒险,不要害怕破坏东西。
- 如果你是课堂或活动中的参与者,请充分利用课堂或活动设置。
- 你可以用一次点击“快速启动”回到实验室的开头。
- 记录发现和问题,与他人分享。
- 互相帮助。参与者比讲师多!
- 如果可能,将步骤直接剪切并粘贴到 PuTTY SSH 终端会话中。
实验室技巧
[edit | edit source]- 所有密码都是 racattack
- 除非说明中特别说明选择“复制”,否则在询问时始终选择“我移动了此虚拟机”。
- 如果您使用的是自己的笔记本电脑,请逐个启动虚拟机。也就是说,等到第一个虚拟机完成启动 - 包括集群软件和数据库 - 然后再启动第二个。
- 课堂特定技巧
- 工作站和 VMware 控制台的通用登录帐户:“admin”
- 实验室手册中的常见更改
- 使用 5GB 共享磁盘 - 而不是 3.25GB
- 使用 900MB 内存 - 而不是 760MB
- 快速启动可能比您想象的要慢... 阅读:计划您的时间
- “RAC11g”目录通常位于 C:\RAC11g
- 提供给高级参与者的扩展目标手册
存储概述
[edit | edit source]ASM | 共享 FS | |
---|---|---|
/dev/sdb | DATA | /u51 (/u61) |
/dev/sdc | BACKUP | /u52 |
网络概述
[edit | edit source]collabn1 | collabn2 | |
---|---|---|
互联 | 172.16.100.51 | 172.16.100.52 |
管理 | 192.168.78.51 | 192.168.78.52 |
VIP | 192.168.78.61 | 192.168.78.62 |
SCAN | 192.168.78.250 |
计划您的时间
[edit | edit source]为了获得最大收益,您必须仔细计划您的时间。没有足够的时间完成所有实验室 - 所以选择您最感兴趣的实验室。
如果您在家中或活动中使用自己的计算机,那么您始终需要完成第一个实验室(硬件和 Windows 准备)才能快速启动到任何后续实验室。如果您在课堂上,那么讲师可能已经为您完成了第一个实验室,您可以从快速启动开始。 |
概述
[edit | edit source]时间
[edit | edit source]这些时间是使用一台仅满足推荐最低要求的笔记本电脑收集的。除了下面列出的等待时间外,我们建议您预留大约 40 分钟的工作时间来完成任何给定的实验室。
下载仅适用于家庭用户。如果您在活动或课堂上,那么组织者已经为您下载了软件。 |
快速启动 | 大小 | 下一个实验室 | 快速启动时间 | 实验室中的等待时间 | 构建时间 |
---|---|---|---|---|---|
硬件和 Windows 准备 | 下载:VMware Server (500MB) 下载:OEL (3GB) |
||||
0 | 创建虚拟机 | 15 分钟:Linux 安装 下载:Oracle Cluster & Database (4.5GB) |
|||
1 | 3 GB | 创建集群 | 4 分钟:快速启动 | 5 分钟:复制虚拟机 3 分钟:启动 collabn1 3 分钟:启动 collabn2 |
6 分钟 |
2 | 13 GB | 网格安装(ASM 或 共享 FS) | 11 分钟:快速启动 3 分钟:启动节点 |
25 分钟:GI 安装 10 分钟:root.sh collabn1 8 分钟:root.sh collabn2 |
17 分钟 |
3 | 20 GB | RAC 安装 | 18 分钟:快速启动 4 分钟:启动 collabn1 4 分钟:启动 collabn2 |
42 分钟:数据库安装 | 30 分钟 |
4 | 27 GB | 创建数据库 | 25 分钟:快速启动 4 分钟:启动 collabn1 4 分钟:启动 collabn2 |
22 分钟:数据库创建 | 45 分钟 |
5 | 28 GB | 滚动补丁 第二部分:探索 RAC(无 PSU) |
25 分钟:快速启动 6 分钟:启动 collabn1 6 分钟:启动 collabn2 |
22 分钟:GI 补丁 collabn1 20 分钟:数据库补丁 collabn1 22 分钟:GI 补丁 collabn2 20 分钟:数据库补丁 collabn2 5 分钟:catbundle |
45 分钟 |
6 | 37 GB | 第二部分:探索 RAC(含 PSU) | 35 分钟:快速启动 6 分钟:启动 collabn1 6 分钟:启动 collabn2 |
60 分钟 |
硬件和 Windows 准备
[edit | edit source]硬件和 Windows 最低要求
[edit | edit source]本手册将指导您完成在您自己的笔记本电脑或台式计算机上创建双节点 Oracle RAC 集群的过程。
虚拟化的详细解释超出了本实验室的范围,但这里简单概述了我们正在构建的内容
硬件最低要求
[edit | edit source]大多数现代笔记本电脑和台式电脑都足够强大,可以运行一个双节点虚拟 RAC 集群。简而言之,以下是推荐的最低要求
- 双核 2GHz 32 位处理器 (已经使用单核完成)
- 4GB 内存 (已经使用 3GB 完成)
- 两个物理硬盘——而不是分区 (已经使用一个完成)
- 笔记本电脑的外部硬盘 (已经使用某些 USB 闪存盘完成)
- 50 GB + 10.5 GB 可用空间 (已经使用略少完成)
- 支持大于 2GB 的文件,例如 NTFS (它在没有 2GB 文件支持的情况下,在 FAT32 上完成过)
- Windows XP 或 Vista (Linux & Mac & Windows 7/8 在这些说明中未直接涵盖,但可以下载 包含 VirtualBox 的补充 PDF)
如果您的笔记本电脑或台式电脑不满足这些最低要求,那么不建议尝试完成 RAC Attack 实验室。虽然可以使用更小的配置完成这些实验室,但存在许多潜在问题。
虽然我们建议不要尝试,但 RAC Attack 已使用以下配置完成:单核、3GB 内存、一个物理硬盘、某些 USB 闪存驱动器以及不到 60GB 的可用空间。 |
Windows 准备
[edit | edit source]- 重新启动 Windows。在此干净启动后,不要启动任何不必要的程序 - 例如电子邮件或即时消息。
- 如果可能,禁用病毒扫描(这样您的防病毒软件[1] 不会尝试扫描虚拟机磁盘上的 I/O)。
- 终止任何正在运行的驻留内存程序,尤其是帮助大型应用程序“快速启动”的程序(这些程序通常会占用大量内存)。
硬件验证
[edit | edit source]处理器
[edit | edit source]- 从开始菜单中,选择或键入运行。在出现的对话框中,键入msinfo32。
- 在左侧窗格中选择系统摘要。向下滚动到右侧窗格中的处理器。验证您至少有2 个核心,并且速度至少为2000 Mhz。
内存
[edit | edit source]- 向下滚动到右侧窗格中的内存。验证安装的物理内存至少为 4GB。此外,验证可用内存至少为 1.4GB。您可以终止在前台和后台运行的程序以增加可用内存。
硬盘
[edit | edit source]- 在左侧窗格中,选择组件 -> 存储 -> 磁盘。计算磁盘驱动器条目的数量,并验证至少有两个。
连接 | 存储类型 | |
---|---|---|
最优 最劣 |
|
|
|
| |
|
| |
|
单个硬盘的最高速度可能低至 45 MB/s。(这在 RAC Attack 测试中观察到。) 典型的 USB 闪存盘性能非常差,不建议使用。一些 USB 闪存盘号称具有高性能,但典型情况下最高速度只有 30 MB/s 左右。在 RAC Attack 测试中,USB 驱动器适用于存储 ISO 镜像,但用于存储虚拟机文件时性能不佳。有关不同连接类型的详细比较,请参考:http://www.pixelbeat.org/speeds.html |
RAC Attack 经过精心设计,使用三个目录并分散 I/O,以在实验室期间获得最佳的响应能力。您可以选择如何在硬盘上分配目录,最佳配置可能会根据您的连接和存储类型而有所不同。
目录名称 | 描述 | 可用空间 | 建议位置 |
---|---|---|---|
RAC11g | 操作系统 Oracle RAC 软件 |
50 GB | 第二块硬盘 (非闪存) |
RAC11g-shared | Oracle RAC 数据 | 7.5 GB | Windows 硬盘* |
RAC11g-iso | OEL 安装 DVD (只读) | 3 GB | Windows 硬盘* |
*页面文件通常在 Windows 硬盘上
注意:不要 在 U 盘上创建 RAC11g 目录(包含操作系统和 Oracle 软件)。
我们努力减少了 RAC Attack 的占用空间,但对于 11gR2 来说,很难将它降低到这个范围以下。 |
RAC Attack 需要一个具有密码和管理员权限的本地 Windows 用户帐户。您只能使用网络或无密码帐户登录,前提是登录帐户具有管理员权限,并且您知道另一个本地帐户的密码,该本地帐户也具有管理员权限(且密码不为空)。
如果您的帐户不是本地帐户,或者您的帐户没有本地管理员权限,那么您可以按照这里的说明创建管理员帐户。
- 从开始菜单中选择运行。在出现的对话框中,键入cmd以启动命令提示符。在 Windows 7 中,在开始菜单底部找到“搜索程序”字段。键入cmd,但不要运行它。右键单击“cmd”,然后选择“以管理员身份运行”。以管理员用户身份打开命令提示符后,运行以下两条命令
net user admin racattack /add net localgroup administrators admin /add
登录:admin
密码:racattack
- 键入net user %username%(如果您使用的是网络或无密码登录帐户,请将 %username% 替换为本地带密码的管理员帐户)。验证用户名,验证需要密码为是,并验证本地组成员资格是否包含管理员。
- 这些实验室已在 VMware Server 2.0.1 版本上测试。请访问 VMware Server 网站:http://www.vmware.com/go/getserver
- 如果您还没有帐户,请注册一个帐户。
- 记下您的许可证号。
- 如果您在家,请下载 VMware Server。如果您参加 RAC Attack 活动,则讲师提供的 Jumpstart 驱动器包含 VMware Server 的副本,因此您无需下载。(但您仍然需要从 VMware 网站获取许可证号。)
这些实验室已在 VMware Server 2.0.1 版本上测试。
- 运行 VMware 安装程序
- 在安装过程中接受许可协议和所有默认选项。
- 输入您的许可证信息,该信息在您下载软件的 VMware 网站的同一页面上可见。
- 如果 VMware 安装程序要求您重新启动计算机,请重新启动计算机。
- 从开始菜单中选择管理虚拟网络。程序启动后,确保您在底部看到一个“应用”按钮。如果您没有看到“应用”按钮,请关闭程序并通过右键单击并选择“以管理员身份运行”重新启动程序(这通常在 Windows 7 上需要这样做)。
- 单击主机虚拟网络映射选项卡,然后单击VMnet1旁边的右箭头按钮。从子菜单中选择子网。
- 将 IP 地址设置为172.16.100.0,然后单击确定。
- 单击Vmnet8旁边的右箭头按钮,然后从子菜单中选择子网。
- 将 IP 地址设置为192.168.78.0,然后单击确定。
- 单击应用按钮。
- 返回摘要选项卡并验证
VMnet1的子网为172.16.100.0
VMnet8的子网为192.168.78.0 - 转到NAT选项卡并验证 VMnet 主机是否为VMnet8,网关 IP 是否为192.168.78.2
如果您参加活动,则活动组织者可能会提供一个特殊的演示选项,您可以在自己的笔记本电脑上运行预配置的 RAC 集群。要使用此演示选项,请按照本实验室进行操作,但在活动提供的外部硬盘驱动器上使用目录。
- RAC Attack 经过精心设计,使用三个目录并分散 I/O,以在实验室期间获得最佳的响应能力。在您在硬件和 Windows 最低要求中选择的目的地创建这三个目录,并考虑以下指导原则。mkdir C:\RAC11g mkdir D:\RAC11g-shared mkdir D:\RAC11g-iso 在 RAC11g 目录中,确保 collabn1 和 collabn2 子目录不存在。rmdir C:\RAC11g\collabn1 rmdir C:\RAC11g\collabn2
- VMware Server 管理界面是基于 Web 的,某些新的 Web 浏览器与之不兼容。有两种方法可以打开此管理界面
- 打开一个非默认的 Web 浏览器,并访问地址 https://127.0.0.1:8333/
- 如果您在活动现场,活动组织者可能已提供Firefox 2.0.0.20,该浏览器已通过 RAC Attack 测试。您可以直接从 Jumpstart 驱动器运行此浏览器,无需将其安装在您的 PC 上。此版本的 Firefox 也可以从互联网下载。
- 从开始菜单启动VMware Server 主页。这将使用您的默认 Web 浏览器。
- 打开一个非默认的 Web 浏览器,并访问地址 https://127.0.0.1:8333/
- 根据您使用的 Web 浏览器,您可能会收到与安全相关的警告。继续处理所有这些警告,并选择查看网页。
- 使用本地 Windows 管理员帐户的用户名和密码登录 VMware 控制台。
- 在主屏幕(摘要选项卡)上,找到命令框,然后选择添加数据存储。
- 重复此步骤三次。将数据存储名称设置为RAC11g、RAC11g-shared 和RAC11g-iso。选择本地数据存储,并使用您之前选择和创建的目录路径。
- 验证摘要屏幕中是否存在三个新的数据存储,名为RAC11g 和RAC11g-iso 和RAC11g-shared。还要验证两个网络vmnet1 和vmnet8 是否分别作为主机专用和NAT 可用。
如果您在活动现场,活动组织者已经下载了软件并将其复制到 Jumpstart 驱动器。
- 跳过此实验室。
如果您在家,请按照以下说明下载 Oracle 企业版 Linux。
- 继续下面。
- 访问 http://edelivery.oracle.com/linux 并选择继续。
- 输入您的姓名、公司、电子邮件和国家/地区,并在单击继续之前查看/接受许可证和出口限制。如果您之前访问过 Oracle EDelivery,请确保输入的信息完全相同。如果您是第一次从 Oracle 下载软件,您可能需要等待几天才能收到 Oracle 发送的电子邮件,授予您继续操作的权限。
- 在x86-32 位平台上搜索Oracle Linux。选择 Oracle Linux 版本 5 更新 6。
- 下载x86(32 位)的文件,而不是源代码。
- 此 zip 文件将包含一个名为Enterprise-R5-U6-Server-i386-dvd.iso 的单个文件 - 将此文件解压缩到RAC11g-iso 文件夹中,然后删除原始 zip 文件。
- 从摘要屏幕中,选择创建虚拟机。将新机器命名为collabn1,并选择RAC11g 数据存储。
- 选择Linux 操作系统,然后选择Red Hat Enterprise Linux 5(32 位)。
- 为虚拟机分配760M 内存,并选择1 个处理器。
- 选择创建新的虚拟磁盘。
- 将磁盘大小设置为30G,并将文件命名为[RAC11g] collabn1/system.vmdk - 将所有其他选项保留为默认值,然后单击下一步。
- 选择添加网络适配器。
- 选择创建NAT 网络连接。
- 选择不添加 CD/DVD 驱动器。
- 选择不添加软盘驱动器。
- 选择不添加 USB 控制器。
- 查看配置并单击完成。暂时不要启动虚拟机。
虚拟 DVD 配置
虚拟设备节点(适配器/设备) | 路径(数据存储/目录/文件名) |
---|---|
IDE 0:0 | [RAC11g-iso] Enterprise-R5-U6-Server-i386-dvd.iso |
IDE 0:1*** | [RAC11g-iso] RAC11gR2.iso*** |
***仅限讲师主导的课程
- 在左侧的库存选项卡中,选择collabn1(我们刚刚创建的虚拟机)。
- 从命令框中,单击添加硬件。在出现的窗口中,单击CD/DVD 驱动器。
- 选择使用 ISO 映像。
- 单击浏览并找到文件[RAC11g-iso] Enterprise-R5-U6-Server-i386-dvd.iso。
- 打开名为虚拟设备节点的部分,然后选择IDE 0:0。然后单击下一步。仔细执行此步骤,因为很容易遗漏。
- 单击完成添加设备。暂时不要启动虚拟机。
-
如果您参加课程,那么讲师可能已提供了一个名为RAC11gR2.iso 的第二个虚拟 DVD,以节省一些课堂时间。它包含所有其他软件下载。
- 重复本实验中的所有先前步骤,以添加使用 RAC11gR2.iso 映像的第二个 DVD,并选择IDE 0:1。
- 继续下面。
- 向下滚动到硬件框并确认虚拟机设置。它们应与这张图片匹配(除了如果您参加课程并且讲师提供了第二个 DVD,那么您应该只看到第二个 DVD)
- 单击控制台选项卡。您可能会看到一条消息,提示未安装远程控制台插件。如果您看到此消息,请单击安装插件并按照说明操作,然后继续。(注意:在此过程中,您可能会被要求重新启动计算机。)
- 安装插件后,您应该在控制台的中心看到一个大的“播放”按钮。单击播放按钮启动虚拟机。
- 当您看到方框时,单击任意位置打开一个控制台窗口。
- 现在将打开一个新窗口 - 在您的 Web 浏览器之外。如果您在启动虚拟机后不久打开了此窗口,那么您将看到 Oracle 企业版 Linux 安装程序的启动屏幕。
最初,这个新的控制台窗口将忽略您的键盘和鼠标。单击新的控制台窗口内,它将开始接受您的键盘和鼠标。
任何时候您的键盘和鼠标卡在 VMware 虚拟机中,您都可以按CTRL 和 ALT 键一起将其移出虚拟机。如果您仍然看到启动屏幕,那么您可以按 Enter 键继续,或者只需等待它自动继续。
- 选择跳过媒体测试。
- 当第一个安装程序屏幕出现时,选择下一步。
- 接受默认的英语语言,然后选择下一步。
- 选择美国英语键盘布局,然后单击下一步。
- 选择是初始化驱动器。
- 接受默认布局(无加密),然后选择下一步。
- 选择是删除所有分区。
- 将主机名设置为collabn1.vm.ardentperf.com,并在选择下一步之前保持 DHCP 启用。
- 选择您所在时区的时区!但让系统时钟以 UTC 运行。
- 将 root 密码设置为racattack
- 选择立即自定义 - 但不要选择任何“附加任务”。然后单击下一步。
-
仅选择以下软件包组,然后单击下一步继续
类别 选择 桌面环境 Gnome 桌面环境 应用程序 编辑器
图形化互联网
基于文本的互联网开发 开发库
开发工具服务器 服务器配置工具 基本系统 管理工具
基础
系统工具
X 窗口系统不要选择集群存储或集群。
- 选择下一步开始安装。
- 安装完成后,选择重启。
- 机器重启后 - 当您看到欢迎屏幕时 - 选择下一步。
- 接受许可协议并选择下一步。
- 禁用防火墙并选择下一步。单击是确认。
- 在选择下一步之前禁用SELinux。用是确认。
- 保持Kdump禁用并选择下一步。
- 保持时钟不变(时间错误)并点击下一步。
- 不要创建用户;点击下一步。选择继续确认。
- 选择下一步跳过声卡配置。
- 选择完成关闭安装程序。点击确定重启。
- 重启后,您将看到登录屏幕。
完成操作系统安装
[edit | edit source]提示:如果您熟悉Unix命令行,那么我们建议您除了使用VMware控制台之外,还要通过SSH连接。然后,您可以从本手册中复制和粘贴许多命令!在我们配置网络之前,VMware将分配地址192.168.78.128。
- 以用户root登录,密码为racattack。
- GNOME是OEL中默认安装的图形窗口环境。首先,禁用GNOME CD自动挂载。转到菜单系统 >> 首选项 >> 可移动驱动器和媒体。
- 取消选中可移动存储下所有选项,然后点击关闭。
- 从菜单应用程序 >> 附件 >> 终端打开一个终端窗口。
- 从菜单中打开编辑 >> 当前配置文件。
- 在标题和命令选项卡中,选中以登录shell运行命令复选框,然后关闭对话框。
- 编辑器"gedit"是一个简单的图形编辑器 - 与记事本类似 - 它可以用来编辑Linux上的文件。如果您打算使用gedit,那么建议您打开编辑 > 首选项来禁用文本换行并启用行号。
- 在终端窗口中以root用户身份,关闭并禁用anacron,然后手动运行它,不延迟。[root@collabn1 ~]# service anacron stop 停止anacron: [ OK ] [root@collabn1 ~]# chkconfig anacron off [root@collabn1 ~]# chkconfig --list anacron anacron 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@collabn1 ~]# anacron -n它不会给您造成任何问题,但请注意,在您继续进行本实验时,一些CPU密集型和I/O密集型作业将在后台运行约10分钟(例如,updatedb和makewhatis)。您可能会注意到系统性能略有下降。您可以随时使用top程序查看当前正在运行的内容。
- 在终端窗口中以root用户身份,关闭并禁用自动挂载器。[root@collabn1 ~]# service autofs stop 停止自动挂载: [ OK ] [root@collabn1 ~]# umount /media/* [root@collabn1 ~]# chkconfig autofs off [root@collabn1 ~]# chkconfig --list autofs autofs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
- 在终端窗口中以root用户身份,关闭并禁用Apple Zeroconf服务(avahi)。[root@collabn1 ~]# service avahi-daemon stop 关闭Avahi守护进程: [ OK ] [root@collabn1 ~]# chkconfig avahi-daemon off [root@collabn1 ~]# chkconfig --list avahi-daemon avahi-daemon 0:off 1:off 2:off 3:off 4:off 5:off 6:off
- 如果状态栏中任何小的CD镜像没有绿色圆点,则点击CD镜像,然后选择"连接到[RAC11g] iso/... on Server"。如果出现一个窗口显示CD内容,请确保关闭该窗口。
- 创建两个名为cdrom和cdrom5的CDROM目录。请务必使用这些名称,因为本手册中许多后面的步骤都会引用它们!
[root@collabn1 ~]# cd /mnt [root@collabn1 mnt]# mkdir cdrom [root@collabn1 mnt]# mkdir cdrom5
- 为所有CD添加/etc/fstab条目,然后挂载它们。如果您在课堂上,您可能会有两张CD。如果您不在课堂上,您可能只有一张。[root@collabn1 ~]# ls /dev/cdrom-* /dev/cdrom-hda /dev/cdrom-hdb [root@collabn1 ~]# gedit /etc/fstab /dev/cdrom-hda /mnt/cdrom iso9660 defaults 0 0 /dev/cdrom-hdb /mnt/cdrom5 iso9660 defaults 0 0 [root@collabn1 mnt]# mount cdrom [root@collabn1 mnt]# mount cdrom5
- 安装其他所需的RPM cd /mnt # 从Enterprise Linux 5 CDROM 2 rpm -Uvh */*/compat-libstdc++-33* rpm -Uvh */*/libaio-devel-0.* rpm -Uvh */*/unixODBC-2.* rpm -Uvh */*/unixODBC-devel-2.* # 从Enterprise Linux 5 CDROM 3 rpm -Uvh */*/sysstat-7.* # 已安装的其他必需包: # 从Enterprise Linux 5 CDROM 1 rpm -Uvh */*/binutils-2.* rpm -Uvh */*/elfutils-libelf-0.* rpm -Uvh */*/glibc-2.*i686* rpm -Uvh */*/glibc-common-2.* rpm -Uvh */*/libaio-0.* rpm -Uvh */*/libgcc-4.* rpm -Uvh */*/libstdc++-4.* rpm -Uvh */*/make-3.* # 从Enterprise Linux 5 CDROM 2 rpm -Uvh */*/elfutils-libelf-devel-* rpm -Uvh */*/glibc-headers* rpm -Uvh */*/glibc-devel-2.* rpm -Uvh */*/libgomp* rpm -Uvh */*/gcc-4.* rpm -Uvh */*/gcc-c++-4.* rpm -Uvh */*/libstdc++-devel-4.*
- 弹出cdrom [root@collabn1 mnt]# eject /mnt/cdrom
- 返回VMware控制台中的摘要选项卡。从状态框中选择安装VMware Tools。点击安装按钮开始。
- 安装VMware客户端工具并运行配置工具。您必须在VMware控制台中执行此步骤;不要使用PuTTY或任何其他终端程序。
[root@collabn1 mnt]# mount /mnt/cdrom mount: block device /dev/cdrom-hda is write-protected, mounting read-only [root@collabn1 mnt]# rpm -ivh /mnt/cdrom/VMwareTools-7.7.5-156745.i386.rpm Preparing... ########################################### [100%] 1:VMwareTools ########################################### [100%] The installation of VMware Tools 7.7.5 for Linux completed successfully. You can decide to remove this software from your system at any time by invoking the following command: "rpm -e VMwareTools". Before running VMware Tools for the first time, you need to configure it for your running kernel by invoking the following command: "/usr/bin/vmware-config-tools.pl". Enjoy, --the VMware team [root@collabn1 cdrom]# vmware-config-tools.pl
...
选择否跳过VMware文件系统同步驱动程序(vmsync)
选择显示尺寸[12] – 1024x768
挂载HGFS共享可能会失败,但没关系。
- 运行网络命令。(您可以将命令复制粘贴到终端中。)接下来,运行vmware-toolbox并启用时钟同步。
- 注销您的会话。
- 卸载VMware Tools镜像: umount /mnt/cdrom 使用VMware基础架构Web界面,从[RAC11g-iso]数据存储挂载Oracle Enterprise Linux。挂载它: mount /mnt/cdrom
创建RAC攻击DVD
[edit | edit source]如果您在课堂或活动中,则讲师可能提供了一个名为RAC11gR2.iso的第二个虚拟DVD,以节省一些课堂时间。它包含所有其他软件下载。
- 跳过此实验,继续下一个实验。
如果您在家,请按照以下说明下载所有需要的软件并自己构建第二个DVD。
- 继续下面。
- 以root用户身份登录后,下载最新版本的RAC攻击支持代码(GPL)。# cd ~ # curl -kL github.com/ardentperf/racattack/tarball/master | tar xz
- 您可以在此处查看下载的总列表:https://github.com/ardentperf/racattack/blob/master/makeDVD/auto.sh 如果您已经下载了这些文件中的任何一个,您可以选择将其复制到虚拟机中的/tmp目录中。创建DVD时,任何剩余的文件将自动下载。
- 通过运行自动构建脚本创建DVD。系统将提示您输入Oracle SSO登录名和密码。如果您的帐户未被授权使用Oracle支持,则补丁下载将失败。
[root@collabn1 ~]# '''sh ardentperf-racattack-*/makeDVD/auto.sh /mnt/cdrom5''' `oracle-profile' -> `/mnt/cdrom5/oracle-profile' root/ root/fix_cssd/ root/fix_cssd/fix_cssd.sh Oracle SSO Username: '''<your-username>''' Oracle SSO Password: '''<your-password>''' LOGGING IN TO ORACLE SSO % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 414 733 414 2977 0 0 1621 0 --:--:-- 0:00:01 --:--:-- 22383 DOWNLOADING: /tmp/oracleasmlib-2.0.4-1.el5.i386.rpm % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 13929 100 13929 0 0 23118 0 --:--:-- --:--:-- --:--:-- 2720k `/tmp/oracleasmlib-2.0.4-1.el5.i386.rpm' -> `./oracleasmlib-2.0.4-1.el5.i386.rpm' DOWNLOADING: /tmp/linux_11gR2_database_1of2.zip ( ... ) FINISHED BUILDING RAC ATTACK DVD
准备Oracle
[edit | edit source]- 编辑/etc/sysctl.conf [root@collabn1 ~]# gedit /etc/sysctl.conf kernel.shmmni = 4096 # 信号量: semmsl, semmns, semopm, semmni kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 1024 65000 net.core.rmem_default=4194304 net.core.rmem_max=4194304 net.core.wmem_default=262144 net.core.wmem_max=262144 [root@collabn1 ~]# sysctl -p
- 编辑/etc/security/limits.conf oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536
- 编辑/etc/pam.d/login,并在selinux open行之前插入以下行。session required /lib/security/pam_limits.so session required pam_limits.so
- 创建组和用户。将oracle密码设为racattack [root@collabn1 ~]# groupadd oinstall [root@collabn1 ~]# groupadd dba [root@collabn1 ~]# groupadd oper [root@collabn1 ~]# groupadd asmdba [root@collabn1 ~]# groupadd asmoper [root@collabn1 ~]# groupadd asmadmin [root@collabn1 ~]# [root@collabn1 ~]# useradd -u 500 -g oinstall -G dba,oper,asmdba,asmoper,asmadmin oracle [root@collabn1 ~]# passwd oracle 更改用户oracle的密码。新UNIX密码: racattack BAD PASSWORD: it is based on a dictionary word 重新输入新UNIX密码: racattack passwd: 所有身份验证令牌已成功更新。
- 创建目录。[root@collabn1 ~]# mkdir -p /u01/grid/oracle/product/11.2.0/grid_1 [root@collabn1 ~]# mkdir -p /u01/app/oracle/product/11.2.0/db_1 [root@collabn1 ~]# chown -R oracle:oinstall /u01
- 注销您的会话,以oracle用户身份登录。
- 为oracle用户禁用GNOME CD自动挂载。转到菜单系统 >> 首选项 >> 可移动驱动器和媒体。
- 取消选中可移动存储下所有选项,然后点击关闭。
- 打开一个终端窗口。
- 从菜单中打开编辑 >> 当前配置文件。
- 在标题和命令选项卡中,选中以登录shell运行命令复选框,然后关闭对话框。
- 如果您使用的是gedit,则打开编辑 > 首选项来禁用文本换行并启用行号。
- 为 oracle 用户设置 ssh 等效性。[oracle@collabn1 ~]$ ssh localhost 无法验证主机 'localhost (127.0.0.1)' 的真实性。RSA 密钥指纹为 3f:65:e6:77:af:11:84:56:a4:b9:0f:8b:41:b4:2f:8a。您确定要继续连接吗 (yes/no)? yes 警告:已将 'localhost' (RSA) 永久添加到已知主机列表。oracle@localhost 的密码: ^C [oracle@collabn1 ~]$ ssh-keygen -t rsa 生成公钥/私钥 rsa 密钥对。输入要保存密钥的文件 (/home/oracle/.ssh/id_rsa): ^M [默认] 输入密码(不输入密码则为空): ^M [无密码] 再次输入相同的密码: ^M [无密码] 您的标识已保存到 /home/oracle/.ssh/id_rsa。您的公钥已保存到 /home/oracle/.ssh/id_rsa.pub。密钥指纹为: 0a:33:74:d4:7a:c0:c6:d0:56:33:10:4e:71:63:4c:e8 [email protected] [oracle@collabn1 ~]$ cat /home/oracle/.ssh/id_rsa.pub >> /home/oracle/.ssh/authorized_keys
- 设置 oracle 和 root 用户的配置文件。[oracle@collabn1 ~]$ su - root [root@collabn1 ~]# gedit /etc/oratab grid:/u01/grid/oracle/product/11.2.0/grid_1:N [root@collabn1 ~]# chown oracle:dba /etc/oratab [root@collabn1 ~]# gedit /root/.bashrc ORAENV_ASK=NO ORACLE_SID=grid . oraenv >/dev/null unset ORAENV_ASK [root@collabn1 ~]# su - oracle [oracle@collabn1 ~]$ cd /mnt [oracle@collabn1 ~]$ cat */oracle-profile >>/home/oracle/.bash_profile
- 关闭并重新打开您的终端会话,以便新配置文件生效。
- 安装 fix_cssd 脚本。在 VMware 测试环境中,您通常只有很少的内存。Oracle CSS 进程会占用大量的内存(在本实验中超过 50%),因为它会锁定物理内存中的数百兆字节。在 VMware(针对 ASM 和 RAC 环境)中,这可能是不可取的。这个低级技巧将使内存能够在运行时交换。
永远,永远,永远,即使在您最疯狂的梦境中,也不要想过在任何接近生产系统的环境中尝试这个方法。
该文件的源代码可以在 https://github.com/ardentperf/racattack/blob/master/makeDVD/root/fix_cssd/fix_cssd.sh 找到。[oracle@collabn1 ~]$ su - root [root@collabn1 ~]# cd / [root@collabn1 ~]# tar xvf mnt/*/fix_cssd.tar root/fix_cssd/fix_cssd.sh [root@collabn1 ~]# chmod 774 /root/fix_cssd/fix_cssd.sh [root@collabn1 ~]# gedit /etc/rc.d/rc.local cd /root/fix_cssd nohup nice -n -20 ./fix_cssd.sh 2>&1 & [root@collabn1 ~]# /etc/rc.d/rc.local nohup: appending output to `nohup.out'
- 如果机器正在运行,则注销并关闭。机器需要关闭电源。
- 在左侧的库存选项卡中,选择collabn1(我们刚刚创建的虚拟机)。
- 向下滚动到硬件框并确认存在一个类型为NAT的网络适配器。
- 从命令框中,单击添加硬件。在出现的窗口中,单击网络适配器。
- 选择创建仅主机网络连接。这将用于互连。然后单击下一步。
- 单击完成以创建网络适配器。
对这两个设备重复步骤 1-6
虚拟设备节点(适配器/设备) | 大小 | 路径(数据存储/目录/文件名) |
---|---|---|
SCSI 1:0 | 3.25 GB | [RAC11g-shared] data.vmdk |
SCSI 1:1 | 3.25 GB | [RAC11g-shared] backup.vmdk |
- 在左侧的库存选项卡中,选择collabn1(我们刚刚创建的虚拟机)。
- 从命令框中,单击添加硬件。在出现的窗口中,单击硬盘。
- 选择创建新的虚拟磁盘并单击下一步。
- 输入容量3.25 GB并输入名称“[RAC11g-shared] data.vmdk”。
- 选择文件选项 → 立即分配所有磁盘空间。
- 选择磁盘模式 → 独立并持久。
- 选择虚拟设备节点 → SCSI 1:0。单击下一步继续。
- 单击完成以创建磁盘。
磁盘可能需要一段时间才能出现在 VMware 控制台中。在继续进行实验之前,请等待新磁盘出现。此外,网页浏览器可能会显示错误,要求您重新加载页面并重新登录到 VMware。 - 对第二个磁盘重复步骤 1-5(它列在本次实验的开头)。
- 确认您的硬盘和网络设备列表与该屏幕截图匹配。
- 从命令框中,单击配置虚拟机。
- 单击高级选项卡,然后向下滚动到配置参数。使用添加新条目按钮添加此处列出的条目。单击确定保存配置更改。
名称 值 disk.locking false diskLib.dataCacheMaxSize 0 diskLib.maxUnsyncedWrites 0 mainMem.useNamedFile false
我发现以下三个网站在创建自定义 VMware 配置方面最为有用。它们展示了 VMware 的强大和多功能性,即使是免费的 VMware Server 产品。http://sanbarrow.com/vmx/vmx-advanced.html
http://vmfaq.com/?View=entry&EntryID=25
http://sanbarrow.com/vmx/vmx-config-ini.html
- 在Windows 资源管理器中,浏览到文件夹[RAC11g] \collabn1。将所有文件复制到文件夹[RAC11g] \collabn2。
- [RAC11g] 的位置是在第一个实验中确定的。在课堂上,讲师可能会提供位置。
- 如果collabn2文件夹不存在,则创建它。
- 浏览到[RAC11g] \collabn2。编辑文件collabn1.vmx(VMware 配置文件)。您可以使用记事本或写字板来编辑该文件。
- 找到行displayName并将其更改为collabn2(新的节点名称),然后保存并关闭该文件。displayName = "collabn2"
- 在左侧的库存选项卡中,选择collabn1。
- 选择控制台选项卡。单击播放按钮以启动虚拟机。当您看到方框时,单击任意位置打开一个控制台窗口。
- 以oracle用户身份登录,密码为racattack。
- 打开一个终端窗口。
- 使用“su -”命令切换到 root 用户。(密码为racattack。)确认存在两个新的磁盘,并且它们具有相应的尺寸。这两行应该完全匹配!! [root@collabn1 ~]# cat /proc/partitions major minor #blocks name ... 8 16 3407872 sdb 8 32 3407872 sdc
- 使用fdisk在所有新创建的磁盘上创建分区。
- 运行fdisk /dev/sdb 您应该看到消息“设备既不包含有效的 DOS 分区表,也不包含 Sun、SGI 或 OSF 磁盘标签”
- 键入“n”以创建新的分区。
- 键入“p”以创建主分区。
- 键入分区号1。
- 按两次 Enter 键接受默认的第一个/最后一个柱面。
- 键入“t”以设置分区类型。
- 输入分区类型da(非 FS 数据)。
- 键入“w”将分区表写入磁盘。
- 对磁盘 /dev/sdc 重复上一步
完成上一个实验后,您应该已经以 oracle 用户身份登录到 collabn1。您应该已经打开了一个终端,您目前已切换到 root 用户。
- 以 root 用户身份,确认 eth0 的 IP 地址是否以 192.168.78 开头,并且 eth1 的 IP 地址是否以 172.16.100 开头。[root@collabn1 ~]# ifconfig|grep net eth0 链接封装:以太网 硬件地址 00:0C:29:07:F5:C0 inet 地址:192.168.78.128 广播:192.168.78.255 掩码:255.255.255.0 inet6 地址:fe80::20c:29ff:fe07:f5c0/64 范围:链接 eth1 链接封装:以太网 硬件地址 00:0C:29:07:F5:CA inet 地址:172.16.100.128 广播:172.16.100.255 掩码:255.255.255.0 inet6 地址:fe80::20c:29ff:fe07:f5ca/64 范围:链接 inet 地址:127.0.0.1 掩码:255.0.0.0 inet6 地址: ::1/128 范围:主机
- 通过直接编辑 Linux 网络配置文件来更新 IP 地址。更新 BOOTPROTO 行并添加其余行。[root@collabn1 ~]# cd /etc/sysconfig/network-scripts [root@collabn1 network-scripts]# gedit ifcfg-eth0 BOOTPROTO=none IPADDR=192.168.78.51 NETMASK=255.255.255.0 GATEWAY=192.168.78.2 [root@collabn1 network-scripts]# gedit ifcfg-eth1 BOOTPROTO=none IPADDR=172.16.100.51 NETMASK=255.255.255.0
- 更新 DNS 搜索域 [root@collabn1 network-scripts]# gedit /etc/resolv.conf search vm.ardentperf.com nameserver 192.168.78.2
- 以 root 身份,通过输入 service network restart 重新启动网络服务。然后使用 ifconfig 确认新的 IP 地址。还可以通过检查 /etc/resolv.conf 来确认搜索域 - 如果文件已还原,则再次编辑它。(当我编写这个实验时,更改在第二次编辑文件后就保留了。)您必须在 VMware 中执行此步骤;不要使用 PuTTY。
- 编辑 /etc/hosts。编辑包含 127.0.0.1 的行,然后添加下面所有其他行:[root@collabn1 etc]# vi /etc/hosts 192.168.78.51 collabn1 collabn1.vm.ardentperf.com 192.168.78.61 collabn1-vip collabn1-vip.vm.ardentperf.com 172.16.100.51 collabn1-priv collabn1-priv.vm.ardentperf.com 192.168.78.52 collabn2 collabn2.vm.ardentperf.com 192.168.78.62 collabn2-vip collabn2-vip.vm.ardentperf.com 172.16.100.52 collabn2-priv collabn2-priv.vm.ardentperf.com 192.168.78.250 collab-scan collab-scan.vm.ardentperf.com 192.168.78.251 collab-gns collab-gns.vm.ardentperf.com ::1 localhost6.localdomain6 localhost6 127.0.0.1 localhost.localdomain localhost
- 在 VMware 控制台中,转到 虚拟机 菜单并选择 将虚拟机添加到清单。
- 浏览到 RAC11g/collabn2 并打开 collabn1.vmx。确保您浏览到正确的文件夹!
- 在左侧的 清单 选项卡中,选择新的虚拟机 - collabn2。选择 控制台 选项卡并单击播放按钮以启动虚拟机。
- VMware 控制台应询问您是否复制或移动了虚拟机。回答您复制了文件,然后单击 确定。
- 当您看到方框时,单击任意位置打开一个控制台窗口。
- 以oracle用户身份登录,密码为racattack。
- 打开一个终端(应用程序 >> 附件 >> 终端)并切换到 root 用户。当您第一次在 collabn2 上打开控制台时,您会注意到主机名仍然显示为 collabn1。这是因为我们复制了机器;我们很快就会更改主机名。
- 确认 eth1 的 IP 地址是否以 172.16.100 开头。[root@collabn1 ~]# ifconfig|grep net eth1 链接封装:以太网 硬件地址 00:0C:29:C9:3E:C8 inet 地址:172.16.100.129 广播:172.16.100.255 掩码:255.255.255.0 inet 地址:127.0.0.1 掩码:255.0.0.0
- 通过直接编辑 Linux 网络配置文件来更新 IP 地址。更新 BOOTPROTO 行并添加其余行。注释或删除以 HWADDR 开头的行。[root@collabn1 ~]# cd /etc/sysconfig/network-scripts [root@collabn1 network-scripts]# gedit ifcfg-eth0 BOOTPROTO=none #HWADDR=... IPADDR=192.168.78.52 NETMASK=255.255.255.0 GATEWAY=192.168.78.2 [root@collabn1 network-scripts]# gedit ifcfg-eth1 BOOTPROTO=none #HWADDR=... IPADDR=172.16.100.52 NETMASK=255.255.255.0
- 更新 DNS 搜索域 [root@collabn1 network-scripts]# gedit /etc/resolv.conf search vm.ardentperf.com nameserver 192.168.78.2
- 通过编辑 Linux 系统配置文件来更新 HOSTNAME。将其设置为 collabn2.vm.ardentperf.com。然后使用 hostname 命令更改活动系统主机名。[root@collabn1 network-scripts]# gedit /etc/sysconfig/network HOSTNAME=collabn2.vm.ardentperf.com [root@collabn1 network-scripts]# hostname collabn2.vm.ardentperf.com
- 以 root 身份,通过输入 service network restart 重新启动网络服务。然后使用 ifconfig 确认新的 IP 地址。确认搜索域,方法是检查 /etc/resolv.conf - 如果文件已还原,则再次编辑它。(在完成此实验时,更改在第二次编辑文件后就保留了。)还可以使用 hostname 确认新的主机名。您必须在 VMware 中执行此步骤;不要使用 PuTTY。
- 退出终端会话并启动一个新的会话,以便您可以在提示符中看到更新的主机名。
- 编辑 /etc/hosts。编辑包含 127.0.0.1 的行,然后添加下面所有其他行:[root@collabn2 etc]# vi /etc/hosts 192.168.78.51 collabn1 collabn1.vm.ardentperf.com 192.168.78.61 collabn1-vip collabn1-vip.vm.ardentperf.com 172.16.100.51 collabn1-priv collabn1-priv.vm.ardentperf.com 192.168.78.52 collabn2 collabn2.vm.ardentperf.com 192.168.78.62 collabn2-vip collabn2-vip.vm.ardentperf.com 172.16.100.52 collabn2-priv collabn2-priv.vm.ardentperf.com 192.168.78.250 collab-scan collab-scan.vm.ardentperf.com 192.168.78.251 collab-gns collab-gns.vm.ardentperf.com 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6
- 登录到节点 collabn2。以 oracle 用户身份,确保您可以 ping 互连网络和公用网络上的两个节点。[oracle@collabn2 ~]$ ping -c 1 collabn1 PING collabn1 (192.168.78.51) 56(84) 字节的数据。64 字节来自 collabn1 (192.168.78.51):icmp_seq=1 ttl=64 time=0.793 ms [oracle@collabn2 ~]$ ping -c 1 collabn2 PING collabn2 (192.168.78.52) 56(84) 字节的数据。64 字节来自 collabn2 (192.168.78.52):icmp_seq=1 ttl=64 time=0.024 ms [oracle@collabn2 ~]$ ping -c 1 collabn1-priv PING collabn1-priv (172.16.100.51) 56(84) 字节的数据。64 字节来自 collabn1-priv (172.16.100.51):icmp_seq=1 ttl=128 time=0.901 ms [oracle@collabn2 ~]$ ping -c 1 collabn2-priv PING collabn2-priv (172.16.100.52) 56(84) 字节的数据。64 字节来自 collabn2-priv (172.16.100.52):icmp_seq=1 ttl=64 time=0.058 ms
- 存储主机的公钥。您可以使用名为 ssh-keyscan 的工具来执行此操作。[oracle@collabn2 .ssh]$ ssh-keyscan -t rsa collabn1 collabn1-priv collabn2 collabn2-priv >> ~/.ssh/known_hosts # collabn1 SSH-2.0-OpenSSH_4.3 # collabn1-priv SSH-2.0-OpenSSH_4.3 # collabn2 SSH-2.0-OpenSSH_4.3 # collabn2-priv SSH-2.0-OpenSSH_4.3
- 测试 ssh 等效性。重要的是没有提示,并且您会自动登录。[oracle@collabn2 .ssh]$ ssh collabn1 警告:已将 IP 地址“192.168.78.51”的 RSA 主机密钥永久添加到已知主机列表中。上次登录:2008 年 4 月 15 日星期二 16:59:36 来自 collabn2 [oracle@collabn1 ~]$ exit 退出连接到 collabn1 已关闭。
- 切换到节点 collabn1。以 oracle 用户身份,确认您可以 ping 两个服务器。然后从 collabn2 复制 known_hosts 文件。[oracle@collabn1 ~]$ ping -c 1 collabn1 PING collabn1 (192.168.78.51) 56(84) 字节的数据。64 字节来自 collabn1 (192.168.78.51):icmp_seq=1 ttl=64 time=0.793 ms [oracle@collabn1 ~]$ ping -c 1 collabn2 PING collabn2 (192.168.78.52) 56(84) 字节的数据。64 字节来自 collabn2 (192.168.78.52):icmp_seq=1 ttl=64 time=0.024 ms [oracle@collabn1 ~]$ ping -c 1 collabn1-priv PING collabn1-priv (172.16.100.51) 56(84) 字节的数据。64 字节来自 collabn1-priv (172.16.100.51):icmp_seq=1 ttl=128 time=0.901 ms [oracle@collabn1 ~]$ ping -c 1 collabn2-priv PING collabn2-priv (172.16.100.52) 56(84) 字节的数据。64 字节来自 collabn2-priv (172.16.100.52):icmp_seq=1 ttl=64 time=0.058 ms [oracle@collabn1 ~]$ scp collabn2:.ssh/known_hosts ~/.ssh/known_hosts 无法建立主机“collabn2 (192.168.78.52)”的身份验证。RSA 密钥指纹为 3f:65:e6:77:af:11:84:56:a4:b9:0f:8b:41:b4:2f:8a。您确定要继续连接吗 (yes/no)?yes 警告:已将“collabn2,192.168.78.52” (RSA) 永久添加到已知主机列表中。known_hosts 100% 3146 3.1KB/s 00:00
- 测试 ssh 等效性。[oracle@collabn1 ~]$ ssh collabn2 上次登录:2008 年 4 月 15 日星期二 17:02:29 来自 collabn2 [oracle@collabn2 ~]$ exit 退出连接到 collabn2 已关闭。
- 您还需要能够登录到自己;测试一下。[oracle@collabn1 ~]$ ssh collabn1 上次登录:2008 年 4 月 15 日星期二 17:03:39 来自 collabn2 [oracle@collabn1 ~]$ exit 退出连接到 collabn1 已关闭。
- 运行 CLUVFY 来验证您的硬件和操作系统安装!共享磁盘测试将失败;这是正常的。忽略该错误。collabn1:/home/oracle[RAC1]$ /mnt/cdrom*/grid/runcluvfy.sh stage -post hwos -n collabn1,collabn2 执行硬件和操作系统设置后的检查 检查节点可达性... 从节点“collabn1”进行的节点可达性检查已通过 检查用户等效性... 用户“oracle”的用户等效性检查已通过 检查节点连接性... 检查主机配置文件... 主机配置文件验证成功 节点连接性已通过子网“192.168.78.0”并包含节点(s)collabn2,collabn1 TCP 连接性检查已通过子网“192.168.78.0” 节点连接性已通过子网“172.16.100.0”并包含节点(s)collabn2,collabn1 TCP 连接性检查已通过子网“172.16.100.0” 在子网“192.168.78.0”上找到的可能是 VIP 候选的接口是: collabn2 eth0:192.168.78.52 collabn1 eth0:192.168.78.51 在子网“172.16.100.0”上找到的可能是专用互连候选的接口是: collabn2 eth1:172.16.100.52 collabn1 eth1:172.16.100.51 节点连接性检查已通过 检查具有 UID 值 0 的多个用户已通过 硬件和操作系统设置后的检查已成功。
- 以 oracle 身份登录 collabn1 并打开一个终端。切换到 root 用户。
- 在两个节点上安装 ASMLib 并初始化磁盘。如果您已从之前的步骤中挂载了 cdrom,则 mount 命令可能会失败(mount: /dev/cdrom-hda already mounted or /mnt/cdrom busy)。[root@collabn1 ~]# cd /mnt [root@collabn1 mnt]# mount /mnt/cdrom mount: block device /dev/cdrom-hda is write-protected, mounting read-only [root@collabn1 mnt]# mount /mnt/cdrom5 mount: block device /dev/cdrom-hdb is write-protected, mounting read-only # OracleASM rpm -Uvh */*/oracleasm-support* rpm -Uvh */*/oracleasm*el5-2* # (注意 - 这是小写 EL5-2。) # 安装介质中缺少;已复制到 RAC 攻击 DVD。 rpm -Uvh */oracleasmlib* [root@collabn1 mnt]# /etc/init.d/oracleasm configure 配置 Oracle ASM 库驱动程序。这将配置 Oracle ASM 库驱动程序的开机属性。以下问题将确定驱动程序是否在开机时加载以及它将具有哪些权限。当前值将在方括号 ('[]') 中显示。按<ENTER>键不输入答案将保留当前值。Ctrl-C 将中止。拥有驱动程序接口的默认用户 []: oracle 拥有驱动程序接口的默认组 []: dba 开机时启动 Oracle ASM 库驱动程序 (y/n) [n]: y 开机时修复 Oracle ASM 磁盘的权限 (y/n) [y]: y 正在写入 Oracle ASM 库驱动程序配置:已完成 初始化 Oracle ASMLib 驱动程序: [ OK ] 正在扫描系统以查找 Oracle ASMLib 磁盘: [ OK ]这些磁盘是共享的,因此您只需要初始化它们一次。
[root@collabn1 ~]# /etc/init.d/oracleasm createdisk data /dev/sdb1 Marking disk "data" as an ASM disk: [ OK ] [root@collabn1 ~]# /etc/init.d/oracleasm createdisk backup /dev/sdc1 Marking disk "backup" as an ASM disk: [ OK ] [root@collabn1 ~]# /etc/init.d/oracleasm listdisks BACKUP DATA
现在,在第二台虚拟机上重复一些步骤
[root@collabn1 ~]# ssh collabn2 [root@collabn2 ~]# cd /mnt # OracleASM rpm -Uvh */*/oracleasm-support* rpm -Uvh */*/oracleasm*el5-2* # Missing from the install media; copied to RAC Attack DVD. rpm -Uvh */oracleasmlib* [root@collabn2 ~]# /etc/init.d/oracleasm configure Configuring the Oracle ASM library driver. This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values will be shown in brackets ('[]'). Hitting <ENTER> without typing an answer will keep that current value. Ctrl-C will abort. Default user to own the driver interface []: oracle Default group to own the driver interface []: dba Start Oracle ASM library driver on boot (y/n) [n]: y Fix permissions of Oracle ASM disks on boot (y/n) [y]: y Writing Oracle ASM library driver configuration: done Initializing the Oracle ASMLib driver: [ OK ] Scanning the system for Oracle ASMLib disks: [ OK ] [root@collabn2 ~]# /etc/init.d/oracleasm listdisks BACKUP DATA
- 以 oracle 用户身份登录 collabn1 并打开一个终端。
- 运行 CVU 来验证您是否已准备好安装 CRS。使用 11gR2 CVU 的新“fixup”功能来创建一个可以修复缺少参数的脚本。[oracle@collabn1 ~]$ /mnt/cdrom*/grid/runcluvfy.sh stage -pre crsinst -n collabn1,collabn2 -fixup -r 11gR2 执行集群服务设置前的检查 检查节点可达性... 从节点“collabn1”进行的节点可达性检查已通过 检查用户等效性... 用户“oracle”的用户等效性检查已通过 检查节点连接性... 检查主机配置文件... 主机配置文件验证成功 节点连接性已通过子网“192.168.78.0”并包含节点(s)collabn2,collabn1 TCP 连接性检查已通过子网“192.168.78.0” 节点连接性已通过子网“172.16.100.0”并包含节点(s)collabn2,collabn1 TCP 连接性检查已通过子网“172.16.100.0” 在子网“192.168.78.0”上找到的可能是 VIP 候选的接口是: collabn2 eth0:192.168.78.52 collabn1 eth0:192.168.78.51 在子网“172.16.100.0”上找到的可能是专用互连候选的接口是: collabn2 eth1:172.16.100.52 collabn1 eth1:172.16.100.51 节点连接性检查已通过 总内存检查失败 检查在节点上失败:collabn2,collabn1 可用内存检查已通过 交换空间检查失败 "collabn2:/tmp" 的可用磁盘空间检查已通过 "collabn1:/tmp" 的可用磁盘空间检查已通过 用户“oracle”存在性检查已通过 组“oinstall”存在性检查已通过 组“dba”存在性检查已通过 用户“oracle”在组“oinstall”中的成员身份检查 [作为主用户] 已通过 用户“oracle”在组“dba”中的成员身份检查已通过 运行级别检查已通过 “最大打开文件描述符”的硬限制检查已通过 “最大打开文件描述符”的软限制检查已通过 “最大用户进程”的硬限制检查已通过 “最大用户进程”的软限制检查已通过 系统体系结构检查已通过 内核版本检查已通过 “semmsl”的内核参数检查已通过 “semmns”的内核参数检查已通过 “semopm”的内核参数检查已通过 “semmni”的内核参数检查已通过 “shmmax”的内核参数检查已通过 “shmmni”的内核参数检查已通过 “shmall”的内核参数检查已通过 “file-max”的内核参数检查失败 检查在节点上失败:collabn2,collabn1 “ip_local_port_range”的内核参数检查已通过 “rmem_default”的内核参数检查已通过 “rmem_max”的内核参数检查已通过 “wmem_default”的内核参数检查已通过 “wmem_max”的内核参数检查失败 检查在节点上失败:collabn2,collabn1 “aio-max-nr”的内核参数检查失败 检查在节点上失败:collabn2,collabn1 包“make-3.81”存在性检查已通过 包“binutils-2.17.50.0.6”存在性检查已通过 包“gcc-4.1.2”存在性检查已通过 包“gcc-c++-4.1.2”存在性检查已通过 包“libgomp-4.1.2”存在性检查已通过 包“libaio-0.3.106”存在性检查已通过 包“glibc-2.5-24”存在性检查已通过 包“compat-libstdc++-33-3.2.3”存在性检查已通过 包“elfutils-libelf-0.125”存在性检查已通过 包“elfutils-libelf-devel-0.125”存在性检查已通过 包“glibc-common-2.5”存在性检查已通过 包“glibc-devel-2.5”存在性检查已通过 包“glibc-headers-2.5”存在性检查已通过 包“libaio-devel-0.3.106”存在性检查已通过 包“libgcc-4.1.2”存在性检查已通过 包“libstdc++-4.1.2”存在性检查已通过 包“libstdc++-devel-4.1.2”存在性检查已通过 包“sysstat-7.0.2”存在性检查已通过 包“unixODBC-2.2.11”存在性检查已通过 包“unixODBC-devel-2.2.11”存在性检查已通过 包“ksh-20060214”存在性检查已通过 检查具有 UID 值 0 的多个用户已通过 当前组 ID 检查已通过 核心文件名称模式一致性检查已通过。用户“oracle”不是“root”组的一部分。检查已通过 默认用户文件创建掩码检查已通过 使用网络时间协议 (NTP) 启动时钟同步检查... NTP 配置文件检查已开始... NTP 配置文件检查已通过 检查守护进程活动性... “ntpd”的活动性检查失败 检查在节点上失败:collabn2,collabn1 PRVF-5415 : 检查 NTP 守护进程是否正在运行失败 使用网络时间协议 (NTP) 进行的时钟同步检查失败 已针对以下节点(s)生成修复信息:collabn2,collabn1 请以“root”用户身份在每个节点上运行以下脚本以执行修复: '/tmp/CVU_11.2.0.1.0_oracle/runfixup.sh' 集群服务设置前的检查在所有节点上均不成功。
- 切换到 root 用户并在 两个节点 上运行修复脚本。collabn1:/home/oracle[RAC1]$ su - 密码: -bash: oraenv: No such file or directory [root@collabn1 ~]# /tmp/CVU_11.2.0.1.0_oracle/runfixup.sh 使用的响应文件是 :/tmp/CVU_11.2.0.1.0_oracle/fixup.response 使用的启用文件是 :/tmp/CVU_11.2.0.1.0_oracle/fixup.enable 日志文件位置:/tmp/CVU_11.2.0.1.0_oracle/orarun.log 正在设置内核参数... fs.file-max = 6815744 net.ipv4.ip_local_port_range = 9000 65500 net.core.wmem_max=262144 net.core.wmem_max = 1048576 fs.aio-max-nr = 1048576 [root@collabn1 ~]# ssh collabn2 /tmp/CVU_11.2.0.1.0_oracle/runfixup.sh root@collabn2 的密码: /root/.bashrc: line 16: oraenv: No such file or directory 使用的响应文件是 :/tmp/CVU_11.2.0.1.0_oracle/fixup.response 使用的启用文件是 :/tmp/CVU_11.2.0.1.0_oracle/fixup.enable 日志文件位置:/tmp/CVU_11.2.0.1.0_oracle/orarun.log 正在设置内核参数... fs.file-max = 6815744 net.ipv4.ip_local_port_range = 9000 65500 net.core.wmem_max=262144 net.core.wmem_max = 1048576 fs.aio-max-nr = 1048576
- 以oracle用户身份,再次运行CVU以确保修复脚本正常运行。NTP、内存和交换空间检查可能会失败 - 但对于我们的VMware测试集群,这是可以接受的。[root@collabn1 ~]# exit logout collabn1:/home/oracle[RAC1]$ /mnt/cdrom*/grid/runcluvfy.sh stage -pre crsinst -n collabn1,collabn2 -r 11gR2 ... 总内存检查失败 ... 交换空间检查失败 ... 内核参数检查通过 "file-max" ... 内核参数检查通过 "wmem_max" 内核参数检查通过 "aio-max-nr" ... 活性检查失败 "ntpd" ...
- 以oracle用户身份,启动网格安装程序。在第一个屏幕上,选择为集群安装和配置网格基础设施,然后单击下一步。[oracle@collabn1 ~]$ /mnt/cdrom*/grid/runInstaller
- 选择高级安装,然后单击下一步。
- 接受默认语言(英语)并选择下一步。
- 将集群命名为collab,并确保SCAN名称为collab-scan,端口为1521,然后单击下一步。
- 添加节点collabn2,其VIP为collabn2-vip,然后选择下一步以验证集群配置。
- 验证子网192.168.78.0上的eth0是否为PUBLIC,子网172.16.100.0上的eth1是否为PRIVATE,然后单击下一步。
- 选择将集群软件文件存储在ASM中,然后选择下一步。
- 创建一个名为DATA的磁盘组,使用外部冗余,只使用磁盘ORCL:DATA,然后单击下一步。
- 选择对所有帐户使用相同的密码,并输入密码racattack,然后单击下一步。(忽略Oracle不喜欢此密码的消息。)
- 不要使用IPMI。单击下一步。
- 将OSDBA组设置为asmdba,将OSOPER组设置为asmoper,将OSASM组设置为asmadmin。然后单击下一步。
- 接受ORACLE_BASE位置/u01/app/oracle,并使用ORACLE_HOME位置/u01/grid/oracle/product/11.2.0/grid_1。然后单击下一步。
- 接受默认的库存位置/u01/app/oraInventory并选择下一步
- 先决条件检查将执行。将发出警告,说明三个检查失败:物理内存、交换空间和网络时间协议。单击复选框以忽略所有,然后单击下一步。
-
在oracle用户主目录中保存一个名为grid.rsp的响应文件。然后单击完成以安装网格基础设施。
- 出现提示时,以root用户身份打开一个终端并运行两个root.sh脚本。确保在两个节点上都运行这两个脚本!
[oracle@collabn1 ~]$ su - Password: racattack [root@collabn1 ~]# /u01/app/oraInventory/orainstRoot.sh Changing permissions of /u01/app/oraInventory. Adding read, write permissions for group. Removing read,write,execute permissions for world. Changing groupname of /u01/app/oraInventory to oinstall. The execution of the script is complete. [root@collabn1 ~]# /u01/grid/oracle/product/11.2.0/grid_1/root.sh Running Oracle 11g root.sh script... The following environment variables are set as: ORACLE_OWNER= oracle ORACLE_HOME= /u01/grid/oracle/product/11.2.0/grid_1 Enter the full pathname of the local bin directory: [/usr/local/bin]: /usr/bin Copying dbhome to /usr/bin ... Copying oraenv to /usr/bin ... Copying coraenv to /usr/bin ... Entries will be added to the /etc/oratab file as needed by Database Configuration Assistant when a database is created Finished running generic part of root.sh script. Now product-specific root actions will be performed. 2011-03-30 16:49:13: Parsing the host name 2011-03-30 16:49:13: Checking for super user privileges 2011-03-30 16:49:13: User has super user privileges Using configuration parameter file: /u01/grid/oracle/product/11.2.0/grid_1/crs/install/crsconfig_params Creating trace directory LOCAL ADD MODE Creating OCR keys for user 'root', privgrp 'root'.. Operation successful. root wallet root wallet cert root cert export peer wallet profile reader wallet pa wallet peer wallet keys pa wallet keys peer cert request pa cert request peer cert pa cert peer root cert TP profile reader root cert TP pa root cert TP peer pa cert TP pa peer cert TP profile reader pa cert TP profile reader peer cert TP peer user cert pa user cert Adding daemon to inittab CRS-4123: Oracle High Availability Services has been started. ohasd is starting CRS-2672: Attempting to start 'ora.gipcd' on 'collabn1' CRS-2672: Attempting to start 'ora.mdnsd' on 'collabn1' CRS-2676: Start of 'ora.mdnsd' on 'collabn1' succeeded CRS-2676: Start of 'ora.gipcd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.gpnpd' on 'collabn1' CRS-2676: Start of 'ora.gpnpd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.cssdmonitor' on 'collabn1' CRS-2676: Start of 'ora.cssdmonitor' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.cssd' on 'collabn1' CRS-2672: Attempting to start 'ora.diskmon' on 'collabn1' CRS-2676: Start of 'ora.diskmon' on 'collabn1' succeeded CRS-2676: Start of 'ora.cssd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.ctssd' on 'collabn1' CRS-2676: Start of 'ora.ctssd' on 'collabn1' succeeded ASM created and started successfully. DiskGroup DATA created successfully. clscfg: -install mode specified Successfully accumulated necessary OCR keys. Creating OCR keys for user 'root', privgrp 'root'.. Operation successful. CRS-2672: Attempting to start 'ora.crsd' on 'collabn1' CRS-2676: Start of 'ora.crsd' on 'collabn1' succeeded CRS-4256: Updating the profile Successful addition of voting disk 6b7c5142d3214fe9bf4d4273f0ff11fd. Successfully replaced voting disk group with +DATA. CRS-4256: Updating the profile CRS-4266: Voting file(s) successfully replaced ## STATE File Universal Id File Name Disk group -- ----- ----------------- --------- --------- 1. ONLINE 6b7c5142d3214fe9bf4d4273f0ff11fd (ORCL:DATA) [DATA] Located 1 voting disk(s). CRS-2673: Attempting to stop 'ora.crsd' on 'collabn1' CRS-2677: Stop of 'ora.crsd' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.asm' on 'collabn1' CRS-2677: Stop of 'ora.asm' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.ctssd' on 'collabn1' CRS-2677: Stop of 'ora.ctssd' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.cssdmonitor' on 'collabn1' CRS-2677: Stop of 'ora.cssdmonitor' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.cssd' on 'collabn1' CRS-2677: Stop of 'ora.cssd' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.gpnpd' on 'collabn1' CRS-2677: Stop of 'ora.gpnpd' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.gipcd' on 'collabn1' CRS-2677: Stop of 'ora.gipcd' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.mdnsd' on 'collabn1' CRS-2677: Stop of 'ora.mdnsd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.mdnsd' on 'collabn1' CRS-2676: Start of 'ora.mdnsd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.gipcd' on 'collabn1' CRS-2676: Start of 'ora.gipcd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.gpnpd' on 'collabn1' CRS-2676: Start of 'ora.gpnpd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.cssdmonitor' on 'collabn1' CRS-2676: Start of 'ora.cssdmonitor' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.cssd' on 'collabn1' CRS-2672: Attempting to start 'ora.diskmon' on 'collabn1' CRS-2676: Start of 'ora.diskmon' on 'collabn1' succeeded CRS-2676: Start of 'ora.cssd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.ctssd' on 'collabn1' CRS-2676: Start of 'ora.ctssd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.asm' on 'collabn1' CRS-2676: Start of 'ora.asm' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.crsd' on 'collabn1' CRS-2676: Start of 'ora.crsd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.evmd' on 'collabn1' CRS-2676: Start of 'ora.evmd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.asm' on 'collabn1' CRS-2676: Start of 'ora.asm' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.DATA.dg' on 'collabn1' CRS-2676: Start of 'ora.DATA.dg' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.registry.acfs' on 'collabn1' CRS-2676: Start of 'ora.registry.acfs' on 'collabn1' succeeded collabn1 2011/03/30 16:59:35 /u01/grid/oracle/product/11.2.0/grid_1/cdata/collabn1/backup_20110330_165935.olr Preparing packages for installation... cvuqdisk-1.0.7-1 Configure Oracle Grid Infrastructure for a Cluster ... succeeded Updating inventory properties for clusterware Starting Oracle Universal Installer... Checking swap space: must be greater than 500 MB. Actual 968 MB Passed The inventory pointer is located at /etc/oraInst.loc The inventory is located at /u01/app/oraInventory 'UpdateNodeList' was successful.
在第二个节点上运行任何脚本之前,检查第一个节点上的CPU利用率 - 您刚完成运行脚本的地方。如果%idle为0,则后台仍有进程在运行,您应该等到%idle增加后才继续。您可以使用以下三个命令中的任何一个来监控CPU- top
- vmstat 3
- iostat -x sda sdb sdc 3
- 运行完两个脚本后,返回安装程序窗口并单击确定以继续运行配置助手。
- 集群验证实用程序将失败,因为NTP未运行。如果您愿意,请查看日志文件末尾的错误消息。然后单击确定关闭消息框,并单击下一步以继续。
- 您现在应该看到最终屏幕!单击关闭退出安装程序。
[root@collabn1 ~]# vmstat 3 4 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 660156 11868 6472 263348 33 229 1505 2740 1194 2407 8 22 44 27 0 2 0 660156 11884 6472 263364 0 0 1 3 712 3635 2 4 90 4 0 1 0 660156 11884 6480 263368 0 0 0 34 701 3565 1 3 90 6 0 4 0 660156 11884 6480 263372 0 0 1 5 721 3642 2 8 88 2 0 [root@collabn1 ~]# ssh collabn2 root@collabn2's password: racattack -bash: oraenv: No such file or directory [root@collabn2 ~]# /u01/app/oraInventory/orainstRoot.sh Changing permissions of /u01/app/oraInventory. Adding read, write permissions for group. Removing read,write,execute permissions for world. Changing groupname of /u01/app/oraInventory to oinstall. The execution of the script is complete. [root@collabn2 ~]# /u01/grid/oracle/product/11.2.0/grid_1/root.sh Running Oracle 11g root.sh script... The following environment variables are set as: ORACLE_OWNER= oracle ORACLE_HOME= /u01/grid/oracle/product/11.2.0/grid_1 Enter the full pathname of the local bin directory: [/usr/local/bin]: /usr/bin Copying dbhome to /usr/bin ... Copying oraenv to /usr/bin ... Copying coraenv to /usr/bin ... Entries will be added to the /etc/oratab file as needed by Database Configuration Assistant when a database is created Finished running generic part of root.sh script. Now product-specific root actions will be performed. 2011-03-30 17:04:26: Parsing the host name 2011-03-30 17:04:26: Checking for super user privileges 2011-03-30 17:04:26: User has super user privileges Using configuration parameter file: /u01/grid/oracle/product/11.2.0/grid_1/crs/install/crsconfig_params Creating trace directory LOCAL ADD MODE Creating OCR keys for user 'root', privgrp 'root'.. Operation successful. Adding daemon to inittab CRS-4123: Oracle High Availability Services has been started. ohasd is starting CRS-4402: The CSS daemon was started in exclusive mode but found an active CSS daemon on node collabn1, number 1, and is terminating An active cluster was found during exclusive startup, restarting to join the cluster CRS-2672: Attempting to start 'ora.mdnsd' on 'collabn2' CRS-2676: Start of 'ora.mdnsd' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.gipcd' on 'collabn2' CRS-2676: Start of 'ora.gipcd' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.gpnpd' on 'collabn2' CRS-2676: Start of 'ora.gpnpd' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.cssdmonitor' on 'collabn2' CRS-2676: Start of 'ora.cssdmonitor' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.cssd' on 'collabn2' CRS-2672: Attempting to start 'ora.diskmon' on 'collabn2' CRS-2676: Start of 'ora.diskmon' on 'collabn2' succeeded CRS-2676: Start of 'ora.cssd' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.ctssd' on 'collabn2' CRS-2676: Start of 'ora.ctssd' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.drivers.acfs' on 'collabn2' CRS-2676: Start of 'ora.drivers.acfs' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.asm' on 'collabn2' CRS-2676: Start of 'ora.asm' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.crsd' on 'collabn2' CRS-2676: Start of 'ora.crsd' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.evmd' on 'collabn2' CRS-2676: Start of 'ora.evmd' on 'collabn2' succeeded collabn2 2011/03/30 17:12:32 /u01/grid/oracle/product/11.2.0/grid_1/cdata/collabn2/backup_20110330_171232.olr Preparing packages for installation... cvuqdisk-1.0.7-1 Configure Oracle Grid Infrastructure for a Cluster ... succeeded Updating inventory properties for clusterware Starting Oracle Universal Installer... Checking swap space: must be greater than 500 MB. Actual 1205 MB Passed The inventory pointer is located at /etc/oraInst.loc The inventory is located at /u01/app/oraInventory 'UpdateNodeList' was successful.
这些步骤对于测试或生产环境来说并不必要。但是,它们可能会使您的VMware测试集群更加稳定,并且它们将提供一个关于网格基础设施的良好学习机会。
- 网格基础设施必须只在一个节点上运行才能更改这些设置。以root用户身份关闭collabn2上的集群软件。[oracle@collabn1 ~]$ ssh collabn2 最后登录时间:2011年3月30日星期三 14:50:49 通过键入 'oenv' 设置环境 - 默认值为实例RAC1。 collabn2:/home/oracle[RAC1]$ su - 密码:racattack [root@collabn2 bin]# crsctl stop crs CRS-2791:在'collabn2'上启动Oracle高可用性服务管理资源的关闭 CRS-2673:尝试停止'collabn2'上的'ora.crsd' CRS-2790:在'collabn2'上启动集群就绪服务的管理资源的关闭 ... ... ... CRS-2793:'collabn2'上Oracle高可用性服务管理资源的关闭已完成 CRS-4133:Oracle高可用性服务已停止。
- 返回节点collabn1。以root用户身份,增加misscount,以便CRS在重启之前等待1.5分钟。(VMware可能会在某些笔记本电脑上稍微拖延!)[root@collabn1 ~]# crsctl get css misscount 30 [root@collabn1 ~]# crsctl set css misscount 90 配置参数misscount现在设置为90。
- 增加disktimeout,以便CRS在重启之前等待10分钟以完成I/O。[root@collabn1 ~]# crsctl get css disktimeout 200 [root@collabn1 ~]# crsctl set css disktimeout 600 配置参数disktimeout现在设置为600。
- 在另一个节点上重新启动CRS。[root@collabn1 bin]# ssh collabn2 [root@collabn2 bin]# crsctl start crs
- 以oracle用户身份,使用oenv宏(来自Ardent Performance Computing)为SID+ASM1设置您的环境。然后,键入asmca以启动ASMCA。collabn1:/home/oracle[RAC1]$ oenv 这里的SID是:grid +ASM1 ORACLE_SID = [RAC1] ? +ASM1 ORACLE_HOME=/u01/grid/oracle/product/11.2.0/grid_1 的Oracle基础是/u01/app/oracle collabn1:/home/oracle[+ASM1]$ asmca
- 确保您位于磁盘组选项卡上,然后右键单击DATA磁盘组并选择编辑属性。
- 将数据库兼容性和ADVM兼容性都设置为11.2.0.0.0,然后单击确定。在提示有关提高数据库兼容性时选择是。
- 单击创建按钮添加一个新的磁盘组。
- 将新磁盘组命名为BACKUP。选择外部冗余并选择磁盘ORCL:BACKUP。然后,单击显示高级选项按钮。
- 保留分配单元为1MB,并将所有兼容性参数设置为11.2.0.0.0,然后单击确定。
- 单击退出关闭ASM配置助手。
- 在collabn1上以root用户身份打开一个终端。
- 在两个节点上为两个OCFS卷创建挂载点:/u51和/u52。[root@collabn1 ~]# mkdir /u51 [root@collabn1 ~]# mkdir /u52 [root@collabn1 ~]# ssh collabn2 root@collabn2的密码:racattack [root@collabn2 ~]# mkdir /u51 [root@collabn2 ~]# mkdir /u52
- 从OEL(Oracle Enterprise Linux)安装介质安装并加载OCFS2软件包,然后加载模块。在collabn2上也安装并加载OCFS2。[root@collabn1 ~]# cd /mnt # 来自企业Linux 5磁盘3 rpm -Uvh */*/ocfs2-tools-1.* rpm -Uvh */*/ocfs2-*el5-* rpm -Uvh */*/ocfs2console-* [root@collabn1 mnt]# /etc/init.d/o2cb load 加载模块"configfs": 确定 将configfs文件系统安装到/sys/kernel/config:确定 加载模块"ocfs2_nodemanager": 确定 加载模块"ocfs2_dlm": 确定 加载模块"ocfs2_dlmfs": 确定 创建目录'/dlm':确定 将ocfs2_dlmfs文件系统安装到/dlm:确定 [root@collabn1 ~]# ssh collabn2 root@collabn2的密码:racattack [root@collabn2 ~]# cd /mnt # 来自企业Linux 5磁盘3 rpm -Uvh */*/ocfs2-tools-1.* rpm -Uvh */*/ocfs2-*el5-* rpm -Uvh */*/ocfs2console-* [root@collabn2 mnt]# /etc/init.d/o2cb load 加载模块"configfs": 确定 将configfs文件系统安装到/sys/kernel/config:确定 加载模块"ocfs2_nodemanager": 确定 加载模块"ocfs2_dlm": 确定 加载模块"ocfs2_dlmfs": 确定 创建目录'/dlm':确定 将ocfs2_dlmfs文件系统安装到/dlm:确定
- 从终端窗口中,以root身份启动ocfs2console
- 从CLUSTER菜单中选择CONFIGURE NODES…。如果您看到集群已启动的通知,请单击关闭按钮确认。
- 点击ADD,输入collabn1和私有 IP 172.16.100.51。接受默认端口。点击OK保存。
- 再次点击ADD,输入collabn2和172.16.100.52。然后选择APPLY,再点击CLOSE关闭窗口。
- 从CLUSTER菜单中选择PROPAGATE CONFIGURATION…。如果提示您接受主机密钥,请输入YES。在两个提示符处输入根密码racattack。当您看到消息“Finished!”时,按下<ALT-C>关闭窗口。
- 从TASKS菜单中选择FORMAT创建 OCFS 文件系统。选择/dev/sdb1并输入卷标u51-data。将其他选项保留为默认值,然后单击OK格式化卷。通过单击YES确认。
- 对卷/dev/sdc1重复上述步骤,并将其命名为u52-backup。
- 从FILE菜单中选择QUIT退出 OCFS2 控制台。
- 在两个节点上配置 OCFS2。我们将使用保守的磁盘心跳超时(300 秒),因为 VMware 在某些笔记本电脑上速度很慢。 [root@collabn1 mnt]# /etc/init.d/o2cb configure 配置 O2CB 驱动程序。这将配置 O2CB 驱动程序的启动时属性。以下问题将决定驱动程序是否在启动时加载。当前值将显示在方括号 ('[]') 中。按<ENTER>而不键入答案将保留该当前值。Ctrl-C 将中止。在启动时加载 O2CB 驱动程序 (y/n) [n]: y 支持 O2CB 的集群堆栈 [o2cb]: 在启动时启动的集群(输入“none”以清除) [ocfs2]: 指定心跳超时阈值 (>=7) [31]: 300 指定网络空闲超时(毫秒) (>=5000) [30000]: 指定网络保活延迟(毫秒) (>=1000) [2000]: 指定网络重新连接延迟(毫秒) (>=2000) [2000]: 正在写入 O2CB 配置:OK 集群 ocfs2 已在线 [root@collabn1 ~]# ssh collabn2 root@collabn2 的密码:racattack [root@collabn2 mnt]# /etc/init.d/o2cb configure 配置 O2CB 驱动程序。这将配置 O2CB 驱动程序的启动时属性。以下问题将决定驱动程序是否在启动时加载。当前值将显示在方括号 ('[]') 中。按<ENTER>而不键入答案将保留该当前值。Ctrl-C 将中止。在启动时加载 O2CB 驱动程序 (y/n) [n]: y 支持 O2CB 的集群堆栈 [o2cb]: 在启动时启动的集群(输入“none”以清除) [ocfs2]: 指定心跳超时阈值 (>=7) [31]: 300 指定网络空闲超时(毫秒) (>=5000) [30000]: 指定网络保活延迟(毫秒) (>=1000) [2000]: 指定网络重新连接延迟(毫秒) (>=2000) [2000]: 正在写入 O2CB 配置:OK 启动 O2CB 集群 ocfs2:OK
- 在运行 ocfs2console 的节点上重新加载 O2CB 驱动程序。 [root@collabn2 mnt]# exit 注销 与 collabn2 的连接已关闭。 [root@collabn1 mnt]# /etc/init.d/o2cb force-reload 停止 O2CB 集群 ocfs2:OK 卸载 ocfs2_dlmfs 文件系统:OK 卸载模块“ocfs2_dlmfs”:OK 卸载 configfs 文件系统:OK 卸载模块“configfs”:OK 加载文件系统“configfs”:OK 装载 configfs 文件系统到 /sys/kernel/config:OK 加载文件系统“ocfs2_dlmfs”:OK 装载 ocfs2_dlmfs 文件系统到 /dlm:OK 启动 O2CB 集群 ocfs2:OK
- 编辑/etc/fstab,添加新文件系统的条目。 [root@collabn1 ~]# vi /etc/fstab LABEL=u51-data /u51 ocfs2 _netdev,datavolume,nointr 0 0 LABEL=u52-backup /u52 ocfs2 _netdev,datavolume,nointr 0 0
- 挂载卷并为 Oracle 数据库文件创建目录。 [root@collabn1 ~]# mount /u51 [root@collabn1 ~]# mount /u52 [root@collabn1 ~]# mkdir /u51/oradata [root@collabn1 ~]# mkdir /u52/oradata [root@collabn1 ~]# mkdir /u51/cluster [root@collabn1 ~]# chown oracle:dba /u51/oradata /u52/oradata /u51/cluster [root@collabn1 ~]# df -h 文件系统 尺寸 已用 可用 使用% 挂载点 /dev/sdb1 3.3G 279M 3.0G 9% /u51 /dev/sdc1 3.3G 279M 3.0G 9% /u52
- 以root身份登录第二个节点collabn2,并在那里重复这些步骤。 [root@collabn1 ~]# ssh collabn2 root@collabn2 的密码:racattack [root@collabn2 ~]# vi /etc/fstab LABEL=u51-data /u51 ocfs2 _netdev,datavolume,nointr 0 0 LABEL=u52-backup /u52 ocfs2 _netdev,datavolume,nointr 0 0 [root@collabn2 ~]# mount /u51 [root@collabn2 ~]# mount /u52 [root@collabn2 ~]# df -h 文件系统 尺寸 已用 可用 使用% 挂载点 /dev/sdb1 3.3G 279M 3.0G 9% /u51 /dev/sdc1 3.3G 279M 3.0G 9% /u52 [root@collabn2 ~]# ls -l /u5* /u51: 总计 0 drwxr-xr-x 2 oracle dba 3896 9月 26 15:30 cluster drwxr-xr-x 2 root root 3896 9月 26 15:26 lost+found drwxr-xr-x 2 oracle dba 3896 9月 26 15:29 oradata /u52: 总计 0 drwxr-xr-x 2 root root 3896 9月 26 15:26 lost+found drwxr-xr-x 2 oracle dba 3896 9月 26 15:30 oradata
- 可选地,检查/var/log/messages和dmesg输出以获取与 OCFS2 相关的状态消息。
集群验证工具(共享文件系统)
[edit | edit source]- 以 oracle 用户身份登录 collabn1 并打开一个终端。
- 运行CVU以验证您是否已准备好安装 CRS。使用 11gR2 CVU 的新“fixup”功能创建可以修复缺少参数的脚本。 [oracle@collabn1 ~]$ /mnt/cdrom*/grid/runcluvfy.sh stage -pre crsinst -n collabn1,collabn2 -fixup -r 11gR2 正在执行集群服务设置的预检查 正在检查节点可达性... 节点可达性检查已从节点“collabn1”通过 正在检查用户等效性... 用户等效性检查已针对用户“oracle”通过 正在检查节点连接性... 正在检查 hosts 配置文件... Hosts 配置文件的验证已成功 节点连接性已针对子网“192.168.78.0”与节点(s) collabn2、collabn1 通过 TCP 连接性检查已针对子网“192.168.78.0”通过 节点连接性已针对子网“172.16.100.0”与节点(s) collabn2、collabn1 通过 TCP 连接性检查已针对子网“172.16.100.0”通过 在子网“192.168.78.0”上找到的可能适合 VIP 的接口是: collabn2 eth0:192.168.78.52 collabn1 eth0:192.168.78.51 在子网“172.16.100.0”上找到的可能适合私有互连的接口是: collabn2 eth1:172.16.100.52 collabn1 eth1:172.16.100.51 节点连接性检查已通过 总内存检查失败 检查已在节点(s) 上失败:collabn2、collabn1 可用内存检查已通过 交换空间检查失败 已为“collabn2:/tmp”通过的可用磁盘空间检查 已为“collabn1:/tmp”通过的可用磁盘空间检查 用户存在性检查已针对“oracle”通过 组存在性检查已针对“oinstall”通过 组存在性检查已针对“dba”通过 用户“oracle”在组“oinstall”中的成员资格检查 [作为主] 已通过 用户“oracle”在组“dba”中的成员资格检查已通过 运行级别检查已通过 已为“最大打开文件描述符”通过硬限制 已为“最大打开文件描述符”通过软限制 已为“最大用户进程”通过硬限制 已为“最大用户进程”通过软限制 系统架构检查已通过 内核版本检查已通过 已为“semmsl”通过内核参数检查 已为“semmns”通过内核参数检查 已为“semopm”通过内核参数检查 已为“semmni”通过内核参数检查 已为“shmmax”通过内核参数检查 已为“shmmni”通过内核参数检查 已为“shmall”通过内核参数检查 已为“file-max”失败内核参数检查 检查已在节点(s) 上失败:collabn2、collabn1 已为“ip_local_port_range”通过内核参数检查 已为“rmem_default”通过内核参数检查 已为“rmem_max”通过内核参数检查 已为“wmem_default”通过内核参数检查 已为“wmem_max”失败内核参数检查 检查已在节点(s) 上失败:collabn2、collabn1 已为“aio-max-nr”失败内核参数检查 检查已在节点(s) 上失败:collabn2、collabn1 包存在性检查已针对“make-3.81”通过 包存在性检查已针对“binutils-2.17.50.0.6”通过 包存在性检查已针对“gcc-4.1.2”通过 包存在性检查已针对“gcc-c++-4.1.2”通过 包存在性检查已针对“libgomp-4.1.2”通过 包存在性检查已针对“libaio-0.3.106”通过 包存在性检查已针对“glibc-2.5-24”通过 包存在性检查已针对“compat-libstdc++-33-3.2.3”通过 包存在性检查已针对“elfutils-libelf-0.125”通过 包存在性检查已针对“elfutils-libelf-devel-0.125”通过 包存在性检查已针对“glibc-common-2.5”通过 包存在性检查已针对“glibc-devel-2.5”通过 包存在性检查已针对“glibc-headers-2.5”通过 包存在性检查已针对“libaio-devel-0.3.106”通过 包存在性检查已针对“libgcc-4.1.2”通过 包存在性检查已针对“libstdc++-4.1.2”通过 包存在性检查已针对“libstdc++-devel-4.1.2”通过 包存在性检查已针对“sysstat-7.0.2”通过 包存在性检查已针对“unixODBC-2.2.11”通过 包存在性检查已针对“unixODBC-devel-2.2.11”通过 包存在性检查已针对“ksh-20060214”通过 已针对具有 UID 值 0 的多个用户通过检查 当前组 ID 检查已通过 核心文件名称模式一致性检查已通过。用户“oracle”不属于“root”组。检查已通过 默认用户文件创建掩码检查已通过 正在使用网络时间协议 (NTP) 启动时钟同步检查... NTP 配置文件检查已开始... NTP 配置文件检查已通过 正在检查守护进程活跃性... 已为“ntpd”失败活跃性检查 检查已在节点(s) 上失败:collabn2、collabn1 PRVF-5415 : 检查 NTP 守护进程是否正在运行已失败 使用网络时间协议 (NTP) 的时钟同步检查已失败 已为以下节点(s) 生成修复信息:collabn2、collabn1 请以“root”用户身份在每个节点上运行以下脚本以执行修复:'/tmp/CVU_11.2.0.1.0_oracle/runfixup.sh' 在所有节点上,集群服务设置的预检查均不成功。
- 切换到 root 用户并在 两个节点 上运行修复脚本。collabn1:/home/oracle[RAC1]$ su - 密码: -bash: oraenv: No such file or directory [root@collabn1 ~]# /tmp/CVU_11.2.0.1.0_oracle/runfixup.sh 使用的响应文件是 :/tmp/CVU_11.2.0.1.0_oracle/fixup.response 使用的启用文件是 :/tmp/CVU_11.2.0.1.0_oracle/fixup.enable 日志文件位置:/tmp/CVU_11.2.0.1.0_oracle/orarun.log 正在设置内核参数... fs.file-max = 6815744 net.ipv4.ip_local_port_range = 9000 65500 net.core.wmem_max=262144 net.core.wmem_max = 1048576 fs.aio-max-nr = 1048576 [root@collabn1 ~]# ssh collabn2 /tmp/CVU_11.2.0.1.0_oracle/runfixup.sh root@collabn2 的密码: /root/.bashrc: line 16: oraenv: No such file or directory 使用的响应文件是 :/tmp/CVU_11.2.0.1.0_oracle/fixup.response 使用的启用文件是 :/tmp/CVU_11.2.0.1.0_oracle/fixup.enable 日志文件位置:/tmp/CVU_11.2.0.1.0_oracle/orarun.log 正在设置内核参数... fs.file-max = 6815744 net.ipv4.ip_local_port_range = 9000 65500 net.core.wmem_max=262144 net.core.wmem_max = 1048576 fs.aio-max-nr = 1048576
- 以oracle用户身份,再次运行CVU以确保修复脚本正常运行。NTP、内存和交换空间检查可能会失败 - 但对于我们的VMware测试集群,这是可以接受的。[root@collabn1 ~]# exit logout collabn1:/home/oracle[RAC1]$ /mnt/cdrom*/grid/runcluvfy.sh stage -pre crsinst -n collabn1,collabn2 -r 11gR2 ... 总内存检查失败 ... 交换空间检查失败 ... 内核参数检查通过 "file-max" ... 内核参数检查通过 "wmem_max" 内核参数检查通过 "aio-max-nr" ... 活性检查失败 "ntpd" ...
11gR2 错误解决方法
[edit | edit source]在大型集群数据库部署中,多个 NFS 设备和大型机集群文件系统非常常见。我们将在此处使用 OCFS2 来使用文件系统练习 11gR2 RAC。
注意:11gR2 集群软件存在一个错误——它不允许集群文件位于 OCFS2 上(即使这是一个受支持的配置)。为了解决此错误,我们将使用本地“回环”NFS 装载将 OCFS2 目录呈现给集群软件。
- 以 **root** 用户身份,按照以下步骤在节点 **collabn1** 上设置本地 NFS 挂载:[root@collabn1 ~]# **mkdir /u61** [root@collabn1 ~]# **vi /etc/fstab** # 在 u61 上创建一个指向 u51 的 NFS 挂载 localhost:/u51 /u61 nfs \ rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,vers=3,timeo=600,noac [root@collabn1 ~]# **vi /etc/exports** /u51 *(rw,no_root_squash,sync) [root@collabn1 ~]# **chkconfig nfs on** [root@collabn1 ~]# **service nfs start** [root@collabn1 ~]# **mount /u61**
- 在节点 **collabn2** 上重复所有这些步骤。[root@collabn1 ~]# **ssh collabn2** [root@collabn2 ~]# **mkdir /u61** [root@collabn2 ~]# **vi /etc/fstab** # 在 u61 上创建一个指向 u51 的 NFS 挂载 localhost:/u51 /u61 nfs \ rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,vers=3,timeo=600,noac [root@collabn2 ~]# **vi /etc/exports** /u51 *(rw,no_root_squash,sync) [root@collabn2 ~]# **chkconfig nfs on** [root@collabn2 ~]# **service nfs start** [root@collabn2 ~]# **mount /u61**
在大型集群数据库部署中,多个 NFS 设备和大型机集群文件系统非常常见。我们将在此处使用 OCFS2 来使用文件系统练习 11gR2 RAC。
- 以oracle用户身份,启动网格安装程序。在第一个屏幕上,选择为集群安装和配置网格基础设施,然后单击下一步。[oracle@collabn1 ~]$ /mnt/cdrom*/grid/runInstaller
- 选择高级安装,然后单击下一步。
- 接受默认语言(英语)并选择下一步。
- 将集群命名为collab,并确保SCAN名称为collab-scan,端口为1521,然后单击下一步。
- 添加节点collabn2,其VIP为collabn2-vip,然后选择下一步以验证集群配置。
- 验证子网192.168.78.0上的eth0是否为PUBLIC,子网172.16.100.0上的eth1是否为PRIVATE,然后单击下一步。
- 选择将集群软件文件存储在 **共享文件系统** 中,然后选择 **下一步**。
- 对于 OCR,选择外部冗余并输入路径 /u61/cluster/ocr。(这是来自 BUG 修复的 NFS 位置。)单击 **下一步** 继续。
- 对于投票磁盘,执行相同的操作 - 选择外部冗余并输入路径 /u61/cluster/vdsk。(同样,这是来自 BUG 修复的 NFS 位置。)单击 **下一步** 继续。
- 不要使用IPMI。单击下一步。
- 将OSDBA组设置为asmdba,将OSOPER组设置为asmoper,将OSASM组设置为asmadmin。然后单击下一步。
- 接受ORACLE_BASE位置/u01/app/oracle,并使用ORACLE_HOME位置/u01/grid/oracle/product/11.2.0/grid_1。然后单击下一步。
- 接受默认的清单位置,然后选择 **下一步**
- 先决条件检查将执行。将发出警告,说明三个检查失败:物理内存、交换空间和网络时间协议。单击复选框以忽略所有,然后单击下一步。
-
在oracle用户主目录中保存一个名为grid.rsp的响应文件。然后单击完成以安装网格基础设施。
- 出现提示时,以root用户身份打开一个终端并运行两个root.sh脚本。确保在两个节点上都运行这两个脚本!
[oracle@collabn1 ~]$ su - Password: racattack [root@collabn1 ~]# /u01/app/oraInventory/orainstRoot.sh Changing permissions of /u01/app/oraInventory. Adding read, write permissions for group. Removing read,write,execute permissions for world. Changing groupname of /u01/app/oraInventory to oinstall. The execution of the script is complete. [root@collabn1 ~]# /u01/grid/oracle/product/11.2.0/grid_1/root.sh Running Oracle 11g root.sh script... The following environment variables are set as: ORACLE_OWNER= oracle ORACLE_HOME= /u01/grid/oracle/product/11.2.0/grid_1 Enter the full pathname of the local bin directory: [/usr/local/bin]: /usr/bin Copying dbhome to /usr/bin ... Copying oraenv to /usr/bin ... Copying coraenv to /usr/bin ... Entries will be added to the /etc/oratab file as needed by Database Configuration Assistant when a database is created Finished running generic part of root.sh script. Now product-specific root actions will be performed. 2011-03-30 16:49:13: Parsing the host name 2011-03-30 16:49:13: Checking for super user privileges 2011-03-30 16:49:13: User has super user privileges Using configuration parameter file: /u01/grid/oracle/product/11.2.0/grid_1/crs/install/crsconfig_params Creating trace directory LOCAL ADD MODE Creating OCR keys for user 'root', privgrp 'root'.. Operation successful. root wallet root wallet cert root cert export peer wallet profile reader wallet pa wallet peer wallet keys pa wallet keys peer cert request pa cert request peer cert pa cert peer root cert TP profile reader root cert TP pa root cert TP peer pa cert TP pa peer cert TP profile reader pa cert TP profile reader peer cert TP peer user cert pa user cert Adding daemon to inittab CRS-4123: Oracle High Availability Services has been started. ohasd is starting CRS-2672: Attempting to start 'ora.gipcd' on 'collabn1' CRS-2672: Attempting to start 'ora.mdnsd' on 'collabn1' CRS-2676: Start of 'ora.mdnsd' on 'collabn1' succeeded CRS-2676: Start of 'ora.gipcd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.gpnpd' on 'collabn1' CRS-2676: Start of 'ora.gpnpd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.cssdmonitor' on 'collabn1' CRS-2676: Start of 'ora.cssdmonitor' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.cssd' on 'collabn1' CRS-2672: Attempting to start 'ora.diskmon' on 'collabn1' CRS-2676: Start of 'ora.diskmon' on 'collabn1' succeeded CRS-2676: Start of 'ora.cssd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.ctssd' on 'collabn1' CRS-2676: Start of 'ora.ctssd' on 'collabn1' succeeded clscfg: -install mode specified Successfully accumulated necessary OCR keys. Creating OCR keys for user 'root', privgrp 'root'.. Operation successful. CRS-2672: Attempting to start 'ora.crsd' on 'collabn1' CRS-2676: Start of 'ora.crsd' on 'collabn1' succeeded Now formatting voting disk: /u61/cluster/vdsk. CRS-4603: Successful addition of voting disk /u61/cluster/vdsk. ## STATE File Universal Id File Name Disk group -- ----- ----------------- --------- --------- 1. ONLINE 59f9f62cc0f44f35bff552ced06e35ee (/u61/cluster/vdsk) [] Located 1 voting disk(s). CRS-2673: Attempting to stop 'ora.crsd' on 'collabn1' CRS-2677: Stop of 'ora.crsd' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.asm' on 'collabn1' CRS-2677: Stop of 'ora.asm' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.ctssd' on 'collabn1' CRS-2677: Stop of 'ora.ctssd' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.cssdmonitor' on 'collabn1' CRS-2677: Stop of 'ora.cssdmonitor' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.cssd' on 'collabn1' CRS-2677: Stop of 'ora.cssd' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.gpnpd' on 'collabn1' CRS-2677: Stop of 'ora.gpnpd' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.gipcd' on 'collabn1' CRS-2677: Stop of 'ora.gipcd' on 'collabn1' succeeded CRS-2673: Attempting to stop 'ora.mdnsd' on 'collabn1' CRS-2677: Stop of 'ora.mdnsd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.mdnsd' on 'collabn1' CRS-2676: Start of 'ora.mdnsd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.gipcd' on 'collabn1' CRS-2676: Start of 'ora.gipcd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.gpnpd' on 'collabn1' CRS-2676: Start of 'ora.gpnpd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.cssdmonitor' on 'collabn1' CRS-2676: Start of 'ora.cssdmonitor' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.cssd' on 'collabn1' CRS-2672: Attempting to start 'ora.diskmon' on 'collabn1' CRS-2676: Start of 'ora.diskmon' on 'collabn1' succeeded CRS-2676: Start of 'ora.cssd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.ctssd' on 'collabn1' CRS-2676: Start of 'ora.ctssd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.asm' on 'collabn1' CRS-2676: Start of 'ora.asm' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.crsd' on 'collabn1' CRS-2676: Start of 'ora.crsd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.evmd' on 'collabn1' CRS-2676: Start of 'ora.evmd' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.asm' on 'collabn1' CRS-2676: Start of 'ora.asm' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.DATA.dg' on 'collabn1' CRS-2676: Start of 'ora.DATA.dg' on 'collabn1' succeeded CRS-2672: Attempting to start 'ora.registry.acfs' on 'collabn1' CRS-2676: Start of 'ora.registry.acfs' on 'collabn1' succeeded collabn1 2011/03/30 16:59:35 /u01/grid/oracle/product/11.2.0/grid_1/cdata/collabn1/backup_20110330_165935.olr Preparing packages for installation... cvuqdisk-1.0.7-1 Configure Oracle Grid Infrastructure for a Cluster ... succeeded Updating inventory properties for clusterware Starting Oracle Universal Installer... Checking swap space: must be greater than 500 MB. Actual 968 MB Passed The inventory pointer is located at /etc/oraInst.loc The inventory is located at /u01/app/oraInventory 'UpdateNodeList' was successful.
[root@collabn1 ~]# ssh collabn2 root@collabn2's password: racattack -bash: oraenv: No such file or directory [root@collabn2 ~]# /u01/app/oraInventory/orainstRoot.sh Changing permissions of /u01/app/oraInventory. Adding read, write permissions for group. Removing read,write,execute permissions for world. Changing groupname of /u01/app/oraInventory to oinstall. The execution of the script is complete. [root@collabn2 ~]# /u01/grid/oracle/product/11.2.0/grid_1/root.sh Running Oracle 11g root.sh script... The following environment variables are set as: ORACLE_OWNER= oracle ORACLE_HOME= /u01/grid/oracle/product/11.2.0/grid_1 Enter the full pathname of the local bin directory: [/usr/local/bin]: /usr/bin Copying dbhome to /usr/bin ... Copying oraenv to /usr/bin ... Copying coraenv to /usr/bin ... Entries will be added to the /etc/oratab file as needed by Database Configuration Assistant when a database is created Finished running generic part of root.sh script. Now product-specific root actions will be performed. 2011-03-30 17:04:26: Parsing the host name 2011-03-30 17:04:26: Checking for super user privileges 2011-03-30 17:04:26: User has super user privileges Using configuration parameter file: /u01/grid/oracle/product/11.2.0/grid_1/crs/install/crsconfig_params Creating trace directory LOCAL ADD MODE Creating OCR keys for user 'root', privgrp 'root'.. Operation successful. Adding daemon to inittab CRS-4123: Oracle High Availability Services has been started. ohasd is starting CRS-4402: The CSS daemon was started in exclusive mode but found an active CSS daemon on node collabn1, number 1, and is terminating An active cluster was found during exclusive startup, restarting to join the cluster CRS-2672: Attempting to start 'ora.mdnsd' on 'collabn2' CRS-2676: Start of 'ora.mdnsd' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.gipcd' on 'collabn2' CRS-2676: Start of 'ora.gipcd' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.gpnpd' on 'collabn2' CRS-2676: Start of 'ora.gpnpd' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.cssdmonitor' on 'collabn2' CRS-2676: Start of 'ora.cssdmonitor' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.cssd' on 'collabn2' CRS-2672: Attempting to start 'ora.diskmon' on 'collabn2' CRS-2676: Start of 'ora.diskmon' on 'collabn2' succeeded CRS-2676: Start of 'ora.cssd' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.ctssd' on 'collabn2' CRS-2676: Start of 'ora.ctssd' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.drivers.acfs' on 'collabn2' CRS-2676: Start of 'ora.drivers.acfs' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.asm' on 'collabn2' CRS-2676: Start of 'ora.asm' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.crsd' on 'collabn2' CRS-2676: Start of 'ora.crsd' on 'collabn2' succeeded CRS-2672: Attempting to start 'ora.evmd' on 'collabn2' CRS-2676: Start of 'ora.evmd' on 'collabn2' succeeded collabn2 2011/03/30 17:12:32 /u01/grid/oracle/product/11.2.0/grid_1/cdata/collabn2/backup_20110330_171232.olr Preparing packages for installation... cvuqdisk-1.0.7-1 Configure Oracle Grid Infrastructure for a Cluster ... succeeded Updating inventory properties for clusterware Starting Oracle Universal Installer... Checking swap space: must be greater than 500 MB. Actual 1205 MB Passed The inventory pointer is located at /etc/oraInst.loc The inventory is located at /u01/app/oraInventory 'UpdateNodeList' was successful.
- 运行完两个脚本后,返回安装程序窗口并单击确定以继续运行配置助手。
- 集群验证实用程序将失败,因为NTP未运行。如果您愿意,请查看日志文件末尾的错误消息。然后单击确定关闭消息框,并单击下一步以继续。
- 您现在应该看到最终屏幕!单击关闭退出安装程序。
这些步骤对于测试或生产环境来说并不必要。但是,它们可能会使您的VMware测试集群更加稳定,并且它们将提供一个关于网格基础设施的良好学习机会。
- 网格基础设施必须只在一个节点上运行才能更改这些设置。以root用户身份关闭collabn2上的集群软件。[oracle@collabn1 ~]$ ssh collabn2 最后登录时间:2011年3月30日星期三 14:50:49 通过键入 'oenv' 设置环境 - 默认值为实例RAC1。 collabn2:/home/oracle[RAC1]$ su - 密码:racattack [root@collabn2 bin]# crsctl stop crs CRS-2791:在'collabn2'上启动Oracle高可用性服务管理资源的关闭 CRS-2673:尝试停止'collabn2'上的'ora.crsd' CRS-2790:在'collabn2'上启动集群就绪服务的管理资源的关闭 ... ... ... CRS-2793:'collabn2'上Oracle高可用性服务管理资源的关闭已完成 CRS-4133:Oracle高可用性服务已停止。
- 返回节点collabn1。以root用户身份,增加misscount,以便CRS在重启之前等待1.5分钟。(VMware可能会在某些笔记本电脑上稍微拖延!)[root@collabn1 ~]# crsctl get css misscount 30 [root@collabn1 ~]# crsctl set css misscount 90 配置参数misscount现在设置为90。
- 增加disktimeout,以便CRS在重启之前等待10分钟以完成I/O。[root@collabn1 ~]# crsctl get css disktimeout 200 [root@collabn1 ~]# crsctl set css disktimeout 600 配置参数disktimeout现在设置为600。
- 在另一个节点上重新启动CRS。[root@collabn1 bin]# ssh collabn2 [root@collabn2 bin]# crsctl start crs
- 以 **oracle** 用户身份登录到 **collabn1** 并打开终端。运行 **CLUVFY** 检查您是否已准备好启动数据库安装。内存、交换空间和 NTP/时间检查可能会失败,但其他所有检查都应该成功。[oracle@collabn1 ~]$ **/mnt/cdrom*/grid/runcluvfy.sh stage -pre dbinst
- 使用 **/mnt/cdrom*/database/runInstaller** 启动数据库安装程序。
- 在第一个屏幕上,将电子邮件留空并取消选中“安全更新”选项。单击 **下一步** 继续。选择 **是** 确认您不想输入电子邮件地址。
- 选择仅安装数据库软件,然后单击 **下一步**。
- 选择真实应用集群数据库安装,然后选择所有节点。单击 **下一步** 继续。
- 选择英语,然后单击 **下一步**。
- 选择企业版安装,然后单击 **下一步**。
- 确认 ORACLE_BASE 为 /u01/app/oracle,并将 **更改** ORACLE_HOME 为 /u01/app/oracle/product/11.2.0/db_1。单击 **下一步** 继续。
- 验证 OSDBA 组为 dba,OSOPER 组为 oper。单击 **下一步** 继续。
- 先决条件检查将执行。将发出警告,说明三个检查失败:物理内存、交换空间和网络时间协议。单击复选框以忽略所有,然后单击下一步。
-
在 oracle 用户的主目录中 **保存** 一个名为 db.rsp 的响应文件。然后单击 **完成** 安装 oracle 数据库软件。
- 当出现提示时,以 **root** 用户身份打开终端并运行 root.sh 脚本。输入 /usr/bin 作为本地 bin 目录,并覆盖之前由网格基础设施安装的文件。确保在 **两个节点** 上运行它!
[oracle@collabn1 ~]$ su - Password: racattack [root@collabn1 ~]# /u01/app/oracle/product/11.2.0/db_1/root.sh Running Oracle 11g root.sh script... The following environment variables are set as: ORACLE_OWNER= oracle ORACLE_HOME= /u01/app/oracle/product/11.2.0/db_1 Enter the full pathname of the local bin directory: [/usr/local/bin]: /usr/bin The file "dbhome" already exists in /usr/bin. Overwrite it? (y/n) [n]: y Copying dbhome to /usr/bin ... The file "oraenv" already exists in /usr/bin. Overwrite it? (y/n) [n]: y Copying oraenv to /usr/bin ... The file "coraenv" already exists in /usr/bin. Overwrite it? (y/n) [n]: y Copying coraenv to /usr/bin ... Entries will be added to the /etc/oratab file as needed by Database Configuration Assistant when a database is created Finished running generic part of root.sh script. Now product-specific root actions will be performed. Finished product-specific root actions.
[root@collabn1 ~]# ssh collabn2 root@collabn2's password: racattack Last login: Tue Apr 15 19:34:33 2008 from 192.168.78.1 [root@collabn2 ~]# /u01/app/oracle/product/11.2.0/db_1/root.sh Running Oracle 11g root.sh script... The following environment variables are set as: ORACLE_OWNER= oracle ORACLE_HOME= /u01/app/oracle/product/11.2.0/db_1 Enter the full pathname of the local bin directory: [/usr/local/bin]: /usr/bin The file "dbhome" already exists in /usr/bin. Overwrite it? (y/n) [n]: y Copying dbhome to /usr/bin ... The file "oraenv" already exists in /usr/bin. Overwrite it? (y/n) [n]: y Copying oraenv to /usr/bin ... The file "coraenv" already exists in /usr/bin. Overwrite it? (y/n) [n]: y Copying coraenv to /usr/bin ... Entries will be added to the /etc/oratab file as needed by Database Configuration Assistant when a database is created Finished running generic part of root.sh script. Now product-specific root actions will be performed. Finished product-specific root actions.
- 运行完两个脚本后,返回到安装程序窗口,然后单击 **确定** 完成安装。现在您应该看到最终屏幕!单击 **关闭** 退出安装程序。
- 仅限 ASM 数据库:以 oracle 用户身份登录终端。使用 oenv 宏为 SID +ASM1 设置环境。然后,键入 asmca 启动 ASMCA。 collabn1:/home/oracle[RAC1]$ oenv 这里有 SID:grid +ASM1 ORACLE_SID = [RAC1] ? +ASM1 ORACLE_HOME=/u01/grid/oracle/product/11.2.0/grid_1 的 Oracle 基础为 /u01/app/oracle collabn1:/home/oracle[+ASM1]$ asmca
-
仅限 ASM 数据库:验证两个磁盘组是否已装载。如果已启动或重启,则 BACKUP 磁盘组可能已卸载。要装载它,请右键单击,然后选择在所有节点上装载。单击退出关闭 ASM 配置助手。
- 键入“. oraenv”设置环境。保留默认 SID,并将 /u01/app/oracle/product/11.2.0/db_1 输入 ORACLE_HOME。然后键入 dbca 启动数据库配置助手。
- 在第一个提示符处,选择“真实应用程序集群数据库”,然后单击下一步。
- 选择“创建数据库”,然后单击下一步继续。
- 选择“通用或事务处理”,然后单击下一步继续。
- 选择“管理员管理的数据库”,将全局数据库名称设置为 RAC.vm.ardentperf.com,并选择所有集群节点。然后单击下一步继续。
- 不要配置企业管理器(这里可能没有足够的内存)。取消选中它,然后单击自动维护任务选项卡。
- 禁用自动维护任务(它们可能会真正占用笔记本电脑的 CPU...)。取消选中该框后,单击下一步继续。
- 将所有密码设置为 racattack,然后单击下一步继续。选择是继续,即使 Oracle 不喜欢该密码。
- 根据正在执行的 RAC 攻击实验室的轨道选择存储类型。
Oracle ASM 共享文件系统 选择“自动存储管理 (ASM)”的存储类型。
选择“集群文件系统”的存储类型。
- 配置 Oracle 管理文件。
Oracle ASM 共享文件系统 选择“Oracle 管理文件”,并在数据库区域中键入 +DATA。然后单击下一步继续。
选择“Oracle 管理文件”,并在数据库区域中键入 /u51/oradata。然后单击下一步继续。
- 配置闪回恢复区。
Oracle ASM 共享文件系统 选择“指定闪回恢复区”,并将 +BACKUP 作为目标键入。将大小增加到 3000 MB。不要启用归档,并选择下一步继续。
选择“指定闪回恢复区”,并将 /u52/oradata 作为目标键入。将大小增加到 3000 MB。不要启用归档,并选择下一步继续。
Oracle 将在指定位置自动创建目录树,并按类型和数据库对文件进行分类。 - 选择安装示例模式。选中该框后,单击下一步继续。
- 将内存目标提高到 400 MB,并且不要选中“自动内存管理”。跳过其他选项卡,然后单击下一步继续。
- 接受默认存储设置,然后单击下一步继续。
- 继续并生成脚本(在默认位置),但保留“创建数据库”选项选中。单击完成开始创建数据库。
- 查看摘要,然后单击确定继续。
- DBCA 将在生成脚本后通知您。单击确定继续创建数据库。
- 数据库创建完成后,将出现一个摘要窗口。单击退出关闭安装程序。
- 最后一件事:在两个节点上编辑 /etc/oratab,并将 DB 名称替换为实例名称。还要编辑节点 2 上的 bash_profile,并将实例名称设置为 RAC2。[oracle@collabn1 ~]$ vi /etc/oratab RAC1:/u01/app/oracle/product/11.1.0/db_1:N [oracle@collabn1 ~]$ ssh collabn2 [oracle@collabn2 ~]$ vi /etc/oratab RAC2:/u01/app/oracle/product/11.1.0/db_1:N [oracle@collabn2 ~]$ vi /home/oracle/.bash_profile export ORACLE_SID=RAC2
- 升级到“基本版本”非常复杂,并且始终使用完整的 Oracle 安装程序 (runInstaller)。主要的新功能仅在新的基本版本中引入。
- 补丁集也是使用完整的 Oracle 安装程序安装的。从历史上看,每个补丁集都是通过使用 runInstaller 安装在基本版本 (图示中的顶行) 之上的。但是,从 11.2.0.2 开始,补丁集可以作为新的安装安装,而无需基本版本。现在建议以这种方式“异地”执行补丁集升级。有时,新的功能也会包含在补丁集中(例如 RAT 数据收集)。
- PSU 使用 opatch 安装。它们包括安全更新和重要的错误修复。它们每季度发布一次,并且始终包含最新的 CPU。
- CPU 使用 opatch 安装。CPU 仅包括安全更新,并且也每季度发布一次。在应用任何 PSU 之后,它们无法应用。(直到您升级到新的补丁集或基本版本。)
在执行任何 Oracle 的安装或升级之前,您应始终检查该版本的支持状态和已知问题。Metalink 说明 161818.1 始终是起点 - 打开此说明并进行查看。接下来,按照指向 11.2.0.X 的链接,查看 Metalink 说明 880782.1。最后,按照指向说明 880707.1 的链接,查看 Oracle 11.2.0.1 的已知问题,我们将使用此版本进行本实验室。
这些说明已保存为 HTML 文件,位于讲师提供的虚拟 DVD 上。它位于您的虚拟 RAC 节点的 /mnt/cdrom5 中。 |
对于本实验室,讲师提供了最新的 PSU。PSU 和 CPU 是一个或多个独立补丁的集合。如果独立补丁已通过滚动升级认证,则只能以滚动方式应用于 Oracle 数据库。
- 查看安装说明。我们将安装三个补丁,您可以在以下位置找到 README 文件
- /mnt/cdrom5/patch/psu6-db-12419378/12419378/README.html
- /mnt/cdrom5/patch/psu2-gi-9655006/README.html
- /mnt/cdrom5/patch/opatch-6880880/README.txt
- 首先,我们需要更新 OPatch 实用程序。在讲师提供的 CDROM 上找到补丁 6880880,并将其直接解压缩到网格主目录和数据库主目录中。在解压缩文件之前,请备份现有的 OPatch 程序。$ oenv 这里有 SID:grid +ASM1 RAC1 ORACLE_SID = [RAC1] ? grid $ cd $ORACLE_HOME $ tar czvf ~/gi-opatch-backup_$(date +%Y-%m-%d).tgz OPatch/ ... $ unzip -o /mnt/cdrom*/patch/opatch-6880880/p6880880_112000_LINUX.zip ... $ OPatch/opatch version 调用 OPatch 11.2.0.1.5 OPatch 版本:11.2.0.1.5 OPatch 成功。$ oenv 这里有 SID:grid +ASM1 RAC1 ORACLE_SID = [grid] ? RAC1 $ cd $ORACLE_HOME $ mv OPatch OPatch.backup $ unzip /mnt/cdrom*/patch/opatch-6880880/p6880880_112000_LINUX.zip ... $ OPatch/opatch version 调用 OPatch 11.2.0.1.5 OPatch 版本:11.2.0.1.5 OPatch 成功。
- 在节点collabn2 上重复上一步。$ ssh collabn2 ... 重复上一步 ... $ exit
- 此新版本的 OPatch 要求某些操作使用“OCM 响应文件”。使用 OCM 实用程序生成此文件。我们不想配置 OCM;将用户名留空,并确认“是”,您不想输入任何帐户信息。$ $ORACLE_HOME/OPatch/ocm/bin/emocmrsp -output /home/oracle/ocm.rsp OCM 安装响应生成器 10.3.4.0.0 - 生产版 版权所有 (c) 2005, 2010, Oracle 和/或其附属公司。保留所有权利。提供您的电子邮件地址,以便收到有关安全问题的通知,安装和启动 Oracle 配置管理器。如果您使用 My Oracle Support 电子邮件地址/用户名,则操作更简单。访问 http://www.oracle.com/support/policies.html 查看详细信息。电子邮件地址/用户名:<enter> 您未提供电子邮件地址以接收有关安全问题的通知。您是否希望不了解安全问题 ([Y]es, [N]o) [N]: Y OCM 配置响应文件 (/home/oracle/ocm.rsp) 已成功创建。
- 在讲师提供的 DVD 上找到 Grid Infrastructure 和 Database PSU。$ cd /mnt/cdrom5/patch $ ls opatch-6880880 psu2-gi-9655006 psu6-db-12419378
- 我们知道这些 PSU 可以以滚动方式应用,但请进行验证。$ for D in psu*/[0-9]*; do echo -n $D: cd $D $ORACLE_HOME/OPatch/opatch query -is_rolling_patch | grep rolling cd ../.. done psu2-gi-9655006/9654983: 补丁是滚动补丁:true psu2-gi-9655006/9655006: 补丁是滚动补丁:true psu6-db-12419378/12419378: 补丁是滚动补丁:true
- 我们也知道不会有任何补丁冲突(因为这些是我们安装的第一个补丁) - 但也请进行验证。$ oenv ORACLE_SID = [RAC1] ? grid [grid]$ cd psu2-gi-9655006 psu2-gi-9655006[grid]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir ./9655006 ... 调用 prereq "checkconflictagainstohwithdetail" Prereq "checkConflictAgainstOHWithDetail" 通过。[grid]$ oenv ORACLE_SID = [RAC1] ? RAC1 [RAC1]$ cd ../psu6-db-12419378/ psu6-db-12419378[RAC1]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir ./12419378 ... 调用 prereq "checkconflictagainstohwithdetail" Prereq "checkConflictAgainstOHWithDetail" 通过。
- 自动补丁应用流程将自动关闭并重启节点上的所有数据库进程。但是,我们不希望自动重启,因为我们正在应用两个PSU(一个用于网格,一个用于数据库)。禁用节点collabn1的实例自动启动,并手动关闭实例以进行补丁应用。在生产系统上,所有活动连接都需要在执行此操作之前迁移到另一个实例(例如,使用服务)。
collabn1$ srvctl disable instance -d rac -i RAC1 collabn1$ srvctl stop instance -d rac -i RAC1
- 我们将使用自动补丁应用来应用网格基础设施PSU。首先使用oenv进入网格环境,然后切换到root用户并运行opatch auto。
- 注意:此节点上的任何数据库进程将在补丁过程中自动关闭。
- 当提示输入OCM响应文件路径时,输入/home/oracle/ocm.rsp并按回车键。
- 当提示网格主目录是否共享时,键入yes继续。
确保在命令行中指定网格主目录,以便补丁不会找到数据库主目录并将其应用到那里。$ oenv SIDs here are: grid +ASM1 RAC1 ORACLE_SID = [RAC1] ? grid The Oracle base for ORACLE_HOME=/u01/grid/oracle/product/11.2.0/grid_1 is /u01/app/oracle [grid]$ cd /mnt/cdrom5/patch/psu2-gi-9655006 psu2-gi-9655006[grid]$ su Password: racattack psu2-gi-9655006# $ORACLE_HOME/OPatch/opatch auto . -oh $ORACLE_HOME Executing /usr/bin/perl /u01/grid/oracle/product/11.2.0/grid_1/OPatch/crs/patch112.pl -patchdir . -patchn . -oh /u01/grid/oracle/product/11.2.0/grid_1 -paramfile /u01/grid/oracle/product/11.2.0/grid_1/crs/install/crsconfig_params opatch auto log file location is /u01/grid/oracle/product/11.2.0/grid_1/OPatch/crs/../../cfgtoollogs/opatchauto2011-04-01_22-44-08.log Detected Oracle Clusterware install Using configuration parameter file: /u01/grid/oracle/product/11.2.0/grid_1/crs/install/crsconfig_params OPatch is bundled with OCM, Enter the absolute OCM response file path: /home/oracle/ocm.rsp Can't change permissions of ./.: Read-only file system Unable to determine if /u01/grid/oracle/product/11.2.0/grid_1 is shared oracle home Enter 'yes' if this is not a shared home or if the prerequiste actions are performed to patch this shared home (yes/no): yes Successfully unlock /u01/grid/oracle/product/11.2.0/grid_1 patch ././9655006 apply successful for home /u01/grid/oracle/product/11.2.0/grid_1 patch ././9654983 apply successful for home /u01/grid/oracle/product/11.2.0/grid_1 ACFS-9300: ADVM/ACFS distribution files found. ACFS-9312: Existing ADVM/ACFS installation detected. ACFS-9314: Removing previous ADVM/ACFS installation. ACFS-9315: Previous ADVM/ACFS components successfully removed. ACFS-9307: Installing requested ADVM/ACFS software. ACFS-9308: Loading installed ADVM/ACFS drivers. ACFS-9321: Creating udev for ADVM/ACFS. ACFS-9323: Creating module dependencies - this may take some time. ACFS-9327: Verifying ADVM/ACFS devices. ACFS-9309: ADVM/ACFS installation correctness verified. CRS-4123: Oracle High Availability Services has been started.
- 返回到oracle用户并在讲师提供的DVD上找到数据库PSU。使用oenv进入数据库环境,然后运行opatch apply。
- 在本地模式下运行OPatch,这样它就不会尝试在整个集群中进行自动滚动安装。
- 当提示关于OCM时,将您的用户名留空,并使用"y"确认您不想输入任何帐户信息。
- 当提示本地主目录是否已准备好进行补丁时,键入"y"继续。
- 启用并启动节点collabn1上的Oracle数据库实例。在实例运行后,停止并禁用节点collabn2上的实例。数据库不应该在任何时间点停止运行。$ srvctl enable instance -d rac -i RAC1 $ srvctl start instance -d rac -i RAC1在生产系统上,所有活动连接都需要在此时迁移到另一个实例(例如,使用服务)。
$ srvctl disable instance -d rac -i RAC2 $ srvctl stop instance -d rac -i RAC2
- 使用自动补丁应用来应用collabn2上的网格基础设施PSU。
- 注意:此节点上的任何数据库进程将在补丁过程中自动关闭。
- 将OCM响应文件(/home/oracle/ocm.rsp)复制到collabn2。
- 当提示网格主目录是否共享时,键入yes继续。
确保在命令行中指定网格主目录,以便补丁不会找到数据库主目录并将其应用到那里。$ scp /home/oracle/ocm.rsp collabn2:/home/oracle/ $ ssh collabn2 $ oenv SIDs here are: grid +ASM2 RAC2 ORACLE_SID = [RAC2] ? grid The Oracle base for ORACLE_HOME=/u01/grid/oracle/product/11.2.0/grid_1 is /u01/app/oracle [grid]$ cd /mnt/cdrom5/patch/psu2-gi-9655006 psu2-gi-9655006[grid]$ su Password: racattack psu2-gi-9655006# $ORACLE_HOME/OPatch/opatch auto . -oh $ORACLE_HOME Executing /usr/bin/perl /u01/grid/oracle/product/11.2.0/grid_1/OPatch/crs/patch112.pl -patchdir . -patchn . -oh /u01/grid/oracle/product/11.2.0/grid_1 -paramfile /u01/grid/oracle/product/11.2.0/grid_1/crs/install/crsconfig_params opatch auto log file location is /u01/grid/oracle/product/11.2.0/grid_1/OPatch/crs/../../cfgtoollogs/opatchauto2011-04-02_16-42-52.log Detected Oracle Clusterware install Using configuration parameter file: /u01/grid/oracle/product/11.2.0/grid_1/crs/install/crsconfig_params OPatch is bundled with OCM, Enter the absolute OCM response file path: /home/oracle/ocm.rsp Can't change permissions of ./.: Read-only file system Unable to determine if /u01/grid/oracle/product/11.2.0/grid_1 is shared oracle home Enter 'yes' if this is not a shared home or if the prerequiste actions are performed to patch this shared home (yes/no): yes Successfully unlock /u01/grid/oracle/product/11.2.0/grid_1 patch ././9655006 apply successful for home /u01/grid/oracle/product/11.2.0/grid_1 patch ././9654983 apply successful for home /u01/grid/oracle/product/11.2.0/grid_1 ACFS-9300: ADVM/ACFS distribution files found. ACFS-9312: Existing ADVM/ACFS installation detected. ACFS-9314: Removing previous ADVM/ACFS installation. ACFS-9315: Previous ADVM/ACFS components successfully removed. ACFS-9307: Installing requested ADVM/ACFS software. ACFS-9308: Loading installed ADVM/ACFS drivers. ACFS-9321: Creating udev for ADVM/ACFS. ACFS-9323: Creating module dependencies - this may take some time. ACFS-9327: Verifying ADVM/ACFS devices. ACFS-9309: ADVM/ACFS installation correctness verified. CRS-4123: Oracle High Availability Services has been started.
- 返回到oracle用户并在讲师提供的DVD上找到数据库PSU。使用oenv进入数据库环境,然后运行opatch apply。
- 在本地模式下运行OPatch,这样它就不会尝试在整个集群中进行自动滚动安装。
- 当提示关于OCM时,将您的用户名留空,并使用"y"确认您不想输入任何帐户信息。
- 当提示本地主目录是否已准备好进行补丁时,键入"y"继续。
- 启用并重启节点collabn2上的Oracle数据库实例。$ srvctl enable instance -d rac -i RAC2 $ srvctl start instance -d rac -i RAC2 $ srvctl status database -d rac Instance RAC1 is running on node collabn1 Instance RAC2 is running on node collabn2
- 运行catbundle.sql脚本。$ ss SQL> @?/rdbms/admin/catbundle.sql psu apply $ less /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/catbundle/ catbundle_PSU_RAC_APPLY_2011Apr02_17_28_19.log
- 可选:如果您想更多地练习使用补丁,那么尝试回滚数据库PSU,然后尝试在自动滚动模式(不使用本地标志)或“最小停机时间”模式下应用它。
集群软件测试
[edit | edit source]集群软件和围栏
[edit | edit source]本实验的目的是通过强制触发Oracle集群软件内置围栏功能的配置来演示Oracle集群软件的围栏能力。使用Oracle集群软件,围栏在节点级别通过重启无响应或失败的节点来处理。这类似于“向另一台机器开枪”(STOMITH)算法,但实际上是自杀而不是影响另一台机器。网上有很多很好的资料可以提供更多信息。
- 从一个正常运行的集群开始,数据库实例正在运行。
- 监控每个节点上的集群软件日志文件。在每个节点上,启动一个新的窗口并运行以下命令:[oracle@<node_name> ~]$ tail –f \ > /u01/grid/oracle/product/11.2.0/grid_1/log/`hostname -s`/crsd/crsd.log [oracle@<node_name> ~]$ tail –f \ > /u01/grid/oracle/product/11.2.0/grid_1/log/`hostname -s`/cssd/ocssd.log
- 我们将模拟“拔掉”网络接口,方法是将一个专用网络接口关闭。在collabn2节点上,通过运行以下命令(以root用户身份)关闭专用网络接口:[root@collabn2 ~]# ifconfig eth1 down或者,您也可以通过在VMware中将HostOnly网络适配器关闭来模拟这种情况。
- 运行完此命令后,观察您在步骤2中开始监控的日志文件。您应该在这些日志文件中看到错误,最终(可能需要一两分钟,字面上)您将观察到一个节点自行重启。如果您使用ifconfig触发故障,那么节点将重新加入集群,实例应该自动启动。如果您使用VMware触发故障,那么节点将不会重新加入集群。
- 哪个文件包含指示节点未重新加入集群的原因的错误消息?
- 重启的节点是否总是与发生故障的节点相同?为什么或为什么不?
本实验的目标是演示 Oracle 快速应用程序通知 (FAN) 呼叫。在 11g 之前的版本中,这些也称为 Oracle 集群软件呼叫。
此功能是 Oracle 集群软件的一个相对鲜为人知的特性,它可以触发脚本(或包含脚本的整个目录),以在发生集群范围事件时执行您希望执行的任何任务。
有关更多信息,请参阅此处文档:http://download.oracle.com/docs/cd/B28359_01/rac.111/b28254/hafeats.htm#BABGCEBF
在本练习中,我们将在每个节点上配置一些 FAN 呼叫脚本,然后触发各种集群事件,以查看每个事件如何触发呼叫脚本。
- 从一个正常的运行集群开始,两个节点都已启动并运行。
- 从每个服务器上的一个 shell 提示符(以 oracle 用户身份登录)开始,导航到 /u01/grid/oracle/product/11.2.0/grid_1/racg/usrco。使用 vi(或您喜欢的编辑器)在该目录中创建一个名为 callout1.sh 的文件。文件内容应如下: #!/bin/ksh umask 022 FAN_LOGFILE=/tmp/`hostname`_uptime.log echo $* "reported="`date` >> $FAN_LOGFILE &请注意,主机名和日期命令周围使用了反引号。
- 确保文件的权限设置为 755,使用以下命令: [oracle@<node_name> ~]$ chmod 755 \ > /u01/grid/oracle/product/11.2.0/grid_1/racg/usrcocallout1.sh
- 监控每个节点上集群软件的日志文件。在每个节点上,启动一个新窗口并运行以下命令: [oracle@<node_name> ~]$ tail –f \ /u01/grid/oracle/product/11.2.0/grid_1/log/`hostname -s`/crsd/crsd.log
- 接下来,我们需要触发一个会导致呼叫触发的事件。一个这样的事件是节点关闭。关闭节点 collabn2 上的集群软件。 [root@collabn2 ~]# crsctl stop crs 正在停止资源。这可能需要几分钟。已成功停止 Oracle 集群软件资源 正在停止集群同步服务。正在关闭集群同步服务守护进程。已成功发出关闭请求。
- 执行完此命令后,观察您在步骤 2 中开始监控的日志文件。因为我们测试集群的超时时间很长,所以您可能需要等待几分钟才能看到任何内容。
- 最终,您应该看到条目,指出节点已失败,紧随其后,您应该在 /tmp/<hostname>_uptime.log 文件中看到一个条目,表明节点已关闭。
- 注意哪些成员运行集群软件呼叫脚本。(存活的成员可以运行命令通知客户端和/或应用程序服务器,其中一个集群节点已关闭。)
- 重新启动集群软件。是否有节点启动事件? [root@collabn2 bin]# crsctl start crs
- 尝试关闭其中一台虚拟机 - 与之前的测试相比,结果有什么不同?如果禁用 Linux 网络接口或 VMware 网络卡会怎样?
- 如果您愿意,可以进行更多测试。另一个有趣的事件是数据库实例意外关闭。在安装数据库后,回到本实验室测试这种情况。 [oracle@collabn2 ~]$ sqlplus "/ as sysdba" SQL*Plus: Release 11.1.0.6.0 - Production on Fri Aug 1 14:49:29 2008 Copyright (c) 1982, 2007, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production With the Partitioning, Real Application Clusters, OLAP, Data Mining and Real Application Testing options SQL> shutdown abort; ORACLE instance shut down. SQL> INSTANCE VERSION=1.0 service=RAC.vm.ardentperf.com database=RAC instance=RAC2 host=collabn2 status=down reason=user timestamp=01-Aug-2008 12:34:02 reported=Fri Aug 1 12:34:03 CDT 2008
集群软件呼叫的一个常见用途是通知管理员(可能是通过电子邮件)集群事件已发生。您可以使用脚本的参数(您将在我们创建的日志文件中看到这些参数)有条件地执行通知。例如,您可能不希望在节点意外崩溃时通知任何人。通过测试其中一些参数,您也许能够只在需要时发送通知。 |
为了测试故障转移,最好从集群外部的客户端连接,因此我们将从下载和安装 Oracle 的基本即时客户端(仅限英语)和即时客户端 SQLPlus 包开始。
- 以 oracle 用户身份登录节点 collabn1,并打开到数据库的连接,以 SYSDBA 身份登录,并解锁 SH 用户帐户。另外授予 DBA 访问权限。 SQL> alter user sh identified by sh account unlock; 用户已更改。 SQL> grant dba to sh; 授予成功。
- 下载 Oracle 的基本(仅限英语)即时客户端和 Oracle 的即时客户端 SQLPlus 包。实验室讲师可能已提供这些文件,或者也可以从 Oracle 网站下载:http://www.oracle.com/technetwork/topics/winsoft-085727.html 您需要的两个文件是
- instantclient-basiclite-*.zip
- instantclient-sqlplus-*.zip
- 每个存档包含一个名为“instantclient_11_2”的文件夹。将此文件夹(来自两个存档)解压缩到 C:\。(在资源管理器中,您可以拖放,也可以从“文件”菜单中选择“全部提取”。)
- 编辑 c:\windows\system32\drivers\etc\hosts 并添加 RAC 节点的 IP 地址。如果没有这个步骤,您的数据库连接将无法正常工作 - 您不能只创建一个使用 IP 地址的 tnsnames。在执行此步骤之前,尝试几次执行步骤 4。步骤 4 有时会挂起吗?您知道为什么吗?我们将在后面进一步探讨...
192.168.78.250 collab-scan.vm.ardentperf.com collab-scan 192.168.78.61 collabn1-vip.vm.ardentperf.com collabn1-vip 192.168.78.62 collabn2-vip.vm.ardentperf.com collabn2-vip 192.168.78.51 collabn1.vm.ardentperf.com collabn1 192.168.78.52 collabn2.vm.ardentperf.com collabn2
- 通过连接到数据库测试您的即时客户端安装。 C:\instantclient_11_2> sqlplus sh/sh@//collab-scan/RAC.vm.ardentperf.com
- 创建一个 TNSNAMES 文件,并从任意集群数据库节点复制 RAC、RAC1 和 RAC2 条目。 C:\instantclient_11_2> notepad C:\instantclient_11_2\tnsnames.ora RAC = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collab-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RAC.vm.ardentperf.com) ) ) RAC2 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collabn-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RAC.vm.ardentperf.com) (INSTANCE_NAME = RAC2) ) ) RAC1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collabn-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RAC.vm.ardentperf.com) (INSTANCE_NAME = RAC1) ) )
- 通过设置 TNS_ADMIN 环境变量并运行 SQLPLUS 测试您的 TNSNAMES。 C:\instantclient_11_2>set TNS_ADMIN=c:\instantclient_11_2 C:\instantclient_11_2>sqlplus sh/sh@RAC
- 以 oracle 用户身份登录 collabn1。创建一个新的服务 svctest,其中 RAC1 作为首选实例,RAC2 作为可用实例。这意味着它通常会在 RAC1 实例上运行,但如果 RAC1 变得不可用,它会故障转移到 RAC2 实例。 collabn1:/home/oracle[RAC1]$ srvctl add service -d RAC -s svctest -r RAC1 -a RAC2 -P BASIC collabn1:/home/oracle[RAC1]$ srvctl start service -d RAC -s svctest
- 通过在两个节点上检查 lsnrctl 以及查看两个节点上的 SERVICE_NAMES 初始化参数来检查服务在哪里运行。您永远不应直接更改 RAC 数据库上的 SERVICE_NAMES 初始化参数!!此参数由集群软件自动维护。
collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s svctest Service svctest is running on instance(s) RAC1 collabn1:/home/oracle[RAC1]$ lsnrctl services Service "svctest.vm.ardentperf.com" has 1 instance(s). Instance "RAC1", status READY, has 2 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=collabn1.vm.ardentperf.com)(PORT=1521)) "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER collabn1:/home/oracle[RAC1]$ ssh collabn2 Last login: Sun Aug 3 13:13:16 2008 from collabn1 The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 is /u01/app/oracle Set environment by typing 'oenv' - default is instance RAC1. collabn2:/home/oracle[RAC2]$ lsnrctl services collabn2:/home/oracle[RAC2]$ lsnrctl services Service "svctest.vm.ardentperf.com" has 1 instance(s). Instance "RAC1", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=collabn1.vm.ardentperf.com)(PORT=1521)) SQL> col value format a60 SQL> select inst_id, value from gv$parameter where NAME='service_names'; INST_ID VALUE ---------- ------------------------------------------------------------ 1 svctest, RAC.vm.ardentperf.com 2 RAC.vm.ardentperf.com
- 使用 SHUTDOWN ABORT 杀死服务 svctest 运行的实例。 SQL> show user USER is "SYS" SQL> select instance_name from v$instance; INSTANCE_NAME ---------------- RAC1 SQL> shutdown abort; ORACLE instance shut down. SQL>
- 等待片刻,然后重复步骤 2。发生了什么? collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s svctest
- 重新启动您杀死的实例。这不会启动任何实例恢复。您知道为什么吗?
collabn1:/home/oracle[RAC1]$ srvctl status database -d RAC Instance RAC1 is not running on node collabn1 Instance RAC2 is running on node collabn2 collabn1:/home/oracle[RAC1]$ srvctl start instance -d RAC -i RAC1 collabn1:/home/oracle[RAC1]$ srvctl status database -d RAC Instance RAC1 is running on node collabn1 Instance RAC2 is running on node collabn2 collabn1:/home/oracle[RAC1]$
- 重复步骤 2。服务现在运行在哪里? collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s svctest
- 手动故障转移服务。确认服务现在运行在哪里。请注意,这不会断开任何当前会话 collabn1:/home/oracle[RAC1]$ srvctl relocate service -d RAC -s svctest -i RAC2 -t RAC1 collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s svctest
重要提示: 此实验针对 Oracle 11gR1 编写,这里的信息在使用此版本和更早版本时至关重要。它将演示故障转移的工作原理以及在 TNSNAMES 中使用正确地址的重要性。但是,从 11gR2 开始,不应使用节点 VIP 连接到数据库 - 应始终使用 SCAN VIP。11gR2 客户端为此内置了相同的故障转移功能,用于在单个 DNS 条目中返回多个 SCAN VIP。
- 在本地计算机上编辑实例客户端使用的 TNSNAMES.ORA 文件。添加两个名为 CFTEST 和 CFTEST-NOVIP 的条目,它们连接到 RAC 服务,没有负载平衡。明确启用连接故障转移,即使它默认情况下已启用。不要对第二个条目使用 VIP(这是错误的,但我们将对其进行测试以查看会发生什么)。C:\instantclient_11_2> notepad c:\instantclient_11_2\tnsnames.ora CFTEST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collabn1-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = collabn2-vip)(PORT = 1521)) (LOAD_BALANCE = no) (FAILOVER = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RAC.vm.ardentperf.com) ) ) CFTEST-NOVIP = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collabn1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = collabn2)(PORT = 1521)) (LOAD_BALANCE = no) (FAILOVER = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RAC.vm.ardentperf.com) ) )
- 在 collabn1 上,检查侦听器到 RAC 服务的已建立连接数。从 Windows 连接到 CFTEST 和 CFTEST-NOVIP 几次,然后再次检查 lsnrctl 统计信息。来自 Windows 计算机的所有连接都附加到 collabn1 上的侦听器,但此侦听器会在两个实例之间分配连接。首先查看节点 1 上的已建立连接数。如果它们不全是零,则没关系。collabn1:/home/oracle[RAC1]$ lsnrctl services 服务“RAC.vm.ardentperf.com”具有 2 个实例。实例“RAC1”,状态为就绪,为此服务具有 2 个处理程序... 处理程序: “DEDICATED” '已建立:0' 拒绝:0 状态:就绪 本地服务器 “DEDICATED” '已建立:0' 拒绝:0 状态:就绪 远程服务器 (ADDRESS=(PROTOCOL=TCP)(HOST=collabn1.vm.ardentperf.com)(PORT=1521)) 实例“RAC2”,状态为就绪,为此服务具有 1 个处理程序... 处理程序: “DEDICATED” 已建立:0 拒绝:0 状态:就绪 远程服务器 (ADDRESS=(PROTOCOL=TCP)(HOST=collabn2.vm.ardentperf.com)(PORT=1521)) 其次,依次连接到数据库多次,并使用两个服务名。您可以在检查连接时间后退出每个会话。所有会话都应快速连接。计算您连接的次数。C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP 第三,再次检查节点 1 上的侦听器连接。确保已建立的连接总数至少增加了与您连接的会话数相同的数量。(也就是说,确认您所有的会话都连接到此节点。)可能存在更多连接;没关系。此外,请注意侦听器如何将连接分配到两个实例 - 即使我们的客户端只连接到一个节点上的侦听器。连接到每个实例的连接数无关紧要;如果您没有看到 3 和 3,则没关系。collabn1:/home/oracle[RAC1]$ lsnrctl services 服务“RAC.vm.ardentperf.com”具有 2 个实例。实例“RAC1”,状态为就绪,为此服务具有 2 个处理程序... 处理程序: “DEDICATED” '已建立:3' 拒绝:0 状态:就绪 本地服务器 “DEDICATED” '已建立:0' 拒绝:0 状态:就绪 远程服务器 (ADDRESS=(PROTOCOL=TCP)(HOST=collabn1.vm.ardentperf.com)(PORT=1521)) 实例“RAC2”,状态为就绪,为此服务具有 1 个处理程序... 处理程序: “DEDICATED” 已建立:3 拒绝:0 状态:就绪 远程服务器 (ADDRESS=(PROTOCOL=TCP)(HOST=collabn2.vm.ardentperf.com)(PORT=1521))
- 在 VMware 控制台中,确保您已打开从 Windows 连接到的节点 collabn1。通过从虚拟机菜单中选择关闭电源,模拟节点完全故障。
- 等待大约一分钟(以便集群可以检测到故障节点)。然后,从 Windows 连接到 CFTEST 和 CFTEST-VIP 服务。使用 NOVIP 连接时会发生什么?C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP此实验的目的是说明为什么您应该始终使用 VIP 连接!
- 从 VMware 控制台中打开 collabn1。启动后,以 oracle 用户身份登录,并将我们之前在此实验中创建的 svctest 服务回滚。
[root@collabn1 ~]# srvctl status database -d RAC Instance RAC1 is running on node collabn1 Instance RAC2 is running on node collabn2 collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s svctest Service svctest is running on instance(s) RAC2 collabn1:/home/oracle[RAC1]$ srvctl relocate service -d RAC -s svctest -i RAC2 -t RAC1 collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s svctest Service svctest is running on instance(s) RAC1
- 在本地计算机上编辑实例客户端使用的 TNSNAMES.ORA 文件。添加一个名为 SVCTEST 的新条目,该条目连接到 svctest 服务,并确保连接正常。连接后还检查您的 TAF 设置。(旁注:我们没有为此服务配置域名,但除非您在 TNSNAMES 条目中指定一个域名,否则您无法连接到它。试试看。这个域名从哪里来?)C:\instantclient_11_2> notepad c:\instantclient_11_2\tnsnames.ora SVCTEST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collab-scan)(PORT = 1521)) (LOAD_BALANCE = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = svctest.vm.ardentperf.com) ) ) SVCTEST-NOVIP = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collabn1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = collabn2)(PORT = 1521)) (LOAD_BALANCE = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = svctest.vm.ardentperf.com) ) ) C:\instantclient_11_2> sqlplus sh/sh@svctest SQL> select instance_name from v$instance; INSTANCE_NAME ---------------- RAC1 SQL> col service_name format a20 SQL> col username format a10 SQL> select username, service_name, failover_method, failover_type 2 from v$session where sid=(select max(sid) from v$mystat); USERNAME SERVICE_NAME FAILOVER_M FAILOVER_TYPE ---------- -------------------- ---------- ------------- SH svctest NONE NONE
- 从 Windows SQLPlus 会话中,更新 svctest 服务的服务器端 TAF(透明应用程序故障转移)设置。begin dbms_service.modify_service( service_name=>'svctest', failover_type=>dbms_service.failover_type_select, failover_method=>dbms_service.failover_method_basic, failover_delay=>5, failover_retries=>60 ); end; / PL/SQL 过程已成功完成。
- 重新连接并再次检查您的会话的 TAF 设置。SQL> exit 与 Oracle 数据库 11g 企业版第 11.1.0.6.0 版 - 生产版断开连接 具有分区、实时应用集群、OLAP、数据挖掘和实时应用测试选项 C:\instantclient_11_2> sqlplus sh/sh@svctest SQL> select instance_name from v$instance; INSTANCE_NAME ---------------- RAC1 SQL> col service_name format a20 SQL> col username format a10 SQL> select username, service_name, failover_method, failover_type 2 from v$session where sid=(select max(sid) from v$mystat); USERNAME SERVICE_NAME FAILOVER_M FAILOVER_TYPE ---------- -------------------- ---------- ------------- SH svctest BASIC SELECT
- 同时打开第二个连接到 NOVIP 服务的 sqlplus 会话。C:\> cd \instantclient_11_2 C:\instantclient_11_2> set TNS_ADMIN=c:\instantclient_11_2 C:\instantclient_11_2> sqlplus sh/sh@svctest-novip SQL> select instance_name from v$instance; INSTANCE_NAME ---------------- RAC1 SQL> col service_name format a20 SQL> col username format a10 SQL> select username, service_name, failover_method, failover_type 2 from v$session where sid=(select max(sid) from v$mystat); USERNAME SERVICE_NAME FAILOVER_M FAILOVER_TYPE ---------- -------------------- ---------- ------------- SH svctest BASIC SELECT
- 在两个查询中启动一个长时间运行的查询。在查询运行时,关闭它们连接到的节点。每个会话会发生什么?select c.cust_last_name, p.prod_name, s.quantity_sold from products p, sales s, customers c where p.prod_id = s.prod_id and c.cust_id = s.cust_id;
注意:此实验针对 11.1 编写,在 11.2 中不会显示相同的行为 - 需要更新!
--
- 从 VMware 控制台中打开两个节点。
[root@collabn1 ~]# srvctl status database -d RAC Instance RAC1 is running on node collabn1 Instance RAC2 is running on node collabn2
- 在数据库上打开 SQLPlus 会话,并确认没有 SH 用户的会话。SQL> select inst_id, count(*) from gv$session where username='SH' group by inst_id; 没有选择任何行
- 在两个实例上,通过清除 REMOTE_LISTENER 初始化参数并重新注册,禁用服务器端负载均衡。在与监听器注册之前,重启监听器以重置连接统计信息。SQL> alter system set remote_listener=''; 系统已更改。collabn1:/home/oracle[RAC1]$ lsnrctl stop collabn1:/home/oracle[RAC1]$ lsnrctl start SQL> -- 实例 RAC1 SQL> alter system register; 系统已更改。collabn1:/home/oracle[RAC1]$ lsnrctl services 服务 "RAC.vm.ardentperf.com" 有 1 个实例。实例 "RAC1",状态为 READY,为该服务提供 1 个处理程序... 处理程序: "DEDICATED" 已建立:0 已拒绝:0 状态:ready 本地服务器collabn2:/home/oracle[RAC2]$ lsnrctl stop collabn2:/home/oracle[RAC2]$ lsnrctl start SQL> -- 实例 RAC2 SQL> alter system register; 系统已更改。collabn2:/home/oracle[RAC2]$ lsnrctl services 服务 "RAC.vm.ardentperf.com" 有 1 个实例。实例 "RAC2",状态为 READY,为该服务提供 1 个处理程序... 处理程序: "DEDICATED" 已建立:0 已拒绝:0 状态:ready 本地服务器
- 在您连接的另一个 SQLPlus 会话中,密切关注连接的平衡情况。同时,打开一个新的 shell 会话并运行此脚本,该脚本将打开 160 个到数据库的连接。a=160; while [ $a -gt 0 ]; do sqlplus sh/sh@RAC & a=$((a-1)) done 在客户端负载均衡期间,连接是如何在数据库实例之间分配的?注意:在 11.2 中,这些连接是跨 SCAN 监听器而不是 RAC 节点进行负载均衡的。
- 通过运行以下两个命令终止所有 sqlplus 会话。运行第二个命令后,在看到 "no more job" 消息后按 <Ctrl-C>。killall sqlplus while true; do fg; done <Ctrl-C>
- 在数据库上打开一个 SQLPlus 会话,并确认没有针对 SH 用户的会话。SQL> select inst_id, count(*) from gv$session where username='SH' group by inst_id; 没有选定行如果存在任何会话,可以使用以下 SQL 的输出来终止它们:select 'alter system disconnect session '''|| sid||','||serial#||''' immediate;' from v$session where username='SH';
- 通过将 REMOTE_LISTENER 初始化参数设置回其默认值 (collab-scan:1521) 并重新注册,在两个实例上重新启用服务器端负载均衡。在与监听器注册之前,重启监听器以重置连接统计信息。SQL> alter system set remote_listener='collab-scan:1521'; 系统已更改。collabn1:/home/oracle[RAC1]$ lsnrctl stop collabn1:/home/oracle[RAC1]$ lsnrctl start collabn2:/home/oracle[RAC2]$ lsnrctl stop collabn2:/home/oracle[RAC2]$ lsnrctl start 为什么您只需要运行一次 "alter system" 命令,但需要在两个节点上运行 lsnrctl 命令?SQL> -- 实例 RAC1 SQL> alter system register; 系统已更改。collabn1:/home/oracle[RAC1]$ lsnrctl services 服务 "RAC.vm.ardentperf.com" 有 1 个实例。实例 "RAC1",状态为 READY,为该服务提供 2 个处理程序... 处理程序: "DEDICATED" 已建立:0 已拒绝:0 状态:ready 远程服务器 (地址 =(协议 = TCP)(主机 = collabn1.vm.ardentperf.com)(端口 = 1521)) "DEDICATED" 已建立:0 已拒绝:0 状态:ready 本地服务器 实例 "RAC2",状态为 READY,为该服务提供 1 个处理程序... 处理程序: "DEDICATED" 已建立:0 已拒绝:0 状态:ready 远程服务器 (地址 =(协议 = TCP)(主机 = collabn2.vm.ardentperf.com)(端口 = 1521))
- 编辑您连接到的服务器上的 TNSNAMES.ORA 文件。添加一个名为 LBTEST 的条目,它连接到 RAC 服务 - 但只使用一个监听器。[root@collabn1 ~]# vi $ORACLE_HOME/network/admin/tnsnames.ora LBTEST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collab-scan)(PORT = 1521)) (LOAD_BALANCE = no) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RAC.vm.ardentperf.com) ) )
- 在您连接的另一个 SQLPlus 会话中,密切关注连接的平衡情况。同时,打开一个新的 shell 会话并运行此脚本,该脚本将打开 160 个到数据库的连接 - 但这次它将使用 LBTEST 连接。a=160; while [ $a -gt 0 ]; do sqlplus sh/sh@LBTEST & a=$((a-1)) done 在服务器端负载均衡期间,连接是如何在数据库实例之间分配的?
- 通过运行以下两个命令终止所有 sqlplus 会话。运行第二个命令后,在看到 "no more job" 消息后按 <Ctrl-C>。killall sqlplus while true; do fg; done <Ctrl-C>
- 以 SYSDBA 身份连接到数据库。
- 首先,通过运行 ?/rdbms/admin/dbmslock.sql 安装 DBMS_LOCK 包SQL> @?/rdbms/admin/dbmslock.sql 包已创建。同义词已创建。授权成功。
- Tom Kyte 的运行统计信息包可从 http://asktom.oracle.com/pls/apex/ASKTOM.download_file?p_file=6551378329289980701 获取。首先,创建 run_stats 全局临时表:create global temporary table run_stats ( runid varchar2(15), name varchar2(80), value int ) on commit preserve rows;
- 接下来,创建 stats 视图。create or replace view stats as select 'STAT...' || a.name name, b.value from v$statname a, v$mystat b where a.statistic# = b.statistic# union all select 'LATCH.' || name, gets from v$latch union all select 'STAT...Elapsed Time', hsecs from v$timer;
- 最后,创建 runstats 包 本身:create or replace package runstats_pkg as procedure rs_start; procedure rs_middle; procedure rs_stop( p_difference_threshold in number default 0 ); end; / create or replace package body runstats_pkg as g_start number; g_run1 number; g_run2 number; procedure rs_start is begin delete from run_stats; insert into run_stats select 'before', stats.* from stats; g_start := dbms_utility.get_time; end; procedure rs_middle is begin g_run1 := (dbms_utility.get_time-g_start); insert into run_stats select 'after 1', stats.* from stats; g_start := dbms_utility.get_time; end; procedure rs_stop(p_difference_threshold in number default 0) is begin g_run2 := (dbms_utility.get_time-g_start); dbms_output.put_line ( 'Run1 ran in ' || g_run1 || ' hsecs' ); dbms_output.put_line ( 'Run2 ran in ' || g_run2 || ' hsecs' ); dbms_output.put_line ( 'run 1 ran in ' || round(g_run1/g_run2*100,2) || '% of the time' ); dbms_output.put_line( chr(9) ); insert into run_stats select 'after 2', stats.* from stats; dbms_output.put_line ( rpad( 'Name', 30 ) || lpad( 'Run1', 12 ) || lpad( 'Run2', 12 ) || lpad( 'Diff', 12 ) ); for x in ( select rpad( a.name, 30 ) || to_char( b.value-a.value, '999,999,999' ) || to_char( c.value-b.value, '999,999,999' ) || to_char( ( (c.value-b.value)-(b.value-a.value)), '999,999,999' ) data from run_stats a, run_stats b, run_stats c where a.name = b.name and b.name = c.name and a.runid = 'before' and b.runid = 'after 1' and c.runid = 'after 2' -- and (c.value-a.value) > 0 and abs( (c.value-b.value) - (b.value-a.value) ) > p_difference_threshold order by abs( (c.value-b.value)-(b.value-a.value)) ) loop dbms_output.put_line( x.data ); end loop; dbms_output.put_line( chr(9) ); dbms_output.put_line ( 'Run1 latches total versus runs -- difference and pct' ); dbms_output.put_line ( lpad( 'Run1', 12 ) || lpad( 'Run2', 12 ) || lpad( 'Diff', 12 ) || lpad( 'Pct', 10 ) ); for x in ( select to_char( run1, '999,999,999' ) || to_char( run2, '999,999,999' ) || to_char( diff, '999,999,999' ) || to_char( round( run1/run2*100,2 ), '99,999.99' ) || '%' data from ( select sum(b.value-a.value) run1, sum(c.value-b.value) run2, sum( (c.value-b.value)-(b.value-a.value)) diff from run_stats a, run_stats b, run_stats c where a.name = b.name and b.name = c.name and a.runid = 'before' and b.runid = 'after 1' and c.runid = 'after 2' and a.name like 'LATCH%' ) ) loop dbms_output.put_line( x.data ); end loop; end; end; /
我们将执行的第一个测试是序列测试。在集群数据库系统中,顺序字段通常成为争用点。
- 首先,在 两个节点 上以 SYSDBA 身份打开到数据库的连接。
- 设置一个表和几个序列类型以进行比较。同时启用 serveroutput。create table SEQTEST (seqid varchar2(30), highval number); insert into SEQTEST values ('MYTABLE', 1); commit; create sequence SEQTEST_O_NC ORDER NOCACHE; create sequence SEQTEST_O_C ORDER CACHE 100; create sequence SEQTEST_NO_NC NOORDER NOCACHE; create sequence SEQTEST_NO_C NOORDER CACHE 100; set serveroutput on;
- 在节点 collabn1 上,测量各种方法之间的差异。运行两三次以预热机器。(注意:从报告的运行时间(以 hsecs 为单位)中减去 500 以说明 DBMS_LOCK.SLEEP 中的时间。)exec runstats_pkg.rs_start; DECLARE myval number; BEGIN FOR counter IN 1..10 LOOP select highval into myval from SEQTEST where seqid='MYTABLE' for update; update SEQTEST set highval=highval+1 where seqid='MYTABLE'; dbms_lock.sleep(0.5); commit; END LOOP; END; / exec runstats_pkg.rs_middle; DECLARE myval number; BEGIN FOR counter IN 1..10 LOOP myval := SEQTEST_O_C.NEXTVAL; dbms_lock.sleep(0.5); commit; END LOOP; END; / exec runstats_pkg.rs_stop;
- 在另一个节点 - collabn2 - 启动一个匿名 PL/SQL 块,每半秒检索一次值。DECLARE myval number; BEGIN LOOP select highval into myval from SEQTEST where seqid='MYTABLE' for update; update SEQTEST set highval=highval+1 where seqid='MYTABLE'; select SEQTEST_O_NC.NEXTVAL into myval from dual; select SEQTEST_O_C.NEXTVAL into myval from dual; select SEQTEST_NO_NC.NEXTVAL into myval from dual; select SEQTEST_NO_C.NEXTVAL into myval from dual; dbms_lock.sleep(0.5); commit; END LOOP; END; /
- 在节点 collabn1 上重复步骤 3。观察一旦引入集群争用,结果如何不同。
- 执行更多测试,比较不同类型的序列。关于序列,你能得出什么结论?缓存对 ORDER 序列重要吗?exec runstats_pkg.rs_start; DECLARE myval number; BEGIN FOR counter IN 1..10 LOOP myval := SEQTEST_O_NC.NEXTVAL; dbms_lock.sleep(0.5); commit; END LOOP; END; / exec runstats_pkg.rs_middle; DECLARE myval number; BEGIN FOR counter IN 1..10 LOOP myval := SEQTEST_O_C.NEXTVAL; dbms_lock.sleep(0.5); commit; END LOOP; END; / exec runstats_pkg.rs_stop;
- 登录到节点 collabn1 并以 SYSDBA 身份打开到数据库的连接,并解锁 SH 用户帐户。同时授予其 DBA 权限。SQL> alter user sh identified by sh account unlock; 用户已更改。SQL> grant dba to sh; 授予成功。
- 以 sh 用户身份并使用 RAC1 服务名重新连接到数据库。检查您的 SID 和您连接的服务。SQL> connect sh/sh@RAC1 已连接。SQL> select sid from v$mystat where rownum=1; SID ---------- 145 SQL> col sid format 9999 SQL> col username format a10 SQL> col program format a40 SQL> col service_name format a20 SQL> set linesize 100 SQL> select sid, username, program, service_name from v$session where username='SH'; SID USERNAME PROGRAM SERVICE_NAME ----- ---------- ---------------------------------------- -------------- 145 SH [email protected] (TNS RAC.vm.ardent
- 启用跟踪并在 SH 模式下运行并行查询。查找跟踪文件以确定从哪里运行了从属进程。从属进程在哪些节点上运行?exec dbms_session.set_identifier('racpx01'); alter session set tracefile_identifier = 'racpx01'; exec dbms_monitor.client_id_trace_enable(client_id=>'racpx01'); select /*+parallel*/ p.prod_name, sum(s.amount_sold) from products p, sales s where p.prod_id = s.prod_id group by p.prod_name; exec dbms_monitor.client_id_trace_disable(client_id=>'racpx01'); SQL> col value format a60 SQL> select inst_id, value from gv$parameter where name='user_dump_dest'; INST_ID VALUE ---------- ------------------------------------------------------------ 1 /u01/app/oracle/diag/rdbms/rac/RAC1/trace 2 /u01/app/oracle/diag/rdbms/rac/RAC2/trace SQL> host ssh collabn1 ls -sh /u01/app/oracle/diag/rdbms/rac/RAC1/trace/*racpx01.trc SQL> host ssh collabn2 ls -sh /u01/app/oracle/diag/rdbms/rac/RAC2/trace/*racpx01.trc
- 创建一个仅在节点 2 上运行的新服务,并重复测试(从 collabn1)。从属进程现在在哪些节点上运行?这与 Oracle 10g 有什么不同?collabn1:/home/oracle[RAC1]$ srvctl add service -d RAC -s pxtest -r RAC2 -a RAC1 collabn1:/home/oracle[RAC1]$ srvctl start service -d RAC -s pxtest collabn1:/home/oracle[RAC1]$ lsnrctl services Services Summary... Service "pxtest.vm.ardentperf.com" has 1 instance(s). Instance "RAC2", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=collabn2.vm.ardentperf.com)(PORT=1521)) collabn1:/home/oracle[RAC1]$ vi $ORACLE_HOME/network/admin/tnsnames.ora PXTEST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collabn1-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = collabn2-vip)(PORT = 1521)) (LOAD_BALANCE = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = PXTEST.vm.ardentperf.com) ) ) collabn1:/home/oracle[RAC1]$ sqlplus sh/sh@pxtest SQL> col sid format 9999 SQL> col username format a10 SQL> col program format a40 SQL> col service_name format a20 SQL> select sid, username, program, service_name from v$session where username='SH'; SID USERNAME PROGRAM SERVICE_NAME ----- ---------- ---------------------------------------- -------------- 124 SH [email protected] (TNS V1-V3) pxtest exec dbms_session.set_identifier('racpx05'); alter session set tracefile_identifier = 'racpx05'; exec dbms_monitor.client_id_trace_enable(client_id=>'racpx05'); select /*+parallel*/ p.prod_name, sum(s.amount_sold) from products p, sales s where p.prod_id = s.prod_id group by p.prod_name; exec dbms_monitor.client_id_trace_disable(client_id=>'racpx05'); host ssh collabn1 ls -sh /u01/app/oracle/diag/rdbms/rac/RAC1/trace/*racpx05.trc host ssh collabn2 ls -sh /u01/app/oracle/diag/rdbms/rac/RAC2/trace/*racpx05.trc
在 RAC 中,PL/SQL 可以在任何节点上执行 - 在设计进程时必须考虑到这一点。我们将通过两个简单的测试简要了解此属性。
首先,我们将看看调度器。请注意,此实验依赖于在 并行查询测试 中创建的 PXTEST 服务。
- 以 oracle 身份登录到节点 collabn1,并确认 pxtest 服务正在实例 RAC2 上运行。collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s pxtest 服务 pxtest 正在实例 RAC2 上运行。collabn1:/home/oracle[RAC1]$
- 关闭服务。collabn1:/home/oracle[RAC1]$ srvctl stop service -d RAC -s pxtest collabn1:/home/oracle[RAC1]$
- 以 sh 身份登录到 RAC1 服务,并创建一个作业类和一个 PL/SQL 过程,我们可以从作业中执行该过程。请注意,服务名称区分大小写!collabn1:/home/oracle[RAC1]$ sqlplus sh/sh@RAC1 exec dbms_scheduler.create_job_class('TESTOFF1',service=>'pxtest'); create or replace procedure traceme(id varchar2) as x number; begin execute immediate 'alter session set tracefile_identifier=||id||'; dbms_session.session_trace_enable(true,true); select count(*) into x from sh.customers; dbms_session.session_trace_disable(); end; /
- 计划作业立即运行,并使用与 PXTEST 服务绑定的作业类。检查是否已运行。连续多次查询 user_schedule_jobs 表。发生了什么事吗?select job_name, schedule_type, job_class, enabled, auto_drop, state from user_scheduler_jobs; begin dbms_scheduler.create_job('TESTJOB1','PLSQL_BLOCK', job_action=>'traceme(scheduler01);', job_class=>'TESTOFF1',enabled=>true); end; / select job_name, schedule_type, job_class, enabled, auto_drop, state from user_scheduler_jobs;
- 启动 PXTEST 服务并再次检查作业状态。确保连续多次查询 user_schedule_jobs 表。(耐心等待至少一分钟。)作业是否已执行?如果是,那么在哪个节点上?host srvctl start service -d RAC -s pxtest select job_name, schedule_type, job_class, enabled, auto_drop, state from user_scheduler_jobs; host ssh collabn2 ls -sh /u01/app/oracle/diag/rdbms/rac/RAC2/trace/*scheduler01.trc host ssh collabn1 ls -sh /u01/app/oracle/diag/rdbms/rac/RAC1/trace/*scheduler01.trc
- 修改 PXTEST 服务以在两个节点上运行,然后停止它。SQL> host srvctl modify service -d RAC -s pxtest -n -i RAC1,RAC2 SQL> host srvctl stop service -d RAC -s pxtest
- 提交 20 个作业以运行程序,然后启用服务。(这样,所有作业都应该几乎同时被调度。)它们在哪个节点上执行?begin FOR i IN 10..29 LOOP dbms_scheduler.create_job('TESTJOB'||i,'PLSQL_BLOCK', job_action=>'traceme(scheduler'||i||');', job_class=>'TESTOFF1',enabled=>true); END LOOP; end; / select job_name, schedule_type, job_class, enabled, auto_drop, state from user_scheduler_jobs; SQL> host srvctl start service -d RAC -s pxtest select job_name, schedule_type, job_class, enabled, auto_drop, state from user_scheduler_jobs; host ssh collabn2 ls -sh /u01/app/oracle/diag/rdbms/rac/RAC2/trace/*scheduler*.trc host ssh collabn1 ls -sh /u01/app/oracle/diag/rdbms/rac/RAC1/trace/*scheduler*.trc
我们的第二个 PL/SQL 测试将关注 UTL_FILE 包。对于 RAC 上的任何 PL/SQL 操作,您必须意识到代码可以在其服务所在的任何节点上执行。这也会影响诸如 DBMS_PIPE、UTL_MAIL、UTL_HTTP(例如代理服务器源 IP 规则)甚至 DBMS_RLS(刷新策略)之类的包。
- 以 sh 身份登录到 RAC1 ,并创建一个稍后可以尝试读取的文件。collabn1:/home/oracle[RAC1]$ sqlplus sh/sh@RAC1 create directory orahome as '/home/oracle'; declare fl utl_file.file_type; begin fl := utl_file.fopen('ORAHOME','data.txt','w'); utl_file.put_line(fl, 'Some sample data for an oracle test.', TRUE); utl_file.fclose(fl); end; /
- 退出 SQLPLUS。在提示符下,复制此命令以再次以sh身份连接到RAC服务,并尝试读取您刚刚编写的文件。连续运行此命令 10-20 次。(建议使用剪切粘贴。)发生了什么?为什么?sqlplus -S sh/sh@RAC <<EOF declare fl utl_file.file_type; data varchar2(1024); begin fl := utl_file.fopen('ORAHOME','data.txt','r'); utl_file.get_line(fl, data); utl_file.fclose(fl); end; / exit; EOF
在本实验中,我们将有意地错误配置集群数据库备份,并对本地非共享存储进行一些常见错误。
- 以用户 oracle 身份登录到collabn1上的终端。
- 在collabn1上创建一个目录/u01/app/oradata,并尝试通过 init 参数 db_recovery_file_dest 将其配置为闪回恢复区 (FRA)。操作将失败。collabn1:/home/oracle[RAC1]$ mkdir /u01/app/oradata collabn1:/home/oracle[RAC1]$ ss SQL*Plus: Release 11.1.0.6.0 - Production on Mon May 4 07:39:57 2009 SQL> show parameter recovery_file NAME TYPE VALUE ------------------------------- ----------- ------------------------------ db_recovery_file_dest string +FRA db_recovery_file_dest_size big integer 4000M SQL> alter system set db_recovery_file_dest='/u01/app/oradata'; alter system set db_recovery_file_dest='/u01/app/oradata' * ERROR at line 1: ORA-32008: error while processing parameter update at instance RAC2 ORA-02097: parameter cannot be modified because specified value is invalid ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated ORA-01262: Stat failed on a file destination directory Linux Error: 2: No such file or director错误发生在远程节点上,但在这里报告。它也在远程节点上记录 - 您知道它在哪里记录吗?需要建立什么样的监控才能通过此类消息主动发出警报?
- 现在在远程节点上创建目录并重新运行操作。这应该会成功,但它仍然是一个糟糕的配置;我们将在本实验的后面部分调查原因。SQL> host ssh collabn2 mkdir /u01/app/oradata SQL> alter system set db_recovery_file_dest='/u01/app/oradata'; System altered.
- 关闭整个集群的数据库。然后在collabn1上装载它并将数据库置于归档日志模式。没有分配归档日志目标 - 归档日志将去哪里,为什么?为此,您不需要禁用 cluster_database 初始化参数。
collabn1:/home/oracle[RAC1]$ srvctl stop database -d RAC collabn1:/home/oracle[RAC1]$ srvctl status database -d RAC Instance RAC1 is not running on node collabn1 Instance RAC2 is not running on node collabn2 collabn1:/home/oracle[RAC1]$ ss SQL*Plus: Release 11.1.0.6.0 - Production on Mon May 4 09:08:01 2009 SQL> startup mount SQL> alter database archivelog; Database altered. SQL> alter database open; collabn1:/home/oracle[RAC1]$ srvctl start database -d RAC
- 在打开数据库之前,启用闪回数据库。SQL> alter database flashback on; Database altered. SQL> alter database open; Database altered. SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES SQL> select oldest_flashback_scn,flashback_size from v$flashback_database_log; OLDEST_FLASHBACK_SCN FLASHBACK_SIZE -------------------- -------------- 610425 8192000
- 现在,登录到collabn2并从 sqlplus 启动数据库。您将收到一条错误消息。collabn2:/home/oracle[RAC2]$ ss SQL*Plus: Release 11.1.0.6.0 - Production on Mon May 4 09:21:25 2009 SQL> startup ORACLE instance started. Total System Global Area 318054400 bytes Fixed Size 1299624 bytes Variable Size 142609240 bytes Database Buffers 167772160 bytes Redo Buffers 6373376 bytes Database mounted. ORA-38760: This database instance failed to turn on flashback database SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES SQL> select oldest_flashback_scn,flashback_size from v$flashback_database_log; OLDEST_FLASHBACK_SCN FLASHBACK_SIZE -------------------- -------------- 0 16384000
- 有趣的是,数据库似乎正常运行。调查警报日志以获取错误消息。collabn2:/home/oracle[RAC2]$ cdd collabn2:/u01/app/oracle/diag[RAC2]$ cd rdbms/rac/RAC2/trace/ collabn2:/u01/app/oracle/diag/rdbms/rac/RAC2/trace[RAC2]$ less alert_RAC2.log Mon May 04 09:22:07 2009 Errors in file /u01/app/oracle/diag/rdbms/rac/RAC2/trace/RAC2_ora_22856.trc: ORA-38701: Flashback database log 1 seq 1 thread 1: "/u01/app/oradata/RAC/flashb ack/o1_mf_4zxxs99n_.flb" ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3
- 调查collabn1上的警报日志 - 这里出现任何错误消息吗?是否发生其他问题?您可能需要等待几分钟。也检查“srvctl status database -d RAC”的输出。
- 禁用闪回数据库。您不需要关闭数据库来执行禁用操作。SQL> alter database flashback off; Database altered.
- 在数据库上启用块更改跟踪,并显式选择本地 FRA 目标。(通常,块更改跟踪文件是在 OMF DB 目标而不是 FRA 中创建的。)SQL> alter database enable block change tracking 2 using file '/u01/app/oradata/changetracking.ctf'; 发生了什么?确保检查警报日志。尝试仅打开一个实例,然后打开另一个实例,看看会发生什么。
- 禁用块更改跟踪。SQL> alter database disable block change tracking; SQL> col filename format a40 SQL> select * from v$block_change_tracking; STATUS FILENAME BYTES ---------- ---------------------------------------- ---------- DISABLED
- 查看两个当前日志的序列号。SQL> select thread#, sequence# from v$log where status='CURRENT'; THREAD# SEQUENCE# ---------- ---------- 1 6 2 3
- 执行“alter system switch logfile”并检查结果。发生了什么?SQL> alter system switch logfile; System altered. SQL> select thread#, sequence# from v$log where status='CURRENT'; THREAD# SEQUENCE# ---------- ---------- 1 6 2 4
- 执行“alter system archive log current”并检查结果。现在发生了什么?SQL> alter system archive log current; System altered. SQL> select thread#, sequence# from v$log where status='CURRENT'; THREAD# SEQUENCE# ---------- ---------- 1 7 2 5
- 检查默认情况下归档日志存储在哪里。(这是否符合您的预期?)将它们显式分配到 FRA 并测试您的更改是否生效。SQL> col t format a5 SQL> col name format a70 SQL> select thread#||'.'||sequence# t, name from v$archived_log; T NAME ----- ---------------------------------------------------------------------- 1.6 /u01/app/oracle/product/11.1.0/db_1/dbs/arch1_6_685220246.dbf 1.6 /u01/app/oradata/RAC/archivelog/2009_05_04/o1_mf_1_6_4zy1wofw_.arc 2.4 /u01/app/oracle/product/11.1.0/db_1/dbs/arch2_4_685220246.dbf 2.4 /u01/app/oradata/RAC/archivelog/2009_05_04/o1_mf_2_4_4zy1wpn9_.arc SQL> alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST'; System altered. SQL> alter system archive log current; System altered. SQL> select thread#||'.'||sequence# t, name from v$archived_log; T NAME ----- ---------------------------------------------------------------------- 2.5 /u01/app/oradata/RAC/archivelog/2009_05_04/o1_mf_2_5_4zy2xzv3_.arc 1.7 /u01/app/oradata/RAC/archivelog/2009_05_04/o1_mf_1_7_4zy2y1q6_.arc
- 使用默认的 RMAN 配置备份所有当前归档日志。它为什么失败?collabn1:/home/oracle[RAC1]$ rman target / Recovery Manager: Release 11.1.0.6.0 - Production on Mon May 4 10:43:45 2009 connected to target database: RAC (DBID=2273202257) RMAN> backup archivelog all; Starting backup at 04-MAY-09 current log archived allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=113 instance=RAC1 device type=DISK archived log /u01/app/oradata/RAC/archivelog/2009_05_04/o1_mf_1_4_4zy03zdh_.arc not found or out of sync with catalog trying alternate file for archived log of thread 1 with sequence 4 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of backup command at 05/04/2009 10:47:56 RMAN-06059: expected archived log not found, lost of archived log compromises recoverability ORA-19625: error identifying file /u01/app/oracle/product/11.1.0/db_1/dbs/arch1_4_685220246.dbf ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3
- 交叉检查存档日志;大多数会失败。然后将文件从collabn2上的本地 FRA 复制过来,并再次交叉检查。RMAN> crosscheck archivelog all; RMAN> list archivelog all; List of Archived Log Copies for database with db_unique_name RAC ===================================================================== Key Thrd Seq S Low Time ------- ---- ------- - --------- 6 1 4 X 26-APR-09 Name: /u01/app/oradata/RAC/archivelog/2009_05_04/o1_mf_1_4_4zy03zdh_.arc RMAN> host 'scp -r collabn2:/u01/app/oradata/RAC/archivelog/* /u01/app/oradata/RAC/archivelog/'; o1_mf_1_5_4zy044nl_.arc 100% 1024 1.0KB/s 00:00 o1_mf_2_6_4zy3k2s0_.arc 100% 12KB 11.5KB/s 00:00 o1_mf_2_3_4zy1txkr_.arc 100% 13KB 12.5KB/s 00:01 o1_mf_1_4_4zy03zdh_.arc 100% 29MB 4.9MB/s 00:06 o1_mf_2_2_4zy1dksv_.arc 100% 1209KB 1.2MB/s 00:01 o1_mf_2_4_4zy1wpn9_.arc 100% 233KB 233.0KB/s 00:00 o1_mf_2_5_4zy2xzv3_.arc 100% 19KB 19.0KB/s 00:00 RMAN> crosscheck archivelog all; RMAN> list archivelog all; List of Archived Log Copies for database with db_unique_name RAC ===================================================================== Key Thrd Seq S Low Time ------- ---- ------- - --------- 6 1 4 A 26-APR-09 Name: /u01/app/oradata/RAC/archivelog/2009_05_04/o1_mf_1_4_4zy03zdh_.arc
我们将配置备份以充分利用集群,通过并行运行。
- 配置 RMAN 默认通道和并行度。RMAN> configure device type disk parallelism 2 backup type to compressed backupset; RMAN> configure channel 1 device type disk connect 'sys/racattack@rac1'; RMAN> configure channel 2 device type disk connect 'sys/racattack@rac2'; RMAN> show all;
- 对整个数据库进行完整的热备份。RMAN> backup database plus archivelog; Starting backup at 04-MAY-09 current log archived channel ORA_DISK_1: starting compressed archived log backup set channel ORA_DISK_2: starting compressed archived log backup set ... Finished backup at 04-MAY-09 Starting backup at 04-MAY-09 channel ORA_DISK_1: starting compressed full datafile backup set channel ORA_DISK_2: starting compressed full datafile backup set ... Finished backup at 04-MAY-09 Starting backup at 04-MAY-09 current log archived channel ORA_DISK_1: starting compressed archived log backup set channel ORA_DISK_2: starting compressed archived log backup set ... Finished backup at 04-MAY-09
- 交叉检查备份。发生了什么?为什么?RMAN> list backupset summary; Key TY LV S Device Type Completion Time #Pieces #Copies Compressed ------- -- -- - ----------- --------------- ------- ------- ---------- 1 B A A DISK 04-MAY-09 1 1 YES 2 B A A DISK 04-MAY-09 1 1 YES 3 B A A DISK 04-MAY-09 1 1 YES 4 B A A DISK 04-MAY-09 1 1 YES 5 B F A DISK 04-MAY-09 1 1 YES 6 B F A DISK 04-MAY-09 1 1 YES 7 B F A DISK 04-MAY-09 1 1 YES 8 B F A DISK 04-MAY-09 1 1 YES 9 B A A DISK 04-MAY-09 1 1 YES 10 B A A DISK 04-MAY-09 1 1 YES RMAN> allocate channel for maintenance device type disk; released channel: ORA_DISK_1 released channel: ORA_DISK_2 allocated channel: ORA_MAINT_DISK_1 channel ORA_MAINT_DISK_1: SID=111 instance=RAC1 device type=DISK RMAN> crosscheck backup; RMAN> list backupset summary;再试一次,不要分配维护通道。发生了什么?为什么?
此练习取决于之前练习的完成情况。
- 清除 RMAN 通道和并行度配置。RMAN> configure channel 1 device type disk clear; RMAN> configure channel 2 device type disk clear; RMAN> configure device type disk parallelism 1; RMAN> show all;
- 预览整个数据库的恢复。为什么它会失败?如何解决?RMAN> restore database preview; Starting restore at 04-MAY-09 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=114 instance=RAC1 device type=DISK RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of restore command at 05/04/2009 11:44:53 RMAN-06026: some targets not found - aborting restore RMAN-06023: no backup or copy of datafile 5 found to restore RMAN-06023: no backup or copy of datafile 3 found to restore RMAN-06023: no backup or copy of datafile 2 found to restore
- 将 FRA 还原到正确的共享位置,该位置在第 6 个实验室之前的数据库创建期间分配。SQL> alter system set db_recovery_file_dest='+FRA'; System altered.
- 现在,使用共享存储重复数据库备份练习和此练习。
- ↑ "什么是防病毒软件?". antivirus.comodo.com. Retrieved 2016-04-29.