陳浩倫
(山西云時代研發創新中心有限公司 山西省太原市 030012)
操作系統:Rhel-server-6.5-x86_64
Hostname:rhel-6-1.com
IP Address:192.168.56.21
數據庫:Oracle Database 11g Release 2 (11.2)
要創建的數據庫名為PROD,實例名也為PROD,SYS用戶與SYSTEM用戶的密碼為db12c,同時將位置存儲在DISK1-DISK5五塊磁盤上,磁盤掛載到/u01/app/oracle/oradata/PROD/目錄之下。
2.1.1 創建用戶組和用戶
先用groupadd命令創建用戶組oinstall、dba、oper,接著利用useradd指令輸入useradd -m -u 1101 -g oinstall -G dba,oper,asmdba -d/home/oracle -s /bin/bash oracle創建用戶oracle,并將其添加到上述三個組,并分配用戶home文件位置,接著為用戶設置密碼。
確認用戶信息:
id oracle
修改密碼:
passwd oracle
2.1.2 創建目錄結構
為oracle數據庫文件安裝創建相應的目錄/u01/app/oracle/product/11.2.0/dbhome_1,以及安裝文件存放目錄/oracle/database/,接著為oracle用戶對這兩個路徑的訪問授權。
mkdir -p /u01/app/oracle/product/11.2.0/dbhome_1
chown -R oracle.oinstall /u01
chmod 775 -R /u01
mkdir -p /oracle/dadabase/
chown -R oracle.oinstall /oracle/database/
chmod 775 -R /oracle/database/
以上操作均需注意區分大小寫,包括用戶名。
2.1.3 設置用戶環境變量
切換到ORACLE用戶,接著用VIM編輯器編輯用戶環境變量文件.bash_profile:
su - oracle
$ vi ~/.bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin
確認編輯完畢后,接著wq!保存退出。
2.1.4 安裝Oracle軟件環境依賴包
設置echo ‘multilib_policy=all’ >> /etc/yum.conf,讓yum同時安裝64位和32位的所有包。設置好之后執行yum指令安裝yum包:
yum install -y gcclibaioglibccompat-libstdc++-33 elfutilslibelf-develgcc-c++ libaio-devellibgcclibstdc++ libstdc++-develunixODBCunixODBC-develpdksh
在Redhat6上需要安裝pdksh包, rpm-helper是pdksh所依賴的包。而這倆包剛好在這個版本的自帶安裝光盤上沒有,所以手動用rpm安裝pdksh包:
rpm -ivh pdksh-5.2.14-18mdk.x86_64.rpm rpm-helper-0.10-1mdk.noarch.rpm
2.1.5 配置系統內核參數
編輯/etc/sysctl.conf文件在文件末尾加上參數(如有和默認重復的key會用新加在尾部的key的value)添加值修改并發異步I/O請求數fs.aio-max-nr為1024K,即1048576,修改系統同時可打開的文件數fs.file-max的值為6.5M,即6815744,用等號“=”賦值。接著修改內核的共享內存參數,共享內存總頁數kernel.shmall= 2097152,單共享內存段最大值kernel.shmmax = 4294967295,共享內存段的最大數量kernel.shmmni = 4096,以及信號量kernel.sem= 250 32000 100 128。
分配給用戶的端口區間設置net.ipv4.ip_local_port_range,值為9000 65500,設置接收緩沖區默認大小net.core.rmem_default為262144,最大值net.core.rmem_max=4194304,設置發送緩沖區默認大小參數net.core.wmem_default = 262144,最大值net.core.wmem_max = 1048576。
輸入/sbin/sysctl –p (使上面配置不需重啟立即生效)
接著編輯/etc/security/limits.conf文件,在尾部加上如下參數:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
When the limits.conf file is changed, these changes take effect immediately. However, if the grid or oracle users are logged in, then these changes do not take effect until you log these users out and log them back in. You must do this before you use these accounts for installation.(改這個文件后要logout然后再login)
2.1.6 配置response文件
修改/liangren/database/response/db_install.rsp文件,其需要更改的地方有:
29行的:oracle.install.option=INSTALL_DB_SWONLY
37行的:ORACLE_HOSTNAME=主機名
42行的:UNIX_GROUP_NAME=oinstall
47行的:INVENTORY_LOCATION=/u01/app/oraInventory
78行的:SELECTED_LANGUAGES=en
83行 的:ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
88行的:ORACLE_BASE=/u01/app/oracle
99行的:oracle.install.db.InstallEdition=EE
142行的:oracle.install.db.DBA_GROUP=dba
147行的:oracle.install.db.OPER_GROUP=dba
385行的:DECLINE_SECURITY_UPDATES=true
2.1.7 執行靜默安裝腳本
接下來執行靜默安裝腳本
./runInstaller -silent -responseFile /liangren/database/response/db_install.rsp –ignoreSysPrereqs
執行成功時會像圖形化安裝時那樣提示安裝兩個腳本,su –root切換到root用戶下根據提示執行安裝兩個腳本即可完成數據庫軟件安裝。
/u01/app/oraInentory/orainatRoot.sh
/u01/app/oracle/product/11.2.0/dbhome_1/root/sh
2.1.8 可選項操作
為了方便自己使用,可以進行配置,安裝插件工具rlwrap,配置rlwrap工具實現sqlplus里對oracle數據庫上下鍵翻頁查看功能。第一步,切換到root用戶安裝readline-devel包:yum install readline-devel*。第二步安裝rlwrap包,同樣在root用戶下,創建rlwrap文件安裝路徑,接著解壓下載的rlwarp包。
mkdirrlwrap
tarxvfz rlwrap-0.37.tar.gz
然后到解壓后的路徑下執行安裝。
cd rlwrap-0.37
./configure && make && make install
然后切換回oracle用戶,用vim文本編輯工具編輯.bashrc
[oracle@admin ~]$ vim .bashrc
alias sqlplus='rlwrapsqlplus'
alias rman='rlwraprman'
之后進入sqlplus即可發現,上下翻頁查看功能已經實裝。
簡單定制glogin.sql,以方便查看和操作,用vim編輯glogin.sql:
vim $ORACLE_HOME/sqlplus/admin/glogin.sql
set linesize 120
set pagesize 25
set sqlprompt _user"@"_connect_identifier>
define _EDITOR="vi"
設置好之后,在sqlplus之中操作數據庫時,會顯示用戶名以及所連接的數據庫名稱。
2.2.1 創建數據庫安裝目錄
首先,查詢相關目錄是否存在,如果沒有,則創建該目錄:
cd /u01/app/oracle/oradata/
mkdir PROD
cd PROD
mkdir disk01
mkdir disk02
mkdir disk03
mkdir disk04
mkdir disk05
接下來輸入df -h查看磁盤是否成功掛載,如成功掛載,則繼續。
接下來,創建恢復分區文件路徑:
cd /u01/app/oracle/fast_recovery_area/
mkdir PROD
2.2.2 創建初始化參數文件
到ORACLE_HOME的dbs目錄下,設置數據庫的密碼:
cd $ORACLE_HOME/dbs
orapwd file=orapwPRODpasssword=db12c
復制模板init.ora文件創建PROD庫的初始化參數文件
cpinit.orainitPROD.ora
如果你的dbs目錄下沒有模板文件init.ora,這一步也可以不采用復制的辦法,而是直接再dbs目錄下創建一個initPROD.ora做初始化參數文件,內容參考MOS文檔或者自己之前已有的初始化參數文檔編寫。接下來用VIM編輯initPROD.ora文件:vi initPROD.ora
通過復制的模板,或直接輸入如下內容
db_name='PROD'
memory_target=800m
processes = 150
audit_file_dest='/u01/app/oracle/admin/PROD/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/u01/app/oracle/'
dispatchers='(PROTOCOL=TCP) (SERVICE=PROD1XDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
# You may want to ensure that control files are created on separate physical
# devices
control_files = (/u01/app/oracle/oradata/PROD/disk1/control01.ctl,/u01/app/oracle/oradata/PROD/disk2/control02,)
compatible ='12.1.0'
其中DB_NAME是數據庫名,memory_target是Oracle 11g新引入的參數,可以自動調整所有的內存,這就是新引入的自動內存管理特性。設置數值為上限值,這里因為在虛擬機中測試,則設置為800M,可以根據實際需求調大。Processes參數為最大連接用戶數,可以根據實際需求調整,默認150。audit_file_dest設置的是審計文件位置,開啟審計之后,審計產生的文件將存放在這里指定的目錄之中。db_block_size是ORACLE數據庫操作的最小單位數據塊的大小值,大小一般受數據庫用途的影響,聯機事務、銀行流水等一般數據塊值需要設置小一些,而數倉等連續的整塊讀取的業務需要設置較大的值,這個屬性創建完數據庫之后無法修改,如果要修改它的值,需要重建數據庫。一般設置同名新庫,設置db_block_size新值,用數據泵將數據從舊庫倒過來,但是注意,庫中對應存儲過程在這操作之后可能需要重建。db_recovery_file_dest為歸檔文件設置路徑,db_recovery_file_dest_size是歸檔文件存放空間上限,如果滿則會影響數據庫恢復,造成數據庫安全隱患,根據需求和備份頻率設置。control_files是ORACLE數據庫的控制文件存放路徑??刂莆募謴蛡浞?,轉移都在這里設置,一般來說,控制文件只要有一個就可以工作,但是為了安全,一般數據庫設置兩個或多個冗余確保數據庫安全。
接下來輸入wq!,保存并推出VIM文本編輯器,以上內容為初始化參數文件,如果數據庫因為修改參數導致無法啟動,或者初始化參數文件spfiles損壞或丟失,也可以通過這種方式重建初始化參數文件。備份數據庫初始化參數文件的方法是選中指定庫,進入SQLPLUS,然后將數據庫切換到mount階段,執行SQL>create pfile from spfile;即可得到數據庫對應的pfile,即模板文件init數據庫名.ora。
2.2.3 編寫并執行數據庫自動化建庫腳本
接下來設置環境變量,export ORACLE_SID=PROD,指定數據庫SID為要創建的數據庫SID,注意區分大小寫。接著使用SQLPLUS連接目標數據庫,sqlplus / as sysdba,進入后創建spfile,執行CREATE SPFILE FROM PFILE;注意結尾分號,許多新接觸數據庫或習慣MYSQL圖形化界面操作的工作人員總是忘加分號導致無法成功執行。接著輸入exit退出sqlplus。接下來,用VIM編寫數據庫的自動化建庫腳本以開始建庫,vi /u01/db_create.sql


