如非特别说明,本规范叙述的产品特性、操作命令、用户界面均基于Oracle
10G,可能有不适用于其它版本的情况。
项目基础设施可行性研究、设计和实施人员,应用系统设计人员,相关运行维护技术人员。
在创建和规划一个Oracle数据库之前,首要任务应确定将来投产的数据库属于何种业务类型。目前的应用业务有以下类型:
OLTP(Online Transaction Processing)
OLAP(Online Analytiacl Processing)
BATCH
DSS(Decision Support System)
Hybrid
OLTP系统是一个包含繁重及频繁执行的DML应用,其面向事务的活动主要包括更新,同时也包括一些插入和删除。经典的例子是预定系统或在线实时交易系统,例如网上银行和ATM自动取款机系统。OLTP系统可以允许有很高的并发性(在这种情况下,高并发性通常表示许多用户可以同时使用一个数据库系统)。
OLAP系统可提供分析服务。这意味着数学、统计学、集合以及大量的计算,一个OLAP系统并不永远适合OLTP或DSS模型,有时它是两者之间的交叉。另外,也可以把OLAP看作是在OLTP系统或DSS之上的一个扩展或一个附加的功能层次。例如,地理信息系统或有关空间的数据库和OLAP数据库相集成,提供图表的映射能力。用于社会统计的人口统计数据库也是一个很好的例子。
批作业处理系统是作用于数据库的非交互性的自动应用。它通常含有繁忙DML语句并有较低的并发性(在这种情况下,较低的并发性通常表示少数几个用户能够同时使用一个数据库系统),该业务系统会在某一时段,大批量数据(少则几万,多则几十万,几百万条数据)更新/插入/删除该数据库。事务查询的比率决定了如何物理地设计它,经典的例子是与DW有关的成品数据库和可操作数据库,如:操作型数据存储系统(ODS)。
DSS系统通常是一个大型的、包含历史性内容的只读数据库,通常用于简单的固定查询或特别查询。DSS常常按某种方式变成一个VLDB(Very
Large Database)或DW(Data
Warehouse)。VLDB的例子如:企业资源管理财务系统(ERP)数据库,该数据库是一个长期存储数据库的历史数据库;DW的例子如:整个集团的工资和人事数据库。
同时数据库系统的应用类型可能是OLTP、OLAP、BATCH等的混合体。也意味着同时拥有上述业务类型特征,这就要求数据库管理员、应用系统分析员、操作系统管理员整体统筹考虑各种业务性能需求及功能需求,对这个系统制定出满足各种业务类型需求的规划,如:企业客户信息整合(ECIF)系统。
在Oracle 10g 第 1 版,Oracle 的集群件产品可用于所有操作系统,成为了 Oracle RAC
所需的集群技术。随着 Oracle 数据库 10g 第 2 版 (10.2) 的发布,Cluster Ready
Services 被重命名为 Oracle Clusterware。如果使用 Oracle 10g 或更高版本,Oracle
Clusterware 是大多数运行 Oracle RAC 的平台所需的唯一集群件(不包括 Tru
集群,在这种情况下,您需要供应商集群件)。我们仍然可以使用其他供应商的集群件(如果该集群件通过了认证),但是请记住,**Oracle
RAC 仍然需要 Oracle Clusterware**,因为它与数据库软件完全集成。
由于Oracle
RAC已经是成熟产品,安装时都应选择RAC模式,除非有特殊情况,可以采用HA模式。
参见文档《169706.1》
管理网络:1个网卡
业务网络:每个服务器2个网卡。需要为业务网络配置2*节点数量。业务网络建议采用BONDING技术。每个业务网络适配器**必须支持
TCP/IP**。
心跳网络:每个服务器2个网卡。心跳网络建议经过交换机互联,不建议使用交叉线互联。**对于心跳网络应采用BONDING技术,互连必须支持用户数据报协议
(UDP),**使用支持
TCP/IP的高速网络适配器和交换机。UDP被用来RAC之间的通信,TCP被用来CLUSTER之间的通信。心跳网络建议使用10G网络,最小配置为1G网络。
每个网络中网络适配器的相关业务接口名称在所有节点上都应相同,网络适配器的相关心跳接口名称在所有节点上都应相同。
所有的IP地址都应该是静态配置,不应该是DHCP方式获取。
**如果使用网卡绑定技术,不要使用模式3和
6,模式3会造成通信性能的下降,模式6会造成虚拟IP漂移时出现网络问题。**
所用的网卡名称不可以包含“.”;
在10g及其之前,我们必须使用IPv4协议。
RAC机器需要在/etc/hosts中配置各节点IP的别名,命名规则如下**(主机名中包含”_”是不被建议和支持的)**:
Public IP:如无特殊需求,建议使用dbxx的格式,其中xx为主机序列号;
Private IP: 如无特殊需求,建议使用dbxx-pri的格式,其中xx为主机序列号。
Virtual IP:如无特殊需求,建议使用dbxx-vip的格式,其中xx为主机序列号。
网络监听建议不要使用默认端口,该规范建议使用同一端口1815.
建议选择SAN存储网络,作为共享存储。
由于ORACLE数据库需要确认对数据文件的写操作已经完全写入的磁盘,因此不建议使用NFS文件系统,除非NFS存储厂商已经通过ORACLE认证(如REDHAT,NETAPP)。如果使用NFS,rsize和wsize至少为16384,ORACLE
的建议指为32768.
集群设备不支持directnfs。
对于数据库系统建议使用Deadline调度算法。
Deadline调度算法对一个请求的多方面特性进行权衡来进行调度,以期即能满足块设备扇区的顺寻访问又兼顾到一个请求不会在队列中等待太久导致饿死。Deadline调度算法为了兼顾这两个方面,引入了四个队列,这四个队列可分为两类,每一类都由读和写两种队列组成。一类队列用来对请求按起始扇区序号进行排序,通过红黑树来组织,称为sort_list;另一类对请求按它们的生成时间进行排序,由链表来组织,称为fifo_list。
如果数据库安装在虚拟化环境下,建议使用noop调度算法,该算法利用少量的CPU资源进行基础排序和整合操作。在虚拟化环境下,分为主机系统和客户机系统,应该使磁盘调度算法尽量在主机层面完成,因此我们建议在虚拟客户机内使用noop调度算法。
在数据库服务器磁盘空间充分冗余的条件下,Raid
(1+0)+HotSpare作为优先第一配置选项;如果磁盘空间不是很充足,Raid
5作为第二配置选项。
说明:
★越多表示在本组(Disk*N)范围内推荐级别越高
Raid\磁盘 | Disk*2 | Disk*3 | Disk*4 | Disk*5 | Disk*6 | Disk*7 | Disk*8 | Disk*9 |
---|---|---|---|---|---|---|---|---|
Raid 1 | ★ | |||||||
Raid 1+HotSpare | ★★ | |||||||
Raid 5 | ★ | ★ | ★ | ★ | ★ | ★ | ★ | |
Raid 5+HotSpare | ★★ | ★★ | ★★ | ★★ | ★★ | ★★ | ||
Raid (1+0) | ★★★ | ★★★ | ★★★ | |||||
Raid (1+0)+HotSpare | ★★★ | ★★★ | ★★★ | |||||
Raid磁盘组往往会在多个物理磁盘之间对数据进行条带化处理,例如,一般情况下条带大小为64K。当磁盘分区和条带化大小可以对齐时,可以改善磁盘性能,尤其是在开启了DIRECTIO特性数据库系统下。
基于磁盘容量和条带化对齐的考虑,我们建议使用parted工具进行磁盘分区。因为fdisk工具默认情况下会分配前63个sector用于保存磁盘元数据分分区表数据,紧随其后是分区数据,显然此时分区不是从64k开始的,因为每个sector的大小默认为512字节。通过使用parted可以手工指定分区开始位置,因此我们建议使用如下方式进行分区
/sbin/parted /dev/mapper/asm1 mklabel msdos unit s mkpart primary “128 -1”
为保证软件安装过程顺利进行,需要保证本地磁盘具有足够的存储空间。具体要求如下:
本地磁盘空间需求 | |||
---|---|---|---|
序号 | 用途 | 目录 | 大小 |
1 | CRS_HOME | /u01/app/ oracle/product/10.2.0/crs_1 | /u01 不小于10G,建议 > 50G 建议为/u01创建单独分区,不要使用LVM |
2 | ORACLE_HOME | /u01/app/ oracle/product/10.2.0/db_1 | |
3 | SOFTWARE_DIR | /u01/software | |
4 | 临时目录 | /tmp | 最小1G,建议10G |
Oracle
10g中引入了ASM技术,相对于裸设备ASM带来了不少的管理便利性。如果安装最新版本的ORACLE10GR2,建议可以使用ASM,如果是较早版本,可能会存在bug较多的情况。本文以ORACLE10GR2最新版本为基础,因此使用ASM作为存储文件系统。
虽然Oracle
10GR2支持使用O_DIRECT访问块设备,但是在安装过程中使用块设备OUI会报错,需要使用RAW设备进行安装,安装完成后可以通过命令替换为块设备,详细参加文档《401132.1》。因此,我们建议:在10G中,表决盘等磁盘仍然使用裸设备,数据文件等使用ASM。使用ASM时,建议不要使用过多的磁盘组,通常为数据文件创建磁盘组DATA1,为闪回恢复期创建磁盘组FRA1。建议闪回区大小为数据区大小的两倍
不管采用何种技术,强烈建议对使用到的磁盘先分区在使用。
裸设备磁盘空间规划
存储组件 | 裸设备 | 建议大小 | 最小大小 | 存储内容 | |
---|---|---|---|---|---|
VOTE1 | /dev/raw/raw1 | 300M | 280M | VOTEDISK | |
VOTE2 | /dev/raw/raw2 | 300M | 280M | VOTEDISK | |
VOTE3 | /dev/raw/raw3 | 300M | 280M | VOTEDISK | |
OCR1 | /dev/raw/raw4 | 300M | 280M | OCR | |
COR2 | /dev/raw/raw5 | 300M | 280M | OCR | |
ASM磁盘空间规划 | |||||
存储组件 | ASM卷组 | 卷大小 | 冗余级别 | AU SIZE | 存储内容 |
数据库文件 | +DATA1 | EXTERNAL | DATAFILE LOG CONTROL OCR | ||
快速恢复区 | +FRA1 | EXTERNAL | ARCHIVELOG CONTROL OCR | ||
磁盘命名规划 | |||||
存储组件 | ASM卷组 | ASM_磁盘名 | DM多路径 | UDEV设备 | ASMLIB设备 |
VOTE1 | RACVOTE1 | ORADISK/RACVOTE1 | RACVOTE1 | ||
VOTE2 | RACVOTE2 | ORADISK/RACVOTE2 | RACVOTE2 | ||
VOTE3 | RACVOTE3 | ORADISK/RACVOTE3 | RACVOTE3 | ||
OCR1 | RACOCR1 | ORADISK/RACOCR1 | RACOCR1 | ||
COR2 | RACOCR2 | ORADISK/RACOCR1 | RACOCR2 | ||
数据库文件 | +DATA1 | DATA1P1 | RACDATA1 | ORADISK/RACDATA1 | RACDATA1 |
快速恢复区 | +FRA1 | DATA2P1 | RACDATA2 | ORADISK/RACDATA2 | RACDATA2 |
由于ASM实例业务简单,内存参数的设置值大于其所需内存空间的和,提供一定的备用内存,通常建议内存总大小为256M。
该参数的设置需要考虑冗余性配置和可用磁盘空间。
ORACLE数据库专用主机中内存使用包括:
SGA,共享内存全局区:数据库一启动就ORACLE就申请占用,可以通过ipcs
-a查看其大小。查看SGA_MAX_SIZE参数可以得到其设置值。这部分内存在数据库实例运行期间不会改变;
PGA,进程全局区:查看PGA_AGGREGATE_TARGET可以得到其设置值。这部分内存并非一启动就分配,而是随着应用的使用变化而变化,有排序、并行、HASH
JOIN时会增大,甚至会突破设置值,而长时间不使用时又会返回给操作系统;
连接到数据库的每个TCP连接本身会占用~左右内存。对于使用中间件共享连接池的应用,连接数基本固定,内存占用也就固定;对于直接连接数据库的应用,这部分内存占用随着数据库session数的增减而增减;
操作系统自身内存的占用,包括常用软件的内存占用。这部分占用无法给出固定值,简单计算可以按30%物理内存计算。
新系统性能测试时初始计划内存分配办法:总物理内存扣除连接数占用的内存及操作系统、常用软件占用的内存之后,剩余的内存按3:1的比例分配给数据库的SGA、PGA,
也即SGA占其中的3/4,PGA占1/4。SGA中SHARED POOL分1/4(且不大于,不小于),DB
BUFFER和其他内存池共用其余的1/2。
注意:
RAC系统中需要考虑节点故障时,单节点接过所有负载连接的情况,因此每节点内存需求量都按最大全部连接数考虑。
此处连接数占用内存的估计都是按照上限值进行的估算,因此比较保守,也预留了日后扩展的需求。实际可连接数比上述数值要大。
根据ORACLE官方文档(Doc ID 225451.1),建议配置linux下SWAP空间遵循如下原则。
RHEL5 | ||
---|---|---|
Amount of RAM in the System | Recommended Amount of Swap Space | |
4GB of RAM or less | a minimum of 2GB of swap space | |
4GB to 16GB of RAM | a minimum of 4GB of swap space | |
16GB to 64GB of RAM | a minimum of 8GB of swap space | |
64GB to 256GB of RAM | a minimum of 16GB of swap space | |
256GB to 512GB of RAM | a minimum of 32GB of swap space | |
RHEL6 | ||
Amount of RAM in the System | Recommended swap space | Recommended swap space if allowing for hibernation |
⩽ 2GB | 2 times the amount of RAM | 3 times the amount of RAM |
> 2GB – 8GB | Equal to the amount of RAM | 2 times the amount of RAM |
> 8GB – 64GB | 0.5 times the amount of RAM | 1.5 times the amount of RAM |
> 64GB | 4GB of swap space | No extra space needed |
在 Linux 环境中实施 HugePage
能够极大地提高内核性能。对于内存较大的系统,效果尤其明显。一般而言,**所有 RAM
大于 12GB或者SGA空间超过8G的系统都适合使用 Hugepage**。系统中的 RAM
越大,系统启用 Hugepage
后获得的好处也越大。这是因为内核为映射和维护内存页表所要做的工作量会随着系统内存的增大而增加。启用
Hugepage
能够显著地降低内核要管理的页面数,而且能提高系统的效率。经验表明,如果未启用
Hugepage,内核挤占关键的 Oracle Clusterware 或 Real Application Clusters
守护进程的情况会很常见,而这会导致实例或节点驱逐出现。
对于ASM实例可以不使用Hugepage技术。
可以将Semaphores理解为计数器,该计数器用于进程或者线程之间对共享资源的访问同步。根据ORACLE文档《184821.1》,对ORACLE数据库系统的信号量设置,遵循如下计算方法:
信号量设置 | ||
---|---|---|
SEMMNI | 128 | Maximum number of semaphore sets in the entire system. |
SEMMSL | 250 | Minimum recommended value. SEMMSL should be 10 plus the largest PROCESSES parameter of any Oracle database on the system. |
SEMMNS | 32000 | Maximum semaphores on the system. This setting is a minimum recommended value. SEMMNS should be set to the sum of the PROCESSES parameter for each Oracle database, add the largest one twice, plus add an additional 10 for each database. This value shoud be equal (SEMMSL*SEMMNI) |
SEMOPM | 100 | Maximum number of operations per semop call.SEMOPM should be equal SEMMSL |
随着Oracle数据库版本的不断升级,Oracle的功能也越来越多,因此安全检查点也越来越多。因此最好根据需求只安装所需内容。如:不需要web
功能,就不要安装相应组件。
在安装数据库软件时,定制安装并仅选择如下组件:
Oracle Database
Enterprise Edition options
Oracle partitioning
Oracle Net Services
Oracle Net Listeners
Oracle Call Interface(OCI)
对如下组件,除非开发中心有特殊需求,否则不安装:
Advanced Security
OLAP
Spatial
Oracle Enterprise Manager Console DB
Programmer
XML Development
利用dbca创建数据库时,在advance
component选项页中,点击解除对其中所有选项的选中,包括JVM、SPATIAL、XDB,除非开发中心有特殊需求
普通使用模式的Oracle数据库的服务名和实例名(SID)是相同的;RAC模式下的Oracle数据库的服务名与实例名不同。
数据库服务名的命名格式为:XXXXYY{m},不得超过8个字符
数据库的SID的命名格式为:XXXXYY{m}{n}
说明:
其中XXXX表示长度为4个字符的应用项目缩写;
YY:代表数据库用途,pd代表生产库,hi代表历史库,rp代表报表库,cf代表配置库,st代表Standby灾备库,其他可自行定义,不得超过2个字符;
m表示数据库序号,从0-9,根据项目的数据库数量进行编号;
n表示RAC节点实例序号1,2,3……。用以区分多节点的RAC数据库的不同实例。对于普通模式的数据库,该位不指定。
生产数据库不得有如TOOLS、XDB、EXAMPLE等oracle默认安装表空间。本文推荐使用ASM,不得使用文件系统和裸设备。
数据文件使用固定大小,不得设置为自动扩展,自动扩展语句会造成数据文件的自动增长,在使用ASM的情况下可能造成ASM系统无空闲空间。
数据库管理员必须使用本地管理中的自动分配(Autoallocate)的方式创建表空间,Segment的管理使用ASSM方式。默认Storage设置Minextents为1M。
OLTP系统:每个数据文件最大不超过(Oracle理论上限:BLOCK_SIZE为8K时,数据文件最大,16K为,32K为),超过的表空间扩容需要新增数据文件,不足的表空间扩容可以直接resize增大数据文件大小。
OLAP系统:由于数据量大,空间需求多,单个数据文件的大小允许设置为。如果单个表空间预期大小超过2T,可以直接使用BigFile表空间。此时该表空间只能有一个文件,需要增加表空间大小时,直接resize文件大小即可,该文件的最大大小可达到32T(8k
Blocks)、64T(16k Blocks)、128T(32k Blocks)。
Undo/temp表空间的估算
Undo设置原则:oracle9i以后的版本,推荐使用UNDO
TABLESPACE,让系统自动管理回滚段。须考虑以下几个问题:
系统并发事务数有多少?
系统是否存在大查询或者大是事务?频繁与否?
能提供给系统的回滚段表空间的磁盘空间是多少?
UNDO表空间初始设置不小于,SGA_MAX_SIZE大于的,至少为SGA_MAX_SIZE*1.2。
Temp设置原则:可创建缺省临时表空间TEMP,取数据库的缺省参数。业务用户默认使用的TEMP表空间初始设置为总空间的5%,且不小于,通常不大于。
每个数据库实例应至少有两个控制文件,且每个文件存储在独立的物理磁盘上。如果有一个磁盘失效而导致控制文件不可用,与其相关的数据库实例必须关闭。一旦失效的磁盘得到修复,可以把保存在另一磁盘上的控制文件复制到该盘上。这样数据库实例可重新启动。并通过非介质恢复操作使数据库得到恢复。
为了使整个系统的高可靠地运行,要求至少设置3个控制文件。
重做日志文件的尺寸会对数据库的性能产生重要影响,因为它的尺寸大小决定着数据库的写进程(DBWn)和日志归档进程(ARCn)。一般情况下,较大的日志文件提供较好的数据库性能,较小的重做日志文件会增加核查点(checkpoint)的活动,从而导致性能的降低。当然为了防止I/O争用,还应把各个重做日志文件分布到不同的物理磁盘上。
不可能为重做日志文件提供特定大小的建议,重做日志文件在几百兆字节到几GB字节都被认为是合理的。欲确定数据库重做日志文件的大小,应根据该系统产生重做日志的数量,并依据每二十分钟发生一次日志切换这个大致原则来决定,业务高峰时段,日志切换频率不高于五分钟一次。在系统运行后,我们从alert文件获取日志的切换时间,并根据切换的间隔来调整重组日志的大小。
Oracle可以将联机日志文件保存到多个不同的位置,将联机日志转换为归档日志的过程称之为归档,相应的日志被称为归档日志。归档日志(archivelog
)文件存储方法:
放在ASM单独的磁盘组+FRA1,独立于+DATA1磁盘组。对RAC系统来说,各自实例使用相同的ASM磁盘组,方便RMAN进行归档日志备份。
要求归档日志的ARCH磁盘组大小可以保证容纳2天产生的归档日志。
ORACLE 10g操作系统认证列表 |
---|
./media/image1.png |
如果使用EL4系列的操作系统,建议升级到4.7之后,以避免如下bug:6116137、6125546、5041764、5136660等。
ORACLE 10g RAC 认证列表 |
---|
./media/image2.png |
执行以下过程,验证在安装节点上存在用户
nobody,nobody用户会用于执行oracle的某些任务:
[root\@localhost \~]# id nobody
uid=99(nobody) gid=99(nobody) 组=99(nobody)
如果该命令显示了 nobody 用户的信息。如果用户 nobody
不存在,则输入以下命令进行创建:[root\@localhost \~]# useradd -M -u 99 -g nobody -s /sbin/nologin nobody
创建Oracle用户,命令如下:
groupadd -g 1000 oinstall
groupadd -g 1300 dba
groupadd -g 1301 oper
useradd -m -u 1100 -g oinstall -G dba,oper -d /home/oracle -s /bin/bash
oracle
设置 Oracle 帐户的口令:
echo oracle | passwd –stdin oracle
配置/etc/security/limits.conf,设置memlock值(KB),该值可略小于物理内存。重启系统后配置生效。
cat > /tmp/limits.sh \< \< EOF
#!/bin/bash
memtotal_kb=`grep ‘MemTotal’ /proc/meminfo | awk ‘{print \$2 }’`
#the total amount of memory pages that can be used system wide,in pages
memlock=\$(( \$memtotal_kb * 4 / 5 ))
softml=\`grep -v “\^#” /etc/security/limits.conf | grep “memlock” |
grep “soft” | wc -c\`hardml=\`grep -v “\^#” /etc/security/limits.conf | grep “memlock” |
grep “hard” | wc -c\`if [ \$softml != 0 ]
then
sed -i “s/.*soft.*memlock.*/\* soft memlock \$memlock/”
/etc/security/limits.confelse
echo “* soft memlock \$memlock” > > /etc/security/limits.conf
fi
if [ \$hardml != 0 ]
then
sed -i “s/.*hard.*memlock.*/\* hard memlock \$memlock/”
/etc/security/limits.confelse
echo “* hard memlock \$memlock” > > /etc/security/limits.conf
fi
EOF
使用oracle用户通过如下命令查看,配置是否生效。
ulimit –l
配置/etc/sysctl.conf,修改vm.nr_hugepages参数值为SGA/hugepagesize+4。hugepagesize在linux下默认为2M。
在kernel2.4下,需要使用参数vm.hugetlb_pool。
查看transparent_hugepage是否启用,如果目录不存在或者返回结果为never,则表示transparent_hugepage没有启用,否则我们需要禁用transparent_hugepage。
cat /sys/kernel/mm/transparent_hugepage/enabled
修改/etc/grub.conf在kenel后添加如下选项transparent_hugepage=never,以禁用transparent_hugepage。
对于RHEL7如果上述方法行不通,可以在/usr/lib/tuned/throughput-performance/tuned.conf文件中添加如下选项来禁用transparent_hugepage.
[vm]
transparent_hugepage=never
Oracle的安装要求/tmp目录至少有400MB以上的空余空间,安装RAC时,临时目录不可以使用共享目录。可以用以下语句检查/tmp目录的空间:
# df /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda2 113836004 40094512 67958896 38% /
如果没发现/tmp目录没有足够的空间了,可以在另外创建一个目录,并修改ORACLE的环境变量,方法如下:
su - root
mkdir /u01/tmp
chown root.root /u01/tmp
chmod 777 /u01/tmp
export TEMP=/u01/tmp # used by Oracle
export TMPDIR=/u01/tmp # used by Linux programs like the linker “ld”
当完成了Oracle安装后,可以先关闭Oracle服务器,然后移除刚才创建的目录,并复位相关环境变量。
su - root
rmdir /u01/tmp
unset TEMP
unset TMPDIR
根据交换空间分配原则,检查当前系统的SWAP空间分配是否合理。
检查系统内存:
# grep MemTotal /proc/meminfo
MemTotal: 511940 kB (1034688 kB=1G)
检查系统交换区:
# cat /proc/swaps
Filename Type Size Used Priority
/dev/hda3 partition 1044216 256584 -1
如果发现交换空间太小,可以有两种方式增加交换区,一种是采用文件方式,一种是采用新建分区的方式。
使用文件增加交换区:
# cat /proc/swaps
Filename Type Size Used Priority
/dev/hda3 partition 1044216 256584 -1
# dd if=/dev/zero of=tmpswap bs=1k count=524288
524288+0 records in
524288+0 records out
# chmod 600 tmpswap
# mkswap tmpswap
Setting up swapspace version 1, size = 536866 kB
# swapon tmpswap
# cat /proc/swaps
Filename Type Size Used Priority
/dev/hda3 partition 1044216 263628 -1
/tmpswap file 524280 0 -2
# 删除交换区:
# swapoff tmpswap
# rm -f tmpswap
# cat /proc/swaps
Filename Type Size Used Priority
/dev/hda3 partition 1044216 263624 -1
cat > /tmp/sysctl.sh \< \< EOF
#!/bin/bash
function setSysCtl(){
echo “set sysctl variable: ” \$1,”to: ” \$2
ccnt=\`grep -v “\^#” /etc/sysctl.conf | grep “\$1” | wc -c\`
if [ \$ccnt != 0 ]
then
sed -i “s/[\^#]*\$1.*/\$1=\$2/” /etc/sysctl.conf
else
echo “\$1=\$2” > > /etc/sysctl.conf
fi
}
pagesize=\`getconf PAGE_SIZE\`
memtotal_kb=\`grep ‘MemTotal’ /proc/meminfo | awk ‘{print \$2 }’\`
memtotal=\$(( 1024 * \$memtotal_kb ))
shmmni=4096
#the total amount of memory pages that can be used system wide,in pages
shmall=\$(( \$memtotal * 3 / 5 / \$pagesize ))
if [ \$shmall -lt 2097152 ]
then
shmall=2097152
fi
#the maximum shared memory segment allowed by the kernel,in bytes
shmmax=\$(( \$shmall * \$pagesize ))
setSysCtl “kernel.shmmax” “\$shmmax”
setSysCtl “kernel.shmall” “\$shmall”
setSysCtl “kernel.shmmni” “\$shmmni”
echo “Please input the processes count:”
read process
SEMMNI=142
SEMMSL=\$(( \$process + 10 ))
if [ \$SEMMSL -lt 250 ]
then
SEMMSL=250
fi
SEMMNS=\$(( \$SEMMNI * \$SEMMSL ))
SEMOPM=\$SEMMSL
setSysCtl “kernel.sem” “\$SEMMSL \$SEMMNS \$SEMOPM \$SEMMNI”
setSysCtl “fs.aio-max-nr” “1048576”
setSysCtl “fs.file-max” “6815744”
setSysCtl “net.core.wmem_max” “1048576”
setSysCtl “net.core.wmem_default” “262144”
setSysCtl “net.core.rmem_max” “2097152”
setSysCtl “net.core.rmem_default” “262144”
setSysCtl “net.ipv4.tcp_rmem” “4096 262144 4194304”
setSysCtl “net.ipv4.tcp_wmem” “4096 262144 262144”
setSysCtl “net.ipv4.tcp_keepalive_time” “30”
setSysCtl “net.ipv4.tcp_keepalive_intvl” “60”
setSysCtl “net.ipv4.tcp_keepalive_probes” “9”
setSysCtl “net.ipv4.tcp_retries2” “3”
setSysCtl “net.ipv4.tcp_syn_retries” “2”
setSysCtl “net.ipv4.ip_local_port_range” “9000 65500”
setSysCtl “net.ipv4.conf.default.rp_filter” “2”
setSysCtl “kernel.randomize_va_space” “0”
setSysCtl “kernel.exec-shield” “0”
setSysCtl “vm.min_free_kbytes” “524288”
setSysCtl “fs.suid_dumpable” “1”
setSysCtl “kernel.core_uses_pid” “1”
setSysCtl “net.ipv4.icmp_echo_ignore_broadcasts” “0”
setSysCtl “vm.swappiness” “0”
setSysCtl “vm.dirty_background_ratio” “3”
setSysCtl “vm.dirty_ratio” “15”
setSysCtl “vm.dirty_expire_centisecs” “500”
setSysCtl “vm.dirty_writeback_centisecs” “100”
setSysCtl “vm.hugetlb_shm_group” “1000”
EOF
修改/etc/profile文件添加如下内容
cat > > /etc/profile \< \< EOF
if [ \$USER = “oracle” ]; then
ulimit -S -c unlimited > /dev/null 2 > &1
fi
EOF
修改/etc/pam.d/login 文件中添加或编辑下面一行内容(如果不存在此行):
cat > > /etc/pam.d/login \< \< EOF
session required pam_limits.so
EOF
如果是64为系统,则
cat > > /etc/pam.d/login \< \< EOF
session required /lib64/security/pam_limits.so
EOF
sed -i ‘s#=enforcing#=disabled#g’ /etc/selinux/config
将操作系统的安装镜像文件上传到服务器的/mnt目录下,修改镜像文件名称为linux.iso。在/mnt目录下创建文件夹linux,并挂载linux.iso至linux目录
mv *.iso linux.iso
mkdir /mnt/linux
mount -t iso9660 /mnt/linux.iso /mnt/linux -o loop
修改yum配置文件,进入如下目录/etc/yum.repos.d,在该目录创建文件夹bak,将所有的.repo文件移动到bak文件夹下。
cd /etc/yum.repos.d
mkdir bak
mv *.repo ./bak/
创建local.repo文件。
cd /etc/yum.repos.d
touch local.repo
cat > > /etc/yum.repos.d/local.repo \< \< EOF
[local]
name=local
baseurl=file:///mnt/linux
enable=1
gpgcheck=0
EOF
使用如下命令安装所需的软件包,glibc必须要2.5-24版本或以上
yum install autoconf -y
yum install binutils.x86_64 -y
yum install compat-db.x86_64 -y
yum install compat-gcc-34-c++ -y
yum install compat-gcc-34.x86_64 -y
yum install compat-libstdc++-296.i386 -y
yum install compat-libstdc++-33.i386 -y
yum install compat-libstdc++-33.x86_64 -y
yum install elfutils-libelf-devel.x86_64 -y
yum install elfutils-libelf.x86_64 -y
yum install gcc-c++.x86_64 -y
yum install gcc.x86_64 -y
yum install gdb -y
yum install gdbm -y
yum install glibc-common.x86_64 -y
yum install glibc-devel.i386 -y
yum install glibc-devel.x86_64 -y
yum install glibc-headers.x86_64 -y
yum install glibc.x86_64 -y
yum install glibc.i686 -y
yum install libaio-devel.x86_64 -y
yum install libaio.x86_64 -y
yum install libaio.i386 -y
yum install libgcc.x86_64 -y
yum install libgcc.i386 -y
yum install libgomp.x86_64 -y
yum install libstdc++.x86_64 -y
yum install libstdc++-devel.x86_64 -y
yum install libXp.x86_64 -y
yum install libXp.i386 -y
yum install libXtst.i386 -y
yum install make -y
yum install libgnome.x86_64 -y
yum install libgnomeui.x86_64 -y
yum install openmotif -y
yum install openssl.i686 -y
yum install openssh-clients -y
yum install openssh -y
yum install pdksh -y
yum install screen -y
yum install setarch -y
yum install sysstat.x86_64 -y
yum install unixODBC -y
yum install unixODBC-devel -y
yum install unixODBC.i386 -y
yum install unixODBC-devel.i386 -y
yum install unzip -y
yum install util-linux.x86_64 -y
yum install vim-enhanced -y
yum install xdpyinfo -y
yum install xorg-x11-server-Xorg -y
yum install xorg-x11-xinit -y
以下为图形界面,视情况进行安装
yum install vnc -y
yum install vnc-server -y
yum groupinstall “X Window System” -y
yum groupinstall “GNOME Desktop Environment” -y
service iptables stop
service ip6tables stop
service NetworkManager stop
service atd stop
service lvm2-monitor stop
service cups stop
service mdmonitor stop
service autofs stop
service cpuspeed stop
service kdump stop
service nfs stop
service nfslock stop
service netfs stop
service bluetooth stop
service iscsi stop
service iscsid stop
service libvirt-guests stop
service libvirtd stop
service rpcbind stop
service acpid stop
chkconfig anacron off
chkconfig apmd off
chkconfig atd off
chkconfig autofs off
chkconfig bluetooth off
chkconfig cpuspeed off
chkconfig cups-config-daemon off
chkconfig cups off
chkconfig gpm off
chkconfig haldaemon off
chkconfig iiim off
chkconfig ip6tables off
chkconfig iptables off
chkconfig iscsi off
chkconfig iscsid off
chkconfig isdn off
chkconfig kdump off
chkconfig libvirt-guests off
chkconfig libvirtd off
chkconfig lvm2-monitor off
chkconfig mdmonitor off
chkconfig netfs off
chkconfig NetworkManager off
chkconfig nfs off
chkconfig nfslock off
chkconfig pcmcia off
chkconfig portmap off
chkconfig readahead off
chkconfig readahead_early off
chkconfig rhnsd off
chkconfig rpcbind off
chkconfig rpcgssd off
chkconfig rpcidmapd off
chkconfig smartd off
chkconfig avahi-daemon off
sed -i ‘s#id:5:initdefault#id:3:initdefault#g’ /etc/inittab
Oracle9202以前,都是使用watchdog来检查系统是否挂起。从9202以后,oracle使用hangcheck-timer模块。hangcheck-timer模块被加载到内核中,能够定时检查系统是否挂起。
使用如下命令检查该模块是否存在:
find /lib/modules -name “hangcheck-timer.ko”
使用相应的参数加载该模块:
/sbin/insmod hangcheck-timer hangcheck_tick=1 hangcheck_margin=10
hangcheck_reboot=1
两个参数的含义:
hangcheck_tick:该参数定义了模块启动的间隔时段。其默认值为60秒。Oracle建议将其设置为1秒。
hangcheck_margin:该参数定义了多少时间以后系统没响应就认为是挂起。以秒为单位。其默认值为180秒。Oracle建议将其设置为10秒。
hangcheck_reboot:该参数定义hangcheck模块是否会重启操作系统,建议设置为1,即可以重启操作系统。
检查该模块是否被成功加载:
grep Hangcheck /var/log/messages
为了在linux重启以后,自动加载该模块,可以将加载模块的命令添加到/etc/modules.conf中
cat > > /etc/rc.local \< \< EOF
/sbin/modprobe hangcheck-timer hangcheck_tick=1 hangcheck_margin=10
hangcheck_reboot=1EOF
cat > > /etc/security/limits.conf \< \< EOF
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 65536
oracle hard nofile 65536
EOF
对于 Bourne、Bash 或 Korn shell,将以下行添加到 /etc/profile 文件:
cat > > /etc/profile \< \< EOF
if [ \$USER = “oracle” ]; then
if [ \$SHELL = “/bin/ksh” ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
EOF
对于 C shell(csh 或 tcsh),将以下行添加到 /etc/csh.login 文件:
if($USER==”oracle”) then
limit maxproc 16384
limit descriptors 65536
endif
cat > /home/oracle/.bash_profile \< \< EOF
# .bash_profile
# Get the aliases and functions
if [ -f \~/.bashrc ]; then
. \~/.bashrc
fi
alias ls=”ls -FA”
ORACLE_SID=ORCL1; export ORACLE_SID
ORACLE_UNQNAME=ORCL; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=\$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME
# do not use ORA_CRS_HOME,some error will happed!!!
CRS_HOME=\$ORACLE_BASE/product/10.2.0/crs_1; export CRS_HOME
ORACLE_PATH=/u01/app/common/oracle/sql; export ORACLE_PATH
ORACLE_TERM=xterm; export ORACLE_TERM
NLS_DATE_FORMAT=”YYYY-MM-DD HH24:MI:SS”; export NLS_DATE_FORMAT
TNS_ADMIN=\$ORACLE_HOME/network/admin; export TNS_ADMIN
PATH=\$ORACLE_HOME/bin:\$CRS_HOME/bin:\${PATH}
PATH=\${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
PATH=\${PATH}:/u01/app/common/oracle/bin
export PATH
export TEMP=/tmp
export TMPDIR=/tmp
umask 022
# User specific environment and startup programs
EOF
在Oracle RAC 软件的安装过程中,OUI 使用 SSH
运行命令并将文件复制到其他节点。在安装过程中,系统中的隐藏文件(例如 .bashrc 或
.cshrc)如果包含 stty 命令,则会导致生成文件错误和其他安装错误。
要避免该问题,必须在每个 Oracle 安装所有者的用户主目录中修改这些文件以取消所有
STDERR 输出,如下所示:
cat > > /home/oracle/.bash_profile \< \< EOF
if [ -t 0 ]; then
stty intr \^C
fi
EOF
FOR C SHELL
test -t 0
if ($status == 0) then
stty intr \^C
endif
如果主机和交换机支持jumbo frames,我们建议开启jumbo
frames,这样可以改善网络负载并降低cpu利用率。如果需要开启网卡的jumbo
frame,修改网卡的配置文件如/etc/sysconfig/network-scripts/ifcfg-eth0,增添如下配置参数
MTU=9000
在2.6内核下,REDHAT4\REHDAT5系统中,Eth1000网卡默认没有开启FLOW
CONTROL。当RAC环境下的网络负载较高时,容易造成INTERCONNECTS丢包。开启FLOW
CONTROL的方法如下。
修改/etc/modprobe.conf添加如下内容:
options e1000 FlowControl=1,1
配置IP地址,修改每个节点上的/etc/hosts文件,确保 /etc/hosts
文件的环回地址中不包含节点名。如果 RAC 节点名出现在环回地址中,您在 RAC
安装期间将收到以下错误消息:
ORA-00603: ORACLE server session terminated by fatal error
或者
ORA-29702: error occurred in Cluster Group Service operation
127.0.0.1 localhost.localdomain localhost
10.255.254.121 db01
10.255.254.122 db02
10.255.254.123 db01-vip
10.255.254.124 db02-vip
192.168.1.121 db01-pri
192.168.1.122 db02-pri
修改主机名:
hostname db01
sed -i ‘s#HOSTNAME=.*#HOSTNAME=db01#g’ /etc/sysconfig/network
echo “NOZEROCONF=YES” > > /etc/sysconfig/network
hostname db02
sed -i ‘s#HOSTNAME=.*#HOSTNAME=db03#g’ /etc/sysconfig/network
echo “NOZEROCONF=YES” > > /etc/sysconfig/network
使用如下语句配置SSH对等性,注意要逐行拷贝,不要一次性拷贝。配置完成后要进行测试。
su - oracle
/usr/bin/ssh-keygen -t dsa
cat \~/.ssh/id_dsa.pub > \~/.ssh/authorized_keys
ssh oracle\@db01 cat \~/.ssh/id_dsa.pub > > \~/.ssh/authorized_keys
chmod 644 \~/.ssh/authorized_keys
/usr/bin/ssh-keygen -t dsa
cat \~/.ssh/id_dsa.pub > \~/.ssh/authorized_keys
ssh oracle\@db02 cat \~/.ssh/id_dsa.pub > > \~/.ssh/authorized_keys
chmod 644 \~/.ssh/authorized_keys
要确保未启用 X11 forwarding, 如果看到类似这样的消息:“Warning:No xauth
data; using fake authentication data for X11
forwarding.”,这意味着您的授权密钥文件配置正确,但是,您的SSH 配置启用了 X11
forwarding。
确保 ForwardX11 属性设为 no。例如,将以下内容插入 \~/.ssh/config 文件:
Host *
ForwardX11 no
如果我们在配置SSH对等性的过程中输入了密码,则可以通过如下方式配置无密码登陆。
# exec /usr/bin/ssh-agent $SHELL
# ssh-add
Enter passphrase for /home/crs/.ssh/id_rsa
Identity added: /home/crs/.ssh/id_rsa (/home/crs/.ssh/id_rsa)
当需要使用DNS 服务器时,在/etc/resolv.conf添加DNS服务器的信息。
[root\@localhost \~]# cat /etc/resolv.conf
nameserver 114.114.114.114
options timeout:1
options attempts:2
安装ntp软件包,并配置服务自启动。
yum install ntp
chkconfig ntpd on
编辑首节点的ntp.conf文件,使其从外部获取系统时间.
vi /etc/ntp.conf
#New ntp server added by Robinson
server 1.cn.pool.ntp.org prefer # 添加首选的时钟服务器
#只允许192.168.7.*网段的客户机进行时间同步
restrict 192.168.7.0 mask 255.255.255.255 nomodify notrap
broadcastdelay 0.008
编辑其他节点的ntp.conf文件,使其从首节点获取系统时间.
vi /etc/ntp.conf
#New ntp server added by Robinson
server 10.201.5.201 prefer
broadcastdelay 0.008
编辑节点的/etc/sysconfig/ntpd文件,配置参数如下,在其中设置 -x
标志,这样可避免向后调整时间。
#The following item added by Robinson
#Set to ‘yes’ to sycn hw clock after successful ntpdate
SYNC_HWCLOCK=yes #此选项用于自动校准系统时钟与硬件时钟
OPTIONS=”-x -u ntp:ntp -p /var/run/ntpd.pid”
节点间必须具有至少一个相同ntp ip,否则PRVF-5416,但是我们可以忽略该错误。
在首节点配置rc.local脚本,使其在启动时使用ntpdate更新时间,通过ntpd获取时间信息,有时会有延时。
Grid的home目录不能在base目录下,oracle的home必须在base目录下,否则会报INS-32018错误。
mkdir -p /u01/backup
mkdir -p /u01/software
mkdir -p /u01/app/oraInventory
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oracle/admin
mkdir -p /u01/app/oracle/product/10.2.0/db_1
mkdir -p /u01/app/oracle/product/10.2.0/crs_1
chown -R oracle:oinstall /u01
chown -R oracle:oinstall /u01/app/oracle
chmod -R 755 /u01/
chmod -R 775 /u01/software/
默认情况下,在rhel4和rhel5中,时钟中断频率为1000HZ,在虚拟化环境下,该频率可能过高,因此,我们建议将其调低,设置方法如下:
在32位系统下,修改grub.conf,添加如下内核设置
divider=10 clocksource=acpi_ppm iommu=soft
在64位系统下,修改grub.conf,添加如下内核设置
divider=10 notsc iommu=soft
设置完成后,时间中断频率为1000/10,即100Hz。
Deadline磁盘调度算法比较适合于ORACLE\RAC
MYSQL等数据库类应用。配置Deadline为linux默认磁盘调度算法,需要修改grud.conf文件,添加内核参数如下:
title Red Hat Enterprise Linux Server (2.6.18-8.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/sda2 elevator=deadline
initrd /initrd-2.6.18-8.el5.img
在虚拟化环境下,配置noop为linux默认磁盘调度算法,需要修改grud.conf文件,添加内核参数如下:
title Red Hat Enterprise Linux Server (2.6.18-8.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/sda2 elevator=noop
initrd /initrd-2.6.18-8.el5.img
在集群中的各个节点上配置 iSCSI 启动器。而创建分区只应在 RAC
集群的一个节点上执行。 Linux 包括 Open-iSCSI iSCSI 软件启动器,该软件启动器位于
iscsi-initiator-utils RPM 中。
查看iscsi-initiator-utils是否安装。
rpm -qa –queryformat “%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n”| grep
iscsi-initiator-utils
如果没装安装,则在系统盘中,找到软件包并安装。
rpm -Uvh iscsi-initiator-utils-*
验证 iscsi-initiator-utils 程序包已经安装到Oracle RAC 节点之后,启动 iscsid
服务,并使其在系统引导时自动启动并自动登录到所需的 iSCSI 目标。
service iscsid start
chkconfig iscsid on
chkconfig iscsi on
使用 iscsiadm 命令行接口发现网络存储服务器上的所有可用目标。这应该在所有Oracle
RAC 节点上执行:
[root\@danode1 \~]#iscsiadm -m discovery -t sendtargets -p 192.168.1.199
172.16.1.241:3260,0 iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-crs
172.16.1.241:3260,0 iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-data
172.16.1.241:3260,0 iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-fra
手动登录到 iSCSI 目标,这需要在所有Oracle RAC 节点上运行。
[root\@danode1 \~]# iscsiadm -m node -T
iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-crs -p 172.16.1.241 -l[root\@danode1 \~]# iscsiadm -m node -T
iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-data -p 172.16.1.241 -l[root\@danode1 \~]# iscsiadm -m node -T
iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-fra -p 172.16.1.241 -l
配置自动登录,在所有 Oracle RAC 节点上执行以下命令:
[root\@danode1 \~]# iscsiadm -m node -T
iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-crs -p 172.16.1.241 –op update
-n node.startup -v automatic[root\@danode1 \~]# iscsiadm -m node -T
iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-data -p 172.16.1.241 –op update
-n node.startup -v automatic[root\@danode1 \~]# iscsiadm -m node -T
iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-fra -p 172.16.1.241 –op update
-n node.startup -v automatic
如果在ISCSI
SERVER上启用Failover的话,注意要在rac节点中修改几个参数。设置超时时间,编辑/etc/iscsi.conf文件,在添加DiscoveryAddress之前添加如下2行:
IdleTimeout=20
ConnFailTimeout=300
DiscoveryAddress=172.16.1.241
查看/etc/scsi_id.config文件,确保文件中至少包含如下内容,以便scsi_id命令按照预期结果执行。
[root\@localhost \~]# grep -v \^# /etc/scsi_id.config
vendor=”ATA”,options=-p 0x80
options= -g
通过yum功能安装一下软件包:
yum -y install device-mapper device-mapper-multipath
通过命令:lsmod | grep dm_multipath 检查是否正常安装成功。
使用如下命令加载驱动模块
modprobe dm-multipath
modprobe dm-round-robin
multipath –v2
通过vi命令创建一个Multipath的配置文件路径是/etc/multipath.conf
,在配置文件中添加multipath正常工作的最简配置如下(RHEL5下,通过multipath.conf可以直接配置多路径权限,需要重启操作系统):
devices {
device {
vendor “(LSI|NETAPP)”
product “INF-01-00”
path_grouping_policy group_by_prio
detect_prio yes
prio rdac
path_checker rdac
hardware_handler “1 rdac”
failback manual
features “2 pg_init_retries 50”
no_path_retry fail
retain_attached_hw_handler yes
}
}
blacklist {
devnode “\^(ram|raw|loop|fd|md|dm-|sr|sr|scd|st)[0-9]*”
devnode “\^hd[a-z]”
devnode “\^asm/*”
devnode “ofsctl”
}
multipaths {
multipath {
wwid 360080e500032a3680000051e58b64b6a
alias RACOCR1
gid 1000
uid 0
mode 644
}
}
/sbin/parted /dev/mapper/RACDATA1 mklabel gtk unit s mkpart primary “128 -1”
在RHEL5U4之前,linux不建议使用裸设备,因此需要我们手工在rc.local中配置裸设备和其权限。在RHEL5U4之后,LINUX可以支持使用RAWSERVICE服务配置裸设备。可以使用如下脚本配置裸设备:
cat > > /etc/sysconfig/rawdevices \< \< EOF
/dev/raw/raw1 /dev/mapper/RACVOTE1p1
/dev/raw/raw2 /dev/mapper/RACVOTE2p1
/dev/raw/raw3 /dev/mapper/RACVOTE3p1
/dev/raw/raw4 /dev/mapper/RACOCR1p1
/dev/raw/raw5 /dev/mapper/RACOCR2p1
EOF
chkconfig rawdevices on
service rawdevices restart
不同版本的操作系统,UDEV的配置方式会略有差异,本文建议使用RHEL5系列的操作系统,如果使用RHEL4系列操作系统,可以参照ORACLE
9I中关于udev的配置。
建议使用udev+asm来配置oracle rac的存储,首先确定安装了udev软件包:
rpm -qa | grep udev
udev-095-14.32.el5
使用scsi_id命令查看磁盘属性
[root\@db201 \~]# scsi_id -g -u /dev/sdb
360080e500032a3400000051b58b74174
如果已经使用了DM多路径软件,并且配置了alias,则不需要再使用udev配置磁盘永久名称,。
可以通过如下UDEV规则设置磁盘所属组和权限。设置完成后重启Multipathd服务,即可。
cat > /etc/udev/rules.d/30-oradmowner.rules \< \< EOF
SUBSYSTEM!=”block”, GOTO=”quickexit”
KERNEL!=”dm-*”, GOTO=”quickexit”
PROGRAM==”/sbin/dmsetup info -c –noheadings -o name -m %m -j %M”
RESULT==”*RACOCR*”, OWNER=”root”, GROUP=”oinstall”, MODE=”0640”
RESULT==”*RACVOTE*”, OWNER=”oracle”, GROUP=”oinstall”, MODE=”0660”
RESULT==”*RACDATA*”, OWNER=”oracle”, GROUP=”oinstall”, MODE=”0660”
RESULT==”*RACFRA*”, OWNER=”oracle”, GROUP=”oinstall”, MODE=”0660”
LABEL=”quickexit”
EOF
可以使用如下方式,设置裸设备的权限(RHEL5不再支持单独的权限配置文件/etc/udev/permissions.d/50-udev.permissions)。
cat > /etc/udev/rules.d/99-orarawowner.rules \< \< EOF
KERNEL==”raw1”, OWNER=”oracle” GROUP=”oinstall”, MODE=”0660”
KERNEL==”raw2”, OWNER=”oracle” GROUP=”oinstall”, MODE=”0660”
KERNEL==”raw3”, OWNER=”oracle” GROUP=”oinstall”, MODE=”0660”
KERNEL==”raw4”, OWNER=”root” GROUP=”oinstall”, MODE=”0640”
KERNEL==”raw5”, OWNER=”root” GROUP=”oinstall”, MODE=”0640”
EOF
在其他情况下(如单路径设备),如果需要udev配置磁盘永久名称,可以参考如下方式**(注意:记住将OCR的权限配置为root:oinstall
640,其他磁盘为oracle:oinstall 660)**:
cat > /etc/udev/rules.d/60-oradisk.rules \< \< EOF
ACTION==”add”, KERNEL==”sd*1”, BUS==”scsi”, PROGRAM==”/sbin/scsi_id -g -s
/block/$parent”, RESULT==”36589cfc00000044e4c79d3e197d154a4”
SYMLINK+=”ORADISK/RACVOTE1”, OWNER=”oracle”, GROUP=”dba”, MODE=”0660”EOF
如果通过前面的设置已经可以固定磁盘名称和磁盘权限,则可以不需要配置ASMLIB。
安装并配置ASMLib 2.0,根据自己的内核版本选择相应的软件包:
oracleasm–194.el5-2.0.5-1.el5.x86_64.rpm
oracleasmlib–1.el5.x86_64.rpm
oracleasm-support-2.1.3-1.el5.x86_64.rpm
配置ASM:
现在,您已安装了用于 Linux 的 ASMLib 程序包,接下来您需要配置并加载 ASM
内核模块。需要在两个 Oracle RAC 节点上作为 root 用户帐户执行该任务。
注:oracleasm 命令的默认路径为 /usr/sbin。以前版本中使用的 /etc/init.d
路径并未被弃用,但该路径下的 oracleasm 二进制文件现在一般用于内部命令
[root\@server01 sbin]# oracleasm configure –i
该脚本完成以下任务:
创建 /etc/sysconfig/oracleasm 配置文件
创建 /dev/oracleasm 挂载点
挂载 ASMLib 驱动程序文件系统
注:ASMLib
驱动程序文件系统并非常规的文件系统。它只用于自动存储管理库与自动存储管理驱动程序的通讯。
输入以下命令以加载 oracleasm 内核模块:
[root\@server01 sbin]# oracleasm init
Creating /dev/oracleasm mount point: /dev/oracleasm
Loading module “oracleasm”: oracleasm
Mounting ASMlib driver filesystem: /dev/oracleasm
创建 ASM 磁盘只需在 RAC 集群中的一个节点上以 root
用户帐户执行。该操作完成后,应在两个 Oracle RAC 节点上运行 oracleasm listdisks
命令以验证是否创建了所有 ASM 磁盘以及它们是否可用。
oracleasm createdisk CRSV1
/dev/disk/by-id/scsi0b800050cfa2000008af4d38e5e8-part1
注:这里是通过磁盘阵列的ID进行连接,这是因为这个ID是唯一不变的,如果通过硬盘名称如sdc1、sdd1时,如果系统因增加或减少硬件时,名称会发生变化。
在其他节点上扫描磁盘:
oracleasm scandisks
oracleasm listdisks
如果使用了MULTIPATHD多路径,则应该修改/etc/sysconfig/oracleasm如下(否则安装过程执行root.sh会报错):
Oracleasm_scanorder=”dm”
Oracleasm_scanexclude=”sd”
Oracle Universal Installer 是一个 GUI 接口,要求使用 X
服务器。在启用了用户等效性的终端会话中(您将从其中执行 Oracle
安装的节点),需要将环境变量 DISPLAY 设置为有效的 X 窗口显示:
[oracle\@racnode1 \~]$ DISPLAY= \< Any X-Windows Host > :0
[oracle\@racnode1 \~]$ export DISPLAY
将 DISPLAY 变量设置为有效的 X 窗口显示后,要确保未启用 X11 forwarding,
如果看到类似这样的消息:“Warning:No xauth data; using fake authentication data
for X11 forwarding.”,这意味着您的授权密钥文件配置正确,但是,您的 SSH
配置启用了 X11 forwarding。例如:
使用文本编辑器,编辑或创建 \~/.ssh/config 文件
确保 ForwardX11 属性设为 no。例如,将以下内容插入 \~/.ssh/config 文件:
Host *
ForwardX11 no
因为通过silent方式安装,速度较快,且不易出错,因此建议不要使用图形化安装。
cp /etc/redhat-release /etc/redhat-release.bak
echo “Red Hat Enterprise Linux Server release 4” > /etc/redhat-release
需要下载软件列表 | ||
---|---|---|
序号 | 名称 | MD5校验码 |
1 | 10201_clusterware_linux_x86_64.cpio.gz | bb6ba01c9f1f50612ba0fee0d245237c |
2 | 10201_database_linux_x86_64.cpio.gz | 8f092c0b21081444fd1938c51664b1f0 |
3 | p8202632_10205_Linux-x86-64.zip | dda60b6319d2242a90ed4a325dbc2d33 |
4 | p6880880_102000_Linux-x86-64.zip | ae36d7e1cf4205620ed5626e43af377a |
5 | p20299014_10205_Linux-x86-64.zip | 7f365b92baaf4e6851062b1164473d33 |
6 | cvupack_Linux_x86_64.zip | 8231fe7cefbda60b0b09245fe1df8db3 |
7 | p4679769_10201_Linux-x86-64.zip | 7e944daf8fae68e1052a47534fbe9919 |
在进行软件安装之前,通过MD5校验码验证软件文件是否正确。
在确认软件包正确无误后,使用如下命令解压缩软件包。建议将软件包下载到/u01/software目录下,并直接解压到该文件夹下。
mkdir -p /u01/software
cd /u01/software/
zcat 10201_clusterware_linux_x86_64.cpio.gz | cpio -idmv
zcat 10201_database_linux_x86_64.cpio.gz | cpio -idmv
unzip p8202632_10205_Linux-x86-64.zip
unzip p6880880_102000_Linux-x86-64.zip
unzip p20299014_10205_Linux-x86-64.zip
unzip cvupack_Linux_x86_64.zip -d ./cvupack
unzip p4679769_10201_Linux-x86-64.zip
chmod -R 755 p8202632_10205_Linux-x86-64
chmod -R 755 database
chmod -R 755 clusterware
在Oracle RAC
节点上安装操作系统程序包CVUQDISK。如果没有CVUQDISK,集群验证实用程序就无法发现共享磁盘,当运行(手动运行或在
Oracle Cluster Infrastructure
安装结束时自动运行)集群验证实用程序时,您会收到这样的错误消息:“Package
cvuqdisk not installed”。
CVUQDISK RPM 包含在 Oracle CRS 安装介质上的 rpm
目录中。以root用户在所有节点上执行如下命令安装CVUQDISK。
cd /u01/software/clusterware/rpm
CVUQDISK_GRP=oinstall; export CVUQDISK_GRP
rpm -ivh cvuqdisk-1.0.1-1.rpm
以ORACLE用户,使用 CVU 验证硬件和操作系统设置:
export LANG=en_US
cd /u01/software/clusterware
./cluvfy/runcluvfy.sh stage -post hwos -n db01,db02 –verbose
因为BUG4437727(在10.2.0.3中解决),我们建议使用最新版的cvupack,来执行验证工作。因此在进行安装验证之前,我们建议将PUBLIC
IP进行修改,以使验证过程可以顺利进行。
export LANG=en_US
cd /u01/software/cvupack/bin
./cluvfy stage -pre crsinst -n db01,db02 -r 10gR2 –verbose
查看 CVU
报告。CVU
执行的所有其他检查的结果报告应该为“passed”,之后才能继续进行 Oracle Cluster
的安装。
首先配置cluster.rsp文件,文件内容如下,将该文件保存为/tmp/cluster.rsp
cat > /tmp/cluster.rsp \< \< EOF
RESPONSEFILE_VERSION=2.2.1.0.0
UNIX_GROUP_NAME=”oinstall”
FROM_LOCATION=”../stage/products.xml”
ORACLE_HOME=”/u01/app/oracle/product/10.2.0/crs_1”
ORACLE_HOME_NAME=”OraClusterware10ghome1”
TOPLEVEL_COMPONENT={“oracle.crs”,”10.2.0.1.0”}
SHOW_SPLASH_SCREEN=false
SHOW_WELCOME_PAGE=false
SHOW_NODE_SELECTION_PAGE=false
SHOW_SUMMARY_PAGE=false
SHOW_INSTALL_PROGRESS_PAGE=true
SHOW_CONFIG_TOOL_PAGE=true
SHOW_XML_PREREQ_PAGE=false
SHOW_ROOTSH_CONFIRMATION=true
SHOW_END_SESSION_PAGE=true
SHOW_EXIT_CONFIRMATION=true
NEXT_SESSION=false
NEXT_SESSION_ON_FAIL=false
SHOW_DEINSTALL_CONFIRMATION=false
SHOW_DEINSTALL_PROGRESS=false
RESTART_SYSTEM=false
RESTART_REMOTE_SYSTEM=false
SHOW_END_OF_INSTALL_MSGS=true
COMPONENT_LANGUAGES={“en”,”zh_CN”}
s_clustername=”crs10g”
sl_tableList={“db01:db01-pri:db01-vip:N:Y”,”db02:db02-pri:db02-vip:N:Y”}
ret_PrivIntrList={“eth0:10.255.254.0:1”,”eth1:192.168.1.0:2”}
n_storageTypeOCR=1
s_ocrpartitionlocation=”/dev/raw/raw4”
s_ocrMirrorLocation=”/dev/raw/raw5”
n_storageTypeVDSK=1
s_votingdisklocation=”/dev/raw/raw1”
s_OcrVdskMirror1RetVal=”/dev/raw/raw2”
s_VdskMirror2RetVal=”/dev/raw/raw3”
EOF
调用如下命令进行安装CLUSTER
export LANG=en_US
cd /u01/software/clusterware
./runInstaller -silent -responseFile /tmp/cluster.rsp -ignoreSysPrereqs
安装的最后阶段,根据提示应该运行相应脚本,在运行这些脚本前,请按照如下步骤修复相关bug。
如果安装环境是10.2.0.4之前和RHEL5。在所有节点修改VIPCA和SRVCTL命令,
sed -i “s#LD_ASSUME_KERNEL#XX_ASSUME_KERNEL#g”
/u01/app/oracle/product/10.2.0/crs_1/bin/vipcased -i “s#LD_ASSUME_KERNEL#XX_ASSUME_KERNEL#g”
/u01/app/oracle/product/10.2.0/crs_1/bin/srvctl
因为BUG 4679769,在执行root.sh脚本之前,请打上补丁p4679769_10201_Linux-x86-64。
cd /u01/software
unzip /u01/software/p4679769_10201_Linux-x86-64.zip
cd /u01/app/oracle/product/10.2.0/crs_1/bin
cp clsfmt.bin clsfmt.bin.bak.`date +%F%T`
rm -rf ./clsfmt.bin
cp /u01/software/4679769/clsfmt.bin ./clsfmt.bin
chmod 755 ./clsfmt.bin
chown oracle:oinstall ./clsfmt.bin
安装系统提示,在各个节点使用root运行如下脚本:
/u01/app/oracle/product/10.2.0/crs_1/root.sh
当在最后一个节点执行root.sh脚本时,如果发现如下错误:
Error 0(Native: listNetInterfaces:[3])
[Error 0(Native: listNetInterfaces:[3])]
根据文档 414163.1,首先以ORACLE运行脚本
/u01/app/oracle/product/10.2.0/crs_1/cfgtoollogs/configToolAllCommands
然后以root用户执行如下内容
cd /u01/app/oracle/product/10.2.0/crs_1/bin
./vipca -silent -nodelist db01,db02 -nodevips db01/db01-vip,db02/db02-vip
最后再次执行如下脚本
/u01/app/oracle/product/10.2.0/crs_1/cfgtoollogs/configToolAllCommands
验证集群安装
crs_stat –t
安装前验证:
export LANG=en_US
cd /u01/software/cvupack/bin
./cluvfy stage -pre dbinst -fixup -n db01,db02 -osdba dba –verbose
首先配置dbinstall.rsp文件,文件内容如下,将该文件保存为/u01/software/database/dbsoft.rsp
cat > /u01/software/database/dbsoft.rsp \< \< EOF
RESPONSEFILE_VERSION=2.2.1.0.0
UNIX_GROUP_NAME=oinstall
FROM_LOCATION=”../stage/products.xml”
ORACLE_HOME=”/u01/app/oracle/product/10.2.0/db_1”
ORACLE_HOME_NAME=”OraDbHome1”
TOPLEVEL_COMPONENT={“oracle.server”,”10.2.0.1.0”}
SHOW_SPLASH_SCREEN=false
SHOW_WELCOME_PAGE=false
SHOW_NODE_SELECTION_PAGE=false
SHOW_SUMMARY_PAGE=false
SHOW_CUSTOM_TREE_PAGE=false
SHOW_INSTALL_PROGRESS_PAGE=true
SHOW_CONFIG_TOOL_PAGE=true
SHOW_XML_PREREQ_PAGE=false
SHOW_ROOTSH_CONFIRMATION=true
SHOW_END_SESSION_PAGE=true
SHOW_EXIT_CONFIRMATION=true
NEXT_SESSION=false
NEXT_SESSION_ON_FAIL=false
SHOW_DEINSTALL_CONFIRMATION=false
SHOW_DEINSTALL_PROGRESS=false
RESTART_SYSTEM=false
RESTART_REMOTE_SYSTEM=false
SHOW_END_OF_INSTALL_MSGS=true
CLUSTER_NODES={“db01”,”db02”}
COMPONENT_LANGUAGES={“en”,”zh_CN”}
INSTALL_TYPE=”Custom”
oracle.server:DEPENDENCY_LIST={“oracle.rdbms:10.2.0.1.0”,”oracle.options:10.2.0.1.0”,”oracle.network:10.2.0.1.0”,”oracle.sysman.console.db:10.2.0.1.0”,”oracle.rdbms.oci:10.2.0.1.0”,”oracle.precomp:10.2.0.1.0”,”oracle.xdk:10.2.0.1.0”,”oracle.sqlplus.isqlplus:10.2.0.1.0”,”oracle.odbc:10.2.0.1.0”}
oracle.options:DEPENDENCY_LIST={“oracle.network.aso:10.2.0.1.0”,”oracle.rdbms.partitioning:10.2.0.1.0”,”oracle.sdo:10.2.0.1.0”,”oracle.oraolap:10.2.0.1.0”}
oracle.network:DEPENDENCY_LIST={“oracle.network.listener:10.2.0.1.0”}
s_nameForDBAGrp=dba
s_nameForOPERGrp=oper
varSelect=3
EOF
调用如下命令进行安装DATABASE SOFTWARE
export LANG=en_US
cd /u01/software/database
./runInstaller -silent -responseFile /u01/software/database/dbsoft.rsp
-ignoreSysPrereqs
安装完成后,安装系统提示,在各个节点使用root运行如下脚本:
/u01/app/oracle/product/10.2.0/db_1/root.sh
如果安装环境是10.2.0.4之前和RHEL5。在所有节点修改SRVCTL命令:
sed -i “s#LD_ASSUME_KERNEL#XX_ASSUME_KERNEL#g”
/u01/app/oracle/product/10.2.0/db_1/bin/srvctl
oracle用户分别在第一个节点运行如下内容:
cd /u01/software/
unzip /u01/software/p8202632_10205_Linux-x86-64.zip
注意:下面的操作,仅仅需要在第一个节点执行。
首先生成响应文件,安装补丁时需要。
cat > /tmp/patchcrs.rsp \< \< EOF
RESPONSEFILE_VERSION=2.2.1.0.0
UNIX_GROUP_NAME=oinstall
FROM_LOCATION=”../stage/products.xml”
ORACLE_HOME=”/u01/app/oracle/product/10.2.0/crs_1”
ORACLE_HOME_NAME=”OraClusterware10ghome1”
TOPLEVEL_COMPONENT={“oracle.patchset.db”,”10.2.0.5.0”}
SHOW_SPLASH_SCREEN=false
SHOW_WELCOME_PAGE=false
SHOW_COMPONENT_LOCATIONS_PAGE=false
SHOW_CUSTOM_TREE_PAGE=false
SHOW_SUMMARY_PAGE=true
SHOW_INSTALL_PROGRESS_PAGE=true
SHOW_REQUIRED_CONFIG_TOOL_PAGE=true
SHOW_OPTIONAL_CONFIG_TOOL_PAGE=true
SHOW_CONFIG_TOOL_PAGE=true
SHOW_XML_PREREQ_PAGE=false
SHOW_RELEASE_NOTES=false
SHOW_END_OF_INSTALL_MSGS=true
SHOW_ROOTSH_CONFIRMATION=true
SHOW_END_SESSION_PAGE=false
SHOW_EXIT_CONFIRMATION=true
NEXT_SESSION=false
NEXT_SESSION_ON_FAIL=false
SHOW_DEINSTALL_CONFIRMATION=false
SHOW_DEINSTALL_PROGRESS=false
ACCEPT_LICENSE_AGREEMENT=true
RESTART_SYSTEM=false
CLUSTER_NODES={“db01”,”db02”}
COMPONENT_LANGUAGES={“en”,”zh_CN”}
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=false
COLLECTOR_UPGRADE=false
COLLECTOR_IGNORE_CONFIGURATION=true
EOF
在所有节点,用root用户关闭集群服务
crsctl stop crs
以ORACLE用户进行补丁升级
cd /u01/software/p8202632_10205_Linux-x86-64/Disk1/
export LANG=en_US
./runInstaller -silent -responseFile /tmp/patchcrs.rsp -ignoreSysPrereqs
在所有节点,用root执行如下脚本
/u01/app/oracle/product/10.2.0/crs_1/install/root102.sh
升级完成后建议重启操作系统。
注意:下面的操作,仅仅需要在第一个节点执行。
首先生成响应文件,安装补丁时需要。
cat > /tmp/patchdb.rsp \< \< EOF
RESPONSEFILE_VERSION=2.2.1.0.0
UNIX_GROUP_NAME=oinstall
FROM_LOCATION=”../stage/products.xml”
ORACLE_HOME=”/u01/app/oracle/product/10.2.0/db_1”
ORACLE_HOME_NAME=”OraDbHome1”
TOPLEVEL_COMPONENT={“oracle.patchset.db”,”10.2.0.5.0”}
SHOW_SPLASH_SCREEN=false
SHOW_WELCOME_PAGE=false
SHOW_COMPONENT_LOCATIONS_PAGE=false
SHOW_CUSTOM_TREE_PAGE=false
SHOW_SUMMARY_PAGE=true
SHOW_INSTALL_PROGRESS_PAGE=true
SHOW_REQUIRED_CONFIG_TOOL_PAGE=true
SHOW_OPTIONAL_CONFIG_TOOL_PAGE=true
SHOW_CONFIG_TOOL_PAGE=true
SHOW_XML_PREREQ_PAGE=false
SHOW_RELEASE_NOTES=false
SHOW_END_OF_INSTALL_MSGS=true
SHOW_ROOTSH_CONFIRMATION=true
SHOW_END_SESSION_PAGE=false
SHOW_EXIT_CONFIRMATION=true
NEXT_SESSION=false
NEXT_SESSION_ON_FAIL=false
SHOW_DEINSTALL_CONFIRMATION=false
SHOW_DEINSTALL_PROGRESS=false
ACCEPT_LICENSE_AGREEMENT=true
RESTART_SYSTEM=false
CLUSTER_NODES={“db01”,”db02”}
COMPONENT_LANGUAGES={“en”,”zh_CN”}
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=false
COLLECTOR_UPGRADE=false
COLLECTOR_IGNORE_CONFIGURATION=true
EOF
在所有节点,关闭相关服务
srvctl stop asm -n db01
srvctl stop asm -n db02
srvctl stop database -n db01
srvctl stop database -n db02
srvctl stop listener -n db01
srvctl stop listener -n db02
以ORACLE用户进行补丁升级
cd /u01/software/p8202632_10205_Linux-x86-64/Disk1/
export LANG=en_US
./runInstaller -silent -responseFile /tmp/patchdb.rsp -ignoreSysPrereqs
–force
在所有节点,用root执行如下脚本,升级完成后建议重启操作系统。
/u01/app/oracle/product/10.2.0/db_1/root.sh
以ORACLE用户解压补丁更新工具到指定目录
export LANG=en_US
cd /u01/software/
unzip -o p6880880_102000_Linux-x86-64.zip -d $ORACLE_HOME
查询是否存在冲突补丁:
cd $ORACLE_HOME/OPatch
./opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir
/u01/software/20299014
RAC环境下,查询是否可以滚动升级(结果:可以滚动升级)
cd $ORACLE_HOME/OPatch
./opatch query -all /u01/software/20299014 | grep rolling
关闭节点1的数据库实例和asm实例
srvctl stop instance -d ORCL -i ORCL1
srvctl stop asm -n db01 -o asm1
srvctl stop listener -n db01 -l LISTENER_DB01
应用补丁
cd /u01/software/20299014
$ORACLE_HOME/OPatch/opatch apply
根据提示关闭节点2的相关实例
srvctl stop instance -d ORCL -i ORCL2
srvctl stop asm -n db02 -o asm2
srvctl stop listener -n db02 -l LISTENER_DB02
升级程序会远程对节点2进行补丁升级。升级成功后开启所有节点
srvctl start listener -n db01 -l LISTENER_DB01
srvctl start asm -n db01 -o asm1
srvctl start instance -d ORCL -i ORCL1
srvctl start listener -n db02 -l LISTENER_DB02
srvctl start asm -n db02 -o asm2
srvctl start instance -d ORCL -i ORCL2
仅仅在节点1运行如下脚本
cd $ORACLE_HOME/rdbms/admin
sqlplus / as sysdba
SQL > \@catbundle.sql psu apply
SQL > – Execute the next statement only if this is the first PSU applied
for 10.2.0.5 or this is the first PSU applied since 10.2.0.5.3.SQL > \@utlrp.sql
执行如下脚本查看补丁情况
select * from dba_registry_history;
为了避免不必要的节点重启(如系统调度延迟等),ORACLE建议将diagwait配置为13。详细信息可以参见文档《559365.1》。
配置过程如下:注意,需要在所有节点关闭CRS服务,参数修改可以只在一个节点进行。
# \< CRS_HOME > /bin/crsctl stop crs
# \< CRS_HOME > /bin/oprocd stop
# ps -ef |egrep “crsd.bin|ocssd.bin|evmd.bin|oprocd”
# \< CRS_HOME > /bin/crsctl set css diagwait 13 -force
# \< CRS_HOME > /bin/crsctl start crs
# \< CRS_HOME > /bin/crsctl get css diagwait
在创建数据库之前,首选配置ASM实例,作为RAC集群,首先要将ASM实例注册到ocr。
su - oracle
srvctl add asm -n db01 -i +ASM1 -o /u01/app/oracle/product/10.2.0/db_1
srvctl add asm -n db02 -i +ASM2 -o /u01/app/oracle/product/10.2.0/db_1
cat > /tmp/asmca.rsp \< \< EOF
[GENERAL]
RESPONSEFILE_VERSION = “10.0.0”
OPERATION_TYPE = “configureASM”
[CONFIGUREASM]
NODELIST=”db01,db02”
DISKSTRING=”/dev/mapper/*”
ASM_SYS_PASSWORD=”1qaz2WSX”
EOF
调用如下命令
export LANG=en_US
dbca -silent -responseFile /tmp/asmca.rsp
CREATE DISKGROUP DATA1 EXTERNAL REDUNDANCY
disk
‘/dev/mapper/RACDATA1p1’ NAME DATA1P1;
CREATE DISKGROUP FRA1 EXTERNAL REDUNDANCY
disk
‘/dev/mapper/RACDATA2p1’ NAME DATA2P1;
alter diskgroup data1 mount;
alter diskgroup fra1 mount;
dbca是ORACLE提供的图形化数据库创建工具,使用该工具可以方便的完成数据库创建工作,由于脚本中不完全包括dbca工具中的动作,因此要求必须使用dbca来创建。
在使用DBCA的过程中,会自动创建ASM实例,但是我们还是建议先配置好ASM实例,再建库。
首选生成数据库定制化模板,模板内如如下:
cat >
/u01/app/oracle/product/10.2.0/db_1/assistants/dbca/templates/INST.dbt \< \<
EOF\< DatabaseTemplate name=”INST” description=”” version=”10.2.0.5.0” >
\< CommonAttributes >
\< option name=”ISEARCH” value=”false”/ >
\< option name=”OMS” value=”false”/ >
\< option name=”JSERVER” value=”false”/ >
\< option name=”SPATIAL” value=”false”/ >
\< option name=”ODM” value=”false” >
\< tablespace id=”SYSAUX”/ >
\< /option >
\< option name=”IMEDIA” value=”false”/ >
\< option name=”XDB_PROTOCOLS” value=”false” >
\< tablespace id=”SYSAUX”/ >
\< /option >
\< option name=”ORACLE_TEXT” value=”false” >
\< tablespace id=”SYSAUX”/ >
\< /option >
\< option name=”SAMPLE_SCHEMA” value=”false”/ >
\< option name=”CWMLITE” value=”false” >
\< tablespace id=”SYSAUX”/ >
\< /option >
\< option name=”EM_REPOSITORY” value=”false” >
\< tablespace id=”SYSAUX”/ >
\< /option >
\< option name=”HTMLDB” value=”false”/ >
\< /CommonAttributes >
\< Variables/ >
\< CustomScripts Execute=”false”/ >
\< InitParamAttributes >
\< InitParams >
\< initParam name=”pga_aggregate_target” value=”256” unit=”MB”/ >
\< initParam name=”log_archive_dest_1” value=“‘LOCATION=+DATA1/’”/ >
\< initParam name=”processes” value=”150”/ >
\< initParam name=”db_recovery_file_dest_size” value=”2048” unit=”MB”/ >
\< initParam name=”sga_target” value=”512” unit=”MB”/ >
\< initParam name=”compatible” value=”10.2.0.5.0”/ >
\< initParam name=”db_create_file_dest” value=”+DATA1”/ >
\< initParam name=”background_dump_dest”
value=”{ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/bdump”/ >\< initParam name=”job_queue_processes” value=”10”/ >
\< initParam name=”db_name” value=”“/ >
\< initParam name=”user_dump_dest”
value=”{ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/udump”/ >\< initParam name=”dispatchers” value=”(PROTOCOL=TCP) (SERVICE={SID}XDB)”/
>\< initParam name=”audit_file_dest”
value=”{ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/adump”/ >\< initParam name=”db_domain” value=”“/ >
\< initParam name=”open_cursors” value=”300”/ >
\< initParam name=”db_block_size” value=”8” unit=”KB”/ >
\< initParam name=”db_recovery_file_dest” value=”+FRA1”/ >
\< initParam name=”log_archive_format” value=”%t_%s_%r.dbf”/ >
\< initParam name=”core_dump_dest”
value=”{ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/cdump”/ >\< initParam name=”remote_login_passwordfile” value=”exclusive”/ >
\< initParam name=”undo_management” value=”AUTO”/ >
\< initParam name=”db_file_multiblock_read_count” value=”16”/ >
\< initParam name=”undo_tablespace” value=”UNDOTBS2”/ >
\< /InitParams >
\< MiscParams >
\< databaseType > MULTIPURPOSE \< /databaseType >
\< maxUserConn > 200 \< /maxUserConn >
\< percentageMemTOSGA > 40 \< /percentageMemTOSGA >
\< customSGA > true \< /customSGA >
\< characterSet > AL32UTF8 \< /characterSet >
\< nationalCharacterSet > AL16UTF16 \< /nationalCharacterSet >
\< archiveLogMode > true \< /archiveLogMode >
\< initParamFileName > {ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/pfile/init.ora
\< /initParamFileName >\< /MiscParams >
\< SPfile useSPFile=”true” > +DATA1/{DB_UNIQUE_NAME}/spfile{SID}.ora \<
/SPfile >\< /InitParamAttributes >
\< StorageAttributes >
\< ControlfileAttributes id=”Controlfile” >
\< maxDatafiles > 1024 \< /maxDatafiles >
\< maxLogfiles > 192 \< /maxLogfiles >
\< maxLogMembers > 3 \< /maxLogMembers >
\< maxLogHistory > 1 \< /maxLogHistory >
\< maxInstances > 32 \< /maxInstances >
\< image name=”\
” filepath=”+DATA1/{DB_UNIQUE_NAME}/”/
>\< image name=”\
” filepath=”+DRA1/{DB_UNIQUE_NAME}/”/
>\< /ControlfileAttributes >
\< DatafileAttributes id=”\
” > \< tablespace > SYSAUX \< /tablespace >
\< temporary > false \< /temporary >
\< online > true \< /online >
\< status > 0 \< /status >
\< size unit=”MB” > 120 \< /size >
\< reuse > false \< /reuse >
\< autoExtend > true \< /autoExtend >
\< increment unit=”KB” > 10240 \< /increment >
\< maxSize unit=”MB” > -1 \< /maxSize >
\< /DatafileAttributes >
\< DatafileAttributes id=”\
” > \< tablespace > SYSTEM \< /tablespace >
\< temporary > false \< /temporary >
\< online > true \< /online >
\< status > 0 \< /status >
\< size unit=”MB” > 300 \< /size >
\< reuse > false \< /reuse >
\< autoExtend > true \< /autoExtend >
\< increment unit=”KB” > 10240 \< /increment >
\< maxSize unit=”MB” > -1 \< /maxSize >
\< /DatafileAttributes >
\< DatafileAttributes id=”\
” > \< tablespace > TEMP \< /tablespace >
\< temporary > false \< /temporary >
\< online > true \< /online >
\< status > 0 \< /status >
\< size unit=”MB” > 20 \< /size >
\< reuse > false \< /reuse >
\< autoExtend > true \< /autoExtend >
\< increment unit=”KB” > 640 \< /increment >
\< maxSize unit=”MB” > -1 \< /maxSize >
\< /DatafileAttributes >
\< DatafileAttributes id=”\
” > \< tablespace > UNDOTBS1 \< /tablespace >
\< temporary > false \< /temporary >
\< online > true \< /online >
\< status > 0 \< /status >
\< size unit=”MB” > 200 \< /size >
\< reuse > false \< /reuse >
\< autoExtend > true \< /autoExtend >
\< increment unit=”KB” > 5120 \< /increment >
\< maxSize unit=”MB” > -1 \< /maxSize >
\< /DatafileAttributes >
\< DatafileAttributes id=”\
” > \< tablespace > UNDOTBS2 \< /tablespace >
\< temporary > false \< /temporary >
\< online > true \< /online >
\< status > 0 \< /status >
\< size unit=”MB” > 200 \< /size >
\< reuse > false \< /reuse >
\< autoExtend > true \< /autoExtend >
\< increment unit=”KB” > 5120 \< /increment >
\< maxSize unit=”MB” > -1 \< /maxSize >
\< /DatafileAttributes >
\< DatafileAttributes id=”\
” > \< tablespace > USERS \< /tablespace >
\< temporary > false \< /temporary >
\< online > true \< /online >
\< status > 0 \< /status >
\< size unit=”MB” > 5 \< /size >
\< reuse > false \< /reuse >
\< autoExtend > true \< /autoExtend >
\< increment unit=”KB” > 1280 \< /increment >
\< maxSize unit=”MB” > -1 \< /maxSize >
\< /DatafileAttributes >
\< TablespaceAttributes id=”SYSAUX” >
\< online > true \< /online >
\< offlineMode > 1 \< /offlineMode >
\< readOnly > false \< /readOnly >
\< temporary > false \< /temporary >
\< defaultTemp > false \< /defaultTemp >
\< undo > false \< /undo >
\< local > true \< /local >
\< blockSize > -1 \< /blockSize >
\< allocation > 1 \< /allocation >
\< uniAllocSize unit=”KB” > -1 \< /uniAllocSize >
\< initSize unit=”KB” > 64 \< /initSize >
\< increment unit=”KB” > 64 \< /increment >
\< incrementPercent > 50 \< /incrementPercent >
\< minExtends > 1 \< /minExtends >
\< maxExtends > 4096 \< /maxExtends >
\< minExtendsSize unit=”KB” > 64 \< /minExtendsSize >
\< logging > true \< /logging >
\< recoverable > false \< /recoverable >
\< maxFreeSpace > 0 \< /maxFreeSpace >
\< autoSegmentMgmt > true \< /autoSegmentMgmt >
\< bigfile > false \< /bigfile >
\< datafilesList >
\< TablespaceDatafileAttributes id=”\
” > \< id > -1 \< /id >
\< /TablespaceDatafileAttributes >
\< /datafilesList >
\< /TablespaceAttributes >
\< TablespaceAttributes id=”SYSTEM” >
\< online > true \< /online >
\< offlineMode > 1 \< /offlineMode >
\< readOnly > false \< /readOnly >
\< temporary > false \< /temporary >
\< defaultTemp > false \< /defaultTemp >
\< undo > false \< /undo >
\< local > true \< /local >
\< blockSize > -1 \< /blockSize >
\< allocation > 3 \< /allocation >
\< uniAllocSize unit=”KB” > -1 \< /uniAllocSize >
\< initSize unit=”KB” > 64 \< /initSize >
\< increment unit=”KB” > 64 \< /increment >
\< incrementPercent > 50 \< /incrementPercent >
\< minExtends > 1 \< /minExtends >
\< maxExtends > -1 \< /maxExtends >
\< minExtendsSize unit=”KB” > 64 \< /minExtendsSize >
\< logging > true \< /logging >
\< recoverable > false \< /recoverable >
\< maxFreeSpace > 0 \< /maxFreeSpace >
\< autoSegmentMgmt > true \< /autoSegmentMgmt >
\< bigfile > false \< /bigfile >
\< datafilesList >
\< TablespaceDatafileAttributes id=”\
” > \< id > -1 \< /id >
\< /TablespaceDatafileAttributes >
\< /datafilesList >
\< /TablespaceAttributes >
\< TablespaceAttributes id=”TEMP” >
\< online > true \< /online >
\< offlineMode > 1 \< /offlineMode >
\< readOnly > false \< /readOnly >
\< temporary > true \< /temporary >
\< defaultTemp > true \< /defaultTemp >
\< undo > false \< /undo >
\< local > true \< /local >
\< blockSize > -1 \< /blockSize >
\< allocation > 1 \< /allocation >
\< uniAllocSize unit=”KB” > -1 \< /uniAllocSize >
\< initSize unit=”KB” > 64 \< /initSize >
\< increment unit=”KB” > 64 \< /increment >
\< incrementPercent > 0 \< /incrementPercent >
\< minExtends > 1 \< /minExtends >
\< maxExtends > 0 \< /maxExtends >
\< minExtendsSize unit=”KB” > 64 \< /minExtendsSize >
\< logging > true \< /logging >
\< recoverable > false \< /recoverable >
\< maxFreeSpace > 0 \< /maxFreeSpace >
\< autoSegmentMgmt > true \< /autoSegmentMgmt >
\< bigfile > false \< /bigfile >
\< datafilesList >
\< TablespaceDatafileAttributes id=”\
” > \< id > -1 \< /id >
\< /TablespaceDatafileAttributes >
\< /datafilesList >
\< /TablespaceAttributes >
\< TablespaceAttributes id=”UNDOTBS1” >
\< online > true \< /online >
\< offlineMode > 1 \< /offlineMode >
\< readOnly > false \< /readOnly >
\< temporary > false \< /temporary >
\< defaultTemp > false \< /defaultTemp >
\< undo > true \< /undo >
\< local > true \< /local >
\< blockSize > -1 \< /blockSize >
\< allocation > 1 \< /allocation >
\< uniAllocSize unit=”KB” > -1 \< /uniAllocSize >
\< initSize unit=”KB” > 512 \< /initSize >
\< increment unit=”KB” > 512 \< /increment >
\< incrementPercent > 50 \< /incrementPercent >
\< minExtends > 8 \< /minExtends >
\< maxExtends > 4096 \< /maxExtends >
\< minExtendsSize unit=”KB” > 512 \< /minExtendsSize >
\< logging > true \< /logging >
\< recoverable > false \< /recoverable >
\< maxFreeSpace > 0 \< /maxFreeSpace >
\< autoSegmentMgmt > true \< /autoSegmentMgmt >
\< bigfile > false \< /bigfile >
\< datafilesList >
\< TablespaceDatafileAttributes id=”\
” > \< id > -1 \< /id >
\< /TablespaceDatafileAttributes >
\< /datafilesList >
\< /TablespaceAttributes >
\< TablespaceAttributes id=”UNDOTBS2” >
\< online > true \< /online >
\< offlineMode > 1 \< /offlineMode >
\< readOnly > false \< /readOnly >
\< temporary > false \< /temporary >
\< defaultTemp > false \< /defaultTemp >
\< undo > true \< /undo >
\< local > true \< /local >
\< blockSize > -1 \< /blockSize >
\< allocation > 1 \< /allocation >
\< uniAllocSize unit=”KB” > -1 \< /uniAllocSize >
\< initSize unit=”KB” > 512 \< /initSize >
\< increment unit=”KB” > 512 \< /increment >
\< incrementPercent > 50 \< /incrementPercent >
\< minExtends > 8 \< /minExtends >
\< maxExtends > 4096 \< /maxExtends >
\< minExtendsSize unit=”KB” > 512 \< /minExtendsSize >
\< logging > true \< /logging >
\< recoverable > false \< /recoverable >
\< maxFreeSpace > 0 \< /maxFreeSpace >
\< autoSegmentMgmt > true \< /autoSegmentMgmt >
\< bigfile > false \< /bigfile >
\< datafilesList >
\< TablespaceDatafileAttributes id=”\
” > \< id > -1 \< /id >
\< /TablespaceDatafileAttributes >
\< /datafilesList >
\< /TablespaceAttributes >
\< TablespaceAttributes id=”USERS” >
\< online > true \< /online >
\< offlineMode > 1 \< /offlineMode >
\< readOnly > false \< /readOnly >
\< temporary > false \< /temporary >
\< defaultTemp > false \< /defaultTemp >
\< undo > false \< /undo >
\< local > true \< /local >
\< blockSize > -1 \< /blockSize >
\< allocation > 1 \< /allocation >
\< uniAllocSize unit=”KB” > -1 \< /uniAllocSize >
\< initSize unit=”KB” > 128 \< /initSize >
\< increment unit=”KB” > 128 \< /increment >
\< incrementPercent > 0 \< /incrementPercent >
\< minExtends > 1 \< /minExtends >
\< maxExtends > 4096 \< /maxExtends >
\< minExtendsSize unit=”KB” > 128 \< /minExtendsSize >
\< logging > true \< /logging >
\< recoverable > false \< /recoverable >
\< maxFreeSpace > 0 \< /maxFreeSpace >
\< autoSegmentMgmt > true \< /autoSegmentMgmt >
\< bigfile > false \< /bigfile >
\< datafilesList >
\< TablespaceDatafileAttributes id=”\
” > \< id > -1 \< /id >
\< /TablespaceDatafileAttributes >
\< /datafilesList >
\< /TablespaceAttributes >
\< RedoLogGroupAttributes id=”1” >
\< reuse > false \< /reuse >
\< fileSize unit=”KB” > 51200 \< /fileSize >
\< Thread > 1 \< /Thread >
\< member ordinal=”0” memberName=”redo_01_01_01”
filepath=”+DATA1/{DB_UNIQUE_NAME}/”/ >\< /RedoLogGroupAttributes >
\< RedoLogGroupAttributes id=”2” >
\< reuse > false \< /reuse >
\< fileSize unit=”KB” > 51200 \< /fileSize >
\< Thread > 1 \< /Thread >
\< member ordinal=”0” memberName=”redo_01_02_01”
filepath=”+DATA1/{DB_UNIQUE_NAME}/”/ >\< /RedoLogGroupAttributes >
\< RedoLogGroupAttributes id=”3” >
\< reuse > false \< /reuse >
\< fileSize unit=”KB” > 51200 \< /fileSize >
\< Thread > 2 \< /Thread >
\< member ordinal=”0” memberName=”redo_02_03_01”
filepath=”+DATA1/{DB_UNIQUE_NAME}/”/ >\< /RedoLogGroupAttributes >
\< RedoLogGroupAttributes id=”4” >
\< reuse > false \< /reuse >
\< fileSize unit=”KB” > 51200 \< /fileSize >
\< Thread > 2 \< /Thread >
\< member ordinal=”0” memberName=”redo_02_04_01”
filepath=”+DATA1/{DB_UNIQUE_NAME}/”/ >\< /RedoLogGroupAttributes >
\< RedoLogGroupAttributes id=”5” >
\< reuse > false \< /reuse >
\< fileSize unit=”KB” > 51200 \< /fileSize >
\< Thread > 1 \< /Thread >
\< member ordinal=”0” memberName=”redo_01_05_01”
filepath=”+DATA1/{DB_UNIQUE_NAME}/”/ >\< /RedoLogGroupAttributes >
\< RedoLogGroupAttributes id=”6” >
\< reuse > false \< /reuse >
\< fileSize unit=”KB” > 51200 \< /fileSize >
\< Thread > 2 \< /Thread >
\< member ordinal=”0” memberName=”redo_02_06_01”
filepath=”+DATA1/{DB_UNIQUE_NAME}/”/ >\< /RedoLogGroupAttributes >
\< /StorageAttributes >
\< /DatabaseTemplate >
EOF
首先配置dbca.rsp文件,文件内容如下,将该文件保存为/tmp/dbca.rsp
cat > /tmp/dbca.rsp \< \< EOF
[GENERAL]
RESPONSEFILE_VERSION = “10.0.0”
OPERATION_TYPE = “createDatabase”
[CREATEDATABASE]
GDBNAME = “ORCL”
SID = “ORCL”
NODELIST=”db01,db02”
TEMPLATENAME = “INST.dbt”
SYSPASSWORD = “1qaz2WSX”
SYSTEMPASSWORD = “1qaz2WSX”
EMCONFIGURATION = “NONE”
SYSMANPASSWORD = “1qaz2WSX”
DBSNMPPASSWORD = “1qaz2WSX”
STORAGETYPE=ASM
DISKGROUPNAME=DATA1
RECOVERYGROUPNAME=FRA1
CHARACTERSET = “AL32UTF8”
EOF
调用如下命令进行安装DATABASE SOFTWARE
export LANG=en_US
dbca -silent -responseFile /tmp/dbca.rsp
注意:如下操作仅在一个节点进行即可。
cd $ORACLE_HOME/rdbms/admin
sqlplus /nolog
SQL > CONNECT / AS SYSDBA
SQL > STARTUP
SQL > select * from dba_registry_history;
SQL > \@catbundle.sql psu apply
SQL > select * from dba_registry_history;
SQL > \@utlrp.sql
SQL > QUIT
检查如下文件,查看是否有报错信息
$ORACLE_BASE/cfgtoollogs/catbundle/catbundle_PSU_ \< database SID >
APPLY \< TIMESTAMP > .log$ORACLE_BASE/cfgtoollogs/catbundle/catbundle_PSU_ \< database SID >
GENERATE \< TIMESTAMP > .log