最近在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编译错误:
忽略,继续安装。后面安装补丁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!难道我看错了:
不过通过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编码。
凯发k8官网下载客户端中心官网地址:,点击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
()字体文件,并将此文件解压放到 root的home目录下
修改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
然后输入