這段腳本中,第一行設置數據庫名稱,接著設置了SYS和SYSTEM用戶的密碼,接下倆,設置日志分組,以及分組空間大小,以及單個日志文件大小,如果日志空間滿,則會覆蓋掉最舊的日志,所以,根據自己的備份周期、設備空間大小、系統的IO頻率設置合適的日志空間大小,對于數據安全來說是很重要的。接下來,是設置數據庫的字符集,創建必要的表空間、以及數據庫文件,設置數據庫文件的初始大小以及最大值,和空間擴展方式,單個文件大小最大不得超過32G,拓展方式為手動和自動兩種。編輯好自動化建庫腳本之后,wq!保存退出。
輸入export ORACLE_SID=PROD,找到要連接的庫PROD,接著用sqlplus / as sysdba登錄數據庫,之后執行剛才編寫的自動化建庫腳本:@/u01/db_create.sql
等待建庫腳本執行完畢,輸入select open_mode from v$database;驗證是否成功建庫完畢。若查看到數據庫狀態為read_write,則數據庫正常開啟,建庫成功完成。
2.2.4 監聽配置
安裝好數據庫后,如果要實現遠程訪問,則需要對數據庫配置監聽,在服務端配置listener,以及在客戶端配置tnsname。首先,進入服務端,找到ORACLE_HOME,進入/network/admin目錄用vim編輯listener.ora,$ORACLE_HOME的路徑是配置用戶環境變量時,在.bash_profile中配置,可以直接大寫$ORACLE_HOME訪問,也可以直接輸入完整的真實路徑訪問:


編輯完畢后wq!保存退出。靜態監聽是固定的監聽其中記錄的數據庫,遠程端可以在任何情況下訪問這個庫,所以,它可以用來遠程控制數據庫的開啟與關閉。而動態監聽則是掃描服務器上所有已開啟的數據庫,對于關閉狀態的數據庫,則無法通過SYS直連之外的方法訪問。接下來,到客戶端,用VIM編輯tnsname.ora文件:

同樣,編輯完畢后wq!保存退出。之后,在服務器端,輸入lsnrctl status命令查看監聽狀態,如果現在監聽沒有啟動,則輸入lsnrctl start開啟監聽。如果要關閉監聽,則輸入指令lsnrctl stop即可,以上命令需要用oracle用戶執行。這一切做好之后,數據庫便可以正常工作和訪問了。
本次實驗以OracleDB11gR2版本的靜默安裝為例,實驗參考了ORACLE官方知識庫文檔的Database Administrator’s Guide中的Create Database Statement章節內容。記述了在非圖形化界面下的數據庫軟件安裝以及數據庫創建,具體配置參數需要根據用戶對系統的設計文檔、需求,以及設備和操作環境現實狀況具體問題具體分析具體決定,切不可犯教條主義錯誤,同時,大家需注意一切數據庫實驗要在測試環境下執行,切不可盲目投入生產環境或改變生產庫,數據無價。最后強烈感謝徐海,黃文捷,梁任,張義斌,葛惠以上五位工程師為本文中實驗操作提供的資料和經驗以及技術指導。