虛擬機器中RedHat AS4U2安裝Oracle

xinxinhg發表於2006-10-23

原文地址:

作者: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了,在可以查詢購買。不過,嘿嘿,當然,在網上很多地方都可以下載到。而且也有在Fedora上安裝成功的,Fedora本身是完全免費和開放的,好像在Fedora上安裝Oracle和在AS上安裝相差不多,估計就是一些包要自己去找,比如raw在Fedora上就沒有,這個是建裸裝置用的,後面再詳細說明。
oracle9204安裝軟體(一共三張盤,可到下載),還有就是各個升級和補丁包了。如升級到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 --&gt /dev/mapper/vgoradata-cwmlite
/dev/raw/raw1: bound to major 253, minor 2
/dev/raw/raw02 --&gt /dev/mapper/vgoradata-drsys
/dev/raw/raw2: bound to major 253, minor 3
/dev/raw/raw03 --&gt /dev/mapper/vgoradata-example
/dev/raw/raw3: bound to major 253, minor 4
/dev/raw/raw04 --&gt /dev/mapper/vgoradata-indx
/dev/raw/raw4: bound to major 253, minor 5
/dev/raw/raw05 --&gt /dev/mapper/vgoradata-odm
/dev/raw/raw5: bound to major 253, minor 6
/dev/raw/raw06 --&gt /dev/mapper/vgoradata-system
/dev/raw/raw6: bound to major 253, minor 7
/dev/raw/raw07 --&gt /dev/mapper/vgoradata-tools
/dev/raw/raw7: bound to major 253, minor 8
/dev/raw/raw08 --&gt /dev/mapper/vgoradata-undotbs
/dev/raw/raw8: bound to major 253, minor 9
/dev/raw/raw09 --&gt /dev/mapper/vgoradata-users
/dev/raw/raw9: bound to major 253, minor 10
/dev/raw/raw10 --&gt /dev/mapper/vgoradata-xbd
/dev/raw/raw10: bound to major 253, minor 11
/dev/raw/raw11 --&gt /dev/mapper/vgoradata-temp
/dev/raw/raw11: bound to major 253, minor 12
/dev/raw/raw12 --&gt /dev/mapper/vgoradata-redo01
/dev/raw/raw12: bound to major 253, minor 13
/dev/raw/raw13 --&gt /dev/mapper/vgoradata-redo02
/dev/raw/raw13: bound to major 253, minor 14
/dev/raw/raw14 --&gt /dev/mapper/vgoradata-redo03
/dev/raw/raw14: bound to major 253, minor 15
/dev/raw/raw15 --&gt /dev/mapper/vgoradata-control01
/dev/raw/raw15: bound to major 253, minor 16
/dev/raw/raw16 --&gt /dev/mapper/vgoradata-control02
/dev/raw/raw16: bound to major 253, minor 17
/dev/raw/raw17 --&gt /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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章