11g搭建RAC集群

来源:互联网 发布:2017双十一消费数据 编辑:程序博客网 时间:2024/05/14 11:12

1 系统要求
1.1 硬件要求
硬件配置

硬件 要求
物理内存 >16GB
交换区 Swap空间大于或等于物理内存
/tmp大小 大于1000MB
Oracle安装目录文件系统空间/home/db/oracle 20GB本地硬盘
grid安装目录文件系统空间/home/db/grid 60GB本地硬盘
网络 五块网卡,public网卡2个进行双网卡绑定,private网卡两个,主备绑定;带管网卡一个;public IP、private IP、VIP每节点一个,SCAN IP每套RAC一个;public IP、VIP、SCAN IP必须在同一网段,与private IP不得在同一网段;
磁盘 共享磁盘空间,空间磁盘的字符设备名称各节点必须一致。初始至少分配5块磁盘:3块用于SYS磁盘组,1块用于生产数据DATA磁盘组,1块用于ARCH归档日志磁盘组。
时间服务器 按中心要求配置连接时间服务器
其他 必须安装openSSH

2 操作系统配置要求

2.1 系统软件包需求
查系统软件包
rpm -q –queryformat “%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n” \
binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel glibc \
ksh libgcc libstdc++ libstdc++-devel libaio libaio-devel libgcc \
make sysstat unixODBC unixODBC-devel

这里写图片描述

修复:
yum install –y
2.2 配置yum 安装缺失的软件包
如果缺少某些软件包,可以使用yum来安装, 首先加载Linux安装介质到系统的挂载点,然后进行以下操作安装软件包,

  1. 编辑yum软件包数据信息
    vi /etc/yum.repos.d/local-server.repo
    [rhel]
    name=MyRPM
    baseurl=file:///mnt/cdrom/
    enabled=1
    gpgcheck=1
    gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release

2.移除/etc/yum.repos.d下其他的repo文件,重新生成yum的缓存

yum clean all
yum makecache

3.安装缺失的软件包

yum install libaio-devel*

2.3 安装cvuqdisk Package for Linux
Cvuqdisk软件包在[Oracle软件包解压路径]/grid/rpm路径下可以找到,
[root@rhat01 rpm]# rpm -ivh ./cvuqdisk-1.0.9-1.rpm
Preparing… ########################################### [100%]
Using default group oinstall to install package
1:cvuqdisk ########################################### [100%]

2.4 内存参数设置
2.4.1修改limits.conf 文件
vi /etc/security/limits.conf
在文件最下面加入以下内容:
add for oracle user add for grid user

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768

grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 65536
grid hard nofile 65536
grid soft stack 10240
grid hard stack 32768

2.4.2添加pam_limits.so模块
在文件最下面加入以下内容:
vi /etc/pam.d/login
ORACLE SETTING
session required pam_limits.so

2.4.3 修改/etc/sysctl.conf文件
检查sysctl.conf文件,在文件最下面增加以下内容:
注意,如果系统sysctl.conf文件中已经包含了下列参数的设置,建议在文件中删除原行再增加新行,或者直接在该行上修改参数值。 在sysctl.conf中对同一参数的多次设置,最终的设置值取决于最后一次设置的参数值大小,但是多次设置参数值容易造成Oracle 安装软件在前置检查时只读到其中一次的设置值,从而使Oracle的检测值与实际存在偏差。同时此处也可不设置,而使用安装过程中生成的runfixup脚本来设置这些值。

vm.swappiness = 0
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
kernel.sem = 250 32000 100 128

fs.file-max needs to be set to at least 6815744 for the Oracle RAC Installation.

fs.file-max = 64252772
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

set to the appropriate private eth devices: bond1

net.ipv4.conf.bond1.rp_filter = 2
vm.nr_hugepages=126980
vm.hugetlb_shm_group=300
kernel.shmmax = 608551649280
kernel.shmall = 148572180
kernel.shmmni = 4096
vm.min_free_kbytes=1048576

这里写图片描述

这里写图片描述

使修改的内核参数生效
sysctl -p

2.5 增加用户
groupadd -g 300 dba
groupadd -g 301 oinstall
groupadd -g 302 oper
groupadd -g 303 asmadmin
groupadd -g 304 asmdba
groupadd -g 305 asmoper
useradd -u 300 -g oinstall -G dba,oper,asmdba,asmoper -d /oracle/home oracle
useradd -u 301 -g oinstall -G asmadmin,asmdba,asmoper,dba -d /grid/home grid

用户创建完成后,必须重新登录修改密码(可与原密码相同),否则稍后配置SSH时无法通过。
passwd oracle
passwd grid

2.6 增加数据库安装文件系统
使用root用户执行以下命令,

chown -R grid:oinstall /grid
chown -R oracle:oinstall /oracle
chmod -R 755 /grid
chmod -R 755 /oracle

