安装Linux 11g 到 Redhat 5.5
- 登陆root
# su root
- 设置语言环境
#export LANG=en_US.UTF-8
- 为Oracle创建DBA组和用户
创建安装配置
cat >> /etc/oraInst.loc <<EOF
> inventory_loc=oracle/oracle/oraInventory
> inst_group=oinstall
> EOF
创建组:groupadd oradba
创建组:groupadd oinstall
创建用户:useradd -g oradba oracle
确定oracle所在的组:
usermod -g oinstall -G oradba oracle
- 设定本地xhost访问权限
xhost + 127.0.0.1
- 编辑文件 /etc/sysctl.conf,修改以下项目,如果没有可以自己添加。
kernel.shmall = 4194304 # 可以使用的共享内存的总量。我这里是64位
kernel.shmmax = 2147483648 # 最大共享内存段大小。
kernel.shmmni = 4096 # 整个系统共享内存段的最大数目。
kernel.sem = 250 32000 100 128 #
每个信号对象集的最大信号对象数;系统范围内最大信号对象数;每个信号对象支持的最大操作数;系统范围内最大信号对象集数。
fs.file-max = 6815744 # 系统中所允许的文件句柄最大数目。
net.ipv4.ip_local_port_range = 9000 65500 # 应用程序可使用的IPv4端口范围。
net.core.rmem_default = 1048576 # 套接字接收缓冲区大小的缺省值
net.core.rmem_max = 4194304 # 套接字接收缓冲区大小的最大值
net.core.wmem_default = 262144 # 套接字发送缓冲区大小的缺省值
net.core.wmem_max = 1048576# 套接字发送缓冲区大小的最大值
fs.aio-max-nr = 1048576 #文件子系统
使用/sbin/sysctl –p和/sbin/sysctl –a验证。
为Oracle增加设置
编辑文件:/etc/security/limits.conf
添加以下内容:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
- 创建Orcale的安装目录
创建Oracle系统目录:mkdir /oracle
创建Oracle服务器主目录:mkdir /oracle/11g
将该目录的所有者设置为oracle:chown oracle /oracle -R
编辑 /etc/profile,在后面追加以下两行
ORACLE_BASE=/work/oracle/
ORACLE_HOME=/work/oracle/11g
ORACLE_SID=DB11G
export ORACLE_BASE ORACLE_SID ORACLE_HOME
去掉没用的配置
unset ORACLE_HOME
unset TNS_ADMIN
- 按照默认缺失的库文件。
将光盘放入光驱。
Cd /media/cdrom
Cd Server
rpm –ivh libaio-devel*
rpm –ivh sysstat*
rpm –ivh unixODBC-2.2.11-7.1*
rpm –ivh unixODBC-devel-2.2.11-7.1*
配置基本profile。oracle用户的.bash_profile文件。
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_HOSTNAME=oel55.localdomain; export ORACLE_HOSTNAME
ORACLE_BASE=/work/oracle/; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/11g; export ORACLE_HOME
ORACLE_SID=DB11G; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
- 安装
cd /oracle/database
su oracle
./runinstall
- 错误处理
当发生以下错误时的处理方法。
#
# SIGSEGV (0xb) at pc=0xa4a4974e, pid=2228, tid=3086813392
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_17-b02 mixed mode)
# Problematic frame:
# C [libclntsh.so.11.1+0x42974e] snlinGetAddrInfo+0x1b2
#
# An error report file with more information is saved as hs_err_pid2228.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
解决方法:
修改/etc/sysconfig/network
NETWORKING_IPV6=no
HOSTNAME=redhatdatabase #这里是localhost.localdomain ,必须改成新的名称。我这里是redhatdatabase
GATEWAY=10.2.0.1
修改/etc/hosts
在命令行中输入。
hostname redhatdatabase
退出oracle重新进入
#exit
#su - oracle
#netca #运行命令成功。
http://blog.zol.com.cn/1084/article_1083499.html
http://hi.baidu.com/yuzhoublog/blog/item/0de38f0ab449fd1495ca6b8e.html
http://space.itpub.net/9880886/viewspace-444266
http://www.hack520.org/linux-oracle-config
http://space.itpub.net/9880886/viewspace-444266
http://download.oracle.com/docs/cd/B28359_01/install.111/b32281/toc.htm#CHDFFBIF
修改内核的参数解释:
kernel.shmmax
of one shared memory segment. The SHMMAX setting should be large enough
to hold the entire SGA in one shared memory segment. A low setting can
cause creation of multiple shared memory segments which may lead to
performance degradation.
是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值, shmmax 设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。http://www.itpub.net/showthread.php?threadid=551229&pagenumber论坛上的一些说法: SHMMAX 仅仅是在共享内存段被创建的时候用来比较的一个数字,当共享内存段被一个进程(Process)创建,操作系统检查是否被要求的共享内存段的值大于shmmax 的值,如果是,那么将会抛出一个错误。这个时候系统会创建另外的一个或多个共享内存段满足进程的需求。一般来说,共享内存段个数和系统性能没有太直接的关系,也不会对性能产生太大的影响。 Steve Adams 在他的小册子中说过,在实例启动以及Server Process 创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。这意味着如果你的程序不是经常Create Processes(以及 Destroy Them),性能方面就不是考虑的问题。当然Oralce 的建议是希望一个大的共享内存段能容纳整个SGA,这样在任何时候都不会有甚至轻微的性能下降的隐患。 Oracle 安装文档建议 32Bit Linux 系统设置shmmax 为32Bit 最大的限制值 (setting shmmax to the 32-bit number limit),也就是4G 。所以一般来说,1-4G 的物理内存,可以直接设置shmmax 为最大物理内存即可,那么SGA 肯定在一个共享内存段中,32Bit Linux 系统物理内存大于4G 的设置为4G 即可。总之,一般设置shmmax >=SGA (32Bit 系统是否支持到1.7G 以上SGA 需要注意) 。如果是64Bit 的Linux 操作系统,shmmax 设置为大于SGA_MAX_SIZE 即可。 (仅供参考)
http://download-west.oracle.com/docs/html/A96167_01/pre.htm#CHDHDABJhttp://www.itpub.net/551203,1.html Ipcs -sa 可以看到共享内存段个数
kernel.shmall
kernel.shmall 参数是控制共享内存页数。Linux 共享内存页大小为4KB, 共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是 16GB/4KB=16777216KB/4KB=4194304 (页),也就是64Bit 系统下 16GB 物理内存,设置 kernel.shmall = 4194304 才符合要求(几乎是原来设置2097152
的两倍)。这时可以将shmmax 参数调整到 16G 了,同时可以修改SGA_MAX_SIZE 和 SGA_TARGET 为 12G(您想设置的SGA 最大大小,当然也可以是2G~14G 等,还要协调PGA
参数及OS 等其他内存使用,不能设置太满,比如16G)。 kernel.shmmni ----
shmmni 内核参数是共享内存段的最大数量(注意这个参数不是 shmmin,是 shmmni, shmmin 表示内存段最小大小)。shmmni 缺省值 4096 ,一般肯定是够用了。
Kernel.sem
的参数解释在安装
sem
250 32000 100 128
4个数据分别对应 SEMMSL SEMMNS SEMOPM SEMMNI
如当
SEMMNS
更改当前SEMAPHORES参数设置:是对semaphore的定义,何为semaphore?请参考http://www.dbfan.cn/2009/02/03/linux%E4%B8%AD%E7%9A%84%E7%9B%B8%E5%85%B3kernel%E5%8F%82%E6%95%B0/
可以理解为
semaphore为每个进程通讯需要的信号灯或者IPC标志,每个连接的process都要分配一个semaphore,那么 semaphore的设置跟process的数量有关系.的相关设置在REHL、OEL中可通过kernel.sem参数定义.通过下面的任何一种方法都可以查看sem的值:[root@dbtest vm]# sysctl -p|grep kernel.sem kernel.sem = 250 35000 100 128
或者
[root@dbtest vm]# cat /proc/sys/kernel/sem 250 35000 100 128
或者
[root@dbtest vm]# ipcs -sl ------ Semaphore Limits -------- max number of arrays = 128 max semaphores per array = 250 max semaphores system wide = 35000 max ops per semop call = 100 semaphore max value = 32767
这个参数有四个值
, 其实这四个不同的值又分别对应了另外四个不同的参数,按照上面值的顺序排列SEMMSL: Maximum number of semaphores per set SEMMNS: Maximum number of semaphores system-wide SEMOPM: Maximum number of semaphore operations per system call SEMMNI: Maximum number of semaphore sets for the entire Linux system
在
Suse Linux中这几个参数是独立存在的.Oracle(
包括9i/10g/11g)推荐将sem设置为250 32000 100 128或更高的值.在一个并发很高的数据库中这个值可以设置为PROCESSES+10,SEMMNI也要相应的增加.目的是减少IPC通讯时 semaphore的争用. SEMOPM定义了每次IPC调用时影响的semaphore,建议设置SEMOPM=SEMMSL,SEMMNS定义为(SEMMSL * SEMMNI).实际上每个系统都对上述参数有各自推荐的配置
.最后可以参考
MetaLink: Note:187405.1、 Note:184821.1、242529.1
[oracle@test oracle]$ su
[root@test oracle]# echo "5010 641280 5010 128" > /proc/sys/kernel/sem
[root@test oracle]# cat /proc/sys/kernel/sem
5010 641280 5010 128
如需启动时自动应用,可在
参考文档: