ITPub博客

首页 > 数据库 > Oracle > 虚拟机中RedHat AS4U2安装Oracle

虚拟机中RedHat AS4U2安装Oracle

原创 Oracle 作者:xinxinhg 时间:2006-10-23 20:24:13 0 删除 编辑

原文地址:http://www.btonline.com.cn/viewtopic.php?p=6362

作者:jeremy

最近在虚拟机中的RedHat AS4U2 上装了Oracle9.2.0.4并升级到9.2.0.7,参考了很多网上的资料,总觉得没有一篇很详细和完整而且对每个步骤都有详细说明的,于是决定将自己的安装过程写下来,既可以为自己以后安装备忘,也可以给大家一个参考。

[@more@]最近在虚拟机中的RedHat AS4U2 上装了Oracle9.2.0.4并升级到9.2.0.7,参考了很多网上的资料,总觉得没有一篇很详细和完整而且对每个步骤都有详细说明的,于是决定将自己的安装过程写下来,既可以为自己以后安装备忘,也可以给大家一个参考。

第0步,系统硬件和软件要求

由于是再虚拟机中安装,所以真实机器的内存不能太小,最好能在512以上,给虚拟机划分256以上的内存,否则安装过程会无比痛苦加等待。给虚拟机文件的硬盘最好能有15G左右的空间,这样才不会由于硬盘空间不够而若来不必要的麻烦。至于虚拟机中的硬盘空间倒是无所谓,反正支持LVM,不够了只要加硬盘就是了,只要真实空间够。
我的划分方案是这样的:给虚拟机挂了三块虚拟硬盘:
sda 20G,其中sda1是/boot,128M;sda2是一个逻辑卷vgroot,里面分了lvswap做交换分区,768M,剩下的全部给了lvroot做为/
sdb 10G,用作以后安装数据库的裸设备。sdb1 4G,建立逻辑卷vgoradata;sdb2 3G,建立逻辑卷vginfdata;sdb3 3G,建立逻辑卷vgdb2data。如果只装Oracle,只要建逻辑卷vgoradata就可以了。
sdc 10G,用作/tmp,这样做的目的是将/tmp独立出来,这样安装和运行时的临时文件不会放到sda里面,这样虚拟机sda的在真实硬盘上的文件大小不会疯长,以后要考走这个虚拟机的时候只要考走sda的硬盘文件就可以了,sdb和sdc都可以自己再建,嘿嘿。