2.7 设置Grid/Oracle用户的环境变量
GRID
使用如下命令查看当前shell 类型,

echoSHELL
根据用户使用的默认shell类型,在shell环境变量设置参数文件,
Bash shell ===〉. ./.bash_profile
Bourne or Korn shell ===〉. ./.profile
C shell ===〉~/.login

将以下段落加入到用户home目录下的环境变量参数文件中的最下面,其中ORACLE_SID部分根据实际需求进行调整,例如节点一:ORACLE_SID=+ASM1,节点二:ORACLE_SID=+ASM2。

umask 022
export ORACLE_BASE=/grid/app/grid
export ORACLE_SID=+ASM1
export ORACLE_HOME=/grid/app/11.2.0/grid
export LD_LIBRARY_PATH=ORACLEHOME/lib:ORACLE_HOME/lib32
export LIBPATH=LDLIBRARYPATHexportPATH=ORACLE_HOME/bin:ORACLEHOME/OPatch:/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/java5/bin:PATH
export PS1=’LOGNAME@hostname:PWD”$ ’
if [ -t 0 ]; then
stty intr ^C
fi

umask 022
export ORACLE_BASE=/grid/app/grid
export ORACLE_SID=+ASM2
export ORACLE_HOME=/grid/app/11.2.0/grid
export LD_LIBRARY_PATH=ORACLEHOME/lib:ORACLE_HOME/lib32
export LIBPATH=LDLIBRARYPATHexportPATH=ORACLE_HOME/bin:ORACLEHOME/OPatch:/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/java5/bin:PATH
export PS1=’LOGNAME@hostname:PWD”$ ’
if [ -t 0 ]; then
stty intr ^C
fi

2.8 设置Oracle用户的环境变量
将以下段落加入到用户home目录下的环境变量参数文件中的最下面,其中ORACLE_SID部分根据实际需求进行调整,例如节点一:ORACLE_SID=testdb1,节点二:ORACLE_SID=testdb2。

umask 022
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=ORACLEBASE/product/11.2.0/dbexportORACLESID=prdmdmn1exportPATH=ORACLE_HOME/bin:ORACLEHOME/OPatch:/usr/bin:/usr/sbin:/usr/ucb:/usr/java5/bin:PATH
export LD_LIBRARY_PATH=ORACLEHOME/lib:ORACLE_HOME/lib32
export LIBPATH=LDLIBRARYPATHexportPS1=LOGNAME@'`hostname`:'PWD
alias bdump=’cd /oracle/app/oracle/diag/rdbms/prdmdmn/prdmdnn1/trace’
if [ -t 0 ]; then
stty intr ^C
fi

umask 022
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=ORACLEBASE/product/11.2.0/dbexportORACLESID=prdmdmn2exportPATH=ORACLE_HOME/bin:ORACLEHOME/OPatch:/usr/bin:/usr/sbin:/usr/ucb:/usr/java5/bin:PATH
export LD_LIBRARY_PATH=ORACLEHOME/lib:ORACLE_HOME/lib32
export LIBPATH=LDLIBRARYPATHexportPS1=LOGNAME@'`hostname`:'PWD
alias bdump=’cd /oracle/app/oracle/diag/rdbms/prdmdmn/prdmdnn2/trace’
if [ -t 0 ]; then
stty intr ^C
fi

2.9 修改/etc/hosts
注意/etc/hosts中必须包含内容如下:
127.0.0.1 localhost localhost .localdomain

RAC机器需要在/etc/hosts中配置各节点IP的别名,命名规则如下:
1) Public IP:别名直接使用主机名,即uname –a中返回的机器名;
2) Private IP:别名为机器标识名-pri{n},机器标识名为不包括前三个字符的主机名(前三个字符用于标识主机位置、用途),如主机名为bj1ocrdb01,机器标识名为ocrdb01。n表示私有IP序号,1或2。11g要求配置两个私有IP因此需要有序号标识。;
3) Virtual IP:别名为机器标识名-vip。
4) SCAN IP:别名为数据库实例名-scan。

在/etc/hosts中还必须按增加相应注释,标识出网卡地址用途,示例如下:

127.0.0.1 localhost localhost.lenovo.com
public bond0
10.96.80.185 blmdmn1p blmdmn1p.lenovo.com
10.96.80.189 blmdmn2p blmdmn2p.lenovo.com
private bond1
10.96.81.9 blmdmn1p-priv blmdmn1p-priv.lenovo.com
10.96.81.10 blmdmn2p-priv blmdmn2p-priv.lenovo.com
virtual
10.96.80.186 blmdmn1p-vip blmdmn1p-vip.lenovo.com
10.96.80.187 blmdmn2p-vip blmdmn1p-vip.lenovo.com
scan
10.96.80.188 prdmdmn-scan prdmdmn-scan.lenovo.com

2.10 两个节点上的主机名配置
确认两个节点上的主机名,
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=rhat02.testccb.com

