电子杂志第六期

3,148 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,148
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

电子杂志第六期

  1. 1. ITPUB 电子杂志 2004 年 6 月号 (总第六期) ITPUB――信息技术新动力!
  2. 2. ITPUB 电子杂志(总第六期) 2 of 82 本期内容导读 本期焦点:Oracle RAC 技术 RedHat Advance Server 上安装 Oracle 9204 RAC 参考手册 By Piner 本文定位在那些有了一定 Linux 与 oracle 基础的,而且对 RAC 也要有相关了解热人员作为参 考手册,而不是所谓的安装向导。所以本文没有详细的安装过程之类的步骤,却有详细的安装错 误的解决办法。 应用技巧 在 RHEL 3 的单机上安装 oracle9i RAC By PondKa 很多朋友可能都迫切地想对 RAC 技术进行以下研究,但没有硬件环境一定比较苦恼吧?什么? 单机实现? 看看 ITPub 老会员 PondKa 的这篇文档一定会让你欣喜有加。 备用数据库的研究 by ldxm 一份关于 Linux 上的 Oracle9i 备用数据库详尽的研究总结报告。 经验借鉴 RAC 历险记 By iamweng 众所周知,RAC 的实施过程比较复杂,问题多多。作者用自身的亲历经验现身说法,现在让我 们赶赴 OracleRAC 实施现场进行一下体验吧. 快速部署 创建一个 standby database 的全过程 By fals 本文细致的讲述了在 windows 2000 advanced server 上如何创建 standby Database 的过程, 极具指导意义。 认证之路 Oracle9iAS 证书不完全指南 by jc20031010 本文是 ITPub 应用服务器版块的版主 jc20031010 大侠打造的关于 9i AS 认证的指南信息, 对此项认证有兴趣的朋友可以用作参考。
  3. 3. ITPUB 电子杂志(总第六期) 3 of 82 ITPUB 数据库技术丛书第一册 《Oracle 数据库 DBA 技术精粹》 热售中 ITPUB 数据库技术从书之一《Oracle 数据库 DBA 技术精粹》已由冶金工业出版社出版, 欢迎大家在 ITPUB 上订购,大家对本书的支持是对 ITPUB 这两年来的工作的最好鼓励。 订购网页在:http://www.1soccer.com/itpub/ 或点击 ITPUB 首页的飞行广告进入。感谢广州第一足球网(http://www.1soccer.com/ ) 为 ITPUB 提供网上支付平台。 购买方式有送货上门货到付款(目前开通北京地区)、银行卡在线支付和邮局汇款三种,欢 迎大家选择最便利的方式进行购买,详情参见上述网页。 本书基本信息: 内容简介: 本书从 DBA 的角度阐述了 Oracle 数据库的结构内幕、管理经验和优化技巧,并列举了很 多非常有用的实际案例。全书分为五大部分,基本篇主要包括一些基础技术,介绍了与 OCP 认 证相关的一些内容,在各种平台上安装与建库的技巧,也介绍一些在 9i 里面出现的新特性。体 系架构篇包括对回滚段,存储结构等的深入讨论,并彻底阐清困扰许多用户的字符集问题。备份 与恢复篇列举了大量实际案例,讲述了在不同的需求环境下所应采取的备份方案,以及进行灾难 恢复的方法。性能篇深入分析了 statspack 等常用的调整工具的原理与使用方法、判断依据, 并从索引、内存、执行计划、锁等各个角度讨论了各种优化技巧。网络篇讲述了透明网关、监听 器、数据迁移等方面的内容。本书各专题的作者主要来自网上著名的数据库技术社群 www.itpub.net 网站,大多是具有丰富实践经验的资深技术工作者,有些技术专题曾经在该网 站上长时间深入讨论,并引起很多的关注和回响,本书具有很好的深度与广度,相信对于从事数 据库工作、特别是使用 Oracle 数据库产品的读者,在提高自己的技术水平方面会有极大的裨益。 对于大专院校师生,本书也是极佳的参考书,对入门者可以起到窥一斑而观全豹的作用
  4. 4. ITPUB 电子杂志(总第六期) 4 of 82 版权信息: 冯春培 盖国强 冯大辉 叶梁 主编 北 京 冶金工业出版社 2004 图书在版编目(C I P)数据 Oracle 数据库 DBA 专题技术精粹 / 冯春培等著. —北京:冶金工业出版社,2004.1 ISBN 7–5024–3450–X I. O… II. 冯… III. 关系数据库—数据库管理系统,Oracle IV. TP311.138 中国版本图书馆 CIP 数据核字(2003)第 120108 号 出版人 曹胜利 责任编辑 戈兰 湛江蓝星南华印务公司印刷;冶金工业出版社发行;各地新华书店经销 2004 年 2 月第 1 版,2004 年 2 月第 1 次印刷 69.00 元 End
  5. 5. ITPUB 电子杂志(总第六期) 5 of 82 ITPUB 数据库技术丛书第二册 《Oracle 数据库优化》 征稿 ITPUB 计划在今年 8-9 月间出版数据库系列丛书的第二册,经商定主题定为“Oracle 数据 库优化”。 主要内容 1. Oracle 数据库优化理论,包括各种内部结构探讨,工具运用技巧,优化框架模式等等 2. Oracle 数据库优化案例,这是本书的重点,占的比例较大,我们有意把本书写成“Oracle 的聊斋志异”,专门收集一些 DBA 在平常不容易接触到的实际例子,以求读者在阅读本书 后,在知识面与技术见闻上有大的促进。 主编 第二册继续邀请以下 4 位斑竹担任主编: biti_rainy、eygle、Fenng、Coolyl。 主编的主要职责包括: (1) 丛书内容的整体策划 (2) 接受稿件 (3) 审稿 (4) 分类整理稿件,并作适当的技术总结,使之最后成书 (5) 本身也为丛书提供稿件 (6) 向特约的会员约稿 投稿 投稿和所有出版事宜的联系信箱: magazine@itpub.net 所有采用的稿件都是付酬的,稿费在丛书出版之日以现金形式支付,决不拖欠。具体报 酬标准请与主编或 tigerfish 本人联络咨询。
  6. 6. ITPUB 电子杂志(总第六期) 6 of 82 印出后书的封面将由 4 位主编署名,里面的文章由文章作者署名,著作权归作者所有。 (参考已经出版的第一册) 第二册《Oracle 数据库优化的截稿日期是 2004 年 6 月 20 日,请投稿者务必在上述时 间之前把稿件送达我们的联系邮箱或直接交达主编。预计第二册的出版时间是今年 9 月份, 我们将不断地在 ITPUB 上向大家汇报进展状态,有了第一册的经验,我们有决心与自信把 第二册做的更好,目标是要做成 ITPUB 的经典之作。欢迎大家踊跃投稿,对作者个人来说, 这也是在 ITPUB 上和业界扬名的很好机会。 要求 稿件格式要求如下: (1) 交 word 文档,不用排版(有专人负责排版),文字统一用 5 号字(除有特别 需要以外) 插图不用加图文框, , 但要标明图的顺序号(图 1, 2, 。 。 ) 图 。 。 。 以及插图的名称,所附的表格与程序也要加顺序号和名称 (2) 使用的语言要朴实,因为是印刷的,所以一些网上的语言最好不要使用;表达 要清晰,操作过程如果比较复杂,最好配图,插图要清晰(最好自己先打印一 下观察效果,不要有马赛克)。自觉尊重知识产权,不能有抄袭内容。如果没 有特别必要,一般在文中不要涉及具体的公司或个人真实名称,使用代号即可, 以免引起纠纷。翻译的文章必须先取得原作者的授权。文章最好是在 ITPUB 上没发表过的,或已经发表过但有比较大改动的,以保持内容的新鲜感和可读 性。 (3) 交稿时,除了正文外,在最后,应有作者本人的个人介绍,例如工作单位(可 选)、联系 email(可选)、技术特长、在 ITPUB 上的活动等,具体格式大 家可参照已出版的第一册。要列出参考文献(包括网上资源) (4) 对于案例性的稿件,希望能清晰交代问题的背景,现象,处理的过程,并且在 最后作适当的技术总结,做到实践与理论相结合。 (5) 文章开始的地方应有简短“开篇语”,作为对整个文章内容的总结与介绍。 (6) 提交稿件的时候应附带个人详细的联系方式,包括电话、手机、电邮等,以方 便我们和您联系 最后,再次感谢所有朋友对 ITPUB 的一贯支持,我们必将努力工作,把最好的东西奉 献给大家! End
  7. 7. ITPUB 电子杂志(总第六期) 7 of 82 目录 REDHAT ADVANCE SERVER 上安装 ORACLE 9204 RAC 参考手册 ...........................................................9 前言..................................................................................................................................................9 第一章. RAC 的机制 .......................................................................................................................9 第二章. Linux 上安装 RAC 的系统要求 ......................................................................................10 第三章.安装前的准备工作 ........................................................................................................... 11 第四章. 确定共享磁盘设备 .........................................................................................................13 第五章. 安装 OCM(Oracle Cluster Manager) ........................................................................16 第六章. 安装 Oracle 软件 ............................................................................................................19 第七章. 创建数据库 .....................................................................................................................21 第八章. 启动第二个节点实例 .....................................................................................................24 第九章. 测试、使用 RAC ............................................................................................................25 第十章.从单节点数据库变为 RAC ...........................................................................................28 小结................................................................................................................................................29 在 RHEL 3 的单机上安装 ORACLE9I RAC.................................................................................................31 1.安装 Oracle Cluster Manager 9.2.0 ..........................................................................................31 2.打补丁到 OCM 9.2.0.4 ..............................................................................................................32 3.配置 RAC,并启动 .......................................................................................................................32 4.安装 Enterprise Server 9.2.0.......................................................................................................34 5.数据库软件打补丁到 Enterprise Server 9.2.0.4........................................................................35 6.准备创建数据库 .........................................................................................................................36 7.在服务器端配置 listener.ora 和 tnsnames.ora...........................................................................36 8.创建数据库 .................................................................................................................................37 9.创建并启动多个 instance...........................................................................................................40 10.配置客户端 ...............................................................................................................................41 11.结语 ...........................................................................................................................................42 创建一个 STANDBY DATABASE 的全过程 ....................................................................................................43 一 创建一个主库的数据文件备份: ..........................................................................................43 二 创建备用库的控制文件: ......................................................................................................43 三 复制文件 ..................................................................................................................................43 四 配置主库的 tnsnames.ora 文件...............................................................................................43 五 配置备用库的 listener.ora 文件 ..............................................................................................44 六 重新启动备库监听服务,以使更改生效: ..........................................................................44 七 配置主库的初始化参数文件 init.ora .....................................................................................44 八 使主库修改后的参数生效。 ..................................................................................................45 九 配置备用库的初始化参数文件: ..........................................................................................45 十 启动备用库 ..............................................................................................................................45 十一 手工恢复 ..............................................................................................................................45 十二 将备库置于自管理模式 ......................................................................................................46
  8. 8. ITPUB 电子杂志(总第六期) 8 of 82 RAC 历险记......................................................................................................................................................47 背景................................................................................................................................................47 惊险历程........................................................................................................................................47 总结................................................................................................................................................60 备用数据库的研究 .........................................................................................................................................61 一、备用数据库的环境建立 ........................................................................................................61 二、备用数据库的参数文件建立 ................................................................................................62 三、备用数据库的归档模式建立 ................................................................................................63 四、备用数据库的控制文件建立 ................................................................................................65 五、数据库的 listener.ora 和 tnsnames.ora 文件的设定。 ......................................................65 六、备用数据库的口令文件的生成 ............................................................................................70 七、备用数据库的启动 ................................................................................................................71 八、备用数据库的归档日志传送处理 ........................................................................................71 九、备用数据库的激活 ................................................................................................................72 十、主数据库和备用数据库之间的网络调试 ............................................................................72 ORACLE9IAS 证书不完全指南 .....................................................................................................................74 1 概述............................................................................................................................................74 2 考试............................................................................................................................................74 3 考试准备 ....................................................................................................................................74 4 培训............................................................................................................................................75 5 考试要点 ....................................................................................................................................75 关于杂志......................................................................................................................................................81
  9. 9. ITPUB 电子杂志(总第六期) 9 of 82 RedHat Advance Server 上安装 Oracle 9204 RAC 参考手册 作者:Piner 前言 定位 本文定位在那些有了一定 Linux 与 oracle 基础的,而且对 RAC 也要有相关了解热人员 作为参考手册,而不是所谓的安装向导。所以本文没有详细的安装过程之类的步骤,却有详 细的安装错误的解决办法。 覆盖范围 适合在 Redhet AS 2.1 与 AS 3.0 系统上 包括单节点、多节点安装 包括 9201 升级到 9204 和直接安装 9204 包括文件系统(单机),OCFS 文件系统,RAW 设备与 NFS 网络文件系统的安装异同 第一章. RAC 的机制 RAC 起源于版本 8 的 OPS(Oracle parallel Server),OPS/RAC 最原始的设计初衷就是 系统与应用的高可用性。OPS/RAC 通过不同的节点使用一个(一般是一个)或多个 oracle instances 与一个 database 连接。RAC 对早期的 OPS 做了众多的改进,特别是在节点的通 信与管理上。RAC 在工作期间,每个节点可以单独的被使用并且被应用程序负载均衡。如果发 生意外,如一个节点的失败,可以实现节点的失败切换(failover),保证数据库 24*7 的高可 用性。 RAC 的数据库要求建立在共享磁盘设备上,对于 OPS,只支持 RAW 设备,RAC 已经可以 、OCFS、RAW、与 NFS 等文件系统或者设备。因为 RAC 是多个实 支持文件系统(单机模拟) 例对应一个数据库,每个节点都有自己的日志,因此在备份与恢复方面,将需要一些特殊的处理。 但是,RAC 并不提供容灾的功能,如共享磁盘设备的损坏,自然灾害等不可避免的损失, 将导致 RAC 的不可使用, 所以,RAC 一般与其它的容灾组件配合使用, RAC+DATA GUARD。 如 取代以前版本的分布式锁管理(DLM),全局缓冲服务(GCS)与全局锁服务(GES)将负责 RAC 的管理工作。GCS 的同步层允许每个实例单独的访问数据库,通过数据库的核心层管理实 例级别的一致性与锁资源。所有的以上任务将被一组特殊的后台进程来完成: LMON (Lock Monitor Process),锁监控进程 负责监控整个 RAC 的全局资源,管理实例与进程的过期以及全局缓冲服务与全局锁服务的 恢复工作,LMON 提供一个众所周知的聚族组服务(CGS)。
  10. 10. ITPUB 电子杂志(总第六期) 10 of 82 LMSn(The Global Cache Service Processes),全局缓冲服务进程 LMSn 可以处理远程节点的全局缓冲服务的信息,LMSn 也负责控制到远程节点的信息流, RAC 可以提供 10 个这样的服务进程 LMS0-LMS9,其进程的多少取决于实例之间的通信量。 LMSn 负责处理远程节点的全局缓冲服务获得的中断请求,保证多个实例的读一致性请求。LMSn 创建块的一致性的读信息并送到远程节点的实例。 LMD(The Global Enqueue Service Daemon),全局资源服务 LMD 资源代理进程,负责管理全局缓冲服务资源的管理,可以负责远程节点资源的请求与 死锁的检测。 第二章. Linux 上安装 RAC 的系统要求 2.1 内核需求 如果是如果是 AS2.1,内核 2.4.9 e16 以上,如 [oracle@dbrac oracle]$ uname -a Linux dbrac 2.4.9-e.37enterprise #1 SMP Mon Jan 26 11:20:59 EST 2004 i686 unknown 如果是 3.0 版本,则没有内核要求,内核信息一般如下 [root@ dbrac oracle]$ uname -a Linux dbrac 2.4.21-4.ELsmp #1 SMP Fri Oct 3 17:52:56 EDT 2003 i686 i686 i386 GNU/Linux 2.2 binutils 需求 binutils 要求 binutils-2.11.90.0.8-12 以上,如 如:2.1 版本 [oracle@dbrac oracle]$ rpm -qa | grep -i binutils binutils-2.11.90.0.8-12 3.0 版本 [root@ dbrac oracle]$ rpm -qa | grep -i binutils binutils-2.14.90.0.4-26 2.3 共享磁盘需求 如果是单节点安装,可以是本地硬盘,文件系统即可 如果是多节点安装,需要共享磁盘系统,可以是 Raw 设备,Ocfs 文件系统,Nfs 网络文件 系统等。
  11. 11. ITPUB 电子杂志(总第六期) 11 of 82 第三章.安装前的准备工作 3.1 调整 Linux 核心参数 在/etc/sysctl.conf 中增加 net.core.rmem_default = 262144 net.core.rmem_max = 262144 net.core.wmem_default = 262144 net.core.rmem_max = 262144 net.ipv4.tcp_sack=0 net.ipv4.tcp_timestamps=0 fs.file-max = 65535 kernel.sem = 500 64000 100 128 kernel.shmmax = 2147483648 以上值根据不同的环境可能有变化,不再描述每个值的具体意义 3.2 加载系统状态检查模块 这个模块在 AS2.1-E16 以上的核心或者是 3.0 的核心中是自带的,不需要安装,它取代了 数据库 9201 版本的 watchdog,所以,我们可以不需要配置 watchdog,如果 OS 核心不够, 可以升级核心。 可以通过如下方法检测是否存在该模块 $ find /lib/modules -name "hangcheck-timer.o" /lib/modules/2.4.9-e.37enterprise/kernel/drivers/char/hangcheck-timer.o 你可以运行该模块并检查日志信息 # su - root # /sbin/insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180 # grep Hangcheck /var/log/messages |tail -1 在/etc/rc.local 下增加 #!/bin/sh touch /var/lock/subsys/local /sbin/insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180 或者 # su - root # echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modules.conf 这样的话,在系统重新启动后,该模块可以自动加载 3.3 确定与配置节点 如果确定在单个节点上模拟 RAC,那么/etc/hosts 文件内容可以类似如下
  12. 12. ITPUB 电子杂志(总第六期) 12 of 82 [root@dbrac root]# more /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost 10.0.29.162 dbrac 其中 dbrac 是该机器的机器名称,与 hostname 或/etc/sysconfig/network 的内容一致 如果是在多节点上安装 RAC,那么/etc/hosts 文件内容可以类似如下 [oracle@db205 oracle]$ more /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost 192.168.168.205 dbrac1 192.168.168.206 dbrac2 192.168.0.205 dbrac1-eth1 192.168.0.206 dbrac1-eth1 其中分别代表公用节点名称与私有节点名称,公用节点是网卡 1 配置的 IP 地址,表示对外 应用程序连接通道;私有节点是网卡 2 配置的 IP 地址,用于多个节点之间的通信专用。 3.4 创建 oracle 用户与组 #groupadd dba #useradd oracle -g dba #passwd oracle 3.5 设置节点环境变量 如果是 AS 3.0,注意设置如下参数 export LD_ASSUME_KERNEL=2.4.1 以下参数在两个平台下公用 export ORACLE_BASE=/u01/oracle export ORACLE_HOME=/u01/oracle/ora920 export ORACLE_TERM=xterm export NLS_LANG=AMERICAN_AMERICA.zhs16gbk export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin export PATH 3.6 准备目录结构 su - oracle
  13. 13. ITPUB 电子杂志(总第六期) 13 of 82 $cd $ORACLE_BASE $ mkdir -p admin/rac/ ---存放配置文件 $ cd admin/rac/ $ mkdir bdump cdump udump createdblog $cd $ORACLE_BASE $ mkdir -p oradata/rac ----存放数据文件 注意:以上操作,如果是多个节点,需要在多个节点上完成 ,单个节点只需要在单节点上 完成即可。 第四章. 确定共享磁盘设备 4.1 单机文件系统上安装 RAC 文件系统如 ext2,ext3 等,可以在单机上模拟 RAC。 假定我们划分/u01 分区为 ext3 文件系统,首先,我们创建新的分区 #fdisk /dev/sda 假定化出的新分区是/dev/sda6,那我们格式化该分区,如果是 As 2.1 #mkfs.ext2 -j /dev/sda6 其中的-j 参数是以 ext3 格式化文件系统,如果是 3.0 系统,则直接可以调用 mkfs.ext3 命令。 #mkfs.ext3 /dev/sda6 然后我们创建一个挂装点 #mkdir /u01;chmod 777 /u01 授予用户权限 #chown oracle:dba /u01 可以用 mount 挂装上 #mount -t ext3 /dev/sda6 /u01 如果想在启动的时候自动挂装,修改/etc/fstab /dev/sda6 /u01 ext3 defaults 1 1 那么我们用 df 就可以发现类似如下的信息 /dev/sda6 17820972 2860164 14055548 17% /u01 4.2 Ocfs 文件系统上单机模拟与多节点共享安装 OCFS 是 Oracle cluster file system,适合单节点与多节点的 RAC 安装。在安装前,我们 需要从 http://oss.oracle.com 下载最新的安装包,并注意安装包与当前核心是否匹配。如果是 AS 2.1 enterprise 核心 下载的版本为。 ocfs-2.4.9-e-enterprise-1.0.10-1.i686.rpm ocfs-support-1.0.10-1.i386.rpm ocfs-tools-1.0.10-1.i386.rpm 所要求的核心版本为 2.4.9-e.12 或者以上
  14. 14. ITPUB 电子杂志(总第六期) 14 of 82 如果是 AS3.0 smp 核心下载的版本为 ocfs-2.4.21-EL-smp-1.0.10-1.i686.rpm ocfs-support-1.0.10-1.i386.rpm ocfs-tools-1.0.10-1.i386.rpm 我们可以用 rpm 来安装软件,如 #rpm -ivh ocfs* 可以用如下的命令查看安装是否成功 # rpm -qa | grep -i ocfs 检查服务是否安装成功 # chkconfig --list |grep ocfs ocfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off 配置/etc/ocfs.conf 文件,结果大致如下 # Ensure this file exists in /etc directory # node_name = dbrac ip_address = 10.0.29.162 ip_port = 7000 comm_voting = 1 然后运行 ocfs_uid_gen -c 获得 gid,之后,文件变得如下所示 [root@dbrac root]# more /etc/ocfs.conf node_name = dbrac ip_address = 10.0.29.162 ip_port = 7000 comm_voting = 1 guid = 7F2311E5DABE42FBCD86000D56BAC410 如果换过网卡之后,需要重新运行 ocfs_uid_gen -c 获得 gid 最后,加载 ocfs 启动 Oracle Cluster Manager,这个命令在一个节点上,安装后只需要运 行一次,在以后系统启动的时候,将由 ocfs 服务自动从/etc/fstab 中加载。 su - root # /sbin/load_ocfs 注意:所有以上步骤,需要在所有节点上进行,如果是单节点,就在一个节点上运行即 可。以下的操作,在一个节点上进行即可。 为了利用 ocfs 文件系统, 我们先划分两个分区来, 一个用于 CM 的检查文件(quorum file), 一个用于存放共享的数据库包括控制文件,数据文件,日志文件,归档文件,服务器配置文 件(srvm configuration file)等。 # fdisk /dev/sdb 划分一个/dev/sdb1 与/dev/sdb5 然后创建一个挂装点 mkdir /shared;chmod 777 /shared mkdir /ocfs01;chmod 777 /ocfs01 现在,我们格式化该分区。 # mkfs.ocfs -b 128 -C -g 500 -u 500 -L ocfs01 -m /ocfs01 -p 0775 /dev/sdb5 其中的-g -u 分别是组与用户编号 各个参数意义如下 -F 强制格式化现有的 ocfs 分区
  15. 15. ITPUB 电子杂志(总第六期) 15 of 82 -b 块的大小(KB),必须是多个 ORACLE 块大小,Oracle 建议 128K -L 卷的标签 -m 挂装点 (本文 "/ocfs01") -u 根路径的所有者的 UID (本文是"oracle") -g 根路径所有者组的 GID (本文是 "dba") -p 根路径的权限许可 现在,我们可以挂装该分区 #services ocfs start #如果已经启动,就不必了 #mount -t ocfs /dev/sdb1 /shared #mount -t ocfs /dev/sdb5 /ocfs01 也可以在/etc/fstab 中增加如下条目,在系统启动的时候,会自动加载 /dev/sda1 /shared ocfs _netdev 0 0 /dev/sda5 /cfs01 ocfs _netdev 0 0 我们用 df 就可以看到类似如下的信息 /dev/sdb1 1026144 24288 1001856 3% /shared /dev/sdb5 34529760 1153120 33376640 4% /ocfs01 以上所有步骤做完,建议重新启动一次,让多个节点确认到共享设备。 4.3 Raw 裸设备 首先需要划分一系列的分区,需要注意的是,每个设备不能多于 15 个分区,Linux 总共 不能超过 255 个裸设备。 裸设备一般用于共享磁盘系统。可以用如下的方法挂装 #su - root raw /dev/raw/raw1 /dev/sda2 # Used for the Cluster Manager Quorum File raw /dev/raw/raw2 /dev/sda3 # Used for the Shared Configuration file for srvctl # /dev/sda4: Used for creating the Extended Partition which starts as /dev/sda5. raw /dev/raw/raw3 /dev/sda5 # spfileorcl.ora raw /dev/raw/raw4 /dev/sda6 # control01.ctl raw /dev/raw/raw5 /dev/sda7 # control02.ctl raw /dev/raw/raw6 /dev/sda8 # indx01.dbf raw /dev/raw/raw7 /dev/sda9 # system01.dbf raw /dev/raw/raw8 /dev/sda10 # temp01.dbf raw /dev/raw/raw9 /dev/sda11 # tools01.dbf raw /dev/raw/raw10 /dev/sda12 # undotbs01.dbf raw /dev/raw/raw11 /dev/sda13 # undotbs02.dbf raw /dev/raw/raw12 /dev/sda14 # undotbs03.dbf raw /dev/raw/raw13 /dev/sda15 # users01.dbf raw /dev/raw/raw14 /dev/sdb5 # redo01.log (Group# 1 Thread# 1) raw /dev/raw/raw15 /dev/sdb6 # redo02.log (Group# 2 Thread# 1) raw /dev/raw/raw16 /dev/sdb7 # redo03.log (Group# 3 Thread# 2) raw /dev/raw/raw17 /dev/sdb8 # orcl_redo2_2.log (Group# 4 Thread# 2)
  16. 16. ITPUB 电子杂志(总第六期) 16 of 82 raw /dev/raw/raw18 /dev/sdb9 # orcl_redo3_1.log (Group# 5 Thread# 3) raw /dev/raw/raw19 /dev/sdb10 # orcl_redo3_2.log (Group# 6 Thread# 3) 如果检查连接,用如下命令 su - root raw -qa 或者 more /dev/raw/raw1 类似的方法检查。 如果想在启动的时候,自动挂载,请把以上的命令写到/etc/rc.local 中,或者编写 /etc/sysconfig 下的 rawdevices 文件,如 # more rawdevices /dev/raw/raw1 /dev/sda2 /dev/raw/raw2 /dev/sda3 …… 如果需要对裸设备授权,可以运行如下脚本,其中 n 表示裸设备分区数目 su - root for i in `seq 1 n` do chmod 660 /dev/raw/raw$i chown oracle.dba /dev/raw/raw$i done 再用如下的方法建立软联结,那么就可以和文件系统一样使用裸设备了。 su - oracle ln -s /dev/raw/raw1 /var/opt/oracle/oradata/orcl/CMQuorumFile ln -s /dev/raw/raw2 /var/opt/oracle/oradata/orcl/SharedSrvctlConfigFile ln -s /dev/raw/raw3 /var/opt/oracle/oradata/orcl/spfileorcl.ora …… 注意:以上操作除了分区外,需要在每个节点完成 4.4 其它,如 nfs 文件系统 注意启动 nfs,nfslock 服务 Mount 该文件系统的方法如下 mount 10.0.29.152:/vol/vol1/fas250 /netapp nfs rw,hard,nointr,tcp,noac,vers=3,timeo=600,rsize=32768,wsize=32768 也可以放到 fstab 中,与以上类似 其它的地方与 ocfs 类似,不再额外描述 第五章. 安装 OCM(Oracle Cluster Manager) 5.1 生成一个 CM 管理文件 如果是单节点文件系统,可以用如下命令模拟
  17. 17. ITPUB 电子杂志(总第六期) 17 of 82 su - oracle $dd if=/dev/zero of=/u01/oracle/oradata/rac/RacQuorumDisk bs=1024 count=1024 如果是多节点 ocfs 或 raw 设备,可以同样用 dd 生成相应的文件,放到准备好的共享磁 盘设备上,大小 1M 即可。 5.2 安装 OCM 管理软件 1、如果是 9201 for linux,先安装 9201 OCM,安装选项的最后一项,然后升级到 9204 2、如果是 9204 for linux,直接选中 9204 OCM 安装即可 3、如果在 AS 3.0 上安装,请在安装前进行如下操作 先链接 gcc su - root mv /usr/bin/gcc /usr/bin/gcc323 ln -s /usr/bin/gcc296 /usr/bin/gcc mv /usr/bin/g++ /usr/bin/g++323 # if g++ doesn't exist, then gcc-c++ was not installed ln -s /usr/bin/g++296 /usr/bin/g++ 然后打补丁 3006854,可以去 http://metalink.oracle.com.下载补丁并参考补丁更多的信息 su - root # unzip p3006854_9204_LINUX.zip Archive: p3006854_9204_LINUX.zip creating: 3006854/ inflating: 3006854/rhel3_pre_install.sh inflating: 3006854/README.txt # cd 3006854 # sh rhel3_pre_install.sh Applying patch... Patch successfully applied 如果在本地 X Win 拒绝图形界面,注意设置 $xhost +本机名或 IP 在公共节点与私有节点输入机器名称,与/etc/hosts 的内容一致,如果不添写也可以,这 个可以再配置 在需要我们输入这个磁盘分区的时候, 我们输入我们生成的文件名称,如果不输入也可 以再配置 /u01/oracle/oradata/rac/RacQuorumDisk
  18. 18. ITPUB 电子杂志(总第六期) 18 of 82 5.3 配置 OCM 文件 1、cmcfg.ora 配置文件 [oracle@appc2 admin]$ cp cmcfg.ora.tmp cmcfg.ora 查看配置文件的内容,可以发现有如下内容 [oracle@appc2 admin]$ more cmcfg.ora HeartBeat=15000 ClusterName=Oracle Cluster Manager, version 9i PollInterval=1000 MissCount=210 PrivateNodeNames=dbrac PublicNodeNames=dbrac ServicePort=9998 #WatchdogSafetyMargin=5000 #WatchdogTimerMargin=60000 HostName=dbrac CmDiskFile=/home/oracle/oradata/rac/RacQuorumDisk 因为我们不再用 watchdog 去检测系统,而是用 hangcheck-timer,所以,我们需要注释 Watchdog 的两行,增加如下一行 KernelModuleName=hangcheck-timer 以上的单节点 RAC 的一个例子,可以看到,在安装界面要求输入的节点名称,文件名 称,都有对应的项目,这个因为是单节点,所有公用节点与私有节点都只有一个。 如果是多节点的 RAC,公用节点与私有节点应当类似如下 PrivateNodeNames=dbrac1-eth1 dbrac2-eth1 PublicNodeNames=dbrac1 dbrac2 其中,私有节点是网卡 2 配置的地址,用于两台节点直接的通信 公用节点是网卡 1 配置的地址,用于外部访问数据库。 2、ocmargs.ora 配置文件 注释$ORACLE_HOME/oracm/admin/ocmargs.ora 中包含 watchdogd 的行 more $ORACLE_HOME/oracm/admin/ocmargs.ora # Sample configuration file $ORACLE_HOME/oracm/admin/ocmargs.ora #watchdogd oracm norestart 1800 3、ocmstart.sh 启动文件 注释$ORACLE_HOME/oracm/bin/ocmstart.sh 中的以下行
  19. 19. ITPUB 电子杂志(总第六期) 19 of 82 # watchdogd's default log file # WATCHDOGD_LOG_FILE=$ORACLE_HOME/oracm/log/wdd.log # watchdogd's default backup file # WATCHDOGD_BAK_FILE=$ORACLE_HOME/oracm/log/wdd.log.bak # Get arguments # watchdogd_args=`grep '^watchdogd' $OCMARGS_FILE | # sed -e 's+^watchdogd *++'` # Check watchdogd's existance # if watchdogd status | grep 'Watchdog daemon active' >/dev/null # then # echo 'ocmstart.sh: Error: watchdogd is already running' # exit 1 # fi # Backup the old watchdogd log # if test -r $WATCHDOGD_LOG_FILE # then # mv $WATCHDOGD_LOG_FILE $WATCHDOGD_BAK_FILE # fi # Startup watchdogd # echo watchdogd $watchdogd_args # watchdogd $watchdogd_args 5.4 启动 ocm $ cd $ORACLE_HOME/oracm/bin $ su # ./ocmstart.sh 启动完用 ps -ef|grep oracm 看一下有没进程,如果没有到$ORACLE_HOME/oracm/log 目 录下查出错信息 第六章. 安装 Oracle 软件 6.1 开启 RSH 在多节点上需要,如果在单节点就无所谓了,用于节点之间的通信,只需要在一个节点 上安装 Oracle 软件即可,开启 RSH 之后还要注意 iptables 防火墙是否打开,最好关闭该防 火墙。 su - root chkconfig rsh on chkconfig rlogin on service xinetd reload
  20. 20. ITPUB 电子杂志(总第六期) 20 of 82 配置远程权限 $ more /etc/hosts.equiv +dbrac1 oracle +dbrac2 oracle +dbrac1-eth1 oracle +dbrac2-eth2 oracle 测试 RSH 是否能正常工作,在节点 1 上查看远程节点的文件内容 [oracle@dbrac1 admin]$ rsh dbrac2 cat /etc/hosts.equiv dbrac1 oracle dbrac2 oracle dbrac1-eth1 oracle dbrac2-eth1 oracle 如果有结果,证明正常,同样,在节点 2 上查看节点 1 的文件内容,可以检测节点 2 6.2 安装软件 如果 rsh 设置的没有问题,只安装一个节点即可,或者也可以安装后拷贝的第二个节点。 软件安装过程不再多叙,有几点需要注意 1、在安装开始,注意选择节点,并注意 cluster 组件是否被安装,可以去掉多余的组件, 如 OEM 与 HTTP SERVER 2、在 AS2.1 上的安装应当没有任何问题,在 AS 3.0 上安装 9201,如果在编译阶段有 ins_oemagent.mk(补丁 3119415 固定) ,ins_ctx.mk(在 9204 的补丁中固定) ,都忽略,将在 补丁中固定。 3、如果是先安装 9201 并升级到 9204,注意在升级的时候,先升级 OUI,并再运行 $ORACLE_HOME/bin 下的 runInstaller,如果是直接安装 9204 的安装程序,只要安装即可。 运行 9204 升级程序之前,注意进行如下操作(这个是 RAC 升级特有的) 。 su - oracle cd $ORACLE_BASE/oui/bin/linux ln -s libclntsh.so.9.0 libclntsh.so 4、在 AS3.0 上从 9201 升级到 9204,如果遇到 ins_oemagent.mk,也忽略,将在以下的 补丁中固定。 补丁 3119415 与 2617419 补丁,固定以上的 ins_oemagent.mk 错误 su - oracle $ cp p2617419_220_GENERIC.zip /tmp $ cd /tmp $ unzip p2617419_220_GENERIC.zip
  21. 21. ITPUB 电子杂志(总第六期) 21 of 82 在打 3119415 之前,需要确保 fuser 是可以用的,现在开始打该补丁 su - oracle $ unzip p3119415_9204_LINUX.zip $ cd 3119415 $ export PATH=$PATH:/tmp/OPatch $ export PATH=$PATH:/sbin # 因为 fuser 在/sbin 下 $ which opatch /tmp/OPatch/opatch $ opatch apply 5、最后注意只安装,不创建数据库 6.3 初试化共享文件 安装完毕后创建配置文件 su - root # mkdir -p /var/opt/oracle # touch /var/opt/oracle/srvConfig.loc # chown oracle:dba /var/opt/oracle/srvConfig.loc # chmod 755 /var/opt/oracle/srvConfig.loc 在 srvConfig.loc 中间添加 srvconfig_loc 参数如下: srvconfig_loc=/u01/oracle/oradata/rac/srvConfig.dbf 创建 srvConfig.dbf 文件。如果是共享设备,需要创建到共享设备上,如 ocfs 文件系统或 者是 raw 分区上,那么上面的文件名将有一些差异。 su - oracle $ touch srvConfig.dbf 初始化配置文件 $ srvconfig -init 第七章. 创建数据库 7.1 准备参数如下 *.log_buffer=626688 *.compatible='9.2.0.0.0' *.control_files='/u01/oracle/oradata/rac/control01.ctl','/u01/oracle/oradat a/rac/control02.ctl','/u01/oracle/oradata/rac/control03.ctl' *.core_dump_dest='/u01/oracle/admin/rac/cdump' *.user_dump_dest='/u01/oracle/admin/rac/udump'
  22. 22. ITPUB 电子杂志(总第六期) 22 of 82 *.background_dump_dest='/u01/oracle/admin/rac/bdump' *.db_block_size=8192 *.db_cache_size=250549376 *.db_file_multiblock_read_count=16 *.db_name='rac' *.fast_start_mttr_target=300 *.hash_join_enabled=TRUE *.job_queue_processes=2 *.large_pool_size=3145728 *.pga_aggregate_target=51200000 *.processes=100 *.remote_login_passwordfile='exclusive' *.sga_max_size=600000000 *.shared_pool_size=31457280 *.timed_statistics=TRUE *.undo_management='AUTO' *.undo_retention=10800 *.session_cached_cursors=200 #注意以下的参数,是 Cluster 需要的参数 *.cluster_database = TRUE *.cluster_database_instances = 2 raca.instance_name='raca' racb.instance_name='racb' raca.instance_number=1 racb.instance_number=2 *.service_names='rac' raca.thread=1 racb.thread=2 raca.local_listener='(address=(protocol=tcp)(host=dbrac)(port=1521)) ' raca.remote_listener='(address=(protocol=tcp)(host=dbrac)(port=1522)) ' racb.local_listener='(address=(protocol=tcp)(host=dbrac)(port=1522)) ' racb.remote_listener='(address=(protocol=tcp)(host=dbrac)(port=1521)) ' raca.undo_tablespace=UNDOTBS1 racb.undo_tablespace=UNDOTBS2 注意这里的 local_listener 与 remote_listener,因为这里是单节点模拟 RAC 的参数, 如果是多节点,将配置远程的名称与端口,主要用于 load_balance 与 failover。如果是多 节点,可能的形式如下。 raca.local_listener='(address=(protocol=tcp)(host=dbrac1)(port=1521)) ' raca.remote_listener='(address=(protocol=tcp)(host=dbrac2)(port=1521)) ' racb.local_listener='(address=(protocol=tcp)(host=dbrac2)(port=1521)) ' racb.remote_listener='(address=(protocol=tcp)(host=dbrac1)(port=1521)) ' 以上参数文件可以放在共享设备上让多个节点实例共享,也可以在自己的节点的默认参
  23. 23. ITPUB 电子杂志(总第六期) 23 of 82 数文件中加入指向该共巷参数文件的指针,如 ifile=/u01/oracle/ora920/dbs/init.ora 7.2 创建密码文件 如果不是单节点,每个节点都完成 $export ORACLE_SID=rac1 $ orapwd file=orapwrac1 password=piner entries=5 7.3 创建数据库 在一个节点上完成即可 运行 root.sh。 启动数据库到 nomount 下 Sqlplus /nolog SQL>connect / as sysdba SQL>startup nomount pfile=file name SQL>CREATE DATABASE rac MAXINSTANCES 3 MAXLOGHISTORY 1 MAXLOGFILES 10 MAXLOGMEMBERS 3 MAXDATAFILES 100 DATAFILE '/u01/oracle/oradata/rac/system01.dbf' SIZE 250M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/u01/oracle/oradata/rac/temp01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 1024K MAXSIZE UNLIMITED UNDO TABLESPACE "UNDOTBS1" DATAFILE '/u01/oracle/oradata/rac/undotbs1_01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED CHARACTER SET ZHS16GBK NATIONAL CHARACTER SET AL16UTF16 LOGFILE GROUP 1 ('/u01/oracle/oradata/rac/redo01.log') SIZE 102400K, GROUP 2 ('/u01/oracle/oradata/rac/redo02.log') SIZE 102400K, GROUP 3 ('/u01/oracle/oradata/rac/redo03.log') SIZE 102400K; 注意以上的文件路径,可能因为不同的共享设备将有不同的路径。如果是 Raw 设备, 请指定好文件大小,不要设置 AUTOEXTEND。
  24. 24. ITPUB 电子杂志(总第六期) 24 of 82 7.4 创建相应的数据字典 SQL>@?/rdbms/admin/catalog SQL>@?/rdbms/admin/catproc 创建 Cluster 特有的视图 SQL> @?/rdbms/admin/catclust.sql 以上操作,都在一个节点上完成。 可选如下组件 @?/rdbms/admin/catexp7.sql; @?/rdbms/admin/catblock.sql; @?/rdbms/admin/catoctk.sql; @?/rdbms/admin/owminst.plb; 第八章. 启动第二个节点实例 8.1 准备第二个节点的日志与重做 在第一个节点上 SQL>shutdown immediate SQL>startup mount pfile=file name SQL> alter database add logfile thread 2 2 group 4 ('/u01/oracle/oradata/rac/redo04.log') size 10240K, 3 group 5 ('/u01/oracle/oradata/rac/redo05.log') size 10240K, 4 group 6 ('/u01/oracle/oradata/rac/redo06.log') size 10240k; SQL>alter database open; SQL> alter database enable public thread 2; SQL> create undo tablespace undotbs2 datafile 2 '/u01/oracle/oradata/rac/undotbs2_01.dbf' size 200m; Tablespace created. 8.2 启动第二个实例 如果是单节点,再开启一个连接终端 su - oracle $export ORACLE_SID=rac2 $ sqlplus "/ as sysdba" SQL>startup pfile=file name 这里的 pfile 就是共享的那个 pfile 如果是多节点,到另外一个节点,执行以上同样的操作
  25. 25. ITPUB 电子杂志(总第六期) 25 of 82 8.3 验证 RAC SQL> select THREAD#,STATUS,ENABLED from gv$thread; THREAD# STATUS ENABLED ---------- ------ -------- 1 OPEN PUBLIC 2 OPEN PUBLIC 1 OPEN PUBLIC 2 OPEN PUBLIC SQL> select INSTANCE_NUMBER,INSTANCE_NUMBER,STATUS,HOST_NAME from gv$instance; INSTANCE_NUMBER INSTANCE_NUMBER STATUS HOST_NAME --------------- --------------- ------------ ------------------ 1 1 OPEN dbrac1 2 2 OPEN dbrac2 第九章. 测试、使用 RAC 9.1 监听的配置 LISTENER1 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dbrac)(PORT = 1521)) ) ) ) LISTENER2 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dbrac)(PORT = 1522)) ) ) ) 以上是单节点模拟 RAC 的配置,两个实例采用不同的端口来模拟,如果是多节点的 RAC,每个节点只要配置自己相应的监听即可。 启动监听, 当看到状态类似如下时,表示正确,否则,需要检查每个实例的 local_listener 与 remote_listener 参数。 $ lsnrctl status LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 29-MAY-2004
  26. 26. ITPUB 电子杂志(总第六期) 26 of 82 10:38:08 Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.168.205)(P ORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 9.2.0.4.0 - Production Start Date 25-MAY-2004 01:27:14 Uptime 4 days 9 hr. 10 min. 54 sec Trace Level off Security OFF SNMP OFF Listener Parameter File /u01/oracle//ora920/network/admin/listener.ora Listener Log File /u01/oracle//ora920/network/log/listener.log Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.168.205)(P ORT=1521))) Services Summary... Service "rac" has 2 instance(s). Instance "rac1", status READY, has 1 handler(s) for this service... Instance "rac2", status READY, has 1 handler(s) for this service... The command completed successfully 9.2 本地名称的配置 rac= (description= (load_balance=on) (failover=on) (address_list= (address=(protocol=tcp)(host=dbrac)(port=1521)) (address=(protocol=tcp)(host=dbrac)(port=1522))) (connect_data= (service_name=rac))) rac1= (description= (address=(protocol=tcp)(host=dbrac)(port=1521)) (connect_data= (service_name=rac) (instance_name=rac1))) rac2= (description=
  27. 27. ITPUB 电子杂志(总第六期) 27 of 82 (address=(protocol=tcp)(host=dbrac)(port=1522)) (connect_data= (service_name=rac) (instance_name=rac2))) 以上是对一个节点的 RAC 的配置,如果是多个节点,只需要修改主机名与端口即可 9.3 负载均衡测试 [oracle@dbtest admin]$ more test.sh #!/bin/sh sqlplus "test/test@rac" <<EOF select instance_name from v$instance; exit EOF [oracle@dbtest admin]$ ./test.sh SQL*Plus: Release 9.2.0.4.0 - Production on Sat May 29 10:50:08 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production With the Partitioning, Real Application Clusters, OLAP and Oracle Data Mining options JServer Release 9.2.0.4.0 - Production SQL> INSTANCE_NAME ---------------- rac2 [oracle@dbtest admin]$ ./test.sh SQL*Plus: Release 9.2.0.4.0 - Production on Sat May 29 10:50:08 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production With the Partitioning, Real Application Clusters, OLAP and Oracle Data Mining options JServer Release 9.2.0.4.0 - Production SQL> INSTANCE_NAME ---------------- rac1 9.4 失败切换(failover)测试 需要修改 tnsnames.ora 为如下形式 rac=
  28. 28. ITPUB 电子杂志(总第六期) 28 of 82 (description= # (enable=broken) (load_balance=on) (failover=on) (address_list= (address=(protocol=tcp)(host=dbtest)(port=1521)) (address=(protocol=tcp)(host=dbtest)(port=1522))) (connect_data= (service_name=rac) (failover_mode=(type=select)(method=basic) ) ) ) 注意其中的 failover_mode SQL> connect test/test@rac SQL> select INSTANCE_NUMBER,INSTANCE_NAME from v$instance; INSTANCE_NUMBER INSTANCE_NAME --------------- ---------------- 2 rac2 如果现在关闭实例 rac2,再执行如上语句,可以发现 SQL> select INSTANCE_NUMBER,INSTANCE_NAME from v$instance; INSTANCE_NUMBER INSTANCE_NAME --------------- ---------------- 1 rac1 已经变为 rac1 9.5 rac 环境下修改为归档模式 1.停止所有 node 2.修改 init 文件*.cluster_database=false 3.在一个 node 做修改 startup mount; alter database archivelog ; SQL> archive log list; SQL>alter database open; 4.还原 *.cluster_database=true 5.启动所有 node 第十章.从单节点数据库变为 RAC 首先假定数据库软件的 Cluster 已经安装,OCM 已经安装配置。
  29. 29. ITPUB 电子杂志(总第六期) 29 of 82 10.1 修改参数文件 增加如类似如下的内容 *.cluster_database = TRUE *.cluster_database_instances = 2 *.undo_management=AUTO <SID1>.undo_tablespace=undotbs <SID1>.instance_name=RAC1 <SID1>.instance_number=1 <SID1>.thread=1 <SID1>.local_listener=LISTENER_RAC1 <SID1>.remote_listener=LISTENER_RAC2 10.2 创建 cluster 视图 利用$ORACLE_HOME/rdbms/admin/catclust.sql 10.3 重新创建控制文件 把 maxinstances 从 1 变为定义的节点数目 $ sqlplus /nolog SQL> connect / as sysdba SQL> startup mount SQL> alter database backup controlfile to trace; 10.4 创建第二个实例的 redo 与 undo 启动第一个实例 SQL>alter database add logfile thread 2 group 3 ('/dev/RAC/redo2_01_100.dbf') size 100M, group 4 ('/dev/RAC/redo2_02_100.dbf') size 100M; alter database enable public thread 2; SQL>CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '/dev/RAC/undotbs_02_210.dbf' SIZE 200M ; 最后,在第二个节点上安装软件、设置环境变量、启动实例 小结 1、 描述了 RAC 的运行原理与运行机制
  30. 30. ITPUB 电子杂志(总第六期) 30 of 82 2、 描述了 RAC for Linux 的必要条件,如内核要求如软件要求 3、 描述各种存储设备的与多种文件系统,如 Raw,ocfs 等 4、 描述了 Cluster 管理软件在不同平台上的安装方法 5、 描述了数据库软件在不同平台上的安装方法 6、 描述了手工创建 RAC 数据库并启动多个数据库的方法 7、 介绍了 RAC 的一些特征与管理方法 End
  31. 31. ITPUB 电子杂志(总第六期) 31 of 82 在 RHEL 3 的单机上安装 oracle9i RAC 作者:PondKa 这两天闲来无事,想起不久前看到文章说可以在单机上安装 Oracle9i Rac,就到处找资 料,想自己装来玩玩.将过程和心得贴出来,与大家分享. 安装过程中参考的文章: http://chinaunix.net/jh/19/119236.html 在建立数据库以后,启动第二个实例时,参考了作者的做法,在此对作者表示感谢! 安装过程中参考的官方安装文档,RAC_1030.pdf.英文的,而且不是单机,但有很大的参 考价值,因此当附件传上来. 安装开始前,请先参考《在 RHEL3 上安装 Oracle9.2.0》. http://www.itpub.net/showthread.php?threadid=171693 补丁包和环境变量的设置,请看此文. 1.安装 Oracle Cluster Manager 9.2.0 安装环境和变量的设置请看上文中的 1-5 节. 注意: 如果以前没有打过补丁 3006845,则需要打.如果已经打过了,则不需要再打. 首先生成一个 Quorum Disk File.在多节点 RAC 中,需要是一个裸设备或是在 OCFS 文件系统上. 但因为我们是单机,因此可以随便指定一个文件.用命令来生成: $ dd if=/dev/zero of=/u02/rac/RacFile bs=1024 count=1024 我看 metalink 上的文章说这个文件至少要 4+(4*number_of_node)KB,我给了 1M, 足够了. 然后到 Disk1 下运行 runInstaller.出现产品选择界面时,选择 'Oracle Cluster Manager 9.2.0.1.0' 出现'Public Node Information'时,填入本机的 hostname. 就是 hostname 命令返 回的值,注意,不要将后面的域也填进去了! 不能包含'.'字符. 因为是单机,所以只填一个 出现'Private Node Information'时,也填本机 hostname.
  32. 32. ITPUB 电子杂志(总第六期) 32 of 82 出现 watchdog 参数时,接受缺省值.在升级到 9.2.0.4 后,不会用 watchdog. 出现 Quorum Disk Information 选项时,填刚才生成的文件名/u02/rac/RacFile 然后就可以安装了. 装完以后,退出安装界面,不要安装数据库软件. 2.打补丁到 OCM 9.2.0.4 需要先打 OCM 的补丁.我第一次装的时候,先装了数据库软件,然后升级 OCM,然后打数 据库的补丁.但打数据库的补丁时,因为没有出现选择节点的画面,让我误认为 OCM 升级失 败,只得将软件全部删掉重新装. 但先打 OCM 的补丁,打数据库软件的补丁时,也没有出现选择节点的画面,我硬着头皮装 下去,结果能正确将补丁打上.不知道在多节点集群环境中,是不是也不出现选择节点的画面. 将补丁包解开,运行 runInstaller,打补丁 OCM 9.2.0.4 . 过程跟安装 OCM 9.2.0.1 类似. 3.配置 RAC,并启动 OCM9.2.0.4 使用 hangcheck-timer 来代替 watchdog,因此手工修改配置文件和启 动文件. 先检查模块是否已经安装,看这个文件是否存在: /lib/modules/2.4.21-4.EL/kernel/drivers/char/hangcheck-timer.o 如果不存在,则需要安装. 因为我的系统中,有这个文件,我就没有去找这个文件到底在哪个包中,所以,我也不知道 该装哪个包! 配置内核模块,使用 hangcheck-timer 代替 watchdog: # lsmod | grep watchdog 应该没有输出.否则使用 # rmmod 命令去掉这个模块. 然后加载 hangcheck-timer 模块 # insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180 Using /lib/modules/2.4.21-4.EL/kernel/drivers/char/hangcheck-timer.o 确认模块已经加载: # lsmod | grep hang hangcheck-timer 2648 0 (unused)
  33. 33. ITPUB 电子杂志(总第六期) 33 of 82 使系统一启动就加载这个模块,需要在/etc/rc.local 文件最后加入一行: /sbin/insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180 修改配置文件和启动文件: $ORACLE_HOME/oracm/bin/ocmstart.sh 启动命令行.将所有有关 watchdog 的行全部注释掉.将这几行注释为以下的样子: # watchdogd's default log file # WATCHDOGD_LOG_FILE=$ORACLE_HOME/oracm/log/wdd.log # watchdogd's default backup file # WATCHDOGD_BAK_FILE=$ORACLE_HOME/oracm/log/wdd.log.bak # Get arguments # watchdogd_args=`grep '^watchdogd' $OCMARGS_FILE | # sed -e 's+^watchdogd *++'` # Check watchdogd's existance # if watchdogd status | grep 'Watchdog daemon active' >/dev/null # then # echo 'ocmstart.sh: Error: watchdogd is already running' # exit 1 # fi # Backup the old watchdogd log # if test -r $WATCHDOGD_LOG_FILE # then # mv $WATCHDOGD_LOG_FILE $WATCHDOGD_BAK_FILE # fi # Startup watchdogd # echo watchdogd $watchdogd_args # watchdogd $watchdogd_args $ORACLE_HOME/oracm/admin/ocmargs.ora 参数文件,去掉或注释掉下面这行: watchdogd $ORACLE_HOME/oracm/admin/cmcfg.ora 配置文件.将 cmcfg.ora.tmp 拷贝为 cmcfg.ora 文件,并修改成以下样子: HeartBeat=15000 ClusterName=Oracle Cluster Manager, version 9i
  34. 34. ITPUB 电子杂志(总第六期) 34 of 82 PollInterval=1000 MissCount=210 PrivateNodeNames=hostname PublicNodeNames=hostname ServicePort=9998 HostName=ao-040 CmDiskFile=/u02/rac/RacFile KernelModuleName=hangcheck-timer 其 中 ,PrivateNodeNames 和 PublicNodeNames 要 跟 你 安 装 OCM 时 填 入 的 hostname 相同. CmDiskFile 要跟你先前生成的 Quorum Disk File 一样. 最后一行确认使用 hangcheck-timer 模块. 启动 OCM: 官方文档中,创建了一个启动脚本,因为是用来玩,就省略了这一步.用命令行来启动: $ su # cd $ORACLE_HOME/oracm/bin # ./ocmstart.sh oracm </dev/null 2>&1 >/u01/app/oracle/product/9.2.0.4.0/oracm/log/cm.out & 如果启动太频繁,可能会报错: ocmstart.sh: Error: Restart is too frequent ocmstart.sh: Info: Check the system configuration and fix the problem. ocmstart.sh: Info: After you fixed the problem, remove the timestamp file ocmstart.sh: Info: "/u01/app/oracle/product/9.2.0.4.0/oracm/log/ocmstart.ts" 这时,用 # killall oracm # ps -ef | grep oracm 来确认 OCM 没有启动.再将 /u01/app/oracle/product/9.2.0.4.0/oracm/log/ocmstart.ts 文件删除了就可以启动了. # rm -f /u01/app/oracle/product/9.2.0.4.0/oracm/log/ocmstart.ts # ./ocmstart.sh oracm </dev/null 2>&1 >/u01/app/oracle/product/9.2.0.4.0/oracm/log/cm.out & 4.安装 Enterprise Server 9.2.0 配置好 OCM,并启动后,就可以开始安装数据库软件了. 首先装 9.2.0
  35. 35. ITPUB 电子杂志(总第六期) 35 of 82 首先需要生成一个共享配置文件,用于多实例间和多监听器间的通信. 文档中说要是裸设备或在共享文件系统上.因为是单机,因此可以在任意位置生成. $ dd if=/dev/zero of=/u02/rac/SrvConfigFile bs=1024 count=10240 文档中没有说此文件需要多大,我设置了 10M. 如果前面没有出错,并且 ORACM 软件启动正确,则运行 runInstaller 后,欢迎画面后会 出现选择节点的画面.因为是单机安装,因此只有一个节点出现,选择了之后,就可以按照正常 的步骤进行. 在选择产品的时候,建议选择自定义(Customer),可以确保 Cluster Manager 安装好, 并且不创建数据库. 安装完,进行配置时,因为要打补丁,我直接将窗口关闭了.免得它配完以后,要启动 HTTP. 另外,需要注意的是,运行 root.sh 前,按照文档说明,生成一个配置文件. # mkdir -p /var/opt/oracle # touch /var/opt/oracle/srvConfig.loc 然后再运行 root.sh,会报错,不管,在 9.2.0.4 中修正了. 请参看 http://www.itpub.net/showthread.php?threadid=171693 5.数据库软件打补丁到 Enterprise Server 9.2.0.4 注意,打补丁时,要确保 ORACM 在运行,并且没有关联到此安装目录的实例,监听 器,HTTP server 在运行.因为我刚才直接将 9201 装完以后的配置画面关掉了,因此我的 PC 上没有.如果你的 PC 上有的话,记得关闭.忘了也没有关系,Installer 会报告写文件错误,那 时再关闭也可以. 打补丁情况跟非 RAC 情况一样. 先装 Installer,然后再打 Server 的补丁. 注意: 因为 Oracle Cluster Manager 已经打过补丁了,不要再打这个补丁. 另外,我在打 Server 补丁时,没有出现选择节点的画面!直接 install 就可以了. 在 Oracle 提供的官方安装文档中,说会出现节点选择画面,但那个文档是 RHAS2.1 的, 并且是多节点的普通 RAC,我不知道是因为操作系统版本不对没有出现此画面,还是因为我 只有一个节点而没有出现此画面.或者就是 Oracle 的文档错误.希望有条件做试验或已经做 过试验的人告诉我原因! 先表示谢意! 我在打补丁过程中,没有报错误,也就没有打补丁 3119415.
  36. 36. ITPUB 电子杂志(总第六期) 36 of 82 6.准备创建数据库 首先创建一个配置文件 srvConfig.loc 因为先前已经用 touch 生成了这个文件,因此需要的只是更改权限和属主. # chmod 755 /var/opt/oracle/srvConfig.loc # chown oracle:dba /var/opt/oracle/srvConfig.loc 并在其中添加以下内容: srvconfig_loc=<your_config_file_name> 其中<your_config_file_name>就是先前用 dd 生成的共享配置文件. 我的文件内容如下: srvconfig_loc=/u02/rac/SrvConfigFile 初始化共享配置文件.以 oracle 身份运行: $ srvconfig -init 启动公共服务进程(Global Services Deamon).以 oracle 身份运行: $ gsdctl start Successfully started GSD on local node 然后就可以开始创建数据库了. 7.在服务器端配置 listener.ora 和 tnsnames.ora 修改 lisnter.ora 和 tnsnames.ora 文件,以增加 listener. 这一部分,RAC 环境和非 RAC 环境没有区别,可以参考 oracle 的文档. 可以一个 listener 给三个 instance 服务,也可以启动三个 listener 给三个 instance 服 务. 我启动了三个 listener. Listener.ora LSNR1 = (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1521))) LSNR2 = (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1522))) LSNR3 = (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1523))) tnsnames.ora
  37. 37. ITPUB 电子杂志(总第六期) 37 of 82 lsnr1=(DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1521))) lsnr2=(DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1522))) lsnr3=(DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1523))) 将 your_ip_or_name 替换为你的 IP 地址或者 hostname. Rac.test.com 替换为你 init.ora 文件中设置的 db_name.db_domain 启动三个 listener. $ lsnrctl start lsnr1 $ lsnrctl start lsnr2 $ lsnrctl start lsnr3 8.创建数据库 可以运行 dbca 用图形界面来创建,也可以用命令行来创建. 因为以前没有创建过集群下的数据库,因此我用图形界面来创建脚本,修改后用命令行来 创建. 先确认 ORACM 和 GSD 已经启动: $ ps -ef | grep oracm root 3056 1 0 10:50 pts/1 00:00:00 oracm root 3057 3056 0 10:50 pts/1 00:00:00 oracm root 3059 3057 0 10:50 pts/1 00:00:00 oracm root 3060 3057 0 10:50 pts/1 00:00:00 oracm root 3061 3057 0 10:50 pts/1 00:00:00 oracm root 3062 3057 0 10:50 pts/1 00:00:00 oracm root 3063 3057 0 10:50 pts/1 00:00:00 oracm root 3064 3057 0 10:50 pts/1 00:00:00 oracm root 3065 3057 0 10:50 pts/1 00:00:00 oracm root 3338 3057 0 11:36 pts/1 00:00:00 oracm root 3362 3057 0 11:36 pts/1 00:00:00 oracm oracle 3482 2932 0 11:38 pts/1 00:00:00 grep oracm $ gsdctl stat GSD is running on the local node 然后运行 dbca 启动数据库配置助手. 在欢迎画面中,选择 Oracle cluster database, 然后一路继续就可以了.
  38. 38. ITPUB 电子杂志(总第六期) 38 of 82 在最后的总结画面上,可以选择创建数据库,也可以选择创建脚本.我选择了创建脚本. 手工修改脚本为自己想要的样子,然后跟非集群环境一样手工创建数据库.数据文件使用 本地管理,不用数据字典管理.并创建缺省的撤消表空间(undo tablespace)和临时表空间. 注意: 根据我的经验,SGA 太小,在创建数据字典的时候会失败,因此 SGA 可以大一些.但因为 是 集 群 , 需 要 启 动 多 个 instance, 所 以 在 数 据 字 典 创 建 完 以 后 , 即 catalog.sql,catproc.sql,catclust.sql 运行完以后,需要将 SGA 改小一点. 修改 init.ora 文件,并拷贝到$ORACLE_HOME/dbs 下,改名字为 initrac.ora. 我是一个 instance 对应一个 listener.也可以一个 listener 响应多个 instnce. 其余参数可以自己根据自己的情况进行设置,以下是 cluster 的参数: undo_management=AUTO undo_retention=10800 cluster_database=true cluster_database_instances=5 rac1.instance_name=rac1 rac1.instance_number=1 rac1.local_listener=lsnr1 rac1.thread=1 rac1.undo_tablespace=UNDOTBS1 rac2.instance_name=rac2 rac2.instance_number=2 rac2.local_listener=lsnr2 rac2.thread=2 rac2.undo_tablespace=UNDOTBS2 rac3.instance_name=rac3 rac3.instance_number=3 rac3.local_listener=lsnr3 rac3.thread=3 rac3.undo_tablespace=UNDOTBS3 如果要多个 instance 都由一个 listener 来响应,则改以下两行: rac2.local_listener=lsnr1 rac3.local_listener=lsnr1 注意: 尽管数据库名字叫 rac,但启动的实例名字不能叫 rac.我将 ORACLE_SID 分别设置成 了 rac1,rac2,rac3.
  39. 39. ITPUB 电子杂志(总第六期) 39 of 82 然后启动第一个实例,创建数据库: $ export ORACLE_SID=rac1 $ sqlplus /nolog SQL*Plus: Release 9.2.0.4.0 - Production on Fri Nov 21 13:43:22 2003 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> conn / as sysdba; Connected to an idle instance. SQL> startup pfile=/u01/app/oracle/product/9.2.0.4.0/dbs/initrac.ora; ORACLE instance started. Total System Global Area 38867968 bytes Fixed Size 451584 bytes Variable Size 33554432 bytes Database Buffers 4194304 bytes Redo Buffers 667648 bytes Database mounted. Database opened. 创建数据库的命令: SQL> CREATE DATABASE rac MAXINSTANCES 32 MAXLOGHISTORY 100 MAXLOGFILES 192 MAXLOGMEMBERS 3 MAXDATAFILES 1024 DATAFILE '/u02/oradata/rac/rac/system01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 0240K MAXSIZE 1000M EXTENT MANAGEMENT LOCAL DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/u02/oradata/rac/rac/temp01.dbf' SIZE 40M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE 1000M UNDO TABLESPACE "UNDOTBS1" DATAFILE '/u02/oradata/rac/rac/undotbs01.dbf' SIZE 50M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE 1000M CHARACTER SET ZHS16GBK LOGFILE GROUP 1 ('/u02/oradata/rac/rac/redo01.log') SIZE 10M REUSE, GROUP 2 ('/u02/oradata/rac/rac/redo02.log') SIZE 10M REUSE, GROUP 3 ('/u02/oradata/rac/rac/redo03.log') SIZE 10M REUSE;
  40. 40. ITPUB 电子杂志(总第六期) 40 of 82 然后创建数据字典. 以 sysdba 身份运行: SQL> @?/rdbms/admin/catalog.sql; SQL> @?/rdbms/admin/catproc.sql; SQL> @?/rdbms/admin/catclust.sql; 以 system 身份运行: SQL> @?/sqlplus/admin/pupbld.sql; 9.创建并启动多个 instance 在启动多个 instance 前,需要为每个 instance 增加一个 undo tablespace, 并增加一 组 redo logfile. SQL>CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '/u02/oradata/rac/rac/undotbs02.dbf' SIZE 50M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE 1000M; SQL>CREATE UNDO TABLESPACE UNDOTBS3 DATAFILE '/u02/oradata/rac/rac/undotbs03.dbf' SIZE 50M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE 1000M; SQL> ALTER DATABASE ADD LOGFILE THREAD 2 '/u02/oradata/rac/rac/redo2_1.log' SIZE 10M; SQL> ALTER DATABASE ADD LOGFILE THREAD 2 '/u02/oradata/rac/rac/redo2_2.log' SIZE 10M; SQL> ALTER DATABASE ADD LOGFILE THREAD 3 '/u02/oradata/rac/rac/redo3_1.log' SIZE 10M; SQL> ALTER DATABASE ADD LOGFILE THREAD 3 '/u02/oradata/rac/rac/redo3_1.log' SIZE 10M; SQL> 然后就可以启动多个 instance 了. $ export ORACLE_SID=rac2 $ sqlplus /nolog SQL*Plus: Release 9.2.0.4.0 - Production on Fri Nov 21 15:11:16 2003 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
  41. 41. ITPUB 电子杂志(总第六期) 41 of 82 SQL> conn / as sysdba; Connected to an idle instance. SQL> startup pfile=/u01/app/oracle/product/9.2.0.4.0/dbs/initrac.ora ORACLE instance started. Total System Global Area 38867968 bytes Fixed Size 451584 bytes Variable Size 33554432 bytes Database Buffers 4194304 bytes Redo Buffers 667648 bytes Database mounted. Database opened. SQL> 然后再启动 rac3. 注意: 如果 SGA 配置太大,启动多个 instance 可能会死机. 在出现 Database mounted.后,到 Database opened.可能会要一段时间,请耐心等 待. 可以用以下语句查询,确认多个 instance 已经启动. SQL> select inst_id, instance_number inst_no, instance_name inst_name, 2 parallel, status, database_status db_stat, active_state stat, host_name 3 from gv$instance; 10.配置客户端 在客户端的 tnsnames.ora 配置文件中添加以下行: rac=(DESCRIPTION= (ADDRESS_LIST= (LOAD_BALANCE=ON) (FAILOVER=ON) (ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1522)) (ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1523)) (ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1521))) (CONNECT_DATA= (FAILOVER_MODE= (TYPE=select)(METHOD=basic)) (SERVICE_NAME=rac.test.com))) 然后就可以在客户端使用 rac 连接串来连接数据库了. 连接时,因为设置了 load_balance=on,因此会随机选择一个来连接.查看连接到哪个 实例:
  42. 42. ITPUB 电子杂志(总第六期) 42 of 82 SQL> select instance_name from v$instance; INSTANCE_NAME ---------------- rac3 如果在服务器端将 rac3 停掉,可以用 shutdown immediate;或者 shutdown abort; 再运行此语句,则: SQL> / INSTANCE_NAME ---------------- rac1 客户端在监测到 instance down 了以后,重新连接,这次连到了 rac1. 注意: 在非 RAC 环境下,如果用户设置了 failover=on,则 instance down 时,用户未 commit 的数据自动回滚了.在 RAC 下,需要用户执行 rollback. 如果不 rollback 而执行 SQL 语句, 则 oracle 会报错: ERROR at line 1: ORA-25402: transaction must roll back 11.结语 到现在,单节点上多 instance 的 RAC 就配置好了. 希望能对大家有所帮助. End
  43. 43. ITPUB 电子杂志(总第六期) 43 of 82 创建一个 standby database 的全过程 作者:fals 实施环境: OS:windows 2000 advanced server SP2 Oracle:8.1.7.4 假定主库与备用库不在同一个主机上,目录结构相同,并且配置一个自管理备用库 (managed standby database): 主库 备库 主机 IP 192.168.1.20 192.168.1.30 主机名 PrimDB StbyDB SID Orcl Orcl 数据库服务名 Orcl Orcl 一 创建一个主库的数据文件备份: 用冷备份方式,备份到 e:sharedback 二 创建备用库的控制文件: 冷备份之后,打开主库 SQL> connect internal/oracle as sysdba; SQL>startup pfile=d:oracleadminorclinit.ora; SQL>alter database create standby controlfile as ‘e:sharedbackstby_ctl.ctl’; 三 复制文件 通过网络复制备份的数据文件和备用控制文件到备库主机 四 配置主库的 tnsnames.ora 文件 添加备库别名为 stby1,即下面内容: stby1=(description= (address= (protocol=tcp)
  44. 44. ITPUB 电子杂志(总第六期) 44 of 82 (port=1523) (host=192.168.1.30)) (connect_data= (SID=orcl))) 五 配置备用库的 listener.ora 文件 添加监听服务 standby_listener,在相应的节里添加有关的内容。如果原文件内已有, 则修改之。 standby_listener 节: (address_list= (address= (protocol=tcp) (port=1523) (host=192.168.1.30) )) SID_list_standby_listener 节: (sid_list= (sid_desc= (sid_name=orcl) (oracle_home=d:oracleora81) )) 这个文件中只能有这两节,不能有多个组,虽然可以定义监听的名字不同,但在启动 监听服务的时候,都只启动一个监听服务。 六 重新启动备库监听服务,以使更改生效: DOS>lsnrctl # 启动监听服务管理程序 LSNRCTL>status # 查看监听服务状态 LSNRCTL>stop # 停止监听服务 LSNRCTL>start # 启动监听服务 也可以在管理工具的服务管理里停止和启动服务。 七 配置主库的初始化参数文件 init.ora 修改归档目的地。本地归档只归档到一个目录 e:log。添加以下内容: # 定义本地归档路径,强制归档,重试时间 2 秒 log_archive_dest_1 = “location=e:log mandatory reopen=2” log_archive_dest_state_1 = enable # 定义归档到备用库,强制归档,重试时间 15 秒。 # 如果定义为可选状态(optional),那么在归档失败后不会再次尝试归档的。定义 # 为 madatory 状态后,如果本次归档失败,则在归档下一个日志时会再次尝试
  45. 45. ITPUB 电子杂志(总第六期) 45 of 82 # 重传上一个未成功归档的日志。 log_archive_dest_2 = “service=stby1 mandatory reopen=15” log_archive_dest_2 = enable # 定义必须成功归档的日志数,只需要本地成功归档即可 log_archive_min_succeed_dest = 1 八 使主库修改后的参数生效。 以下操作是在未重启主库时使用。如果修改主库初始化参数文件后重新启动了主库, 则可以不使用下列命令。下列命令只对当前实例有效。 SQL>alter system set log_archive_dest_1 = “location=e:log mandatory reopen=2”; SQL>alter system set log_archive_dest_state_1 = enabl; SQL>alter system set log_archive_dest_2 = “service=stby1 mandatory reopen=30”; SQL>alter system set log_archive_dest_2 = enable; SQL>alter system set log_archive_min_succeed_dest = 1; 九 配置备用库的初始化参数文件: 将主库的初始化参数文件复制到备库,删除原有的日志归档目录项,并添加以下内容: log_archive_dest = e:log log_archive_trace = 6 #定义日志跟踪层次 standby_archive_dest = e:log # 更改控制文件名 control_files = (“d:oracleoradataorclstby_ctl.ctl”) 十 启动备用库 将从主库复制过来的数据文件、控制文件复制到相应的位置,然后在备库上操作(此时 备库处于关闭状态): SQL>connect internal/oracle as sysdba SQL>startup nomount SQL>alter database mount standby database 十一 手工恢复 如果有日志序列的缺失,则先将主库的日志复制到备库日志目录,进行手工恢复 SQL>recover automatic standby database; 或者: SQL>recover standby database until cancel; 查看日志序列是否有缺失的 SQL 语句:
  46. 46. ITPUB 电子杂志(总第六期) 46 of 82 SQL>SELECT high.thread#, "LowGap#", "HighGap#" FROM ( SELECT thread#, MIN(sequence#)-1 "HighGap#" FROM ( SELECT a.thread#, a.sequence# FROM v$archived_log a, ( SELECT thread#, MAX(next_change#) gap1 FROM v$log_history GROUP BY thread# )b WHERE a.thread# = b.thread# AND a.next_change# > b.gap1 ) GROUP BY thread# ) high, ( SELECT thread#, MIN(sequence#) "LowGap#" FROM ( SELECT thread#, sequence# FROM v$log_history, v$datafile WHERE checkpoint_change# <= next_change# AND checkpoint_change# >= first_change# ) GROUP BY thread# ) low WHERE low.thread# = high.thread# ; 如果备库有日志序列缺失,则同一个 thread#的 LowGap# 与 HighGap# 不等。如果没 有日志序列缺失,那么选出空值或者是 LowGap# 与 HighGap# 相同。 十二 将备库置于自管理模式 SQL>recover managed standby database; 此时,SQLPLUS 窗口停止响应,直到取消备库自管理模式。要取消备库的自管理模 式的命令: SQL>recover managed standby database cancel; 翻译摘抄自 oracle 816 随机文档,加上以自己的一些测试。 后面还有 standby database 的维护以及三个模式互相切换的内容,还没来得及整理出一 个比较完整的文档出来,等啥时候抽点时间整出来再贴上来。 End
  47. 47. ITPUB 电子杂志(总第六期) 47 of 82 RAC 历险记 作者:iamweng 国庆前夕公司正式和某市的某通信公司签署 97 系统的升级合同,我公司作为集成商, 将负责和应用程序开发商,硬件厂商(HP) 数据库供应商 , (ORACLE)的协调。两台 HP7410 主机已于国庆前到货,我公司负责主机到货后的初步验收, (也就是看着一个大柜子安全地 放在机房外,确保没有外部损伤)。 背景 该通信公司 97 营业系统确实一直在使用,下属 400 多个客户端每天都在 ORACLE 数据 库中存取数据,通信公司提出如下要求: 1. 不能停止营业。 2. 升级失败后要能安全回退旧系统。 3. 要快。 他们的旧系统环境如下:97 年的系统,HPK 系统机型,ORACLE7.3.2。应用程序开发 商不能肯定他们的系统能在 ORACLE9I 下无异常反应,向该通信公司提出提供测试环境的 要求,出于拿到集成合同的目的,我公司承诺提供测试机。结果 HP 不答应,我们承诺无法 兑现,该通信公司反应强烈, (该通信里面的和我们接触的人全是女的掌权,开协调会的时 候 7,8 个女的把我们项目管理人员骂得狗血喷头,连说话的机会都没有) 。 惊险历程 入场 10 月 8 号 过完国庆,10 月 8 号,我们公司项目人员进驻该通信公司,一个管理人员 A,原计划还 有系统人员 B 的,只因他在另一个项目里脱不开,暂时就没来,还有一个就是我,公司想 省了 ORACLE 的服务费,由我负责数据库的安装。 日程安排大致如下:一天系统安装, 一天数据库测试,一天应用程序测试,晚上升级,第二天早上 7:00-8:00 业务人员在前 端测试,8:00 开始正式营业。此计划已经由该通信公司公司向上汇报,并在当地的电视台 发布该通信公司为了更好的为用户服务,将在某月某日进行系统更新,给用户带来不便,深 表歉意的字样。
  48. 48. ITPUB 电子杂志(总第六期) 48 of 82 10 月 9 号 10 月 9 号,HP 工程师 A 如期进场,我们协助将主机搬到机房中的预定位置。 (也就是 搬机子,当民工,也是挺讲究的,暂先不表) ,直到深夜 12:00HP11i 操作系统还没安装完 毕,其间 HP 工程师避着我们到厕所里打了好几个电话,神色有些不对。 10 月 10 号 10 月 10 号 9:00,HP 工程师 B 过来,该通信公司公司召集我们开会,对我们准备实施 RAC 有些担心,认为技术太新,怕出问题,HP 工程师表示没有问题,当我承认我没有在 HP 机上实施过 RAC,该通信公司那几个女的很是不愉。随后 HP 工程师 A,B 继续系统安 装直到晚上,其间,A,B 工程师向北京的 HP 支持打了好几个电话,从他们的交谈中,我 们知道他们在磁盘阵列的安装上出了问题, 对该通信公司的解释是这是一种新型号,他们没 配过。 10 月 11 号 10 月 11 号,磁盘阵列配置成功,A,B 工程师发现缺少四根光纤跳线,无法和主干网相 连,该通信公司大急,查阅备忘录,我公司老早就提醒过负责设计的邮电设计院,他们疏忽 了,4 条光纤跳线,总共 3000 多块钱,本市没有,要从北京买,来回三天,工程停下来了。 10 月 12 号 10 月 12 号,应用程序开发商如期进场,无事可做,面色不愉。 (后知,该通信公司还有 一部分开发费没有给,南邮这次不想来的) 。我们乘机到周围的风景区玩去了。呵呵。 10 月 13 号 10 月 13 号,无事 10 月 14 号 10 月 14 号,无事,真是舒服。
  49. 49. ITPUB 电子杂志(总第六期) 49 of 82 安装 10 月 15 号 10 月 15 号,光纤到了,当时真是担心质量不好,又得往北京跑一趟,呵呵。今天 HPA 工程师退场了,我们看到,B 的技术和职位比 A 要高些,前者只负责安装硬件。下午,HPB 告诉我们在软件清单中的 MC/SERVICE Guard 不是用于 ORACLE RAC 的并行版本,正确 版本的售价要比这个版本贵 6 万块,这回大家都傻眼了。HP 向上汇报,该通信公司向上汇 报,我们向上汇报,顿时感觉到销售人员出马了,暗潮涌动。我亲耳听到那个女主任对他们 设备处的人说这件事时略带一点幸灾乐祸的意思:“某某啊,HP 说你们软件买错了呢。”那 几个女的又把我们管理人员叫过去骂了个狗血喷头。 公司开始先是要我们骗客户, 随便安上 数据库说是 RAC, 反正他们狗屁不懂;后来又指示我们就这么赖着, 让该通信公司去逼 HP, 给他们装上,反正这个钱我们公司是不会出的。HP 开始说那么先装个试用版本,有一个月 期限,该通信公司不答应。就这么僵着。 10 月 16 号 10 月 16 号,僵局 ING,我乘着这个机会在两台主机上装了好几次 ORACLE9I,算是先 练练手。呵呵。 10 月 17 号 10 月 17 号,上午,HPB 说公司同意先安装正确版本的 MC,然后从包中拿出一张光盘 笑笑说: “我这里什么都有,公司叫我安,我就安了。” 这小子挺憨厚的,我喜欢。 我开玩笑说: “我要是该通信公司,我就把不把服务费给 HP 了,给你算了。” 直到晚上 7:00,HPB 没有能把 MC 装上,我在陪他装的时候,我无意中发现有一个软 件叫 MC/SERVICE Guard For RAC extention,我意识到应该是这个,我在资料看到这是 HP 为 ORACLE RAC 出的最新的支持软件,我坚持应该装这个,他打电话问了以后才明白, 原来应该在原来的 MC 才再安装这个支持包,而不是卸下原来的 MC 装新的 MC。 20:00,MC 安装成功。 开始了数据库的安装。该通信公司问我要多久,我说:“顺利的话 4,5 个小时。”
  50. 50. ITPUB 电子杂志(总第六期) 50 of 82 当然我还有一句话没说,不顺利的话就说不准了。呵呵。 我事先将安装程序 COPY 就硬盘上,我不能保证我就安一次就成功,加载 ORACLE 安 排盘的命令特古怪,有时还弹不出来,当时在 HP 体验中心的时候,我是加载一次,重起一 次,加载一次,重起一次,反复者四,才将四张安装盘拷到硬盘上。 现在有 HPB 在,每 CP 一张盘,我们就 KILL 一次,不用重启了。事实证明,我重装了 3 次。呵呵。 安装之前,我检查了核心参数设置。 我有一套核心参数设置是参考了 GOTOTOP 和 COOLY 提供的文档做的。 和 HP B 进行讨论,因为不是对所有的核心参数意义都了解,在他的建议下做了调整, 而事实证明,他说的都错了。 我检查了磁盘阵列的宿主关系,发现没有改成 ORACLE,我检查了系统补丁包,因为资 料没有提供和 HP11i 相关的补丁包列表,我想了想就没有打任何包,因为我在网上看到有人 说没打包也一样装上的情况。 当出现选择其它结点的界面出来时,我一阵狂喜,我最担心的事情没发生。 当要求执行 ROOT 脚本时,我犯了一个错误,我只在一个主机上执行,而没在另一个主 机上执行。 两个半小时以后,软件安装成功,自动启动了 DBCA,我发现 DBCA 没有使用的定义好 的 DBCA_RAW_CONFIG 的文件,只好手工一个一个指定,这时候,我觉得的为裸设备取 的名字太长。 一切 OK 以后,开始建库,启动数据库实例失败,我冷汗下来了。 当时已经 24 点,我叫 HPB 回去了,现在我记不得是为什么失败了。我镇定了一下,扔 开主机,开始看书了。呵呵。 为这次 RAC 的实施,我准备了大量的资料,基本上都看过一遍,主要是 ORACLE 提供 的 Oracle9i Real Application Clusters Setup and Configuration,Oracle9i Real Application Clusters Concepts, Oracle9i Real Application Clusters Administration,以及 COOLY 提供的 step-by-step installation of rac on hp-ux.doc,聚贤庄 JJM 的安装 Oracle9i for HP-UX. 想来想去,决定重装。 这一次,我发现 ROOT.SH 要执行两遍,心中一阵激动,在建库时,实例顺利启动。这 时候已经是凌晨 5:00 了,LISTNER 出错,我不知道为什么,好在的留下了建库的脚本, reading。 9:00 该通信公司公司的人来上班,看我通宵工作,客气了几句,说:“不要太劳累了。” 呵呵。
  51. 51. ITPUB 电子杂志(总第六期) 51 of 82 12:00,reading,13:00,metaline 帐号生效,在 metalink 上查资料, 14: 拨打 ORACLE 支持电话, 00, 那个女生说:“请登录我们的 Metalink 网站,开个 TAR." 15:00,向已离开公司的一个同事请教,在此之前,我不认识他。 16:00,该通信公司的几个女的急了,叫人跑来问我,行不行,不行的话叫 ORACLE 公司的人来,我大怒,妈的,我都还没乱阵脚,你们慌什么?他们 HP 装几天你们一句话不 吭,我还在规定的时间里面你就叽叽歪歪。 17:00,我决定建新库,使用 LISTER1,还是报 LISTNER 的错,我无奈,按下 ABORT 键。 20:00,我决定重新安装所有的东西。 23:00 到建库的时候,我在选择裸设备的时候,发现设备文件不见了。现在知道是我在 ABORT 时安装程序自作聪明给删除了,当时不知道,在划分磁盘陈列时,出于对应用系统 的不了解,我建议 HPB 先不要全部划完,等应用测试通过后在划一下比较合理,给现在造 成的问题时我无法建库了,我打电话叫 HPB,HPB 说要划分的话 MC 要停下来,弄来弄去 跟重做一遍没什么两样,还是你们商量好再划吧,我说:”如果不划分,我想重恢复已有的 设备文件呢?“你这样做。。”,于是我又暂时客串一下系统人员了,呵呵。 。 24:00,设备文件恢复,开始建库,这次我一切使用默认设置,数据库叫 ORCL,服务 名叫 ORCL.WORLD,呵呵,结果顺利通关。现在已是 2:00 了,我应该是 36 小时不眠不 吃了,喝还是有的。呵呵。 预测试 10 月 19 日 10 月 19 日,应用开始测试。我回去睡觉。 10 月 20 日,应用开发商说好了,没问题。我表示怀疑。看看他们的恢复方案,如果升 级失败,按他们这么做能回得去才怪呢。项目管理人员偷偷跟我说,不管,出问题是他们的 事。我说好吧,但最起码的数据库压力测试还是要做吧,400 个联接总要联一下吧,只要这 个没问题,剩下的问题就是不大了,他说他们联过了,到了 40 个联接,测试机的内存就没 了,没法测了。我只好说,我已经说过了。下午 HP B 把裸设备全部划完,除了几个 25G 大小的裸设备外,730G 的磁盘阵列以 0+1 的方式,全是 2G 大小的裸设备。HPB 在那里敲 了一下午的键盘。
  52. 52. ITPUB 电子杂志(总第六期) 52 of 82 试运行 10 月 21 日 10 月 21 日,周五,据说主吉。 晚上 8:00,开始从旧系统中导出数据。 凌晨 1:00,数据导入新系统。 3:00 应用开始割接前的测试。 3:30 应用说汉字是乱码。 3:40 重建数据库,修改字符集。 5:00 重导数据完毕。 5: 应用说用 SELECT SYSDATE FROM DUAL 取出的时间不对。 30 查看系统时间, A 机正确,B 机时区不正确,修改 B 机系统时间,SELECT SYSDATE FROM DUAL 取 出的时间不对,重启数据库,SELECT SYSDATE FROM DUAL 取出的时间不对,查看 数据库时区设置,不对,修改后重启,还是不对。要晚 10 几个小时。经查发现 CONNECT DATA=服务名,时间不对 connect data=实例名,时间正确。 7:00,陷入僵局。怎么办?该通信公司招集我们几方的人开现场会,这个问题能不能 解决?要不要割接?如果割接后还有新问题出来怎么办?有没有把握?大家说不上来。 7:10,业务人员打电话来问我们可不可以开始测试?该通信公司问我们,我一咬牙说, 把 TNSNAME 改过来,下发下去开始测试。现在我也想不起我做这个决定的原因了,可能 也是赌了一把吧。 7:20,开始测试,一切正常。 8:00 正式开始营业,下面各局的客户端开始启动,联入数据库,40 个,80 个,100 个, 120 个,140 个,我们看着联接数在不断增加,下面说程序响应很快,大家绷紧的脸开始露 出了笑容。 该通信公司为首的那个女主任说:“看来我们坐上好车了。” 只有我觉得不妙。因为我通过 GLANCE 看到可用内存不多了。 我们有 4G 内存,SGA 用了 800M,这也是他们说快的原因,因为他们以前的系统 SGA 才 300M,我看到命中率很低。 可是我看到一个联接平均占用内存尽达到 20M,有的还更大。 当到 160 个联接的时候, 客户端再也不能联接上来了, LISTENER 报出超过最大联接数,
  53. 53. ITPUB 电子杂志(总第六期) 53 of 82 这个错误我没看到过,错误提示和系统核心参数有关,建议修改核心参数。 我在 ITPUB 上查,matalink 查,也有不少是这样建议的,我回忆起当时和 HP B 在修改 核心参数时他倾向于保守的参数设置时,我意味到这可能是出现问题的原因。 下面不断有电话打上来,纷纷抱怨不能联上数据库了,问是怎么回事? 此时我高度紧张,连后悔当初为什么不坚持做压力测试的心思都没有。 此时已经是 11:30 分了,我决定修改系统参数。 系统重启,我按照我的思路,重新修改系统参数。 系统参数之间存在函数关系,我是从 MAXUSER 开始改起,很多参数的含义我也是不 太清楚,我也只有硬着头皮改下去了,拿不准的参数一率偏大的取。 我已经不管电话了,局方人员对下面解释说数据库正在调整,请耐心等待。 重启的时候,原来 4G 的 SWAP 区也快满了,我叫系统人员顺便把它增大到 6G。 12:00 系统重启,我旁边的系统人员紧紧地挤着我,我明显感觉他在发抖。呵呵。 12:30 系统重启成功,MC 启动成功,数据库启动成功,但是这些核心参数的修改是否 有效,我没有十分把握,我这时候开始后悔没有自己做过压力测试程序,结果自己倒霉。 下午 14:30,营业人员进入工作岗位,客户端程序启动,联接数开始上升,40 个,80 个,100 个,120 个,140 个,160 个,180 个,200 个,参数修改起作用了。 这一次,我有意识到观察到随着联接数的增加各个指数的变化,我发现 SWAP 区消耗太 大,一个联接竟要 30M-60M 不等。 我要系统人员再一次扩大 SWAP 到 8G,系统人员好象手都软了,扩大以后,他告诉我 没有空间了,不能再扩了。 我心里一紧,竟不想说话了。 今天,用户联接数一直保持在 210 左右,内存还剩 300M,SWAP 占用 70%。 18:00 营业结束。 (编者按:真是紧张的一天,偶排版的时候都紧张得手心出汗 ) 10 月 23 日 10 月 23 日,数据库联接数达到 260 个,内存已经降下来,平均每个 2-3M,反应正常, SWAP 还是异常的大。 SWAP 还剩 20%的时候,我打电话叫系统人员过来。 系统人员到的时候,还剩 10%,我对他说,我把一整个 mount 点/TD 给你,共 20G,你 拿去吧。 系统人员说,我的天,这么大的 SWAP 区,我说:“先做吧。”。 还剩 5%的时候,我和机房人员将他们原来在这个目录的做的备份成功移走。 还剩 2%时,我对系统人员说,你可以做了。 这时候,系统人员发现 sam 不能使用了,我发现 SWAP 区已经耗尽。

×