软件要求首先当然是RedHat Linux AS4U2了,在www.redhat.com.cn可以查询购买。不过,嘿嘿,当然,在网上很多地方都可以下载到。而且也有在Fedora上安装成功的,Fedora本身是完全免费和开放的,好像在Fedora上安装Oracle和在AS上安装相差不多,估计就是一些包要自己去找,比如raw在Fedora上就没有,这个是建裸设备用的,后面再详细说明。
oracle9204安装软件(一共三张盘,可到http://www.oracle.com下载),还有就是各个升级和补丁包了。如升级到9.2.0.7,则需要p4198954_40_LINUX.zip,p4188455_10103_linux.zip和p4163445_92070_LINUX.zip这三个文件就可以。这些升级包可以在metalink.oracle.com下载到,不过那个网站只有购买了Oracle软件的用户才能登陆。大家可以找一些购买了Oracle的朋友,让他们帮忙下载一下这几个补丁包。


第1步,安装RedHat Linux AS4U2

感觉现在很多发行版的Linux安装做的很Easy了,没有Linux经验都可以完成安装,感觉和Windows差不了多少。
不过安装的时候选择软件包要记得把“原有的软件开发”选上,里面有gcc2.9.6版,安装Oracle会用到,而RedHat默认的是gcc3.4.4版,安装Oracle的时候编译好像有问题。


第2步,安装Oracle前的准备

1.首先要检查安装oracle时系统需要的包:

[root@myhost ~]# rpm -qa gcc make binutils openmotif setarch
setarch-1.6-1
make-3.80-5
binutils-2.15.92.0.2-15
gcc-3.4.4-2
openmotif-2.2.3-9.RHEL4.1

[root@myhost ~]# rpm -qa | grep compat
java-1.4.2-gcj-compat-1.4.2.0-27jpp
compat-db-4.1.25-9
compat-libcom_err-1.0-5
compat-libstdc++-296-2.96-132.7.2
compat-gcc-32-3.2.3-47.3
compat-gcc-32-c++-3.2.3-47.3
compat-libstdc++-33-3.2.3-47.3
compat-openldap-2.1.30-2
nss_db-compat-2.2-29
compat-libgcc-296-2.96-132.7.2

[root@myhost ~]# rpm -qa | grep xorg-x11-deprecated
xorg-x11-deprecated-libs-6.8.2-1.EL.13.20
xorg-x11-deprecated-libs-devel-6.8.2-1.EL.13.20

[root@myhost ~]# rpm -qa | grep gnome-libs
gnome-libs-devel-1.4.1.2.90-44.1
gnome-libs-1.4.1.2.90-44.1

这些包会根据安装RedHat的时候选择的包不同而每个环境不一样,我装完后差nss_db-compat-2.2-29,xorg-x11-deprecated-libs-devel-6.8.2-1.EL.13.20和gnome-libs-devel-1.4.1.2.90-44.1三个包,除了nss_db-compat-2.2-29以外,其他两个包都有一大堆依赖的关系,装这些包麻烦死了,难怪用惯了Gentoo的emerge的人都觉得rpm的包管理方式非常难用。我安装包的顺序是这样的:

#第三张盘
rpm -ivh freetype-devel-2.1.9-1.i386.rpm
rpm -ivh fontconfig-devel-2.2.3-7.i386.rpm
rpm -ivh xorg-x11-devel-6.8.2-1.EL.13.20.i386.rpm
rpm -ivh libjpeg-devel-6b-33.i386.rpm
rpm -ivh libtiff-devel-3.6.1-8.i386.rpm
rpm -ivh libungif-devel-4.1.3-1.i386.rpm
rpm -ivh alsa-lib-devel-1.0.6-5.RHEL4.i386.rpm
rpm -ivh audiofile-devel-0.2.6-1.i386.rpm
rpm -ivh esound-devel-0.2.35-2.i386.rpm
rpm -ivh xorg-x11-deprecated-libs-devel-6.8.2-1.EL.13.20.i386.rpm
rpm -ivh libaio-devel-0.3.103-3.i386.rpm

#第四张盘
rpm -ivh nss_db-compat-2.2-29.i386.rpm
rpm -ivh glib-devel-1.2.10-15.i386.rpm

rpm -ivh gtk+-devel-1.2.10-33.i386.rpm
rpm -ivh imlib-devel-1.9.13-23.i386.rpm
rpm -ivh ORBit-devel-0.5.17-14.i386.rpm
rpm -ivh gnome-libs-devel-1.4.1.2.90-44.1.i386.rpm

安装完上面的包后,还需要安装两个包:compat-oracle-rhel4-1.0-3 和 compat-libcwait-2.0-1,这两个包由oracle提供,在p4198954_40_LINUX.zip这个补丁中,解开安装即可:

#Oracle Patch
rpm -ivh compat-libcwait-2.1-1.i386.rpm
rpm -ivh compat-oracle-rhel4-1.0-5.i386.rpm

2.创建Oracle用户和帐号
[root@myhost ~]# groupadd oinstall
[root@myhost ~]# groupadd dba
[root@myhost ~]# useradd -m -g oinstall -G dba oracle
[root@myhost ~]# passwd oracle
创建用户安装和维护Oracle的组和用户。用户为oracle,组为oinstall和dba。同时更改用户口令。

3.配置 Linux 的内核参数
[root@myhost ~]# vi /etc/sysctl.conf
# For Oracle
kernel.shmmax = 268435456
kernel.shmmni=4096
kernel.shmall=2097152
kernel.sem=250 32000 100 128
fs.file-max=65536
net.ipv4.ip_local_port_range=1024 65000

修改/etc/sysctl.conf文件。其中的几个参数的含义是:
kernel.shmmax表示最大共享内存,如果小的话可以按实际情况而定,一般为物理内存的一半,不过我的虚拟机只有256M,所以就全部算进去了。
shmmni表示最小共享内存固定4096KB
shmall表示所有内存大小
sem 4个参数依次是SEMMSL:每个用户拥有信号量最大数,SEMMNS:系统信号量最大数,SEMOPM:每次semopm系统调用操作数,SEMMNI:系统辛苦量集数最大数。这4个参数为固定内容大小。
file-max固定大小65536
ip_local_port_range表示端口的范围,为指定的内容。

保存退出执行以下命令使配置马上生效
[root@myhost ~]# sysctl -p

4.设置 oracle 对文件的要求
[root@myhost ~]# vi /etc/security/limits.conf
#For Oracle
oracle soft memlock 3145728
oracle hard memlock 3145728

AS3之后的内核用hugetlb取代bigpages,为了在AS4上使用hugetlbfs,我们需要修改memlock的默认值。hugetlb是一个新的基于内存的文件系统,该文件系能更好地支持基于共享内存的数据库,有兴趣的朋友可以找更详细的资料看看,这里就不详述了。

5.准备 Oracle 安装文件目录
[root@myhost ~]# mkdir -p /home/oracle/product/9.2.0
[root@myhost ~]# chown -R oracle:dba /home/oracle
创建Oracle 安装目录并修改所属者为 oracle, 所属组为dba

6.设置Oracle用户的环境变量
#For Oracle
#export LD_ASSUME_KERNEL=2.4.19
#这个环境变量在打了Oracle提供的两个rpm后可以在安装的时候不用,可是运行netca,dbca等终端工具的时候还是需要这个环境变量来手工降低内核版本号
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=$ORACLE_BASE/product/9.2.0
export ORACLE_SID=test
export ORACLE_TERM=xterm
export NLS_LANG=AMERICAN_AMERICA.ZHS16CGB231280
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch
#export DISPLAY=192.168.1.141:0.0
#远程安装时候使用

CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export CLASSPATH
export LANG=en_US

export DBCA_RAW_CONFIG=$ORACLE_BASE/DBCA_RAW_CONFIG


第3步 正式安装oracle

1.安装oracle
首先export LANG=en_US,然后就可以开始安装了。从网上下载的是.cpio.gz文件,要首先用gunzip解开,再用cpio解开,这样会在硬盘占用很大的空间,而且以后还要删掉,这样虚拟硬盘又要无谓变大很多。所以我的做法是首先解压Oracle安装盘到其他的Linux下,解开,然后用命令mkisofs -l -J -L -r -o filename.iso /directory把解开的安装包压成iso再传回Windows,这样就可以在虚拟机中用光盘安装了,嘿嘿……
注意不要在windows下解压和压缩iso,这样文件的owner和权限会丢掉,安装时可能会有问题。

安装过程中要注意三点,第一点是安装的用户组设置为oinstall ,第二点是安装类型是选择只安装Oracle软件不安装Oracle数据库。其他的都直接一路Next就完成了。还有如果是用光盘安装的话由于中间要换盘,所以不要在光盘的mount路径下装,直接在oracle用户的目录下执行/mnt/cdrom/runInstaller

由于一开始安装的是服务器端,里面没有Proc等开发工具,所以还要再来一次安装,选择客户端,把Proc安装进去。如果不要开发工具的话可以不用装客户端。

2.打补丁
1) 安装4188455 补丁。 解压缩 unzip p4188455_10103_linux.zip 会生成oraparam.ini 和 README.txt 两个文件。记住oraparam.ini文件的路径,下一步安装时我们会用到这个文件。
2)安装4163445补丁。补丁包p4163445_92070_LINUX.zip。同样,我也是把这个将近400M的东西解压再压成ISO文件。运行的时候要加上刚才解压开的paramfile.ini的路径,这个文件对安装补丁的系统进行了定义,如果没有这个文件的话,4163445里面的oraparam.ini检查不能通过AS4,只能通过AS3。
/mnt/cdrom/runInstaller -paramfile /tmp/ora_install/oraparam.ini
如果是升级到9.2.0.6,安装的时候第一次要先安装OUI,安装完OUI后再运行一次安装程序,才升级到9.2.0.6。
而9.2.0.7则不需要,一次全部搞定。

3.安装其它补丁
oracle的补丁需要一个叫OPatch的工具,这个工具在metalink最新的包是叫做p2617419_10102_GENERIC.zip,搜索2617419可以得到。
不过安装了9.2.0.7这个补丁包会自动安装,只要在.bash_profile中加入PATH=$PATH:$ORACLE_HOME/OPatch就可以了。

如果没有安装9.2.0.7这个补丁包,则需要手动安装OPatch:unzip p2617419_10102_generic.zip 会生成OPatch目录,把生成的OPatch目录拷贝到ORACLE_HOME目录下面 cp -a Opatch/ $ORACLE_HOME。设置设置搜索路径 export PATH=$PATH:$ORACLE_HOME/OPatch 同时把这句话加入到oracle用户下面的 .bash_profile 文件中。

如果前面安装的是9.2.0.6的补丁,则需要用OPatch安装3119415和4190586补丁包:
解在压缩p4190568_9206_linux.zip生成的目录下执行opatch应用 opatch apply
解在压缩p3119415_9206_linux.zip生成的目录下执行opatch应用 opatch apply

如果是9.2.0.7,则目前不需要安装任何补丁,当oracle有新的补丁出来的时候,和上面一样的方法打补丁就可以了。


第4步 建立裸设备
Linux下面和Unix下的裸设备稍有不同,Unix下块设备可以直接做裸设备使用,而Linux下还需要通过raw转换一下,而不能直接使用块设备。

1.建立块设备

我们首先在LVM上建立块设备:
lvm> lvcreate -L 40M -ncwmlite vgoradata
Logical volume "cwmlite" created
lvm> lvcreate -L 40M -ndrsys vgoradata
Logical volume "drsys" created
lvm> lvcreate -L 300M -nexample vgoradata
Logical volume "example" created
lvm> lvcreate -L 50M -nindx vgoradata
Rounding up size to full physical extent 52.00 MB
Logical volume "indx" created
lvm> lvcreate -L 40M -nodm vgoradata
Logical volume "odm" created
lvm> lvcreate -L 700M -nsystem vgoradata
Logical volume "system" created
lvm> lvcreate -L 20M -ntools vgoradata
Logical volume "tools" created
lvm> lvcreate -L 400M -nundotbs vgoradata
Logical volume "undotbs" created
lvm> lvcreate -L 50M -nusers vgoradata
Rounding up size to full physical extent 52.00 MB
Logical volume "users" created
lvm> lvcreate -L 90M -nxbd vgoradata
Rounding up size to full physical extent 92.00 MB
Logical volume "xbd" created
lvm> lvcreate -L 90M -ntemp vgoradata
Rounding up size to full physical extent 92.00 MB
Logical volume "temp" created
lvm> lvcreate -L 104M -nredo01 vgoradata
Logical volume "redo01" created
lvm> lvcreate -L 104M -nredo02 vgoradata
Logical volume "redo02" created
lvm> lvcreate -L 104M -nredo03 vgoradata
Logical volume "redo03" created
lvm> lvcreate -L 4M -ncontrol01 vgoradata
Logical volume "control01" created
lvm> lvcreate -L 4M -ncontrol02 vgoradata
Logical volume "control02" created
lvm> lvcreate -L 4M -ncontrol03 vgoradata
Logical volume "control03" created
中间几个提示是自动扩展大小为4M的倍数,好像在LVM2上建立逻辑卷都必须是4M的倍数,不知道有没有地方可以调这个参数。
redo本来是100M,不过需要写1K的控制字段,所以redo的真实占用大小是102401k,100M的空间不够,就必须是104M才行了。

2.建立裸设备

建完逻辑卷就开始建立裸设备:
编辑/etc/sysconfig/rawdevices,加入如下内容:
/dev/raw/raw01 /dev/mapper/vgoradata-cwmlite
/dev/raw/raw02 /dev/mapper/vgoradata-drsys
/dev/raw/raw03 /dev/mapper/vgoradata-example
/dev/raw/raw04 /dev/mapper/vgoradata-indx
/dev/raw/raw05 /dev/mapper/vgoradata-odm
/dev/raw/raw06 /dev/mapper/vgoradata-system
/dev/raw/raw07 /dev/mapper/vgoradata-tools
/dev/raw/raw08 /dev/mapper/vgoradata-undotbs
/dev/raw/raw09 /dev/mapper/vgoradata-users
/dev/raw/raw10 /dev/mapper/vgoradata-xbd
/dev/raw/raw11 /dev/mapper/vgoradata-temp
/dev/raw/raw12 /dev/mapper/vgoradata-redo01
/dev/raw/raw13 /dev/mapper/vgoradata-redo02
/dev/raw/raw14 /dev/mapper/vgoradata-redo03
/dev/raw/raw15 /dev/mapper/vgoradata-control01
/dev/raw/raw16 /dev/mapper/vgoradata-control02
/dev/raw/raw17 /dev/mapper/vgoradata-control03

运行service rawdevices restart使上面的配置生效
Assigning devices:
/dev/raw/raw01 --> /dev/mapper/vgoradata-cwmlite
/dev/raw/raw1: bound to major 253, minor 2
/dev/raw/raw02 --> /dev/mapper/vgoradata-drsys
/dev/raw/raw2: bound to major 253, minor 3
/dev/raw/raw03 --> /dev/mapper/vgoradata-example
/dev/raw/raw3: bound to major 253, minor 4
/dev/raw/raw04 --> /dev/mapper/vgoradata-indx
/dev/raw/raw4: bound to major 253, minor 5
/dev/raw/raw05 --> /dev/mapper/vgoradata-odm
/dev/raw/raw5: bound to major 253, minor 6
/dev/raw/raw06 --> /dev/mapper/vgoradata-system
/dev/raw/raw6: bound to major 253, minor 7
/dev/raw/raw07 --> /dev/mapper/vgoradata-tools
/dev/raw/raw7: bound to major 253, minor 8
/dev/raw/raw08 --> /dev/mapper/vgoradata-undotbs
/dev/raw/raw8: bound to major 253, minor 9
/dev/raw/raw09 --> /dev/mapper/vgoradata-users
/dev/raw/raw9: bound to major 253, minor 10
/dev/raw/raw10 --> /dev/mapper/vgoradata-xbd
/dev/raw/raw10: bound to major 253, minor 11
/dev/raw/raw11 --> /dev/mapper/vgoradata-temp
/dev/raw/raw11: bound to major 253, minor 12
/dev/raw/raw12 --> /dev/mapper/vgoradata-redo01
/dev/raw/raw12: bound to major 253, minor 13
/dev/raw/raw13 --> /dev/mapper/vgoradata-redo02
/dev/raw/raw13: bound to major 253, minor 14
/dev/raw/raw14 --> /dev/mapper/vgoradata-redo03
/dev/raw/raw14: bound to major 253, minor 15
/dev/raw/raw15 --> /dev/mapper/vgoradata-control01
/dev/raw/raw15: bound to major 253, minor 16
/dev/raw/raw16 --> /dev/mapper/vgoradata-control02
/dev/raw/raw16: bound to major 253, minor 17
/dev/raw/raw17 --> /dev/mapper/vgoradata-control03
/dev/raw/raw17: bound to major 253, minor 18
done

然后给裸设备修改属主:
chonw oracle:oninstall /dev/raw/raw1
chonw oracle:oninstall /dev/raw/raw2
chonw oracle:oninstall /dev/raw/raw3
chonw oracle:oninstall /dev/raw/raw4
chonw oracle:oninstall /dev/raw/raw5
chonw oracle:oninstall /dev/raw/raw6
chonw oracle:oninstall /dev/raw/raw7
chonw oracle:oninstall /dev/raw/raw8
chonw oracle:oninstall /dev/raw/raw9
chonw oracle:oninstall /dev/raw/raw10
chonw oracle:oninstall /dev/raw/raw11
chonw oracle:oninstall /dev/raw/raw12
chonw oracle:oninstall /dev/raw/raw13
chonw oracle:oninstall /dev/raw/raw14
chown oracle:oninstall /dev/raw/raw15
chown oracle:oninstall /dev/raw/raw16
chown oracle:oninstall /dev/raw/raw17

由于裸设备是每次开机都需要建立的,系统没有记录/dev/raw/下面文件的信息,所以要把修改属主命令加入到/etc/rc.local中,每次开机都要执行一次。

3.建立Oracle裸设备定义文件
vi DBCA_RAW_CONFIG
加入如下内容:
cwmlite=/dev/raw/raw1
drsys=/dev/raw/raw2
example=/dev/raw/raw3
indx=/dev/raw/raw4
odm=/dev/raw/raw5
system=/dev/raw/raw6
tools=/dev/raw/raw7
undotbs=/dev/raw/raw8
users=/dev/raw/raw9
xdb=/dev/raw/raw10
temp=/dev/raw/raw11
redo1_1=/dev/raw/raw12
redo1_2=/dev/raw/raw13
redo1_3=/dev/raw/raw14
control1=/dev/raw/raw15
control2=/dev/raw/raw16
control3=/dev/raw/raw17

第5步 建立数据库

1.用netca命令启动网络管理器,配置Listener,使用默认配置一路Next直到完成。

2.运行dbca开始建库
当安装时检查到有DBCA_RAW_CONFIG环境变量,并且它指向的文件存在后,安装程序会询问是否需要使用裸设备安装,这里选是就可以了。
oracle安装好像只能要就全部安装在裸设备,要就全部安装在文件系统。本来我打算将控制文件安装在文件系统,因为控制文件很小,一般也就1到2M,而且增长有限,也没有严格的I/O请求,不过安装的时候确提示我控制文件的路径不是合法的裸设备,只好又建了三个LV存放控制文件。不过也许可以通过建连接的方式来安装到裸设备,没有试过。
建库一路Next就可,不过要注意三个问题,第一是这里建库是输入的数据库名可以自己起一个,不过SID一定要与环境变量里面的ORACLE_SID一致,否则后面可能会有问题。第二就是字符集要也要选择和环境变量一致,而且设为中文,否则对中文的存储会成为乱码。第三就是安装的数据文件要仔细看一下是否和先前定义的裸设备一致,我装了几次都发现undotbs会变为默认值,而不会随DBCA_RAW_CONFIG里面的配置改变,要手动改回来,不知道是Bug还是系统不建议undotbs放到裸设备,可是不放到裸设备安装又会报错说安装路径必须裸设备。真是奇怪。

3.开始建库
这里需要等一整子,如果最后安装出了什么问题,可以看看是在哪一步,如果是最后一步出问题,可以手动用sqlplus "/as sysdba"进去手动用startup启动数据库,如果数据库能够起来,就不用管它,继续输入sys和system的密码就完成了。

4.启动监听进程
lsnrctl start

当有多个listener的时候,要用lsnrctl start listener_name来启动

5.启动数据库
sqlplus "/as sysdba"
(注:sqlplus "/as sysdba" 标准的操作是
sqlplus /nolog
conn / as sysdba )

startup
ORACLE instance started.

Total System Global Area 236000320 bytes
Fixed Size 451648 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.

6.设置防火墙
AS4默认安装了防火墙,需要设置一下把1521:tcp端口打开
在System Settings->Security Level里面的Other ports加上,1521:tcp,点击OK即可。

7.找台其它安装了Oracle客户端的机器连接一下试试,如果连通,那么安装就OK了。

8.设置数据文件自动增长。
Oracle可以设置数据文件为自动增长型的,这样只要硬盘空间够,就不会出现表空间不够的情况。而且默认安装的数据文件有几个过小,安装完后几乎都用完了,所以最好设置为自动增长型的,免得数据库出现什么错误。
用客户端工具oemapp console进入管理界面,然后将数据文件都设置为自动增长型的。

不过,由于是裸设备的数据库,我们如果要判断空间是否足够要看数据文件的大小和设备空间的大小来做比较,这样就比较麻烦。可以在建库的时候就严格按照设备文件的大小来划分数据文件的大小,把空间分配够,而不要设置为自动增长的,这样更容易掌握数据空间的变化。


第6步 客户化数据库
根据不同的需求开始配置刚才建好的数据库
我们规划新加一个用户easy,该用户表空间有两个,一个做数据存储,初始500M,每次增加10M,划给它600M的一个逻辑卷;一个做索引存储,初始200M,每次增加10M,划给他300M的一个逻辑卷。

1.建立用户的表空间的字符设备,和上面的方式一样:
lvm> lvcreate -L 600M -n easydata vgoradata
Logical volume "easydata" created
lvm> lvcreate -L 300M -n easyindx vgoradata
Logical volume "easyindx" created

2.修改/etc/sysconfig/rawdevices增加刚才定义的两个逻辑卷
/dev/raw/raw20 /dev/mapper/vgoradata-easydata
/dev/raw/raw21 /dev/mapper/vgoradata-easyindx

这部分就手动建一下裸设备了,因为如果用service rawdevices restart重启裸设备,那么原来的裸设备也会重启,那么属主属性又不对了,要手工再改回来。

raw /dev/raw/raw20 /dev/mapper/vgoradata-easydata
raw /dev/raw/raw21 /dev/mapper/vgoradata-easyindx

修改raw20和raw21的属主:
chown oracle:oninstall /dev/raw/raw20
chown oracle:oninstall /dev/raw/raw21

同样这里也要加入到/etc/rc.local中启动就执行。

3.创建表空间
[oracle@myhost ~]$ sqlplus "/as sysdba"

SQL*Plus: Release 9.2.0.7.0 - Production on Sun Nov 20 06:27:48 2005

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.7.0 - Production

SQL> create tablespace easy_data
2 datafile '/dev/raw/raw20' size 500m
3 autoextend on next 10m
4 EXTENT MANAGEMENT LOCAL;

Tablespace created.

SQL> create tablespace easy_indx
2 datafile '/dev/raw/raw21' size 200m
3 autoextend on next 10m
4 EXTENT MANAGEMENT LOCAL;

Tablespace created.

这里autoextend on next 10m表示数据文件不够时自动增长,每次增长10M
EXTENT MANAGEMENT LOCAL表示建本地化管理类表空间。
当然,也可以用图形化的客户端管理工具建库,那个比较简单,就不说了。

4.建立用户

在建立用户之前,我们要首先建立用户的资源文件profile,对用户的存取进行限制。

这个profile有很多选项可以设置,比如 SESSIONS_PRE_USER 同时连接会话数控制等,其它还有很多设置的参数,不过基本上都是限制用户的,我想我们系统的用户是要做各种联机交易的,还是不要设这些limit,看一下DEFAULT profile,全部都是UNLIMITED

SQL> select * from dba_profiles;
PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT
------------------------------ -------------------------------- ------------- ----------------------------------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT PASSWORD_LOCK_TIME PASSWORD UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT PASSWORD_GRACE_TIME PASSWORD UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED

我们就用DEFAULT profile建立新用户了

SQL> create user easy identified by easy
2 default tablespace easy_data
3 temporary tablespace TEMP
4 profile DEFAULT;

User created.

不过刚建的用户连连接的权限都没有
SQL> connect easy/easy
ERROR:
ORA-01045: user EASY lacks CREATE SESSION privilege; logon denied
所以,我们还要赋予用户权限。

5.赋予用户权限
最简单的就是赋予用户DBA角色,什么都有了
grant dba to easy;

不过如果出于安全性的考虑,最好还是授予该用户够用的权限就好
grant create session, create procedure, create synonym, create sequence, create table, create trigger, create view, unlimited tablespace, create type to easy;

同样,这一步也可以通过图形客户端来做。

6.建表
用Oracle建表,最好带一些自己优化过的参数,这样对提高访问和运行效率是很有好处的,比如:
create table testtable
(
string1 char(9) not null, /* 1 string1 */
integer1 number(32) not null, /* 2 integer1 */
decimal1 decimal(16,2) not null, /* 3 decimal1 */
last1 char(128) not null /* 4 last to end */
)
PCTFREE 10
PCTUSED 75
TABLESPACE easy_data
STORAGE
(
INITIAL 256k
NEXT 128k
);

create unique index testtable_idx on testtable (string1)
PCTFREE 10
TABLESPACE easy_indx
STORAGE
(
INITIAL 256k
NEXT 128k
);

这样写表示将表和索引建在不同的表空间:

TABLESPACE easy_data表示该表放在easy_data表空间,
PCTFREE 10表示一旦一个INSERT操作使得数据块的90%被使用,这个数据块就从空闲列表中移出(不再使用当前数据块),为何要保留10%的空间呢?这是为了提供update数据时所可能增加的空间使用,如果空间保留的太小,就容易发生row chaining;
PCTUSED 75表示当数据块使用的空间降到75%以下时,该数据块才被连接到空闲列表中,才可以往其中插入数据。PCTUSED代表着re-link回FREELIST的时间,如果说PCTUSED设的太大,这个数据块的利用率增加,但是I/O频繁造成了负荷(I/O Overhead)。PCTUSED设小一点,例如10,表示当数据块使用率降到10%的时候(比如发生了DELETE操作),才须要放回FREELIST,数据块可以再次使用了。简单的说,如果希望储存空间发挥最大使用效益,可以把PCTUSED设大一点,相反的,如果想要提高IO性能,应该把PCTUSED设定小一点。
INITIAL 256k表示该表建好初始化256k空间,
NEXT 128k表示该表使用空间每次递增128k。

索引放到easy_indx表空间,数据块90%被占用就不再使用,初始256k,每次递增128k。

当然,这些数值是需要很好的规划和计算的,这里只是一个示例。Oracle具体优化就比较复杂了,这里不作讨论。

7.SGA调整
SGA内存调整可以通过命令调整,也可以通过修改inioraid.ini文件方式,不过由于Oracle9i使用了spfile,Oracle官方不推荐使用initsid.ora。网上资料一大堆不再多说了!呵呵


后记

装完后就可以用了,不过虚拟机占用空间大小控制的怎么样呢,看看……
sda 占用6G 装完后看了一下,vgroot用掉了5.7G,还有/boot也占用了已部分空间,差不多
sdc 占用600M 也不算多,如果要用Oracle,/tmp下面最好有1G以上的空间,不过现在/tmp已经有很多安装时的临时文件了,可以清一次了。
sdb 占用2G 算了一下,装完数据库后各种数据加起来1G多点,看来我初始化的两个表空间,虽然还没有任何操作,不过应该是虚拟机已经分配了全部的硬盘空间了。这样这张盘应该有很高的压缩率,试了一下,果然,2G的文件可以压到200M多一点~
这样算下来这个虚拟机有8.6G了,还是比较大,于是我把上面建的库删了,建的裸设也删了,逻辑卷也删掉,sdb都重新建,准备重新建在文件系统上面试试。结果装下来,比裸设备小了100多M,不是很明显,不过如果初始化的表空间可以小一些,比如数据表空间300M,索引表空间100M,就能再小一点。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/166555/viewspace-873347/,如需转载,请注明出处,否则将追究法律责任。

上一篇: ORA-04021错误分析
请登录后发表评论 登录
全部评论

注册时间:2008-09-28

  • 博文量
    43
  • 访问量
    1926837