2.11 关闭额外的服务
chkconfig sendmail off
chkconfig bluetooth off
chkconfig yum-updatesd off
chkconfig ip6tables off
chkconfig isdn off
chkconfig irda off

2.12 关闭SELINUX
在所有节点上编辑SELINUX软件配置文件,注释掉其中两行,同时新增一行配置内容,

vi /etc/selinux/config
SELINUX=enforcing #注释掉
SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加

编辑结束后退出,可以选择重启机器使配置生效,也可以选择使用root用户运行以下命令立即关闭SELINUX,

setenforce 0

2.13 关闭iptables(防火墙)
使用root用户运行以下命令关闭iptables,
service iptables stop

运行以下命令设置下次启动系统不启动iptables,
chkconfig iptables off
或者
chkconfig –level 35 iptables off

2.14 配置udev
1.磁盘划分采用多路径软件
查看盘分配情况
multipath –ll
修改聚合后的盘别名
vim /etc/multipath.conf,修改完成后,重启multipathd service
service multipathd restart
multipath –ll 确认alias是否修改
再将/etc/multipath.conf 拷贝节点2,重启multipathd service
配置文件参见multipath_conf.txt文件。
其中blacklist为本地盘,defaults为存储属性,multipath为盘别名
sys1-10:为OCR,VOTEING DISK磁盘组,(1-5使用,6-10为备用),聚合盘容量1GB
datadg1-40:为DATADG磁盘组使用盘,聚合盘容量400GB
archdg1-4:为ARCHDG磁盘组使用盘,聚合盘容量400GB

2.创建/etc/udev/rules.d/99-oracle-asmdevices.rules文件
文件参见99-oracle-asmdevices_rules.txt
执行start_udev
检查:ls -lh /dev/dm-*
brw-rw—-. 1 grid asmadmin 253, 14 Aug 1 16:02 /dev/dm-14
brw-rw—-. 1 grid asmadmin 253, 15 Aug 1 16:02 /dev/dm-15
。。

multipath -F
multipath -v2

2.15 配置hugepage
1./etc/sysctl.conf添加如下内容
vm.nr_hugepages=126980 (Sga / Hugepagesize,Hugepagesize=cat /proc/meminfo,此处SGA=248G,hugepages=2048k,算出nr_hugepages=126980)
vm.hugetlb_shm_group=300 (insert oracle group ID here)
2./boot/grub/grub.conf (/etc/grub.conf)
kernel /vmlinuz- ro root=/dev/vg01/lv01 elevator=deadline hugepages=126980 rhgb quiet transparent_hugepage=never
3./etc/security/limits.conf
oracle soft memlock 260055040( Huge Pages*Hugepagesize)
oracle hard memlock 260055040
4.共享内存 (执行后删除文件中较小的值)
mem=(freeb|awk/Mem/print$2)page=(getconf PAGE_SIZE)
all=(exprmem * 75 / 100 / page+1)max=(expr allpage)
echo “kernel.shmmax = max>>/etc/sysctl.confechokernel.shmall=all” >> /etc/sysctl.conf
echo “kernel.shmmni = 4096” >> /etc/sysctl.conf
echo “vm.min_free_kbytes=1048576” >>/etc/sysctl.conf
sysctl -p
5.Semaphores
echo “kernel.sem = 250 32000 100 128” >> /etc/sysctl.conf
6.关闭相关服务
service tuned stop
chkconfig tuned off
service ktune stop
chkconfig ktune off
8.Enabling the deadline io scheduler at runtime via the /sys filesystem (RHEL 5, 6, 7)

echodeadline>/sys/block/sda/queue/scheduler cat /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq

2.16 配置SSH信任关系

开始配置前,在每个节点分别用重新打开的root用户运行(一个节点配置成功后,就不能再执行该删除操作。重新打开的root用户可以避免环境变量干扰):
rm -rf /grid/home/.ssh
rm -rf /oracle/home/.ssh

从grid用户su – oracle验证oracle用户密码未过期;从oracle用户su –grid验证grid用户密码未过期;
进入grid安装介质目录,在一个节点上执行:
sshsetup/sshUserSetup.sh -user grid -hosts “blmdmn1p blmdmn2p” -advanced -noPromptPassphrase
sshsetup/sshUserSetup.sh -user oracle -hosts “blmdmn1p blmdmn2p” -advanced no-PromptPassphrase
node1 node2分别为两个节点hostname
根据提示要求输入时直接回车,然后输入4次指定用户密码,屏幕返回:SSH verification complete.表明配置成功。如果多次提示输入密码,可能是用户新建后未修改密码,根据屏幕提示处理。
验证办法:
所有节点配置成功后,分别在各节点grid和oracle用户下执行
ssh blmdmn2p date
ssh blmdmn1p date
ssh blmdmn2p-priv date
ssh blmdmn1p-priv date
能不需要密码返回时间即表示已经配置成功。如果两节点的时间不一致,说明时间服务器配置有问题,联系操作系统管理员解决

