2007年10月27日 星期六

ORACLE安裝環境設定script

吳大:天哪!我為了學怎樣做oracle的DBA,己經安裝oracle十幾次了。

吳大:每次裝好丢入資料,只要覺得資料庫好像有問題,我就要重裝,
老是重複key那些環境參數,煩死了!

吳大的同事:啊你不是在學怎麼寫linux的shell script嗎?就拿這個當題目,寫個script吧!

吳大:對哦!我怎麼没想到!唉呀,真是聽君一席話,勝讀十年書哪。

於是,有了以下這個檔案。
有興趣的朋友,試用看看吧!
如果對大夥有幫助的話,也算是功德一件,對吧!阿彌陀佛。

還有,要是有人覺得該怎麼改比較好,有不錯的建議,請mail給我!
mailto:bullock0425@gmail.com

對了!忘了說明一件事,我是用在CentOS4上,我用在RHEL3或RHEL4也行。
只要是用rpm的linux distribution,應該都適用吧!我想。

save as "preinstalloracle.sh"
+--------------------------------------------------------------------------------------------------------------------------------+
#!/bin/bash
# Before your installation for oracle 10g database
# make sure your OS has the packages suport to install oracle 10g database
# This script file is created by Wu KuoHoung. 2007/10/27

datevalue=`date +"%Y/%m/%d %H:%M:%S"`
echo "# oracle 10 database setting ... $datevalue"
echo -e "Check the packages:\n"
rpm -qa binutils compat-* control-center gcc* glibc* gnome-libs libstdc* make pdksh sysstat xscreensaver setarch libaio
echo ""
read -p "Use 'yum install -y packages'?(y/N): " yN
if [ "$yN" == "y" ] || [ "$yN" == "Y" ]; then
echo "OK, Continue ..."
yum install -y binutils compat-* control-center gcc* glibc* gnome-libs libstdc* make pdksh sysstat xscreensaver setarch libaio
elif [ "$yN" == "N" ] || [ "$yN" == "n" ]; then
echo "Oh, interrupt!"
exit 11
else
echo "I don't know what is your choise, byebye."
exit 22
fi

# /etc/sysctl.conf
echo -e 'Setting the sysctl.conf (kernel parameters) ...'
echo '# oracle 10 database setting ... $datevalue' >> /etc/sysctl.conf
echo 'kernel.shmall = 2097152' >> /etc/sysctl.conf
echo 'kernel.shmmax = 2147483648' >> /etc/sysctl.conf
echo 'kernel.shmmni = 4096' >> /etc/sysctl.conf
echo 'kernel.sem = 250 32000 100 128' >> /etc/sysctl.conf
echo 'fs.file-max = 65536' >> /etc/sysctl.conf
echo 'net.ipv4.ip_local_port_range = 1024 65000' >> /etc/sysctl.conf
echo 'net.core.rmem_default = 262144' >> /etc/sysctl.conf
echo 'net.core.rmem_max = 262144' >> /etc/sysctl.conf
echo 'net.core.wmem_default = 262144' >> /etc/sysctl.conf
echo 'net.core.wmem_max = 262144' >> /etc/sysctl.conf
echo '' >> /etc/sysctl.conf
echo -e 'Run the lastestly kernel parameters: \n/sbin/sysctl -p'
read -p 'Do you want to do it right now? (y/N) ' Yn
if [ "$Yn" == "y" ] || [ "$Yn" == "Y" ]; then
echo "OK, Let's do it!!"
/sbin/sysctl -p
read -p "Continue ...(y/N): " yN
if [ "$yN" == "y" ] || [ "$yN" == "Y" ]; then
echo "OK, Continue ..."
elif [ "$yN" == "N" ] || [ "$yN" == "n" ]; then
echo "Oh, interrupt!"
exit 11
else
echo "I don't know what is your choise, byebye."
exit 22
fi
elif [ "$Yn" == "N" ] || [ "$Yn" == "n" ]; then
echo "Oh, interrupt!"
exit 33
else
echo "I don't know what is your choise, byebye."
exit 44
fi
echo ""

# /etc/security/limits.conf
echo -e 'Writting the setting to /etc/security/limits.conf ...'
echo '# oracle 10 database setting ... $datevalue' >> /etc/security/limits.conf
echo '* soft nproc 2047' >> /etc/security/limits.conf
echo '* hard nproc 16384' >> /etc/security/limits.conf
echo '* soft nofile 1024' >> /etc/security/limits.conf
echo '* hard nofile 65536' >> /etc/security/limits.conf
echo '' >> /etc/security/limits.conf
tail -n 6 /etc/security/limits.conf

# /etc/pam.d/login
echo -e 'Writting the setting to /etc/pam.d/login.conf ...'
echo '# oracle 10 database setting ... $datevalue' >> /etc/pam.d/login
echo 'session required /lib/security/pam_limits.so' >> /etc/pam.d/login
echo '' >> /etc/pam.d/login
tail -n 3 /etc/pam.d/login

# /etc/pam.d/su
echo -e 'Writting the setting to /etc/pam.d/su ...'
echo '# oracle 10 database setting ... $datevalue' >> /etc/pam.d/su
echo 'session required /lib/security/pam_limits.so' >> /etc/pam.d/su
echo '' >> /etc/pam.d/su
tail -n 3 /etc/pam.d/su

# /etc/profile
echo -e "Writting the setting to /etc/profile ..."
echo "# oracle 10 database setting ... $datevalue" >> /etc/profile
echo 'if [ $USER = "oracle" ]; then' >> /etc/profile
echo ' if [ $SHELL = "/bin/ksh" ]; then' >> /etc/profile
echo ' ulimit -p 16384' >> /etc/profile
echo ' ulimit -n 65536' >> /etc/profile
echo ' else' >> /etc/profile
echo ' ulimit -u 16384 -n 65536' >> /etc/profile
echo ' fi' >> /etc/profile
echo 'fi' >> /etc/profile
echo "" >> /etc/profile
tail -n 10 /etc/profile

echo -e "Create user, groups and directories for oracle 10g database!!"
# echo -e "You can use another termnital to do that with root privilege !"
echo -e "# groupadd oinstall"
groupadd oinstall
echo -e "# groupadd dba"
groupadd dba
echo -e "# useradd -g oinstall -G dba -m oracle"
useradd -g oinstall -G dba -m oracle
echo -e "# mkdir -p /opt/u01/app/oracle/product/10.2.0/db_1"
mkdir -p /opt/u01/app/oracle/product/10.2.0/db_1
echo -e "# chown -R oracle.oinstall /opt/u01"
chown -R oracle.oinstall /opt/u01
echo -e "# chmod -R 755 /opt/u01"
chmod -R 755 /opt/u01
echo -e "# mkdir -p /opt/u02/oradata"
mkdir -p /opt/u02/oradata
echo -e "# chown -R oracle.dba /opt/u02"
chown -R oracle.dba /opt/u02
echo -e "# chmod -R 755 /opt/u02"
chmod -R 755 /opt/u02
echo ""
echo -e "Remember to set the password of oracle!!OK!!\nUse command 'passwd oracle'"
sleep 5
echo -e "Writting the setting to /home/oracle/.bash_profile ..."
echo "# oracle 10 database setting ... $datevalue" >> /home/oracle/.bash_profile
echo 'umask 022' >> /home/oracle/.bash_profile
echo 'TMP=/tmp; export TMP' >> /home/oracle/.bash_profile
echo 'TMPDIR=$TMP; export TMPDIR' >> /home/oracle/.bash_profile
echo 'ORACLE_BASE=/opt/u01/app/oracle; export ORACLE_BASE' >> /home/oracle/.bash_profile
echo 'ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME' >> /home/oracle/.bash_profile
echo 'ORACLE_SID=MISLAB; export ORACLE_SID' >> /home/oracle/.bash_profile
echo 'ORACLE_TERM=xterm; export ORACLE_TERM' >> /home/oracle/.bash_profile
echo 'PATH=/usr/local/bin:/usr/sbin:~/bin:$PATH; export PATH' >> /home/oracle/.bash_profile
echo 'PATH=$ORACLE_HOME/bin:$PATH; export PATH' >> /home/oracle/.bash_profile
echo 'LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH' >> /home/oracle/.bash_profile
echo 'CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH' >> /home/oracle/.bash_profile
echo '' >> /home/oracle/.bash_profile
tail -n 13 /home/oracle/.bash_profile
# echo redhat-4 > /etc/redhat-release
echo -e "Writting the setting to /etc/redhat-release ..."
mv /etc/redhat-release /etc/redhat-release.default
echo redhat-4 > /etc/redhat-release
cat /etc/redhat-release

echo -e "DONE..."
echo -e "**Do not forget to set the password of oracle**\nUse command 'passwd oracle'"
echo -e "Ready to install oracle 10g database!!"

還原MBR能用grub開機

最近一直有雜務干擾,
搞得我想考LPIC level 1 102的計畫也跟著延宕多日。
先是公司要我接下oracle的DBA,
好不容易,有點進入狀況說。
以為可以專心準備考試了!
没想到老婆大人又給了另一個難題!
由於我的小舅子去台中工作,
怕平日無聊想弄台電腦可以上上網消遣。
又怕用台新電腦,要是宿舍出入份子複雜,
難保電腦遭竊,得不償失。

所以要求我把我以前的舊筆記型電腦拿出來,
整理一下,好借給小舅子用。
而小舅子表面上說是借用,其實我心裡有數,
這一借可能不會還了。
老實說,那部筆電也跟了我不少歳月,
就這麼奉獻出去,多少有點不捨。

而且那部電腦我裝的作業系統是ubuntu linux,
要是就這麼讓小舅子拿去用,
那他肯定說我這個姐夫小氣,
給了台「不能用」的電腦!

好在我之前有規畫雙系統在這部筆電上,
所以要用windows,還是有解的。
但是我開機試了好久,發現windows居然開不起來了!
怎麼辦?重裝windows吧!
反正筆電的windows本來就不怎麼在用,
有資料的話,應該都在linux裡頭。
於是,動手開始重裝windows!

也許老婆和小舅子會質疑?
如果要重裝,幹嘛還留著linux!
嘿嘿!原諒我耍了個小心機,
我只是心想,筆電也許還會回到我身邊的那天,
linux留著也許還用得到吧。
加上筆電的硬碟容量本來就不大,才20G。
當初分給windows用的容量也才8G而己...
這麼一來,小舅子肯定不能再亂裝軟體,或是亂抓檔案,
也能降低筆電被小舅子搞壞的風險了。
我這招不錯吧!
更也許因為不能亂搞我的筆電,
覺得不好用,就因此把筆電還我了,也說不定!

好打定主意,就這麼辦!重裝windows。
重裝的過程中,並没有太大的問題,
只是因為筆電有些過時了,
要以NTFS檔案系統裝進windows XP,好像行不通!
最後以FAT模式裝好windows XP,搞定。

好了,這下我給自己出了個題目,
如何把之前裝好ubuntu linux時裝入MBR的開機選單給還原回來?
因為重裝windows後,MBR會被清除掉,
換成windows那套開機管理程式!M$真够霸道的!

但我有linux使用的技能,不怕被M$吃定!
找了片Knoppix光碟,開始動工,
要把我的grub開機選單裝回來!

玩過雙作業統的朋友都知道,
大部份教你裝linux和windows到電腦裡時,
都會提示說:要先裝windows再裝linux!
好像要是不這麼作的話,是没辦法讓電腦有雙作業系統的。

哈!哈!哈!
其實這是不正確的觀念,
也是因為對linux技術不够了解,
才會有這樣不成文的規定出來。
但我想,也許這不是因為那些書的作者不懂linux技術,才那麼寫書!
而是想把操作的順序做個防呆措施,
好讓讀者能無痛入門進到linux的世界吧!
就像我之前提到的,你重裝windows後,
開機選單是會被M$換成它們獨有,僅能進入windows的開機選單的。
那像linux那麼無私,容許建立多作業系統的開機選單呢。

好了!有人開始不耐煩。
我己經廢話一堆了!

在摩托學園有篇文章,討論怎麼在有雙作業系統,
重裝windows之後把grub重裝,好恢復之前的開機選單?

http://moto.debian.org.tw/viewtopic.php?t=10077

回到我的主題!
先說明一下我的硬碟規劃。
我有一個windows的C磁碟,也就是linux的hda1。
再來是幾個windows不能辨識的partition,
分別是hda2也就是我安裝ubuntu linux的根目錄!(當初没規劃/boot)
和一個當初莫名奇妙分到邏輯磁碟區的hda5,做swap用的!

現在讓我先用Knoppix開機!
用sudo su -指令來使用root身份。
然後用fdisk -l檢視一下磁碟的份割...
基本上,你可以利用fdisk -l看到的資訊,來掛載那些磁碟分割。
由於我之前的linux,只有用到一個hda2,
那個hda5可不管,因為swap用的分割和安裝grub無關!

OK!Let's do it, as soon as possible.
#mkdir -p /mnt/linux
#mount -t reiserfs /dev/hda2 /mnt/linux

嘿!那個reiserfs是我好奇用的linux file system,
不是常見的ext2/ext3,別見怪。

再來!
#mount -t proc none /mnt/linux/proc
#chroot /mnt/linux

快好了!
之所以要把proc掛到/mnt/linux/proc,
是因為我們有些主機資訊在開機完成後,
都寫到/proc了,而在chroot前,若是不把/proc調動一下,
掛到之後可對應的proc虚擬分割的話,
那grub是無法正確安裝的!

在chroot指令之後,事實上!我們己經回到之前安裝的那個linux環境了。
不信你可以找一下檔案,或看一下目錄的配置。對吧!

最後...
#grub

執行grub指令進入grub命令模式後,依序執行以下敘述:

step1:
root (hd0,1)

ps1/你可以在grub指令環境下用tab鍵,可以找出一些有用的資訊。
ps2/而(hd0,1)對應的就是hda2,(hd0,0)則是對應hda1,要注意!

step2:
setup (hd0)

step3:
quit

ps1/將啟動程式寫入硬碟的MBR磁區。然後離開,完成!


重新開機,成功把我之前的grub開機選單裝回來囉!

吳大 2007/10/27

2007年10月25日 星期四

linux自動啟動及停止 Oracle 資料庫

以下文字是參考http://www.linux.org.tw/CLDP裡的文件做成,
感謝linux.org.tw的前輩們,
無私而且不辭辛勞的把linux各種技術分享出來!

在此吳大我也將遵循linux共享奉獻的精神,
把我成功設定oracle 10g資料庫,
可以在linuxOS開關機時,自動把資料庫啓動及關閉的經驗分享給大家。
希望能對那些在做oracle 10g DBA的朋友們,有所助益!

要達成在linuxOS開關機時,可以把oracle 10g資料庫啓動及關閉。
你需要對linux的runlevel運作模式有所概念,
然後運用以下三份命令稿,就能達成我們的目的了。

我正式在跑資料庫的主機作業系統是RHEL3,
但我在CentOS環境作同樣的設定也相容。
可見和RedHat有血緣關係的linux版本,應該都適用我這份文件內容才對!

以oracle帳號登入吧!
首先,要在你oracle帳號的$PATH定義中,
能找到/home/oracle/bin這個路徑,
因為我們要把兩個命令稿分別叫 dbstartup 和 dbshutdown 放在這裡!
用echo看看PATH變數,確認一下吧!
[oracle@testhost oracle]$ echo $PATH

没有的話,可能你要修改一下你的.bash_profile或是.profile檔案,
反正就是在定義使用者登入時環境變數的檔案就是了。
語法應該會是:
PATH=$PATH:~/bin

PATH=$PATH:/home/oracle/bin
都行!寫在你的.bash_profile或.profile的最後一行也行。

接著,以下是兩個檔案的內容,
要放在/home/oracle/bin的!

[oracle@testhost oracle]$ vi dbstartup
+-----------------------------------------------------------------------------------------------+
#dbstartup
#/home/oracle/bin
sqlplus / as sysdba <<EOF
startup
exit
EOf
:wq 離開vi ,產生dbstartup檔案!

[oracle@testhost oracle]$ vi dbshutdown
+-----------------------------------------------------------------------------------------------+
#dbshutdown
#/home/oracle/bin
sqlplus / as sysdba <<EOF
shutdown immediate
exit
EOF
:wq 離開vi ,產生dbshutdown檔案!

記得要有執行權限的檔案屬性給它們。
[oracle@testhost oracle]$chmod +x dbstartup dbshutdown

做到這裡,等於你成功一半了,
但了為保險起見,我們還是測一下這兩命令稿的效果好了。
免得高興得太早,資料庫動也不動。
[oracle@testhost oracle]$ dbshutdown

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Oct 26 13:42:23 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@testhost oracle]$

由於之前我己經把資料庫開起來了,所以執行可以dbshutdown來關資料庫。
好,那你可以再用dbstartup試試,應該也没問題的!
因為語法大同小異,其實就startup和shutdown immediate的差異而己啊!
嗯!測試成功!我們可以繼續了...

下面這個命令稿和相關設定比較複雜些,
我簡單說明一下,它以bash的case判斷式,
再運用su -l oracle -c "oracle-command"的方式,
去呼叫之前的dbstartup和dbshutdown。
來達到如我們在啓動一些服務的效果!

啓動oracle 10g 資料庫服務:
[oracle@testhost oracle]$ sudo /etc/rc.d/init.d/oracle start

關閉oracle 10g 資料庫服務:
[oracle@testhost oracle]$ sudo /etc/rc.d/init.d/oracle stop

重啓oracle 10g 資料庫服務:
[oracle@testhost oracle]$ sudo /etc/rc.d/init.d/oracle restart

我用sudo是要以root身份執行,但如何讓oracle有執行sudo,
不在這次的題目中,請另行處理吧!
OK,當/etc/rc.d/init.d/oracle這個命令稿有上述的功能後,
我們再進一步設定成linuxOS主機可以在開機關機時,
也能够把資料庫服務一併開關就完成我們這次主題的終極目標了。


[oracle@testhost oracle]$ sudo vi /etc/rc.d/init.d/oracle
+-----------------------------------------------------------------------------------------------+
#!/bin/sh
# /etc/rc.d/init.d/oracle
#linux自動啟動及停止 Oracle 資料庫和監聽程式

case "$1" in
start)
echo -n "Starting Oracle 10g Databases : "
echo "-------------------------------------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Starting Oracle 10g Databases as part of system start." >> /var/log/oracle
echo "-------------------------------------------------------------------------------" >> /var/log/oracle
echo -n "Oracle 10g Databases Starting : "
su - oracle -c dbstartup >> /var/log/oracle
echo "Done."
echo -n "Oracle 10g Listeners Starting : "
su - oracle -c "lsnrctl start" >> /var/log/oracle
echo "Done."
# echo -n "Oracle 10g OEM Starting : "
# su - oracle -c "emctl start dbconsole" >> /var/log/oracle
# echo "Done."
echo ""
echo "-------------------------------------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "-------------------------------------------------------------------------------" >> /var/log/oracle
touch /var/lock/subsys/oracle
;;
stop)
echo -n "Shutting Down Oracle 10g Listeners : "
echo "-------------------------------------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Shutting Down Oracle 10g Databases as part of system down." >> /var/log/oracle
echo "-------------------------------------------------------------------------------" >> /var/log/oracle
# echo -n "Oracle 10g OEM Stopping : "
# su - oracle -c "emctl stop dbconsole" >> /var/log/oracle
# echo "Done."
echo -n "Oracle 10g Listeners Stopping : "
su - oracle -c "lsnrctl stop" >> /var/log/oracle
echo "Done."
rm -f /var/lock/subsys/oracle
echo -n "Shutting Down Oracle 10g Databases : "
su - oracle -c dbshutdown >> /var/log/oracle
echo "Done."
echo ""
echo "-------------------------------------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "-------------------------------------------------------------------------------" >> /var/log/oracle
;;
restart)
echo -n "Restarting Oracle 10g Databases: "
echo "-------------------------------------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Restarting Oracle 10g Databases as part of system up." >> /var/log/oracle
echo "-------------------------------------------------------------------------------" >> /var/log/oracle
echo -n "Shutting Down Oracle 10g Databases : "
su - oracle -c dbshutdown >> /var/log/oracle
echo "Done."
echo -n "Oracle 10g Databases Starting : "
su - oracle -c dbstartup >> /var/log/oracle
echo "Done."
echo -n "Oracle 10g Listeners Stopping : "
su - oracle -c "lsnrctl stop" >> /var/log/oracle
echo "Done."
# echo -n "Oracle 10g OEM Stopping : "
# su - oracle -c "emctl stop dbconsole" >> /var/log/oracle
# echo "Done."
# echo -n "Oracle 10g OEM Starting : "
# su - oracle -c "emctl start dbconsole" >> /var/log/oracle
# echo "Done."
echo -n "Oracle 10g Listeners Starting : "
su - oracle -c "lsnrctl start" >> /var/log/oracle
echo "Done."
echo ""
echo "-------------------------------------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "-------------------------------------------------------------------------------" >> /var/log/oracle
touch /var/lock/subsys/oracle
;;
*)
echo "Usage: oracle {start|stop|restart}"
exit 1
esac


以上內容,僅供參考,請視狀況修訂!
像是listener開關和資料庫開關的順序,
我個人的實際經驗是認為誰先誰後,並不影響資料庫的運作!
甚至listener可以保持在一定聆聽的狀況,只要重啓資料庫即可。

還有emctl的使用,若是用不到,就像我在內容中就註解掉不啓用了,
也可以讓機器效能好一點,不過好多少我没把握。

搞定這個最後的命令稿後,
我們要進入最後一個步驟了。
我們要在適當的執行等級目錄中 (/etc/rc.d/rcX.d),
建立符號連結 (symbolic links)。

讓我們以root身份來完成這最後的工程!畫下完美的句點吧!
[oracle@testhost oracle]$ sudo su -l root

切換成root後!
[root@testhost root]#
[root@testhost root]# cd /etc/rc.d/init.d
[root@testhost init.d]# ln -s ../init.d/oracle /etc/rc.d/rc3.d/S99oracle
[root@testhost init.d]# ln -s ../init.d/oracle /etc/rc.d/rc5.d/S99oracle
[root@testhost init.d]# ln -s ../init.d/oracle /etc/rc.d/rc0.d/K01oracle
[root@testhost init.d]# ln -s ../init.d/oracle /etc/rc.d/rc6.d/K01oracle

好了!我們己經在啓動的runlevel 3和5 做開機就啓動oracle的服務設定,
而關機的runlevel 0和重開機的runlevel 6也有關掉oracle的服務設定!
大功告成!

測試一次,現在我們不必再進資料庫關閉它了。
直接關閉機器!
[root@testhost init.d]# shutdown -r now

你應該可以在開關機的過程中,看到oracle 關閉啓動的訊息。
為了再求證我們這些設定是否有用,讓我們進資料庫看看狀況吧。

用oracle帳號登入!
[oracle@testhost oracle]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Oct 26 15:56:15 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>


手動啓動庫資料看看!
SQL> startup
ORA-01081: cannot start already-running ORACLE - shut it down first
SQL>

哈!資料庫already running了!成功!

吳大 2007/10/26

2007年10月24日 星期三

搞定ORACLE資料庫物理備份

忙了快一個月,
總算ORACLE 10g的主機備份弄出個頭緒了。
記得網路上有提到ORACLE DB資料,
可以用物理備份的方法來執行。
以為我們可以用像ghost的方式來做,
結果發現ORACLE的運作方式,
我們根本没有考慮到。
造成就算是磁區備份成了,但倒回去還是不能動。
因為資料庫的運作機制,
redofile,controlfile,datafile...
都要能對映起來,
絶對不是單純的把partition拷貝起來就OK的。

不過,只要把ORACLE的運作原理稍有了解,
還是能用SysmanTec ghost,Acronis TrueImagePartimage等軟體,
把資料備起來的!
在linux的環境下,只要好好運用tar指令,
也是能做好oracle的備份的。

ORACLE 10g自有一套備份還原的機制,
物理備份,只是把機器掛掉的風險減少些許而己,
但資料庫運作的備份還原若不深入研究一番的話。
日後資料出問題,物理備份!只能救機器而己吧。

在linux的環境下,怎麼做ORACLE的物理備份?
坦白說,在linux環境下安裝ORACLE是比在windows環境難多了,
但你以為會用linux安裝ORACLE,就算是個DBA,就很厲害了嗎?
嘿嘿!千萬別這麼自以為是,日後可是會吃苦頭的。

來,吳大最近研究了一下ORACLE的備份機制,
什麼exp/imp,expdb/impdb的,實在不好懂,
但我趕著要把資料庫先備份一下,
免得在我這個DBA新手不當操作之下,造成資料庫損毀,
那可就準備收拾細軟,回來吃自己啦!

如果你會Partimage或是SysmanTec ghost,Acronis TrueImage等軟體的話最好!
Partimage是GPL軟體,你可以儘管試用沒關係,
但SysmanTec ghost和Acronis TrueImage就不行了,
它們是商用軟體,濫用會被罰錢甚至吃上官司的。
在此我推薦Acronis TrueImage,由於我是在linux環境進行,
據了解,它的執行效果不錯,
想像一下,若是你的資料庫己經大到幾十G的空間,
若是工具不好的話,你得等上一兩天才做好硬碟備份,
我想任何人都受不了的!

接下來,資料庫的啓動和關閉你會吧!
什麼,還不會,天哪!資料庫主機處境危險哦。
趕快去找書看吧,不然找一下google!
還好開關資料庫還下是很難,
如果你的系統建置廠商有把oracle帳號環境設好的話,
你就可以以linux主機系統認可的方式,直接進oracle DB!
指令是sqlplus "/ as sysdba",雙引號可以省去没關係。
[oracle@macrodbbk oracle]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Oct 25 14:46:18 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>

OK!看到SQL>表示成功連接資料庫系統了,
接下來要啓動資料庫,指令是startup。
SQL> startup
ORA-01081: cannot start already-running ORACLE - shut it down first
SQL>

因為我們之前己經啓動好了!所以出現ORA-01081的錯誤訊息。關掉它吧!
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
看到shut down表示成功關閉,没有異常。
好,再次啓動!
SQL> startup
ORACLE instance started.

Total System Global Area 1828716544 bytes
Fixed Size 1219976 bytes
Variable Size 201327224 bytes
Database Buffers 1610612736 bytes
Redo Buffers 15556608 bytes
Database mounted.
Database opened.
SQL>

呼!Safe,啓動成功!
之前我經歷了一次資料庫幾乎損毀的狀況歷鍊,
所以現在看資料庫成功無誤的關閉或啓動,
心中總是感慨萬千啊!

注意啦!接下來才進入重點...

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u02/db/NICE/system01.dbf
/u02/db/NICE/UNDOTBS1.dbf
/u02/db/NICE/sysaux01.dbf
/u02/db/NICE/users01.dbf
/u02/db/NICE/ZGT.dbf
/u02/db/NICE/ZGTIDX.dbf
/u02/db/NICE/EIP.dbf


7 rows selected.

SQL>

看到没,那句select語法,把你的資料庫檔案放那裡給指出來了。
所以呢!我們若是要進行partition備份,/u02就是其中之一了。了解否!

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/u02/db/NICE/control01.ctl
/u02/db/NICE/control02.ctl
/u02/db/NICE/control03.ctl

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u02/db/NICE/redo03.log
/u02/db/NICE/redo02.log
/u02/db/NICE/redo01.log

SQL>

再來我又用了兩句select把控制檔和還原用的日誌檔位置找出來了。
總上所述,你要想盡辦法,把那些.dbf,.ctl,.log的檔案備份下來就是了。
再加上$ORACLE_HOME裡頭所有的檔案好,那就是完整的資料庫物理備份了。
怎麼做?工具的使用,我再找時間寫吧。
還有,我之前就提到了,linux的tar指令只要用得好,那些工具軟體就不需要囉。
最後再加註一點,既然你要做物理備份,你的硬碟一定要够大,
不然備份這遊戲,你是玩不起來的。

對了,我最最後再強調一點,物理備份一定要在資料庫關閉的狀況下執行。
在資料庫還在啓動的狀態下做物理備份也是會成功,
只是你還原回去,資料庫還是會因為那些.dbf,.ctl,.log檔案,
有你執行備份的時間差,而湊不起來的。
ORACLE的DBA!!不容易啊!

2007年10月22日 星期一

ORACLE錯誤代碼EXP-000091

<吳大註解>
下文的指令,語法...
sql的部份要下在sqlplus執行後!

$sqlplu / as sysdba

接下來...
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Oct 22 16:01:26 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>

出現SQL>後才能下oracle sqlplus的命令!
select * from v$nls_parameters where parameter='NLS_CHARACTERSET';

查到的value值就是要定義到環境變數的東東。
像吳大我是把它給寫進.bash_profile裡頭,
反正寫到你的shell環境變數相關的檔案就是!
加入以下那行:
export NLS_LANG=AMERICAN_AMERICA.ZHT16BIG5
或是...
export NLS_LANG=AMERICAN_AMERICA.ZHT16MSWIN950

另外,查錯誤訊息的指令是oerr!
要以oracle帳號執行,因為環境變數的設定,
只有oracle帳號才找得到oracle相關命令的路徑!

|範例|
$oerr exp 91



以下才是引文的開始...

EXP--解決EXP-00091的方法
===========================================================
對一個DBA或需使用exp,imp的普通用戶來說,在我們做exp的過程中可能經常會遇到EXP-00091 Exporting questionable statistics.這樣的EXP信息,其實它就是exp的error message,它產生的原因是因為我們exp工具所在的環境變量中的NLS_LANG與DB中的NLS_CHARACTERSET不 一致。但需說明的是,exp-91這個error message對所生成的dump檔沒有影響,生成的dump檔還可以正常的imp(個人體會,不知道有沒有錯),雖然它對我們的dump檔沒有影響,我 個人還是不想它出現,大家也有同感吧, 。。下面我們就讓它消失吧。。我們一起來

step 01 查看DB中的NLS_CHARACTERSET的值(提供兩種方法):


select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET'
or
select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';

PARAMETER     VALUE
-----------------------  ----------------------------------------------
NLS_CHARACTERSET ZHT16BIG5

step 02 根據step 01查出的NLS_CHARACTERSET(ZHT16BIG5)來設定exp的環境變量:


WINNT> set NLS_LANG=AMERICAN_AMERICA.ZHT16BIG5
LINUX> export NLS_LANG=AMERICAN_AMERICA.ZHT16BIG5

附上exp-91的oracle error message 解決方案說明:

oerr exp 91
00091, 00000, "Exporting questionable statistics."
// *Cause: Export was able export statistics, but the statistics may not be
// usuable. The statistics are questionable because one or more of
// the following happened during export: a row error occurred, client
// character set or NCHARSET does not match with the server, a query
// clause was specified on export, only certain partitions or
// subpartitions were exported, or a fatal error occurred while
// processing a table.
// *Action: To export non-questionable statistics, change the client character
// set or NCHARSET to match the server, export with no query clause,
// export complete tables. If desired, import parameters can be
// supplied so that only non-questionable statistics will be imported,
// and all questionable statistics will be recalculated.

2007年10月10日 星期三

Installing Oracle 10g on RHEL AS 3 Step-by-Step



吳大:測試機若能也裝RHEL3就好了!

吳大的同事:喂!測試機不能用虚擬機器作嗎?

吳大:拜託!我本來也想這麼做,結果你知道我安裝花了多少時間嗎?
失敗了三次,成功的那次裝了快兩天!你看看我現在快掛掉的模樣...不然換你做!

吳大的同事:這樣啊!那...好吧!

出處:http://www.dbanotes.net/Oracle/Install-Oracle10g-RHEL3.htm
[Oracle] Installing Oracle 10g on RHEL AS 3 Step-by-Step

整理:Fenng
日期:06-Apr-2004  
出处:http://www.dbanotes.net
版本:1.01

不久前,Oracle(甲骨文)公司在美国加州的总部宣布, Oracle 10g 数据库 与 Oracle RAC 在 TPC-H 基准测试中创造了新的世 界纪录.这是个令人震惊的消息.因为这个测试是在 Linux ( Red Hat Enterprise Linux Advanced Server 3) 的平台上进行的. 这充分显示了 Oracle 在低成本 Linux 集群服务器上高效管理大规模数据仓库的能力, 也表明 Linux 在性能价格比上显而易见 的优势,标志着Linux在大规模企业应用上已经成熟.

相信很多朋友已经对10g跃跃欲试了,现在从这里让我们开始10g之旅.

本文描述了在Red Hat Enterprise Linux Advanced Server 3 (RHEL 3)上安装Oracle 10g 必要的步骤和相关知识. 本文假定 你的Linux 操作系统已经安装完毕,并且您应该具有一定的 Unix 操作系统背景知识.

配置RedHat AS 3


操作系统版本:
Red Hat Enterprise Linux AS release 3 (Taroon)
Kernel 2.4.21-4.EL on an i686

按照常规来安装操作系统,记得要安装开发工具(gcc等必要工具).

必要的硬件信息检查


检查内容 最小值 检查命令参考
物理内存 512M # grep MemTotal /proc/meminfo
交换空间 1.0 GB或者2倍内存大小 # grep SwapTotal /proc/meminfo
/tmp 空间 400 MB # df -k /tmp
软件所需空间 2.5 GB # df -k (空间越大越好,如果是正式系统,应该进行详尽的规划)
数据库文件 1.2 GB # df -k (空间越大越好,如果是正式系统,应该进行详尽的规划)

检查完如上各项之后, 应该修改核心参数.执行如下命令:

#vi /etc/sysctl.conf

#注释:
#表示使用root用户操作,$表示使用oracle 用户进行操作.提示符后面的蓝色部分表示需要输入的命令,以下同.

在该文件末尾加入如下内容:
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
编辑完之后,保存,执行 # /sbin/sysctl -p 命令操作来使我们所做的变更生效.

注:上面kernel.shmmax/kernel.sem等是典型的核心参数配置.您可能需要根据您的实际环境进行适当的变动.

关于这些核心参数的说明在Oracle的 Oracle9i Installation Guide Release 2 (9.2.0.1.0) for UNIX Systems
有很详细的说明.( http://download-west.oracle.com/docs/html/A96167_01/toc.htm )

然后,应该检查一下上面的操作是否正确:
# /sbin/sysctl -a | grep sem
# /sbin/sysctl -a | grep shm
# /sbin/sysctl -a | grep file-max
# /sbin/sysctl -a | grep ip_local_port_range

为Oracle用户设定Shell的限制

一般来说,出于性能上的考虑,还需要需要进行如下的设定,以便改进Oracle用户的有关 nofile(可打开的文件 描述符的最大数)和nproc(单个用户可用的最大进程数量)

# vi /etc/security/limits.conf
# 添加如下的行

* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536
添加如下的行到/etc/pam.d/login 文件:
session    required     /lib/security/pam_limits.so
编辑 /etc/profile 文件,添加如下部分:
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi

之后,执行$ unlimit 验证一下.

检查并安装相关补丁

在这个版本的RHEL上安装Oracle,必须要有几个软件包. 确认以下 rpm包都已经安装:

make-3.79
binutils-2.11
openmotif-2.2.2-16
setarch-1.3-1
compat-db-4.0.14.5
compat-gcc-7.3-2.96.122
compat-gcc-c++-7.3-2.96.122
compat-libstdc++-7.3-2.96.122
compat-libstdc++-devel-7.3-2.96.122

# rpm -qa | grep compat
# 在我的机器上输出如下:

compat-gcc-c++-7.3-2.96.122
compat-libstdc++-7.3-2.96.122
compat-libstdc++-devel-7.3-2.96.122
compat-glibc-7.x-2.2.4.32.5
compat-db-4.0.14-5
compat-gcc-7.3-2.96.122

# rpm -qa | grep openmotif
openmotif-devel-2.2.2-16
openmotif-2.2.2-16

# rpm -qa | grep setarch
setarch-1.3-1

上面显示的内容是在笔者已经安装了具体的RPM包之后的结果.一般情况下,你的系统上的输出结果和这个不同.如果个 别包没有安装,把系统安装光盘mount上,找到具体的软件包(大多数在第三张光盘上),然后利用如下的命令来安装相应 的包:
# rpm -ivh compat.....rpm
要额外注意的是,这些软件包之间是有依赖性的,先后的顺序要找好.否则会报告不能安装的错误. 此外,最好验证一下 gcc和glibc的版本(要求是gcc-3.2.3-2 或者更高):
#gcc -v
#rpm -q glibc

创建用户和相关的组

# /usr/sbin/groupadd oinstall
# /usr/sbin/groupadd dba
# /usr/sbin/useradd -g oinstall -G dba oracle 

如果只是测试目的的话,不创建oinstall组也没什么. 不过还是规范一点比较好.如果oracle 用户和dba组等已经存在,作 适当的调整即可.

检查并调整环境变量

登录为oracle用户

# su - oracle
$ cd
$ vi .bash_profile
#添加如下内容,你的具体值应该不会和这个完全相同.
export ORACLE_BASE=/u/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.1.0/db_1
export ORACLE_SID=TEST
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export LC_CTYPE=en_US.UTF-8
然后执行
$ source .bash_profile

使环境变量生效. /u/app/oracle 等目录应该建立好并做合适的授权.

开始安装10g

mount你的安装盘.(我一般都是把文件拷贝到系统中一个具体的位置,比如/u/install ) .执行:

$ sh /u/install/runInstaller

如果不能出现安装画面,查看本文后面的FAQ。

非常值得称道的是,10g的安装相比以前的多了一个 Checking operating system certification 的步骤。特别实用。 安装文件会自动检测所需的条件。如果有不符合的地方,安装程序会报告给你.并会给出具体原因。大大减少了出错的可能. 下面是检查成功输出的内容 :
Checking operating system certification
Expected result: One of redhat-2.1,redhat-3,UnitedLinux-1.0
Actual Result: redhat-3
Check complete. The overall result of this check is: Passed
=======================================================================

Checking kernel parameters
Checking for VERSION=2.4.9.25; found VERSION=2.4.21. Passed
Checking for shmall=2097152; found shmall=2097152. Passed
Checking for shmseg=10; found shmseg=4096. Passed
Checking for semmsl=250; found semmsl=250. Passed
Checking for semmni=128; found semmni=128. Passed
Checking for filemax=65536; found filemax=65536. Passed
Checking for shmmni=4096; found shmmni=4096. Passed
Checking for semmns=32000; found semmns=32000. Passed
Checking for semopm=100; found semopm=100.Passed
Checking for shmmin=1; found shmmin=1. Passed
Checking for shmmax=2147483648; found shmmax=2147483648. Passed
Check complete. The overall result of this check is: Passed
=======================================================================

Checking recommended operating system packages
Checking for make-3.79; found make-3.79.1-17. Passed
Checking for binutils-2.11.90.0.8-12; found binutils-2.14.90.0.4-26. Passed
Checking for gcc-2.96; found gcc-3.2.3-20. Passed
Checking for openmotif-2.1.30-11; found openmotif-2.2.2-16. Passed
Check complete. The overall result of this check is: Passed
=======================================================================

Checking recommended glibc version
Expected result: 2.2.4.31.7
Actual Result: 2.3.2.95.3
Check complete. The overall result of this check is: Passed
=======================================================================

Validating ORACLE_BASE location (if set)
Check complete. The overall result of this check is: Passed
=======================================================================

其他的步骤比较清晰,不再赘述.

最后系统会提示你运行root.sh文件.按照提示做即可.

FAQ (在Linux平台安装Oracle比较常见的问题)

1. 不能启动安装界面

运行runInstaller提示信息类似如下:

xlib:connection to "localhost:0.0" refused by server
xlib:client is not authorized to connect to server

Exception in thread "main" java.lang.InternalError:
can't connect to x11 window server using "localhost:0.0" at .......

解决办法: 设定你的DISPLAY环境参数.

# export DISPLAY= your_IPaddress :0.0

把your_IPaddress换成你的IP.或者用root简单的执行一下# xhost + (要注意这样会有安全上的隐患)

2.安装界面显示很多"口口"样子的乱码

解决办法:查看locale输出

# locale
LANG=en_US.UTF-8
LC_CTYPE=zh_CN.GB18030
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

执行#export LC_CTYPE=en_US.UTF-8 然后重新调用安装程序.

3. 用IE登录Linux服务器上的em出现乱码


在Linux(Unix) 环境下成功安装了Oracle 10g,从windows下用IE浏览器登录 10g 的em, 按钮是"口口"这样的方框.

解决办法: 参考:
http://www.dbanotes.net/Oracle/Oracle-10g-font.properties.htm 

4.创建数据库的时候出现ORA-03113的错误

解决办法: 查看核心参数是否调整正确.参考:

http://www.dbanotes.net/Oracle/ORA-03113.htm

5. RedHat 9 / FC1等系统10g不支持如何安装?


解决办法:在10g不支持的Linux发行版上安装10g的解决方法

1). 运行runInstaller -ignoreSysPrereqs,这样会跳过检查.
2). 摘自 www.puschitz.com 修改/etc/redhat-release文件:
#su - root
#cp /etc/redhat-release /etc/redhat-release.backup
#cat > /etc/redhat-release <<>
安装完毕,执行如下操作:
#su - root
#cp /etc/redhat-release.backup /etc/redhat-release
3). http://www.dbanotes.net/Oracle/10G-Beta-Install-Bug.htm

同样的思路,我们可以修改Oracle 的install/oraparam.ini文件达到目的.

6.如何关掉那些 ocssd.bin 进程?

解决办法:编辑/etc/inittab文件(做好备份)

注释掉这一行:
h1:3:respawn:/etc/init.d/init.cssd run >/dev/null 2>................

参考信息

Werner Puschitz 的 10g 安装指南 - http://www.puschitz.com/InstallingOracle10g.shtml
Werner Puschitz 的站点的文章很翔实,如果您遇到了本文没有说清的问题,可以去看看那里.本文借鉴了该站点不少内容.

http://www.google.com - http://www.google.com
关于核心参数等信息一定要用Google查找.

Oracle Database Quick Installation Guide 10g Release 1 (10.1) for Linux x86
http://download-west.oracle.com/docs/html/B10813_01/toc.htm

Oracle Database Installation Guide 10g Release 1 (10.1) for UNIX Systems http://download-west.oracle.com/docs/html/B10811_02/toc.htm

DBAnotes.net 我的站点 包括不少和Oracle有关的信息 - http://www.dbanotes.net

在CentOS 4.5上安裝Oracle 10g

這個月原本有個重大的目標,
就是要去考LPIC 102!!

可是因為部門裡頭,有位同事要離職,
工作部分交到我手頭上,導致在時間分配上,
根本沒有多餘時間來準備考試。

現在我要趕緊把交接給我的那部份工作,這半個月以來的過程,
好好把筆記留下來,至於考試...唉!再說吧!

對了!補充說明一下,我交接給我的新工作是oracle 10g 的DBA。
這兩三個星期,我相關的書看了不少,
但實戰經驗實在少得可憐,很是惶恐!!

先有個測試環境,實機操作再說。
我有個目標,先找個機器,因為要跑得順暢,等級不能太差,
裝好OS後,再裝ORACLE 10g。
再把我們公司正式的資料 import 進來。
最後,請軟體系統維護的同事協助測試看看,資料的可用性如何?
還有呢?再想吧!!



在CentOS 4.5上安裝Oracle 10g
出處:http://forum.hongtalk.net/thread-6119-1-1.html

首先要說明一下Oracle 10g官方只能安裝在Red Hat、Suse、UnitedLinux及asianux上。
CentOS是Red Hat的免費版,除了付款服務外,基本上沒有太大分別,
所以CentOS絕對可以安裝Oracle 10g。

在教學裡,我在Linux上建立了一個mount point「/u01」在20G的硬碟上。

請確保你已安裝以下Package:

* binutils
* compat-db
* compat-libstdc++
* control-center
* gcc
* gcc-c++
* glibc
* glibc-common
* gnome-libs
* libaio
* libstdc++-devel
* make
* pdksh
* setarch
* sysstat
* xscreensaver

可輸入以下Command檢查:

Step ##1
CODE:
# rpm -qa binutils compat-* control-center gcc* glibc* gnome-libs libstdc* make pdksh sysstat xscreensaver setarch libaio

如沒有安裝sysstat,可使用yum command從網路上下載並安裝

Step ##2
CODE:
# yum install sysstat

設定Kernel Parameter:

Step ##3
CODE:
# vi /etc/sysctl.conf
#Add the following code
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144

儲存後執行

Step ##4
CODE:
/sbin/sysctl -p



Step ##5
CODE:
# vi /etc/security/limits.conf
* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536



Step ##6
CODE:
# vi /etc/pam.d/login
session required /lib/security/pam_limits.so



Step ##7
CODE:
# vi /etc/pam.d/su
session required pam_limits.so

建立Group、User及Directory

Step ##8
CODE:
# groupadd oinstall
# groupadd dba
# groupadd oper
# useradd -g oinstall -G dba oracle
# passwd oracle
# mkdir -p /u01/app/oracle/product/10.2.0/db_1
# chown -R oracle.oinstall /u01



Step ##9
CODE:
# vi /etc/profile
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi



Step ##10
CODE:
# vi /home/oracle/.bash_profile
umask 022
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME
ORACLE_SID=INVEST1; 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

現在登入oracle戶口

由於我不是安裝在Red Hat上,所以要執行以下Command騙過Oracle Install Script

Step ##11
CODE:
# echo redhat-4 > /etc/redhat-release

如果你有使用X Windows的話,請設定以下Global Variable

Step ##12
CODE:
# DISPLAY=:0.0; export DISPLAY

執行安裝程式

Step ##13
CODE:
# ./runInstaller

選擇Advanced Installation及Enterprise Edition

你可在Product Languages上選取更多語言,例如Traditional Chinese

最後一直依指示安裝

安裝後,我們需要iSQLPlus及Enterprise Manager開機自動執行,需要更改以下幾個檔案

在「/u01/app/oracle/product/10.2.0/db_1/bin/dbstart」上尋找

Step ##14
CODE:
ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle

改成

Step ##15
CODE:
ORACLE_HOME_LISTNER=/u01/app/oracle

把N轉成Y

Step ##16
CODE:
# vi /etc/oratab
INVEST1:/u01/app/oracle/product/10.2.0/db_1:Y

建立檔案「/etc/init.d/oracle」

Step ##17
CODE:
# vi /etc/init.d/oracle
#!/bin/bash
#
# Run-level Startup script for the Oracle Instance and Listener
#
# chkconfig: 345 91 19
# description: Startup/Shutdown Oracle listener and instance
ORA_HOME="/u01/app/oracle/product/10.2.0/db_1"
ORA_OWNR="oracle"
# if the executables do not exist -- display error
if [ ! -f $ORA_HOME/bin/dbstart -o ! -d $ORA_HOME ]
then
echo "Oracle startup: cannot start"
exit 1
fi
# depending on parameter -- startup, shutdown, restart
# of the instance and listener or usage display
case "$1" in
start)
# Oracle listener and instance startup
echo -n "Starting Oracle: "
su - $ORA_OWNR -c $ORA_HOME/bin/dbstart
su - $ORA_OWNR -c "$ORA_HOME/bin/lsnrctl start"
#Optional : for isqlplus only
su - $ORA_OWNR -c "$ORA_HOME/bin/isqlplusctl start"
#Optional : for Enterprise Manager software only
su - $ORA_OWNR -c "$ORA_HOME/bin/emctl start dbconsole"
touch /var/lock/subsys/oracle
echo "OK"
;;
stop)
# Oracle listener and instance shutdown
echo -n "Shutdown Oracle: "
#Optional : for isqlplus only
su - $ORA_OWNR -c "$ORA_HOME/bin/isqlplusctl stop"
#Optional : for Enterprise Manager software only
su - $ORA_OWNR -c "$ORA_HOME/bin/emctl stop dbconsole"
su - $ORA_OWNR -c "$ORA_HOME/bin/lsnrctl stop"
su - $ORA_OWNR -c $ORA_HOME/bin/dbshut
rm -f /var/lock/subsys/oracle
echo "OK"
;;
reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 start|stop|restart|reload"
exit 1
esac
exit 0

更改權限

Step ##18
CODE:
# chgrp dba oracle
# chmod 750 oracle

自動啟動

Step ##19
CODE:
# chkconfig --level 345 oracle on

最後改回CentOS

Step ##20
CODE:
# echo 'CentOS release 4.5 (Final)' > /etc/redhat-release

搜尋此網誌

本站大事記

這個部落格(網站)內容以分享LINUX和延伸出的技術文章為主!
特別是為了工作和進修需要,搜集了不少網站連結。
希望對來這裡觀文的朋友們,有提供一些有用的資訊或文章。
但這裡的文章中,也包含個人的心情扎記和隨興言談……
若是當中沒有對上你的口味,請多包涵!

原「琳娜絲與希斯寇的邂逅」,改名為「愛上琳娜絲」!

原「琳娜絲與希斯寇的邂逅」,改名為「愛上琳娜絲」!
--原序文--
就是當LINUX遇上CISCO啦!他們的結合還能作什麼事…不就是讓這個世界的網路,串…串起來啊…不然你們那能上這網站看部落格!