最近在64位 linux 上安装了一个oracle 10g数据库,最大的感受是:
1、所有问题都在网上能查到,离开互联网恐怕就完蛋了
2、安装前一定要看官方文档,切记!切记!否则如入地狱般
由于服务器配置是4C 16G内存,所以得安装64位操作系统才能充分使用硬件。
介质下载
需要64位linux,找了找redhat不能随便下了,看了看oracle的 unbreakable linux,可能是账号有问题,也下不了。没办法想起了CentOS 6,找了几个能下的网站,在客户那以5M/s的速度一会就下完了,真快。
地址
4G,CentOS 6安装介质一共有两个iso文件,但是安装oracle 10g没用到另一个,浪费了一张DVD。
oracle软件从官方地址直接下就行,
638M。10.2.0.4的patch需要从support上下载,坑爹的是比原安装介质大不少 1G
官方安装前检查文档,一定先看几遍!
Requirements For Installing Oracle10gR2 On RHEL 5_OEL 5 (x86_64) [ID 421308.1]
服务器型号是 浪潮机架式双路英信NF8560。
安装CentOS 6着实让人不省心,虽然安装步骤简易很多,难在最后安装类型和rpm包的选择,弄不好没KDE,开机后进入命令行界面,或者执行startx后没有任务条且没终端窗口,无法退出!有时不知道选中了哪几个包,进入的图形界面跟windows xp很像,但是图形界面不支持网卡,习惯图形的我没招了。太灵活的选择,让普通用户无所适从,这就是linux这么多年一直干不过windows的原因。
安装时选择中文界面方便。每回选的rpm包数都不一样,经过几番折腾终于能自动启动到图形界面了,上面熟悉的任务条,有管理工具、注销等下拉菜单,有终端就ok了。
为安装oracle 10g,检查并设置服务器环境
$ uname -a
Linux dbserver 2.6.32-71.el6.x86_64 #1 SMP Fri May 20 03:51:51 BST 2011 x86_64 x86_64 x86_64 GNU/Linux
[root@dbserver ~]# dmidecode|grep 'Product'
Product Name: NF8560
Product Name: NF8560
[root@dbserver ~]# lsb_release -a
LSB Version: :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS Linux release 6.0 (Final)
Release: 6.0
Codename: Final
[root@dbserver ~]# getconf LONG_BIT
64
[root@dbserver ~]# cat /proc/meminfo
MemTotal: 16318780 kB
MemFree: 2072120 kB
Buffers: 76556 kB
Cached: 12791640 kB
SwapCached: 0 kB
Active: 3002100 kB
Inactive: 10165604 kB
Active(anon): 802752 kB
Inactive(anon): 2071656 kB
Active(file): 2199348 kB
Inactive(file): 8093948 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 18563064 kB
SwapFree: 18562336 kB
Dirty: 16 kB
Writeback: 0 kB
AnonPages: 299720 kB
Mapped: 2025564 kB
Shmem: 2574760 kB
Slab: 886836 kB
SReclaimable: 512008 kB
SUnreclaim: 374828 kB
KernelStack: 7440 kB
PageTables: 75272 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 26722452 kB
Committed_AS: 13524232 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 318936 kB
VmallocChunk: 34349587660 kB
HardwareCorrupted: 0 kB
AnonHugePages: 55296 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 5376 kB
DirectMap2M: 2082816 kB
DirectMap1G: 14680064 kB
cpu型号
[root@dbserver ~]# cat /proc/cpuinfo |grep name|cut -f2 -d:|uniq -c
48 Intel(R) Xeon(R) CPU E7- 4807 @ 1.87GHz
修改网络配置
vi /etc/hosts
增加
192.168.1.2 dbserver
禁用防火墙
禁用selinux
网卡信息
[root@dbserver ~]# dmesg |grep -i eth
Intel(R) Gigabit Ethernet Network Driver - version 2.1.0-k2
igb 0000:02:00.0: Intel(R) Gigabit Ethernet Network Connection
igb 0000:02:00.0: eth0: (PCIe:2.5Gb/s:Width x1) 00:1b:21:af:cf:40
igb 0000:02:00.0: eth0: PBA No: fafa03-0d6
igb 0000:02:00.1: Intel(R) Gigabit Ethernet Network Connection
igb 0000:02:00.1: eth1: (PCIe:2.5Gb/s:Width x1) 00:1b:21:af:cf:41
igb 0000:02:00.1: eth1: PBA No: fafa03-0d6
igb 0000:06:00.0: Intel(R) Gigabit Ethernet Network Connection
igb 0000:06:00.0: eth2: (PCIe:2.5Gb/s:Width x4) 00:30:48:ff:93:2c
igb 0000:06:00.0: eth2: PBA No: ffffff-0ff
igb 0000:06:00.1: Intel(R) Gigabit Ethernet Network Connection
igb 0000:06:00.1: eth3: (PCIe:2.5Gb/s:Width x4) 00:30:48:ff:93:2d
igb 0000:06:00.1: eth3: PBA No: ffffff-0ff
igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX
ADDRCONF(NETDEV_UP): eth1: link is not ready
ADDRCONF(NETDEV_UP): eth2: link is not ready
ADDRCONF(NETDEV_UP): eth3: link is not ready
eth0: no IPv6 routers present
[root@dbserver ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:1B:21:AF:CF:40
inet addr:192.168.1.2 Bcast:10.255.255.255 Mask:255.255.255.0
inet6 addr: fe80::21b:21ff:feaf:cf40/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:453718 errors:0 dropped:0 overruns:1 frame:0
TX packets:155515 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:151155641 (144.1 MiB) TX bytes:29829009 (28.4 MiB)
Memory:faee0000-faf00000
eth1 Link encap:Ethernet HWaddr 00:1B:21:AF:CF:41
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Memory:f9fe0000-fa000000
eth2 Link encap:Ethernet HWaddr 00:30:48:FF:93:2C
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Memory:fafe0000-fb000000
eth3 Link encap:Ethernet HWaddr 00:30:48:FF:93:2D
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Memory:faf60000-faf80000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:12250 errors:0 dropped:0 overruns:0 frame:0
TX packets:12250 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:736370 (719.1 KiB) TX bytes:736370 (719.1 KiB)
操作系统信息
~]# cat /etc/issue
CentOS Linux release 6.0 (Final)
内存信息
[root@dbserver ~]# grep tal /proc/meminfo
MemTotal: 16318780 kB
SwapTotal: 18563064 kB
VmallocTotal: 34359738367 kB
HugePages_Total: 0
[root@dbserver ~]# free -mt
total used free shared buffers cached
Mem: 15936 13919 2016 0 75 12495
-/+ buffers/cache: 1348 14587
Swap: 18127 0 18127
Total: 34064 13920 20143
内核参数
[root@dbserver ~]# vi /etc/sysctl.conf
增加
kernel.shmall = 8388608
kernel.shmmax = 17179869184
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144
修改系统限制
[root@dbserver ~]# vi /etc/security/limits.conf
增加
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
[root@dbserver ~]# vi /etc/pam.d/login
增加
session required pam_limits.so
查看限制
[root@dbserver ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 127375
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
profile文件
[root@dbserver ~]# cat /home/oracle/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export ORACLE_BASE=/home/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_OWNER=oracle
export ORACLE_SID=orcl
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_TERM=xterm
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin/
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
#ulimit -u 16384 -n 65536
umask 022
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
[oracle@dbserver ~]$ date
2011年 09月 24日 星期六 11:49:52 CST
以oracle用户登录,通过U盘将10g安装介质拷贝到/home/app下,解包
$ gzip -dc 10201_database_linux_x86_64.cpio.gz | cpio -idm
$ gunzip p6810189_10204_Linux-x86-64.zip
$ cd database
$./runInstaller –ignoreSysPrereqs
根据提示选择定制安装,然后通过系统检查后,选择只安装软件,在安装过程中可能会提示ins_emdb.mk编译错误:
![](http://blog.chinaunix.net/attachment/201109/26/20687159_1317015242SPa8.jpg)
忽略,继续安装。后面安装补丁10.2.0.4,编译时就不会再出现错误了,全部OK。
建库后调整:
- alter database datafile 1 resize 600m;
- alter database datafile 3 resize 400m;
- alter database datafile 2 resize 4000m;
- alter database tempfile 1 resize 4000m;
- alter tablespace undotbs1 add datafile '/app/oradata/orcl/undotbs02.dbf' size 4g;
- alter database datafile 4 autoextend off;
建库后,进行简单的测试,发现磁盘写性能相当强悍,由于是RAID10,添加undo文件时的top中看到写入速度能达到1000M/s!难道我看错了:
![](http://blog.chinaunix.net/attachment/201109/26/20687159_13170158224FbA.jpg)
不过通过insert table t1 select * from t1; 测试填充数据时,速度也能达到200M/s:
比RAID5的40M/s 强多了。
为了定期备份数据库,增加了一个计划任务,定期执行expdb.sh脚本:
# backup database
export ORACLE_BASE=/u01
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_OWNER=oracle
export ORACLE_SID=abc
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_TERM=xterm
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin/
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export time=`date +%Y%m%d`
find /bak -name a*.dmp -mtime +15 -exec rm {} \;
exp xxx/xxx file=/bak/a$time.dmp log=/bak/a$time.log
遇到的一些问题及解决办法
--------------------------------------------
简化并启用dbshut dbstart脚本
为了便于后期管理,调整dbstart、dbshut脚本,都在$ORACLE_HOME/bin 目录下
查找:
ORACLE_HOME_LISTNER
将其改为:
ORACLE_HOME_LISTNER=$ORACLE_HOME
修改/etc/oratab,将最后一行的N 改为Y
例如 orcl:/u01/product/10.2.0/db_1:Y
顺便说一句,dbstart里面有启动侦听的命令,无须再执行lsnrctl start了。
--------------------------------------------
调大sga后,启动时报错 ORA-27125:unable to create shared memory segment
1.确定安装oracle所使用的用户组
在oracle用户下执行命令id
可以看到oracle组dba id 501
2.修改内核参数
echo 501 >/proc/sys/vm/hugetlb_shm_group
再启动不报错了。
将上述命令加入到启动中
vi /etc/rc.local
--------------------------------------------
安装过程出现报错
./oracle/product/10.2/ctx/lib/ins_ctx.mk'
glibc-devel需要32位的包,详细信息参考metalink文档ID 786995.1
需要注意,安装这个包后,要退出安装界面,而不要点CONTINUE,否则在ins_ctx.mk可以编译成功,虽然的包仍然会报错。
看看,还是rpm包的问题。
--------------------------------------------
关于telnet的中文乱码
装了简体中文版的RHEL5,系统显示中文都没问题,但是telnet远程登录过来就有中文乱码。
上网搜索,很多人说修改/etc/profile ,或者/etc/sysconfig/i18n。众说纷纭,都试了,都不好使。要么系统下变乱码,要么telnet下变乱码,中文文件名更是乱码。
后来仔细思考,在系统配置上下工夫估计是错误的方向。难道是选用的telnet客户端不支持系统使用的编码?于是命令行下输入locale,查看系统编码,显示zh_CN.UTF-8。(如果
安装简体中文的RHEL5,则系统默认使用zh_CN.UTF-8编码。如果是英文,默认是zh_US.UTF-8编码。)
而之前选用的netterm根本不支持utf-8编码。(据说最新的netterm支持utf-8了,但是没找到破解的,汗。。。)
于是找其他的telnet客户端软件,后来找到了putty,那叫一个字,好!绿色免费又开源,好多人都用,相比收费的netterm,还支持UTF-8编码。
官网地址:,点击download可以下载。
putty使用方法:
1.打开putty.exe,主界面中输入Host Name(主机名)和Port(端口号),Connection type选择telnet。
2.如果远程主机使用utf-8编码,这里需要修改utf-8编码:
在软件界面的左边树形菜单中,选择Window下的Translation,在出现的下拉菜单Receive data assumed
to be in which charecter set中,选择UTF-8编码。
3.回到session界面,可以保存本次设置,以后登录时可以使用此设置。
4.单击open,即可telnet到远程主机。中文不乱码了。
还是putty好使啊
--------------------------------------------
ftp上来显示的时间与系统时间不一致,是因为默认情况下,vsftpd 是用GMT做为它的时间的,所以和系统的时间可能会不一致。修改也很简单:
# vi /etc/vsftpd/vsftpd.conf
在最后加入一行:
use_localtime=YES
存盘后,重启vsftpd:
# service vsftpd restart
--------------------------------------------
重建em 参考本博客或metalink文档ID278100.1
--------------------------------------------
缺少rpm包时,如果有条件上互联网可以执行
#yum install glibc
或
#yum install libXo.so.2
它会自己下载去找相关的rpm包,省心多了.
还可以:
yum install -y binutils compat-libstdc++ elfutils-libelf elfutils-libelf-devel glibc glibc-common glibc-devel gcc gcc-c++ libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel libXp
--------------------------------------------
vsftp 服务设置问题
ftp 192.168.1.2时提示
500 OOPS: cannot change directory:/home/oracle,目录权限没有问题。最后找到一个解决办法:
# service vsftpd stop
# setsebool -P ftpd_disable_trans 1
# service vsftpd restart
如果出现: Could not change active booleans: Invalid boolean 再执行:
# setsebool -P ftp_home_dir=1
当然还得再重启vsftp服务
# service vsftpd restart
--------------------------------------------
修复乱码问题(未验证)
如果启动 em( server ip_address:1158/em)出现乱码,那么按照以下方法修复
在网上下载zysong.ttf
修改java环境设置
cd $ORACLE_HOME/jdk/jre/lib
mv font.properties font.properties.bak
cp font.properties.zh_CN.Redhat font.properties
cd $ORACLE_HOME/jre/1.4.2/lib
mv font.properties font.properties.bak
cp font.properties.zh_CN.Redhat font.properties
复制新的字体文件
mkdir -p /usr/share/fonts/zh_CN/TrueType/
cp ~/zysong.ttf /usr/share/fonts/zh_CN/TrueType/
清空缓存
rm $ORACLE_HOME/oc4j/j2ee/oc4j_applications/applications/em/em/cabo/images/cache/zhs/*.gif
提醒:以上修复乱码的方法从网上找的,未验证,我的解决方法是
$ export LANG=C
$ firefox
然后输入