3 安装前检查
3.1 文件系统检查
确认磁盘大小满足安装需求
3.2 runcluvfy.sh
Grid的安装盘目录执行如下指令:
./runcluvfy.sh stage -pre crsinst -n ‘rac1,rac2’ -r 11gR2 -verbose >/tmp/runcluvfy.log

注:其他的检查选项:
用oracle用户在有安装盘的node中检查网络连接配置是否正确
./runcluvfy.sh comp nodecon rac1, rac2 –verbose > /tmp/runcluvfy_network.log

用oracle用户在安装盘的node中检查硬件和操作系统是否合适:
./runcluvfy.sh stage -post hwos -n rac1, rac2 –verbose > /tmp/runcluvfy_hw.log

用oracle用户在有安装盘的node中检查有效的共享存储:
./runcluvfy.sh comp ssa -n rac1, rac2 -s /dev/raw/raw1,/ /dev/raw/raw2,./ /dev/raw/raw3,/ /dev/raw/raw4,/ /dev/raw/raw5, /dev/raw/raw6,/ /dev/raw/raw7,/ /dev/raw/raw8

oracle用户检查是否满足安装clusterware:
./runcluvfy.sh stage -pre crsinst -n testaix1, testaix2

以oracle用户检查安装oracle software的条件是否具备:
./runcluvfy.sh stage -pre dbinst -n testaix1, testaix2 -verbose

oracle用户查看当前安装情况是否满足RAC db的创建
./runcluvfy.sh stage -pre dbcfg -n testaix1, testaix2 -d $ORACLE_HOME –verbose

4 安装Oracle Grid Infrastrue
将安装介质上传至两边主机,安装时仅需要前3个zip文件,PSU补丁及其他推荐的零星补丁。
sugridcd /tmp/oracle/11g/grid
$./runInstaller
4.1 选择安装选项
这里写图片描述
4.2 选择安装类型
这里写图片描述
这里写图片描述
4.3 选择产品语言
这里写图片描述
添加简体中文后,进入下一步。
选择简体中文的目的是为今后可能使用Grid Control避免字符显示不一致的问题。
4.4 指定集群SCAN配置
这里写图片描述
Clustername命名:数据库名-cls(不超过15个字符)
SCAN命名:数据库名-scan(不超过15个字符)
4.5 集群节点信息
这里写图片描述
点击Add,输入另侧节点名和VIP名,测试SSH连通性后,下一步。此处注意命名要求中VIP名称中的“-“是中划线,不是下划线”_”。
4.6 集群网卡用途
这里写图片描述

4.7 指定OCR和VotingDisk存储介质
这里写图片描述
4.8 创建ASM磁盘组

这里写图片描述
这里写图片描述

4.9 指定ASM密码
这里写图片描述
这里写图片描述
选择”Yes”
这里写图片描述
4.10 指定ASM实例操作系统组
这里写图片描述
4.11 指定指定安装路径
这里写图片描述
4.12 指定oraInventory路径
这里写图片描述
4.13 OUI安装前检查
这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述

4.14 OUI安装备注
这里写图片描述
确定所有信息无误后,点”Finish”,OUI将开始安装。
4.15 OUI安装过程
这里写图片描述
该过程约需1小时。
结束后不必立即打PSU补丁,待安装完数据库软件后一起打。

4.16 提示运行脚本
这里写图片描述
注:rootinstRoot.sh可以两个节点同时运行,但root.sh必须等一个节点选行完后才能在另一个节点运行,而且首先应该在安装节点先运行。

4.17 安装检查并安装完成
这里写图片描述
INS-20802错误可忽略
这里写图片描述
YES
这里写图片描述

5 安装Oracel RDBMS 11gR2 On Clusters
suoraclecd /tmp/oracle/11g/database
$./runInstaller
按照提示在两个节点运行rootpre.sh
5.1 配置安全更新
这里写图片描述
取消选择”I wish to receive security updates via My Oracle Support”,点”Next”,
出现警告时选”Yes”。
这里写图片描述
5.2 配置下载软件更新
这里写图片描述
选择”Skip software updates”,点下一步,选择“仅安装数据库”,点下一步。
这里写图片描述
5.3 选择安装选项
这里写图片描述
选择 Oracle Real Application clusters database installation,并select all nodes;
5.4 选择产品语言支持
这里写图片描述
添加简体中文后,点下一步
5.5 选择数据库版本组件
这里写图片描述

5.6 选择产品安装目录

这里写图片描述
5.7 操作系统组
这里写图片描述
5.8 执行安装前检查
这里写图片描述
5.9 安装前检查结果
这里写图片描述
5.10 安装备注信息
这里写图片描述
确认所有的信息都符合预期,点Install开始安装
5.11 安装过程
这里写图片描述
5.12 运行root.sh
这里写图片描述
根据提示,以root身份运行root.sh。

