Your SlideShare is downloading. ×
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
电子杂志第六期
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

电子杂志第六期

3,023

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,023
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. ITPUB 电子杂志 2004 年 6 月号 (总第六期) ITPUB――信息技术新动力!
  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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. ITPUB 电子杂志(总第六期) 30 of 82 2、 描述了 RAC for Linux 的必要条件,如内核要求如软件要求 3、 描述各种存储设备的与多种文件系统,如 Raw,ocfs 等 4、 描述了 Cluster 管理软件在不同平台上的安装方法 5、 描述了数据库软件在不同平台上的安装方法 6、 描述了手工创建 RAC 数据库并启动多个数据库的方法 7、 介绍了 RAC 的一些特征与管理方法 End
  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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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 区已经耗尽。
  54. ITPUB 电子杂志(总第六期) 54 of 82 电话响了,我急速在我本机上退出几个 TELNET 窗口,叫系统人员在主机用命令行执 行建立 SWAP 的命令。 执行成功,A 机的 SWAP 目前有 28 个 G,GLANCE 显示 SWAP 区占用率为 30%,我 忍不住对着主机伸出了中指。 我接了电话,他们抱怨接不上数据库了。 我说,不会吧,你们再试试,他们在电话里发出噢噢的声音,看来又联进数据库了。 我偷偷笑了。 现在还剩两个问题,时间和 SWAP。采用目前 TNSNAME 的写法,这样写法直接指向 了具体的实例,使得 LOAD_BALANCE 的功能不能用上,另外下面的客户端仍然是 7 的, 所以目前这个问题还不大。只有当他们全部采用了 9i 的客户端以后修改 TNSNAME 才会提 到日程上来。 但是为什么这个时间不对呢? 以前在 ORACLE8I 的时候,SWAP 区的占用量也不大,为什么 9i 会这么大呢? 一个 28G 的 SWAP 区,怎么看怎么别扭,安装系统的时候,有 70G 的磁盘两张,系统 人员作为镜像,为系统安装留了 5G,为 ORACLE 目录留了 10G,为 HOME 目录留了 3G, 临时目录留了 10G,剩下的空间不知道拿来办什么了。 我们说:“以前穷惯了,总是为 100M,200M 的空间伤脑筋。现在有这个多空间,都不 知道拿来干什么,跟暴发户的感觉一个样。” 这下好了,28 个 G 的空间我们用来做 SWAP 区了。 公司打电话来,问现在的情况怎么样,项目管理人员就说不怎么好,我听了心里有点不 舒服。 我在 METALINK 开了个 TAR,描述了时间的问题,一来二去,他们就要我搞个 ITAR, 我只好算了。 同时我给销售部门打电话,让他们通过 ORACLE 的销售部门给我联系他们的工程师, 请他们务必联线过来看看,同时也给 HP 的支持人员打电话,叫他们联线过来看看 SWAP 的 问题。 古语有云:“不怕不识货,就怕货比货。” 事实证明,ORACLE 的支持服务是烂的,HP 的支持服务是好的,ORACLE 的 800 热线 打过去就这样。而 HP 就好多了,他在电话里说不清楚,就主动说拨过来看看,解决不了就 会有其它的工程师再拨过来看看, 还把两个 HP 工程师也派过来看了,虽然也没有解决问题, (他们都倾向于向 ORACLE 的人咨询)但是这种为客户服务的态度是好的。 没办法了,只有靠我自己了,于是我开始在 metalink 上泡着,进行大量的阅读。 该通信公司的人问我们什么时候能解决这个问题,我说现在还解决不了要观察一两天。 该通信公司的人悻悻而去。 就这样过了四五天,通过我的 TAR,我知道 SWAP 过大是由于 BUG 的原因,它在 9.2.0.3 版本中得到修正,其间,HPA 在一天上午的巡检中发现一块网卡异常。 下午 ORACLE 报出 ORA-29740 的错误, 机的 ORACLE 实例崩溃, B 我采用多种方式 启动数据库, 不能成功。 半个小时后, 数据库启动成功。 后来我读到资料是说, 机的 ORACLE B 实例崩溃以后,A 机将接管 B 机的回退恢复,在这段时间内,A 机是以独占的方法在工作, 所以在这期间 B 机是无法启动的,要等 A 机回退完成之后,B 机才能以 SHARE 方法启动。
  55. ITPUB 电子杂志(总第六期) 55 of 82 当然,我把这次异常当机事件归咎于网卡失灵了。 那天晚上, HPA 更换了失灵的网卡,HPA 说:“我在 HP 干了这么久,还第一次换网卡。” 他是吹嘘 HP 的网卡是比较好的, 只能算他们该通信公司公司倒霉运气不好给撞上了。 呵呵。 换网卡时要停机,当数据库起来时,我发现时间对了。呵呵。 我在查阅关于 ORA-29740 相关资料时,我看到有的平台上的某一版本的 ORACLE 存 在两天或在大负载就报 ORA-29740 的错误,其中一台主机上的 ORACLE 实例崩溃,别我 们也是这样的情况啊,该通信公司的人还不杀了我。 要升级,要升级,宜早不宜迟。可是,我没有做过升级操作,要是做砸了,只怕我在公 司也呆不长了。 呵呵。升还是不升,这是个问题。 10 月 30 号 10 月 30 号,公司给项目管理人员打电话,一边说我们在这边辛苦了,一边说这个项目 做的时间太长了,再做下去公司要亏本了,要项目管理人员回去述职。项目管理人员急得不 得了,向该通信公司打了声招呼就匆匆走了,说句实话,我对他这个做法有点意见,虽然他 在这里在我遇到问题的时候帮不上什么忙, 我也没指望他能帮忙,但是在这个结骨眼上离开 项目的举动, 说得轻一点叫不够仗义,说得重一点叫临阵脱逃。他这一去,就再也没有回来。 10 月 31 号-11 月 4 日 数据库没有新的异常情况发生。 这段时间里,我从 OTN.ORACLE.COM 上下载了 9.2.0.1 for windows,在 METALINK 上 下载了 9.2.0.4 FOR windowns 和 HP 的补丁包。 我在 WINDOWS 上演练了几次将 9.2.0.1 升级到 9.2.0.4 的步骤, 包括带着业务数据和不 带业务数据的升级,很顺利。 为了避免在 WINDOWS 上升级操作所形成的思维定势,我仔细比较了在 HP 和 WINDOWS 平台上的升级过程,特别注意了它们之间的不同之处。还在 HP 机上运行了一下 升级程序,以确定下载包的正确性。 (ORACLE FOR HP 根据操作系统的不同,下载类别的不同有好几种下载包,第一次在 上面找的时候容易糊涂)。 11 月 4 日这一天,我先和该通信公司的人讨论了升级的想法,然后向公司汇报当前工 程的情况。 附件如下: XX 总:
  56. ITPUB 电子杂志(总第六期) 56 of 82 您好,我向你汇报一下这边的情况: 原来三个主要的数据库问题是: 1.不同的连接方式时间不一致 2.单个连接占用的内存过大 3.单个连接占用的 SWAP 区过大。 目前已经解决了前面的两个,最后一个问题根据资料分析需要把数据库的版本 从 9.2.0.1 升级到 9.2.0.4 才能解决。今天和局方数据库管理员讨论,他们担心如果 升级到 9.2.0.4 会导致数据库起不来,影响第二天的营业,希望让他们的主任来决定 是否要升级。 (他们的主任明天度假回来。。 ) 我倾向于做升级操作。我们在实施 RAC 的过程中,发现有些问题是和当前使用 的 ORACLE 数据库的版本有关,在排查过程中对我们干扰很大,浪费了不少的精力。 而且看到在这一版本 的 ORACLE 在某些平台上 RAC 运行两天后其中一个结点出现异常情况。我们不能 排除在我们运行的环境下也会有这种情况的可能性;另外,升级过后三个问题也就 算都解决了,比较好 跟用户交代。 但是升级还是有一定风险的,在正常情况下升级比较简单,会比较顺利,万一 出现问题, 就要根据具体的问题来具体解决了,不会出现第二天不能营业的情况。
  57. ITPUB 电子杂志(总第六期) 57 of 82 关于是否要从 ORACLE 派人过来的事情,我个人的态度是:一:从现在的情况 分析看,还没有到这一步。二:根据前几天 ORACLE 的支持来看,他们的帮助并不 大,当然如果他们过来的话,我们的压力会小很多。 升级过后,在正常情况应该观察 7-10 天。 还有就是:目前他们的客户端是 ORACLE7,所以 RAC 的动态负载平衡功能是用不 起来的。 祝好 IAMWENG XX 总看了我这封信以后,说要不要从 ORACLE 那边派人,由我说了算,并授权我全 权处理这边的事情,实际这边也就只有我一个人了,呵呵。后来销售人员给我打电话说我们 公司根本没有买 ORACLE 的现场支持服务,说不到万不得已的情况,不要向客户说起这个 事情,如果要 ORACLE 的人过来,就涉及到要向 ORACLE 下单的商务操作,要花大笔的服 务费,公司心痛得很,我的邮件正好让公司松了一口气,因为项目管理人员回到公司后,极 力要求通过向 ORACLE 下单来解决当前的问题。 升级之路 11 月 5 日 11 月 5 日,他们主任度假回来了,(本来他们这次度假是安排在项目之后的,可是项目 期延长了,也没有耽误主任度假,真是挺有大将风度的。)上午 9:00,我们开了一个会, 这次我吸取了上次的教训,向他们讲述了升级的利与弊,并表明了我的态度。在会议上,我 们的主要内容是如果升级中出了问题应该怎么办。我如实把在 METALINK 上看到的出现的 问题列了 10 几个给他们,他们都有点吓住了,看上去升级中会有这么多问题可能出来啊。 所以我们更多地讨论了升级失败后的恢复问题。 下午,我给他们列了一个不到一页的数据库 升级方案,大致如下: 升级过程 一. 备份 A,B 两个用户的数据。保存其它用户的创建脚本,以及相互授权的脚本。 方式:采用 EXP 命令。详细方式参看现行日常备份。
  58. ITPUB 电子杂志(总第六期) 58 of 82 二. 备份全库数据 方式:采用 EXP 命令。 三. 停止两个数据库实例,停止 LSNRCTL,AGENTCLT,GSDCTL。确保 ORACLE 用 户没有进程运行。 四. 全系统备份 方式:磁带。 五. 运行升级包,将数据库软件由 9.2.0.1 更新到 9.2.0.4 方式:详见 ORACLE 升级手册 六. 升级数据库,以 MIGRATE 方式打开数据库,运行数据库升级脚本。 (先在测试库上进行试验性升级,再在正式库上升级) 七. 关闭数据库,以正常方式打开数据库。 八. 测试数据库,根据情况修改数据库参数。 主要指标:SGA,PROCESS,MEM/CONNECTION,SWAP,时间。 方式:运行联接测试程序。 九. 备份数据库 可能出现的问题 一. 在运行升级包时出现异常。 不能解决将取消升级。 二. 在升级数据库时出现异常。 删除测试库,创建新库,全库导入 三. 注意升级后 EXPORT 应用程序是否有问题。 升级时间表 阶段 时间 说明 备份 TDYY,WXXLT 20:00~22:00 备份全库 22:00~24:00 停止数据库 24:00~0:20 注意检查进程 运行升级包 0:20~1:00 升级数据库 测试数据库 2:30~6:30 备份数据库 6:30~8:30 (注: 1. 全系统备份可以提前做。 2. 如果在 5:00 时还不能进入测试数据库阶段,就启动数据库恢复操作,取消升级。 ) 注中的第 2 条我是特意有红字显出来的,他们看来特不舒服,远不如以前写的计划那样 让人觉得踏实。还有就是嫌字数太少了,不够正式,我就把上述内容扩展成共 10 页的<<升 级工作计划>>,呵呵,真正有用的,这就是这点东西。 从这个计划我们可以看出,从当天晚上 20:00 到第二天 8:30 的 11 个半钟头内,升级 操作才两个钟头,而大部分时间都是为了保证安全了,这个计划是我自己拟定的,我可不想
  59. ITPUB 电子杂志(总第六期) 59 of 82 出什么问题。 我们决定于 11 月 7 号晚上 20:00 升级。 11 月 6 号 11 月 6 号,我主要做了如下几件事情: 自己编写了一个数据库压力测试程序,主要是用来测试数据库联接数的,它可以在 短时间内高强度地联接数据库。 (注,我是程序员出身的数据库管理员,精通 ORACLE,JAVA,DELPHI,POWERDESIGNER, ROSE,大家有活的话,可以找我啊。打个广告先。呵呵。) 在咱们 PUB 上发了帖子,Fenng,biti_rainy,chao_ping 也给予了指导,在此 感谢一下。 打电话询问了几个 ORACLE 人员。 在生产机上建了一个小型测试库,用来对数据库进行试验性升级. 总的感觉是: 个做 ORACLE 的, 5 个对 HP 上安装 ORACLE 比较熟, 10 有 在这 5 个中, 有 2 个对安装 ORACLE9I 比较熟,在这 2 个中,可能只有 1 个,或者半个实施过 RAC,而 我象这样要做升级操作的就更少了。 我比较信任有实际实施经历的人,在我的咨询中,大部分有资格做判断的都认为只要严 格按照升级手册操作“应该”是没问题的,这使我安心了不少。 只有一个 ORACLE 支持用肯定的语气告诉我: “出问题是难免的,ORACLE 数据库软件升级失败倒没关系,要是数据库升级失败了, 数据不能用了,你就惨了。哈哈。” 我没办法,只好尽可能地收集出问题案例进行分析,以期在遇到的时候不会措手不及。 我大概准备了近 30 种异常案例。 11 月 7 号 11 月 7 号 20:00,升级操作开始,这一次他们的主任也来了,还给我们带来了夜宵, 比上次待遇要好一点了。呵呵。 这次升级很顺利,没有遇到什么问题,我就不细写。 当时有点恍然若失的感觉,咋就不出点问题呢,我可是准备了 30 个案例啊,一个都没 用上太亏了吧。呵呵 。 现在我也可以说只要按照操作手册做“应该”是没什么问题的。 顺便提醒大家的是:ORACLE 的负载平衡在高密度高强度的联接操作中根本不发挥作 用,它更倾向于联接其中的一台主机。
  60. ITPUB 电子杂志(总第六期) 60 of 82 凌晨 6:00 的时候,我给公司发邮件,上面只有四个字:“升级成功。”。 是不是有点象乔峰当年经过一番恶战,干掉一厉害对手后回到丐帮轻描淡写地说: “把某某给杀了。” 呵呵。 总结 总结:这是我搞 IT 以来压力第三大的一次实施。 我的经验: 最重要的是一定要有在强大压力下保持冷静头脑的能力。 紧张没关系,害怕没关系,但是头脑一定要清楚。 别人的意见要听,自己要有主见。 每个人在压力之下崩溃的症状是不一样的,有的人可以从面部表情看出来,有的人可能面部没反 映出来,可是他却发出错误的指令。你所要做的就是要保持清醒的头脑。说句实话,这个项目有 几次都到了失败的边缘,我很佩服自己没有乱了阵脚。 好了,回去找公司加工资去。88。 End
  61. ITPUB 电子杂志(总第六期) 61 of 82 备用数据库的研究 作者:fals 主数据库和备份数据都要运行在归档模式下(archive log)。参见数据库备份研究一文进行 设置。 主/备用数据库可建在同一台机上,推荐是在不同机上。 主节点数据库和备份节点数据库的运行机制:建立主数据库的备份文件,生成特有的备 用数据库控制文件,利用主数据库的归档日志文件和备份文件实现重建主数据库在备用数据 库上,备用数据库处于恢复模式时,备用数据库是没有激活,一旦主数据库 down 了,激活 备用数据库让它成为主数据库,让系统能够运行下去。 一、备用数据库的环境建立 首先,建立备用数据库的各项目录,设定备用数据库的 ORACLE_SID 与主数据库不同; ORACLE_DATA=备用数据库的数据文件存放位置 ORACLE_ADMIN= 存 放 备 用 数 据 库 的 init$ORACLE_SID.ora 和 spfile$ORACLE_SID.ora 启动参数文件。 根据需要和相关实际情况修改下列参数值 export ORACLE_SID=testdb export ORACLE_BASE=/opt/oracle/oraInventory export ORACLE_HOME=/opt/oracle/oraInventory export ORACLE_DATA=/home/ldai/$ORACLE_SID export ORACLE_ADMIN=$ORACLE_BASE/admin/$ORACLE_SID [ 以下创建的目录为固定目录,不能更改名字 ] mkdir $ORACLE_ADMIN mkdir $ORACLE_ADMIN/pfile mkdir $ORACLE_ADMIN/bdump mkdir $ORACLE_ADMIN/cdump mkdir $ORACLE_ADMIN/udump mkdir $ORACLE_ADMIN/create mkdir $ORACLE_DATA/ mkdir $ORACLE_DATA/archive 这样就建立起备用数据库的原型。 将主数据库的热备份和冷备份的数据文件放在备用数据库的数据文件目录下
  62. ITPUB 电子杂志(总第六期) 62 of 82 (ORACLE_DATA 下) 二、备用数据库的参数文件建立 参数文件主要指:init$ORACLE_SID.ora 和 spfile$ORACLE_SID.ora 文件,这些文件是 启动备用数据库的参数文件,参数文件放在 oracle 目录下 dbs 目录中。备用数据库参数文件 获得是在主数据库的参数文件基础上修改获得的。 例如: LINUX>cp /opt/oracle/oraInventory/dbs/initoracle.ora /opt/oracle/oraInventory/dbs/inittestdb.ora LINUX>cp /opt/oracle/oraInventory/dbs/spfileoracle.ora /opt/oracle/oraInventory/dbs/spfiletestdb.ora 将其中涉及到主数据库的 ORACLE_SID 地方全部改为备用数据库的 ORACLE_SID。 还要在备用数据库两参数文件中必须要增加的参数如下: [1] db_file_name_convert db_file_name_convert 主数据库和备用数据库的数据文件转换目录对映(如果两数据库 的目录结构不一样) ,如果有多个对映,逐一指明对映关系。 格式: *.db_file_name_convert=主数据库数据文件目录,备用数据库数据文件目录 例如: 一对一映射设定 *.db_file_name_convert='/opt/oracle/oraInventory/oradata/oracle','/opt/o racle/oraInventory/oradata/standby' 多对多映射设定 *.db_file_name_convert='/opt/oracle/oraInventory/oradata/oracle','/home /ldai/testdb','/opt/oracle/oraInventory/oradata/standby','/home/ldai/t estdb/standby' [2] log_file_name_convert 指明主数据库和备用数据库的 log 文件转换目录对映。 格式: *. log_file_name_convert=主数据库 log 目录,备用数据库目录 例如:
  63. ITPUB 电子杂志(总第六期) 63 of 82 *.log_file_name_convert='/opt/oracle/oraInventory/oradata/oracle','/home /ldai/testdb' [3] standby_archive_dest 备用数据库的归档日志归档目录。 格式: *.standby_archive_dest=备用数据库归档日志存放目录 例如: *.standby_archive_dest='/home/ldai/testdb/archive' [4]lock_name_space 这是当主数据库和备用数据在同一台机上时要设该参数,设为备用数据库的 SID 例如: *.lock_name_space=testdb [5]compatible 主数据库和备用数据库的 oracle 版本必须一致,这个参数指明了 oracle 的版本号 例如: *.compatible='9.2.0.0.0' [6]control_files 指明备用数据库存放的控制文件路径和名称 例如: *.control_files='/home/ldai/testdb/test.ctl' 三、备用数据库的归档模式建立 在备用数据库的两个参数文件中增加以下参数,建立起备用数据库为 archive log 模式.
  64. ITPUB 电子杂志(总第六期) 64 of 82 [1]log_archive_start=true [2 ]log_archive_dest_1 设定第一个归档目录,最多可设 9 个,location 代表本地机上,service 指明在另一台机上。 例如: *.log_archive_dest_1='LOCATION=/home/ldai/testdb/archive' [3 ]log_archive_dest_state_1=ENABLE 激活定义的第一个归档日志目录。 [4]主数据库的归档目录设定 *.log_archive_start=TRUE *.log_archive_dest_1='LOCATION=/opt/oracle/oraInventory/oradata/archiv e MANDATOR Y REOPEN=60' *.log_archive_dest_state_1=ENABLE 指明归档到备用数据库中的归档日志目录 *.log_archive_dest_2='SERVICE=testdb OPTIONAL REOPEN=180' *.log_archive_dest_state_2=ENABLE 归档日志格式 *.log_archive_format='ORACLE%T%S.ARC' 主数据库一般先归档到第一个归档目录(一般都指定为本机,防止归档失败),然后才 归档到第二个归档目录。 如果在这期间有什么错误发生,可查看 $ORACLE_HOME/admin/$ORACLE_SID/bdump/alert_$ORACLE_SID.log 文件。 例如: /opt/oracle/oraInventory/admin/oracle/bdump/alert_oracle.log [备注]主数据库和备用数据库中参数文件必须的指明相同的 db_name=主数据库的 ORACLE_SID 例如: *.db_name='oracle'
  65. ITPUB 电子杂志(总第六期) 65 of 82 四、备用数据库的控制文件建立 采用专用的 sql 命令创建备用数据库的控制文件 SQL> alter database create standby controlfile as ‘控制文件名和路径’ 如果主/备不在同一台机上,创建后将控制文件 cp 到备用数据库所在的控制文件目录下。 本例中放在/home/ldai/testdb/中,与主数据库一样将控制文件同数据文件放在一个目录 下。 五、数据库的 listener.ora 和 tnsnames.ora 文件的设定。 5.1 同一台机上的 listener.ora 和 tnsnames.ora 的设定。 如 果 想 通 过 图 形 化 界 面 设 定 , 在 linux 的 图 形 界 面 中 用 run 执 行 $ORACLE_HOME/bin/netca 然后进行图形化的设定。 这个例子中,备用数据库 SID=testdb,主数据库的 SID=oracle [A]Linstener 设定 设定 listener 时,要让监听服务 stop. Linux>lsnrctl stop 手工也可进行修改,在 listener.ora 的 DESCRIPTION 中增加下面的监听条目,采用 IPC 协议。Key 为 k+$ORACLE_SID 保证是唯一的值。因为是在同一台机上所以采用 IPC 协议 进行本机内部通讯。 在地址监听列表中加多 (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = 备 用 数 据 库 的 k+$ORACLE_SID)) ) 有且只有让一个 IPC 协议条目监听(目前实验如此) 然后重新启动监听服务 linux>lsnrctl start 例子: LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST =
  66. ITPUB 电子杂志(总第六期) 66 of 82 (ADDRESS = (PROTOCOL = IPC)(KEY = ktestdb)) ) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = studysvr)(PORT = 1521)) ) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /opt/oracle/oraInventory) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = oracle) (ORACLE_HOME = /opt/oracle/oraInventory) (SID_NAME = oracle) ) ) [B]tnsnames 设定 建立一个与备用数据库 SID 相同名称的条目,注意在一台机上 service_name 指的是主数 据库的 SID,如果设错,主数据库不能通过该服务别名访问备用数据库。管理恢复模式不能 正常运作。协议是 tcp 协议。 例如: TESTDB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = studysvr)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oracle) ) ) ORACLE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = studysvr)(PORT = 1521)) )
  67. ITPUB 电子杂志(总第六期) 67 of 82 (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oracle) ) ) 5.2 主/备不同机上的 listener.ora 和 tnsnames.ora 的设定。 这个例子中,备用数据库上原本已有数据库且其 SID=orcl,我们建立的备用数据库其 SID=sun,主数据库的 SID=oracle; 主数据库机的 ip 地址为:192.168.0.6 主机名为:studysvr 备用数据库机的 ip 地址为:192.168.0.39 主机名为:sun 5.2.1 主数据库(Primary database) Listerner.ora listener.ora 必 须 要 有 监 听 主 数 据 库 的 服 务 条 目 , 其 SID_NAME 为 主 数 据 库 的 ORACLE_SID。 这样监听器就开始监听指定的 ORACLE_SID 服务了(即 oracle 的实例) ,如果用户想要 监听多个服务,只需在 SID_LIST_LISTENER 中的 SID_LIST(监听列表)下再增加一个要 监听的 ORACLE_SID。例子可祥见备用数据库的监听器设定。 例如:(primary database’s listener.ora :hostname=studysvr Ipad=192.168.0.6) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.6)(PORT = 1521)) ) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /opt/oracle/oraInventory) (PROGRAM = extproc) ) (SID_DESC =
  68. ITPUB 电子杂志(总第六期) 68 of 82 (GLOBAL_DBNAME = oracle) (ORACLE_HOME = /opt/oracle/oraInventory) (SID_NAME = oracle) ) ) Tnsnames.ora 主数据库上要设定访问备用数据库的网络服务别名, 注意这时的备用数据库的 SID 是指 备用数据库上,要启动作为备用数据库的 ORACLE_SID。 例子: #访问备用数据库的 Net Service Name SUN = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = sun)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = sun) //备用数据库的 ORACLE_SID ) ) #访问主数据库的 Net Service Name ORACLE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.6)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oracle) //主数据库上的 ORACLE_SID ) ) 5.2.2 备用数据库(standby database) Listener.ora 备用数据库的监听器要监听备用数据库的实例(即 ORACLE_SID) 。需要在备用数据库 的 Listener.ora 上加多对备用服务器实例的监听。 SID_LIST_LISTENER 的 SID_LIST 增加 在 新 ORACLE_SID 的监听服务。监听地址列表(address_list)为备用数据库的 ip 地址或者主机
  69. ITPUB 电子杂志(总第六期) 69 of 82 名,该值应尽量同 tnsnames.ora 中的 host 值保持一致,减少系统出错可能。 例子:(standby database’s listener.ora) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.39)(PORT = 1521)) ) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /oracleinstall) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = sun) (ORACLE_HOME = /oracleinstall) (SID_NAME = sun) //开启 sun 实例监听(启动的备用数据 库实例) ) (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /oracleinstall) (SID_NAME = orcl) //开启 orcl 实例监听(oracle 安装时安装的数 据库实例) ) ) Tnsnames.ora 备用数据库上建立两个网络服务别名, 一个用于访问主数据库,另一个访问备用数据库。 SID_NAME 对应于不同的数据库 sid。 例子: #访问主数据库的 Net Service Name
  70. ITPUB 电子杂志(总第六期) 70 of 82 ORACLE.LOCALDOMAIN = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.6)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = ORACLE) ) ) #访问备用数据库机上的 orcl 数据库的 Net Service Name ORCL.LOCALDOMAIN = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) #访问备用数据库的 Net Service Name SUN.LOCALDOMAIN = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.39)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = sun) ) ) 六、备用数据库的口令文件的生成 便于启动备用数据库时的 sys 连接用,远程管理时也有用。 Oracle 用户登陆 Linux>orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=$ORACLE_SID entries=4 例如:(oracle 用户执行)
  71. ITPUB 电子杂志(总第六期) 71 of 82 linux>orapwd file=/opt/oracle/oraInventory/dbs/orapwtestdb password=testdb entries=4 七、备用数据库的启动 LINUX>export ORACLE_SID=备用数据库的 SID 这个 ORACLE_SID 就是备用数据库的 SID,必需同主数据库的 Tnsnames.ora 和备用数 据库的 Listener.ora 中对应于备用数据库的 SID_NAME 相同。否则主数据库的归档日志不能 传到备用数据库机上。 例如: Linux>export ORACLE_SID=testdb LINUX>sqlplus /nolog SQL>connect sys/testdb as sysdba SQL>startup nomount SQL>alter database mount standby database; 这样就进入了手工恢复模式。如果想要进入管理恢复模式继续执行下面的命令 SQL>alter database recover managed standby database; 手工恢复模式 在手工恢复模式下,恢复数据库用 recover standby database 专用 SQL 命令。回车直到所 有归档日志完毕。(这时的主数据库归档日志是手工干预传递到备用数据库的归档日志目录 下) 管理恢复模式 系统自动将主数据库上的归档日志归档到备用数据库上的归档目录,备用数据库自动应 用这些归档日志文件,使主数据库同备用数据库的数据保持一致。在启动备用数据库之前的 所有归档日志需要人工干预,将它们传递到备用数据库中的归档目录,当采用 ftp 传递日志 文件时,一定要使用度二进制模式。管理恢复模式的取消,另开一个窗口,执行: SQL>recover managed standby database cancel; 即可取消掉管理恢复模式。 八、备用数据库的归档日志传送处理 手工恢复模式为手工干预传送归档日志(即用 cp 命令进行传送) ,注意传送完毕后,用 chmod a+w 给传递到备用数据库归档日志目录下的归档日志赋写权限。如不然,则手工恢 复不成功。 管理恢复模式则是系统根据前面参数文件,listener.ora 和 tnsnames.ora 设定好的参数,备 用数据库自动获取归档日志文件进行自动恢复。
  72. ITPUB 电子杂志(总第六期) 72 of 82 九、备用数据库的激活 备用数据库一旦激活成为主数据库,就不能在成为备用数据库,需要重新建立备用数据 库。 激活备用数据库,首先要停止备用数据库的恢复进程。 SQL>recover managed standby database cancel; 激活备用数据库 SQL>alter database activate standby database; SQL>shutdown; SQL>connect sys/sys_password as sysdba; //根据需要进行修改 sys_password SQL>startup; 十、主数据库和备用数据库之间的网络调试 要使远程备用数据库实施成功, 还需要测试网络环境是否正常,主数据库/备用数据库上 的 tnsnames.ora 和 listener.ora 是否配置正确。 A、主数据库所在的机器和备用数据库所在的机器要互相能够 ping 得通,保证网络正常。 B、启动主数据库,在备用数据库上执行下面的命令,检测主数据库上的 Listener 和备 用数据库上的 tnsnames 是否配置正确。 Linux>sqlplus /nolog SQL>connect sys/primary_sys_password@primary_net_service_name as sysdba; 或 SQL>connect 主数据库上的用户/主数据库上用户口令@主数据库别名; 然后 SQL>select sysdate from dual; 如果结果正常,则证明主数据库上的 Listener 配置正确。备用数据库的 tnsname 中的主 数据库服务条目配置正确。 例子: SQL>connect sys/oracle@oracle as sysdba 或 SQL>connect system/oracle@oracle; C、备用数据中关于本身的 Tnsnames 服务条目是否配置正确。 备用数据库机上: Linux>sqlplus /nolog SQL>connect sys/sys/备用数据库的 sys_password@备用数据库的别名 as sysdba; (注意备用数据库的 sys 口令同 7 步骤生成的口令文件是对应的)能连上就说明配置正确。
  73. ITPUB 电子杂志(总第六期) 73 of 82 例子: SQL>connect sys/sun@sun as sysdba; D、按照步骤 8 启动备用数据库,启动成手工恢复模式,然后将备用数据打开成只读模 式,然后从主数据库访问备用数据库,检测备用数据库的 listener 和主数据库的 tnsnames 是 否配置正常。 在主数据库机上: Linux>sqlplus /nolog SQL>connect sys/备用数据库的 sys_password@备用数据库的别名 as sysdba; (注意备用数据库的 sys 口令同 7 步骤生成的口令文件是对应的)能连上就说明配置正确。 例子: SQL>connect sys/sun@sun as sysdba; E、以上涉及到的 linux 操作都是以 oracle 用户执行。 F、如果不知道主机名可用 Linux>hostname 获知。 G、如果机器不能解析 ip 地址或主机名,编辑(root 用户下)/etc/hosts 和/etc/resolv.conf 文 件; End
  74. ITPUB 电子杂志(总第六期) 74 of 82 Oracle9iAS 证书不完全指南 作者:jc20031010 1 概述 Oracle9iAS 证书全名叫:Oracle9iAS Web Administrator Certified Associate,下文简称 9iAS WACA. 这是 Oracle9iAS 目前唯一的证书. 它不同于 DBA, 因为 DBA 有 OCA, OCP 和 OCM 三种。很多公司现在需要全职或兼职的 Oracle9iAS Web Administrator。这种 工作也是 DBA 工作的延伸。很多人在考完 DBA 的 OCA/OCP 后加考 9iAS WACA 以拓 宽自己的知识面和增加工作机会。 要得到 9iAS WACA,简单来说:考一门试,得一个证。无参加 Oracle 培训的要求。 2 考试 9iAS WACA 考试全名: #1Z0-301 Oracle9iAS: Basic Administration. 考试时间为 2 小时。计分题为 83 题。 答对 53 题(63%)为通过。 考试报名等事项与考 OCP 一样,请参见 Kamus 的“OCP 完全指南” ( http://www.itpub.net/showthread.php?s=&threadid=161935 )。 3 考试准备 要学习,准备下面三方面的内容: D37338 Oracle9iAS: Basic Administration, Student Guide V1,V2. Production 2.0 October 2002 Oracle9i: Security Concepts in an Internet Environment Oracle9i: Introduction to LDAP and Oracle Internet Environment 参考资料 1 目前还未见有电子版, 只有印刷版。 网上传过的那本是 2001 年讲 Oracle9iAS Release One 的,已经很老了。 Oracle9iAS Release One 和 Release Two 有着本质的不同。 且 学习内容 2 和 3 可通过参加 Oracle 网上图书馆的培训。 没有网上图书馆用户的朋友可去 http://www.oracle.com/education/oln/ 免费注册一用户, 注册后可试用一个月。可苦干一个月,搞定这两门。
  75. ITPUB 电子杂志(总第六期) 75 of 82 4 培训 Oracle 提供上述三门课的培训。第一门是由 Oracle 大学的讲师主讲,五天。第二,三 门可参加网上图书馆培训。 5 考试要点 1. Oracle9iAS Installation Options 1) Describe the architecture and main components of the middle-tier Oracle9i Application Serve 2) Explain the installation options for Oracle9iAS and how the various installation options enable different features 3) Explain the installation dependencies 4) Indentify the recommended deployment strategies 2. Installing Oracle9i Application Server 1) Install J2EE and Web Cache 2) Describe the difference between the first installation on a machine and subsequent installation 3) Describe when you need to assign a J2EE and Web Cache instance to an Infrastructure 4) Install Oracle9i AS Infrastructure, and: Explain a first installation of this type 5) Describe the installation if components already exist 3. Managing Oracle9iAS Using Oracle Enterprise Manager 1) Use the Oracle9iAS Web-based management tools, and explain and use symbols and icons to start, stop, restart instances or components 2) Start and stop an Oracle9iAS instance or a component 3) Explain the structure of the Farm page 4) Use the navigation bar to access different component homepages and get back to your starting point 4. Managing the Oracle HTTP Server 1) Specify the directory structure and location of configuration files 2) Configure and manage Oracle HTTP Server: using Oracle Enterprise Manager, using dcmctl command line utility 3) Locate the main configuration file httpd.conf
  76. ITPUB 电子杂志(总第六期) 76 of 82 4) Use directives to: __ Specify server and administrator functions __ Specify file location __ Limit the number of processes and connections __ Manage the network connection __ Configure and use server log files 5. Configure the Oracle HTTP Server - Advanced Features 1) Describe the allowed locations and context merging of directives 2) Explain the configuration context of directives 3) Use container directives such as: < Directory >, < Files > and < Location >, < Virtual Host > 4) Create and configure virtual hosts 6. Managing PL/SQL, CGI, and Perl Applications 1) Configure mod_plsql 2) Use the mod_plsql configuration files such as plsql.conf, dads.conf, and chache.conf 3) Create a database access descriptor (DAD): using dads.conf, using OEM 4) Define authentication for PL/SQL applications 5) Prevent the execution of specific procedures and packages from a browser 7. Introducing Oracle9iAS Containers for J2EE (OC4J) 1) Describe the deployment and management features of OC4J 2) Explain the OC4J architecture 3) Describe the Oracle Process Management and Notification System (OPMN) 4) Locate the mod_oc4j configuration files and configure mod_oc4j using directives such as: Oc4jMount, Oc4jMountCopy, Oc4jCacheSize 5) Monitor the OC4J instances 8. Configuring OC4J 1) Describe the OC4J configurationand deployment process 2) Explain OC4J configuration basics 3) Locate the configuration directory and describe the structure 4) Describe the server configuration files such as: server.xml, default-web-site.xlm, application.xml 5) Describe the relationships among the configuration files
  77. ITPUB 电子杂志(总第六期) 77 of 82 9. Deploying Java Applications with OC4J 1) Describe how J2EE applications connect to databases 2) Create and configure data sources to be used with OC4J 3) Describe the data-sources.xml file 4) Obtain data sources information from OC4J homepage 5) Create a data source using OEM 6) Deploy Web application modules: using Oracle Enterprise Manager, using dcmctl command line utility 7) Deploy J2EE applications: __ Using OEM __ Using the Deploy J2EE application wizard to deploy an EJB __ Using dcmctl command line utility 10. Introducing Oracle9iAS Web Cache 1) Describe key concepts of Oracle9iAS Web Cache 2) Explain the architecture of Oracle9iAS Web Cache 3) Explain the communication flow with Oracle9iAS Web Cache 4) Describe common deployment scenarios 5) Administer and configure Oracle9iAS Web Cache 6) Use Oracle Web Cache Manager 7) Use the command line utility webcachect 8) Describe the directory structure of Oracle9iAS Web Cache 9) Locate configuration and log files 10) Start, stop, and restart Oracle9iAS Web Cache using Oracle Enterprise Manager Web site 11) Obtain status, statistics and metrics from OEM Web Cache Homepage 12) Modify security settings, including: __ Change the passwords to Oracle9iAS Web Cache __ Use Web Cache Manager to change the administrator or invalidator password 11. Using and Managin Oracle9iAS Web Cache 1) Create and configure caching rules using Web Cache Manager 2) Set up invalidation mechanisms 12. Managing the Oracle9iAS Infrastructure 1) Describe the key features of Oracle9iAS Infrastructure 2) Describe the benefits of usingOracle9iAS Infrastructure 3) Start of stop Oracle9iAS Infrastructure
  78. ITPUB 电子杂志(总第六期) 78 of 82 4) Manage the metadata repository, including starting, stopping and restarting 13. Introducing Oracle9iAS clustering concepts 1) Explain the terms cluster, farm, instance, and component cluster 2) Describe the architecture and components of Oracle9iAS instances and clusters 3) Explain how different failure scenarios are managed by Oracle9iAS: __ A node within a cluster goes down OPMN goes down __ An Oracle HTTP Server goes down __ An OC4J process goes down 4) Describe how distributed configuration management works when you: __ Deploy a J2EE application to a cluster __ Create a new OC4J instance with which joins a cluster 5) Deploy Oracle9iAS clusters 14. Managing Security 1) Explain basic security concepts and common deployment topologies 2) Describe the authentication and restriction schemes available with the Oracle HTTP Server 3) Define host based access control: __ Use IP-based accdess control __ Specify domain-based access control 4) Configure basic authentication, including: __ Define user authentication directives in .httpd.conf configuration file. __ Use authentication directives in .htaccess __ Use the htpasswd command line utility to generate a password file 15. Securing Oracle HTTP Server with Secure Sockets Layer (SSL) 1) Describe SSL-based communication 2) Configure mod_ossl using the appropriate directives and use SSL with basic authentication 16. Introducing Oracle9iAS Single Sign-On 1) Describe the Oracle9iAS Single Sign-On (SSO) architecture 2) Explain Single Sign-On authentication to partner applications 3) Use Single Sign-On Administration page to: __ Edit SSO server credentials __ Configure the SSO server __ Add a partner application
  79. ITPUB 电子杂志(总第六期) 79 of 82 __ Add an external application 4) Use the Delegated Administration Service (DAS) for SSO user administration, including: __ Create SSO user __ Change password __ Configure credentials 5) Use the appropriate directives to configure single sign-on with Oracle HTTP Serve 6) Define SSO server to use SSL 7) Configure applications to use SSO 17. Introducing Oracle Internet Directory (OID) 1) Describe the functions performed by the OID architectural components 2) Start, stop and restart using OEM Web site 3) Use Oracle Directory Manager, including: __ Start Oracle Directory Manager __ Connect to a directory __ Navigate the Oracle Directory Manager GUI __ Obtain user information using Oracle Directory Manager 4) Connect to and disconnect from a directory server 18. Oracle Internet Directory Concepts and Architecture 1) What is a directory server __ What is LDAP __ Why should you use LDAP __ What is LDAP components __ Identify common directory applications 2) OID architectural components __ OID node architecture __ OID server instance architecture __ How does OID work 19. Directory and Lightweight Directory Access Protocol (LDAP) concepts 1) List different LDAP models 2) Describe entries 3) Describe object classes 4) Describe attributes
  80. ITPUB 电子杂志(总第六期) 80 of 82 20. Bulk tools and command-line tools used to manage the data in Oracle Internet Directory 1) List the functions of the bulk tools 2) List the functions of the command-line tools 21. Managing OID Processes 1) Describe the OID server instance and node architecture 22. Securing OID Data 1) List the characteristics of access control policies (ACPs) and access control lists (ACLs) __ ACL evaluation __ Access control information __ Access level requirements for LDAP operations 23. Security Requirements and Risks in an Internet Environment 1) List and describe the fundamental security requirements 24. Oracle Security Solutions 1) Describe how industry solutions address Internet security risks 25. Implementing a Security Policy 1) List and describe the steps required to develop and implement a security policy 2) Describe the principle of least privilege 3) List and describe the items on the general security checklist End
  81. ITPUB 电子杂志(总第六期) 81 of 82 关于杂志 ITPub 免费电子杂志于 2002 年 1 月 1 日创刊。 电子杂志是 ITPUB 一系列活动之一,我们的目的是让更多的人了解 IT 技术,让更多的 人从中得到知识。 电子杂志需要得到大家的支持,请把你们看到的、学到的、想到的记录下来发给我们: epub@ITPub.net 或者相关斑竹,所有受到你们帮助的会员们会感谢您! 我们一起建设属于自己的免费电子杂志! ITPUB,信息技术新动力! 版权归各位作者所有,如需转载,请联系 Webmaster@itpub.net ,我们会与作者联络! 制作人员 主编/定稿/审稿: Fenng(ITPub 成员, Fenng@itpub.net) 排版/校订: Snowywolf (ITPub 成员 Snonywolf@itpub.net) 编辑的话 感谢本次投稿的各位作者、各位版主的大力支持与信任! ……
  82. ITPUB 电子杂志(总第六期) 82 of 82 相关连接 ITPUB 电子杂志第五期: http://www.itpub.net/magazine/itpub200307.zip ITPUB 电子杂志第四期: http://www.itpub.net/magazine/itpub200304.rar ITPUB电子杂志第三期: http://www.itpub.net/showthread.php?s=&threadid=31140 ITPUB电子杂志第二期: http://www.itpub.net/showthread.php?s=&threadid=18800 ITPUB电子杂志第一期: http://www.itpub.net/showthread.php?s=&threadid=10657 如果有对杂志或文章有什么评论或建议,请到电子杂志板块来畅所欲言: http://www.itpub.net/forumdisplay.php?s=&forumid=60 或是到这个链接: http://www.itpub.net/showthread.php?s=&threadid=16715 End

×