5.13 安装完成
这里写图片描述

6 打补丁
6.1 更新使用最新的Opatch版本
分别在两个节点都运行:
Grid用户
cp -R ORACLEHOME/OPatch/tmp/OPatchgridunzipp6880880112000Linuxx8664.zipdORACLE_HOME
ORACLEHOME/OPatch/opatchversionOraclecpRORACLE_HOME/OPatch /tmp/OPatch_oracle
unzip p6880880_112000_Linux-x86-64.zip -d ORACLEHOMEORACLE_HOME/OPatch/opatch version
6.2 PSU补丁
1.集群PSU,在两个节点分别顺序执行(注意不能并行):
首先生成响应文件,安装补丁时需要。
用grid用户运行
$ORACLE_HOME/OPatch/ocm/bin/emocmrsp -output /tmp/psu.rsp
root用户,保留grid环境变量(. /home/grid/.bash_profile),执行:
opatch auto /tmp/soft_oracle/21523375 -ocmrf /tmp/psu.rsp
/home/software
2.数据库PSU(在一个节点执行即可):
当psu不包含dbpsu时,在oracle用户环境变量下使用如下命令
opatch lsinventory|grep -i applied
没有返回记录,证实未打上数据库PSU补丁,需要运行如下命令:
cd /oratools/sw/21352635
opatch prereq CheckConflictAgainstOHWithDetail -ph ./
opatch apply

7 配置ASM
Logis as grid
$asmca
7.1 查看现有磁盘组信息
Grid用户asmca,点create可以创建新的磁盘组
7.2 创建磁盘组信息

这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

7.3 修改SYS磁盘组默认参数
使用grid用户,sqlplus “/ as sysasm”
alter diskgroup OCRVOTE set attribute ‘compatible.rdbms’=’11.2’;
alter diskgroup OCRVOTE set attribute ‘compatible.asm’=’11.2’;
alter diskgroup DATA set attribute ‘compatible.rdbms’=’11.2’;
alter diskgroup DATA set attribute ‘compatible.asm’=’11.2’;
alter diskgroup ARCH set attribute ‘compatible.rdbms’=’11.2’;
alter diskgroup ARCH set attribute ‘compatible.asm’=’11.2’;
7.4 ASM参数调整
用下列方法调整ASM实例memory_target参数为460m,processes为1000。注意:调整这两个参数需重启ASM实例生效,使用grid执行。
SQL> show parameter target
NAME TYPE VALUE


memory_max_target big integer 272M
memory_target big integer 272M
pga_aggregate_target big integer 0
sga_target big integer 0
alter system set memory_target =1088M scope=spfile sid=’*’;
alter system set sga_target =0 scope=spfile sid=’*’;
alter system set processes = 1000 scope=spfile sid=’*’;
select value from v$parameter where name=’max_dump_file_size’;
alter system set MAX_DUMP_FILE_SIZE=’100M’ sid=’*’ scope=both;

7.5 备份ASM的metadata
使用grid用户
asmcmd
md_backup /grid/app/grid/dgbackup20160122

/home/u01/app/grid/ asmbackup_metadata20171115

8 DBCA创建数据库
Login as oracle
$dbca
选择创建RAC数据库,选择Custom Database。
8.1 Database Identification
这里写图片描述
这里写图片描述
输入全局数据库名和实例前缀;
选择所有节点;
这里写图片描述
8.2 Management Options
这里写图片描述
取消Configure Enterprise manager的选中。
8.3 Database Credentials
这里写图片描述
出现警告点YES
这里写图片描述
8.4 Database file Locations
这里写图片描述
8.5 Recover Configuration
这里写图片描述
这里写图片描述
取消设置快速闪回区,启用归档。
在归档设置中,设置ARCHIVE 目的地为+ARCH,注意不要指定其他目录,Oracle会自动安排目录,否则会报错。
8.6 Database Content
建议:根据需要选择组件,无用组件不安装,降低日后升级所需时间。
这里写图片描述
8.7 Initialization Parameters

主要设置为块大小、字符集,根据实际需要设置,其他参数后期可调整。

这里写图片描述
这里写图片描述
这里写图片描述
8.8 Creation Options

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

8.9 Password Management
这里写图片描述

8.10 参数设置参考
参数名称 建议值 备注
DB_CACHE_SIZE 根据应用确定。初始设置:
OLTP可用物理内存的30%;
OLAP可用物理内存的20%。
应根据压力测试结果调整
SHARED_POOL_SIZE 根据应用确定。初始设置:可用物理内存的10%,同时512m-2G。(SGA较大内存系统中oracle会计算并提示最小值) 应根据压力测试结果调整
LARGE_POOL_SIZE OLTP系统为256M,OLAP系统为512M 应根据压力测试结果调整
SGA_MAX_SIZE 初始设置:
DB_CACHE_SIZE +SHARED_POOL_SIZE +LARGE_POOL_SIZE+200M(SGA较大系统中该值设置由于粒度变化而增大) 应根据压力测试结果调整
SGA_TARGET 设置为0
DB_BLOCK_SIZE 8k、16k、32k;根据业务要求设定。
Spfile +DATA/{DB_NAME}/spfile{DB_NAME}.ora
PGA_AGGREGATE_TARGE 根据应用确定。初始设置:
OLTP=可用物理内存 * 16%
OLAP=可用物理内存 * 40% 应根据压力测试结果调整
PROCESSES >=1000
(每个process需要额外消耗10M左右内存)
OPEN_CURSORS >=300
SESSION_CACHED_CURSOR 200
MAX_DUMP_FILE_SIZE
‘100M’ 必须为字符,不得为数字
PARALLEL_EXECUTION_MESSAGE_SIZE OLTP系统为16384,OLAP系统为32768
PARALLEL_MAX_SERVER 物理CPU*2
FAST_START_MTTR_TARGET 150
INSTANCE_GROUPS(RAC) node_01,node_both
node_02,node_both 仅RAC需要设置
PARALLEL_INSTANCE_GROUP(RAC) INSTANCE_GROUPS设置为node_01,node_both则PARALLEL INSTANCE_GROUP设置为node_01;
INSTANCE_GROUPS设置为node_02,node_both则PARALLEL INSTANCE_GROUP设置为node_02。 仅RAC需要设置
与DRM有关的隐藏参数(RAC) _gc_policy_time=0 仅RAC需要设置
REMOTE_LISTENER 设置为空 仅RAC需要设置
PARALLEL_FORCE_LOCAL 设置为true 仅RAC需要设置
_GC_DEFER_TIME 设置为3 仅RAC需要设置
EVENT “28401 TRACE NAME CONTEXT FOREVER, LEVEL 1”
_HIGHTHRESHOLD_UNDORETENTION 240000
_HIGH_PRIORITY_PROCESSES “LGWR|LMS*|VKTM”
Resource_limit true
Db_block_checking medium
Db_block_checksum full
LOG_CHECKPOINT_INTERVAL 150
BACKUP_TAPE_IO_SLAVES true
CELL_OFFLOAD_PROCESSING false
ARCHIVE_LAG_TARGET 1200
RESULT_CACHE_MAX_SIZE 0
DEFERRED_SEGMENT_CREATION false
_diag_hm_rc_enabled false
_optim_peek_user_binds false
_DATAFILE_WRITE_ERRORS_CRASH_INSTANCE false
_OPTIMIZER_USE_FEEDBACK false
_optimizer_distinct_agg_transform false
_enable_row_shipping false

9 附加修改内容
9.1 Sqlplus连接设置
为了显示当前连接的用户名、实例名,降低风险,要求分别在两个节点以Oracle用户、grid用户编辑$ORACLE_HOME/sqlplus/admin/glogin.sql,在文件末尾,添加如下行:
set linesize 132 pagesize 50
set sqlprompt “_user’@’_connect_identifier> ”
define_editor=vi
9.2 AWR快照保存时间及间隔修改
快照保存时间从1周增加为90天,快照间隔从1小时增加为半小时:
exec dbms_workload_repository.modify_snapshot_settings(interval=>30,retention=>90*24*60);
确认办法:
SQL> select * from dba_hist_wr_control ;

  DBID SNAP_INTERVAL        RETENTION            TOPNSQL

776098800 +00000 00:30:00.0 +00040 00:00:00.0 DEFAULT

9.3 初始统计信息收集
实际运行中发现如果不收集固定对象统计信息会影响patrol监控SQL的执行效率,在用户对象创建前运行:
exec dbms_stats.GATHER_DATABASE_STATS(no_invalidate=>false);
exec dbms_stats.GATHER_FIXED_OBJECTS_STATS(no_invalidate=>false);
exec dbms_stats.GATHER_SYSTEM_STATS (gathering_mode=>’NOWORKLOAD’);
9.4 OCM自动化配置工具安装(11.2.0.4应该不用了-待观察)
该工具有助于出现问题时为Oracle后台工程师全面提交系统信息,11.2.0.3版本自动定时运行时会报错,需要手工安装,两个节点分别执行:
export ORACLE_CONFIG_HOME=ORACLEHOMEORACLE_HOME/ccr/bin/setupCCR -d
$ORACLE_HOME/ccr/admin/scripts/installCCRSQL.sh collectconfig -s
9.5 默认profile设置
ALTER PROFILE DEFAULT limit
FAILED_LOGIN_ATTEMPTS UNLIMITED
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_VERIFY_FUNCTION verify_function;

9.6 最优化配置参考
可以参考设置以下配置:
BEGIN
dbms_auto_task_admin.disable(
client_name => ‘sql tuning advisor’,
operation => NULL,
window_name => NULL);
END;
/

BEGIN
dbms_auto_task_admin.disable(
client_name => ‘auto space advisor’,
operation => NULL,
window_name => NULL);
END;
/

alter system set ARCHIVE_LAG_TARGET=900 sid=’*’ scope=both;
alter system set EVENT=”28401 TRACE NAME CONTEXT FOREVER, LEVEL 1” scope=spfile sid=’*’;
alter system set parallel_force_local=true scope=spfile sid=’*’;
alter system set “_gc_defer_time”=3 scope=spfile sid=’*’;
alter system set “_highthreshold_undoretention”=240000 scope=both sid=’*’;
alter system set “_HIGH_PRIORITY_PROCESSES”=”LGWR|LMS*|VKTM” scope=spfile sid=’*’;
alter system set “_OPTIMIZER_USE_FEEDBACK”=FALSE scope=spfile sid=’*’;

10 其他设置
10.1 审计
10.1.1开启审计功能
启用数据库审计功能,修改参数audit_trail=db。对有sysdba角色用户进行审计,需要设置AUDIT_SYS_OPERATIONS=true:
su - oracle
sqlplus / as sysdba
alter system set audit_trail= db, extended scope=spfile;
alter system set AUDIT_SYS_OPERATIONS=true scope=spfile;
重启数据库
su - oracle
sqlplus / as sysdba
shutdown immediate;
startup;

10.1.2制定审计内容
对于sys用户的审计信息存放在audit_file_dest指定的目录下,其他用户信息存放在表sys.aud$中。
审计所有连接
su - oracle
sqlplus / as sysdba
audit connect;
审计修改对象的DDL信息
su - oracle
sqlplus / as sysdba
audit connect;
audit table;
audit index;
audit procedure;
audit trigger;
audit system grant;
audit user;
audit role;
audit grant any role;

从试图sys.dba_stmt_audit_opts中查看审计策略。从DBA_AUDIT_TRAIL中查看审计的信息。

10.1.3表audcreatetablespaceaudittbsdatafile+DATADGsize10Gautoextendoff;altertablesys.aud move tablespace audittbs;
alter table sys.audmovelob(sqlbind)storeas(tablespaceaudittbs);altertablesys.aud move lob(SQLTEXT) store as( tablespace audittbs);
–alter index sys.I_AUD1 rebuild tablespace audittbs;

10.1.4 sysdba 远程连接管理
参数REMOTE_LOGIN_PASSWORDFILE默认值是exclusive,这时候数据库可以使用密码文件连接到数据库,即用户可以使用sysdba角色远程连到Oracle数据库。REMOTE_LOGIN_PASSWORDFILE=none时候,不能使用Oracle的密码文件,用户不能使用sysdba不能通过listener远程连接到数据库:
alter system set REMOTE_LOGIN_PASSWORDFILE=none scope=spfile;

10.2 安全
10.2.1密码复杂度
创建密码复杂度函数verify_function,要求:
用户名与密码不能一致
密码长度大于8位
应至少包含一个数字,一个字母,一个特殊字符
至少有3个字符与上一次密码不同
密码错误尝试次数为5次
密码生命周期为90天
密码变更宽限期为15天

CREATE OR REPLACE FUNCTION verify_function
(username varchar2,
password varchar2,
old_password varchar2)
RETURN boolean IS
n boolean;
m integer;
differ integer;
isdigit boolean;
ischar boolean;
ispunct boolean;
digitarray varchar2(20);
punctarray varchar2(25);
chararray varchar2(52);

BEGIN
digitarray:= ‘0123456789’;
chararray:= ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’;
punctarray:=’!”#$%&()“*+,-/:;<=>?_’;

– Check if the password is same as the username
IF NLS_LOWER(password) = NLS_LOWER(username) THEN
raise_application_error(-20001, ‘Password same as or similar to user’);
END IF;

– Check for the minimum length of the password
IF length(password) < 4 THEN
raise_application_error(-20002, ‘Password length less than 4’);
END IF;
– Check if the password is too simple. A dictionary of words may be
– maintained and a check may be made so as not to allow the words
– that are too simple for the password.
IF NLS_LOWER(password) IN (‘welcome’, ‘database’, ‘account’, ‘user’, ‘password’, ‘oracle’, ‘computer’, ‘abcd’) THEN
raise_application_error(-20002, ‘Password too simple’);
END IF;

– Check if the password contains at least one letter, one digit and one
– punctuation mark.
– 1. Check for the digit
isdigit:=FALSE;
m := length(password);
FOR i IN 1..10 LOOP
FOR j IN 1..m LOOP
IF substr(password,j,1) = substr(digitarray,i,1) THEN
isdigit:=TRUE;
GOTO findchar;
END IF;
END LOOP;
END LOOP;
IF isdigit = FALSE THEN
raise_application_error(-20003, ‘Password should contain at least one digit, one character and one punctuation’);
END IF;
– 2. Check for the character
<>
ischar:=FALSE;
FOR i IN 1..length(chararray) LOOP
FOR j IN 1..m LOOP
IF substr(password,j,1) = substr(chararray,i,1) THEN
ischar:=TRUE;
GOTO findpunct;
END IF;
END LOOP;
END LOOP;
IF ischar = FALSE THEN
raise_application_error(-20003, ‘Password should contain at least one \
digit, one character and one punctuation’);
END IF;
– 3. Check for the punctuation
<>
ispunct:=FALSE;
FOR i IN 1..length(punctarray) LOOP
FOR j IN 1..m LOOP
IF substr(password,j,1) = substr(punctarray,i,1) THEN
ispunct:=TRUE;
GOTO endsearch;
END IF;
END LOOP;
END LOOP;
IF ispunct = FALSE THEN
raise_application_error(-20003, ‘Password should contain at least one \
digit, one character and one punctuation’);
END IF;

<>
– Check if the password differs from the previous password by at least
– 3 letters
IF old_password IS NOT NULL THEN
differ := length(old_password) - length(password);

 IF abs(differ) < 3 THEN   IF length(password) < length(old_password) THEN     m := length(password);   ELSE     m := length(old_password);   END IF;   differ := abs(differ);   FOR i IN 1..m LOOP     IF substr(password,i,1) != substr(old_password,i,1) THEN       differ := differ + 1;     END IF;   END LOOP;   IF differ < 3 THEN     raise_application_error(-20004, 'Password should differ by at \     least 3 characters');   END IF; END IF;

END IF;
– Everything is fine; return TRUE ;
RETURN(TRUE);
END;
/

10.2.2创建应用profile
创建应用profile(app_profile),所有应用ID均采用此策略。
CREATE PROFILE APP_PROFILE
LIMIT CPU_PER_SESSION DEFAULT CPU_PER_CALL DEFAULT
CONNECT_TIME DEFAULT IDLE_TIME DEFAULT SESSIONS_PER_USER
DEFAULT LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL DEFAULT PRIVATE_SGA DEFAULT
COMPOSITE_LIMIT DEFAULT FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LOCK_TIME DEFAULT PASSWORD_GRACE_TIME 15
PASSWORD_LIFE_TIME UNLIMITED PASSWORD_REUSE_MAX 5
PASSWORD_REUSE_TIME DEFAULT PASSWORD_VERIFY_FUNCTION
VERIFY_FUNCTION;

10.2.3 清理默认用户的默认密码
alter user APEX_040000 identified by system2009;
alter user APPOQSSYS identified by system2009;
alter user CTXSYS identified by system2009;
alter user DBSNMP identified by system2009;
alter user DIP identified by system2009;
alter user EXFSYS identified by system2009;
alter user MDDATA identified by system2009;
alter user MDSYS identified by system2009;
alter user LBACSYS identified by system2009;
alter user OLAPSYS identified by system2009;
alter user ORACLE_OCM identified by system2009;
alter user ORDDATA identified by system2009;
alter user ORDSYS identified by system2009;
alter user OUTLN identified by system2009;
alter user OWBSYS_AUDIT identified by system2009;
alter user OWBSYS identified by system2009;
alter user SI_INFORMTN_SCHEMA identified by system2009;
alter user SPATIAL_CSW_ADMIN_USR identified by system2009;
alter user WK_TEST identified by system2009;
alter user WKPROXY identified by system2009;
alter user WKSYS identified by system2009;
alter user WMSYS identified by system2009;
alter user XDB identified by system2009;
10.3 统计信息
10.3.1系统自动收集
查看统计信息收集方式
Select window_name,window_next_time,optimizer_stats ,aa.WINDOW_ACTIVE,aa.
SEGMENT_ADVISOR,aa.AUTOTASK_STATUS,
aa.OPTIMIZER_STATS
from dba_autotask_window_clients aa
order by window_next_time ;
关闭系统自动收集-(暂不实行除非业务要求)
BEGIN
DBMS_AUTO_TASK_ADMIN.DISABLE(
client_name => ‘auto optimizer stats collection’,
operation => NULL,
window_name => NULL);
END;
/
启动系统自动收集-参考
BEGIN
DBMS_AUTO_TASK_ADMIN.ENABLE(
client_name => ‘auto optimizer stats collection’,
operation => NULL,
window_name => NULL);
END;
/
10.3.2手动收集
执行包函数收集
exec sys.dbms_stats.gather_schema_stats(ownname=>’schema’,options=>’gather stale’,estimate_percent => 10,method_opt => ‘FOR ALL INDEXED COLUMNS’,degree => 4,cascade => TRUE);
脚本收集
$ORACLE_HOME/bin/sqlplus -S / as sysdba <