Oracle數據庫部署
前言:前面我們學習過微軟的sqlserver,還有甲骨文公司的mysql,也理解了數據庫系統的作用,這兩種數據庫管理系統適用於軟件,網站,遊戲等後臺數據庫,例如我們在學習mysql的時候搭建過動態網站。但oracle屬於非常安全、完善的大型數據庫管理軟件,在電信、銀行、證券等大型應用場合擁有着絕對的優勢。那麼今天就給搭建介紹oracle的安裝和基本的使用。Oracle可以安裝到windows和linux系統上,但企業更多采用在linux上安裝,接下來我就以redhat6.5爲例。
關於oracle
由甲骨文公司出品,目前最新版本爲Oracle12c
本課程以64位企業版Oracle11gR2爲例
官方網站:http://www.oracle.com/
採用C/S模式、支持SQL查詢語言
在穩定性、高性能、安全性等方面優於其他數據庫,因此常用於政府及企業
Oracle的優點:支持sql語句、C/S模式、高性能、安全性高
一、安裝oracle的準備工作
1、系統及配置要求
1)確認linux系統的版本
2)物理內存:必須高於1G。
物理內存應不少於1GB,對於VMWARE虛擬機建議不少於1200MB.對於系統中的交換分區設置,應參以下約定:物理內存爲1GB~2GB時,交換分區爲物理內存的1.5~2倍;物理內存爲2GB~16GB時,交換分區與物理內存大小相同;物理內存超過16GB時,交換分區使用16GB就可以了。
3)硬盤空間:企業版需要5.65G,還要確保/tmp目錄所在的分區空間不少於1G,建議總的空間給10G以上
4)確定主機名之後修改hosts文件(安裝好oracle之後再修改主機名會導致數據庫啓動失敗)
2、配置yum,安裝支持包
Vim oracle.repo
還需要安裝pdksh包,但是Redhat6.5光盤中的ksh存在兼容性衝突,所以需要單獨安裝pdksh-5.2.14-37.el5_8.1.x86_64.rpm,使用rpm安裝即可。(需要單獨安裝,通過wget下載)
3、調整內核參數
內核參數調整體現在/etc/sysctl.conf文件中。主要包括對內存調度、端口範圍、打開文件數、I/O請求等相關的一些設置,相關數值不可低於安裝要求。修改完畢後通過執行sysctl –p命令使新配置立即生效。
vim /etc/sysctl.conf 在文件尾部添加如下內容:
fs.aio-max-nr = 1048576
fs.file-max = 6815744
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 = 5194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
在下面的三行前面加上#註釋。
#net.bridge.bridge-nf-call-ip6tables = 0
#net.bridge.bridge-nf-call-iptables = 0
#net.bridge.bridge-nf-call-arptables = 0
各參數詳解:
fs.aio-max-nr:
此參數限制併發未完成的請求,應該設置避免I/O子系統故障。
fs.file-max:
該參數決定了系統中所允許的文件句柄最大數目,文件句柄設置代表linux系統中可以打開的文件的數量。
kernel.shmall:
該參數控制可以使用的共享內存的總頁數。Linux共享內存頁大小爲4KB,共享內存段的大小都是共享內存頁大小的整數倍。一個共享內存段的最大大小是16G,那麼需要共享內存頁數是16GB/4KB=16777216KB /4KB=4194304(頁),也就是64Bit系統下16GB物理內存,設置kernel.shmall = 4194304才符合要求.
kernel.shmmax:
是核心參數中最重要的參數之一,用於定義單個共享內存段的最大值。設置應該足夠大,設置的過低可能會導致需要創建多個共享內存段,這樣可能導致系統性能的下降。至於導致系統下降的主要原因爲在實例啓動以及ServerProcess創建的時候,多個小的共享內存段可能會導致當時輕微的系統性能的降低(在啓動的時候需要去創建多個虛擬地址段,在進程創建的時候要讓進程對多個段進行“識別”,會有一些影響),但是其他時候都不會有影響。
官方建議值:
32位linux系統:可取最大值爲4GB(4294967296bytes)-1byte,即4294967295。建議值爲多於內存的一半,所以如果是32爲系統,一般可取值爲4294967295。
64位linux系統:可取的最大值爲物理內存值-1byte,建議值爲多於物理內存的一半,例如,如果爲12GB物理內存,可取12*1024*1024*1024-1=12884901887。
kernel.shmmni:
該參數是共享內存段的最大數量。shmmni缺省值4096,一般肯定是夠用了。
kernel.sem:
以kernel.sem = 250 32000 100 128爲例:
250是參數semmsl的值,表示一個信號量集合中能夠包含的信號量最大數目。
32000是參數semmns的值,表示系統內可允許的信號量最大數目。
100是參數semopm的值,表示單個semopm()調用在一個信號量集合上可以執行的操作數量。
128是參數semmni的值,表示系統信號量集合總數。
net.ipv4.ip_local_port_range:
表示應用程序可使用的IPv4端口範圍。
net.core.rmem_default:
表示套接字接收緩衝區大小的缺省值。
net.core.rmem_max:
表示套接字接收緩衝區大小的最大值。
net.core.wmem_default:
表示套接字發送緩衝區大小的缺省值。
net.core.wmem_max:
表示套接字發送緩衝區大小的最大值。
4、oracle用戶要求
Oracle需要固定的運行用戶oracle,安裝組oinstall,管理組dba,這些賬號需要提前建立好。此外用來存放oracle程序及數據庫文件的基本目錄/opt/oracle也應該提前創建好。
1)建立用戶和組
[root@rhel1 ~]# groupadd oinstall
[root@rhel1 ~]# groupadd dba
[root@rhel1 ~]# useradd -g oinstall -G dba oracle
[root@rhel1 ~]# passwd oracle
2)建立相關目錄
[root@rhel1 ~]# mkdir /opt/oracle
[root@rhel1 ~]# chown -R oracle:oinstall /opt/oracle
[root@rhel1 ~]# chmod -R 755 /opt/oracle
[root@rhel1 ~]# sudo mkdir /opt/tmp
[root@rhel1 ~]# sudo chmod a+wr /opt/tmp
5、Oracle11g的安裝任務應以運行用戶oracle的身份執行,需適當調整oracle用戶的環境配置以便滿足要求。Oracle11g安裝界的語言類型取決於環境變量LANG,若希望用中文安裝界面,則應確保LANG變量的值爲”zh_CN.UTF-8”。中文安裝界面有時會因缺少字體、字體配置不當等原因導致界面亂碼。這時可以改用”en_US.UTF-8”英文環境以迴避類似問題。
vim ~oracle/.bash_profile
export PATH
umask 022
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2/db_1
export ORACLE_SID=orcl
export.UTL-8
export NLS_LANG="AMERICAN_AMERICA".ZHS16GBK
export PATH=$ORACLE_HOME/bin:$PATH
export DISPLAY=:0.0
6、爲oracle用戶設置Shell限制:爲了優化性能,需要添加oracle用戶的限制參數。進程會話限制可以採用pam_limits認證模塊來實現,通過修改登錄程序login的PAM設置以啓用該認證。
修改/etc/security/limits.conf,將用戶oracle能夠打開的進程數、進程使用的文件數加在。加入如下內容:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
第1行是設置進程數軟限制;第2行是設置進程數硬限制;第3行是設置文件數軟限制;第4行是設置文件數硬限制
修改/etc/pam.d/login,加入如下內容:
session required /lib/security/pam_limits.so
session required pam_limits.so
7、配置oracle用戶資源限制,不配置也不會影響oracle數據庫的成功安裝,但是考慮到若有糟糕的sql語句對服務器資源的無限佔用,導致長時間對用戶請求無響應,建議提前限制oracle用戶資源。
配置方法如下:
vim /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
8、解決中文亂碼問題
在RHEL6.5中安裝oracle11g時,中文安裝界面亂碼,解決方法:
在Linux命令提示符下執行以下命令,把字體庫安裝到相應位置即可
注:在這裏zysong.ttf包裹需要自行下載
[root@rhel1 ~]# mkdir -p /usr/share/fonts/zh_CN/TrueType
[root@rhel1 ~]# cp /mnt/zysong.ttf /usr/share/fonts/zh_CN/TrueType/
[root@rhel1 ~]# chmod o+r /usr/share/fonts/zh_CN/TrueType/zysong.ttf
準備工作完成之後重新啓動系統
二、正式安裝oracle
1.下載oracle11g軟件包到系統/home/oracle中
[root@rhel1 ~]# su - oracle
[oracle@rhel1 ~]$ ls /mnt
linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip p8670579_112010_LINUX.zip zysong.ttf
[oracle@rhel1 ~]$ cp /mnt/linux.x64_11gR2_database_1of2.zip .
[oracle@rhel1 ~]$ cp /mnt/linux.x64_11gR2_database_2of2.zip .
[oracle@rhel1 ~]$
2.解壓縮軟件包 (壓縮包可以從官方網站下載wget)
[oracle@rhel1 ~]$ unzip linux.x64_11gR2_database_1of2.zip
[oracle@rhel1 ~]$ unzip linux.x64_11gR2_database_2of2.zip
3.授權允許用戶oracle使用圖形終端,例如執行:xhost + oracle@localhost,表示允許用戶oracle從本機訪問,或者執行xhost + 表示取消所有限制,這裏執行xhost +即可。
4.執行安裝程序
1、配置安全更新
7、在系統類中選擇“服務器類”
8、網格選項中選擇“單實例數據庫安裝”
9、安裝類型選擇“典型安裝”。如果爲各種管理賬號分別設置口令,或者選擇語言版本,設置自動備份,存儲管理等,則應選擇“高級安裝”。
10、典型安裝的配置,必須設置管理員口令,其它參數採用默認值,系統將自動創建3個用戶,分別是:超級管理員sys,system和數據庫所有者sysman,當選擇高級安裝時,可以爲3個用戶分別設置口令,否則將使用同一個管理口令。
11、創建產品清單,將清單目錄修改爲/opt/oracle/oralnventory,以便oracle用戶有權限寫入oracle數據庫的清單信息。
12、先決條件檢查及概要,出現下面的程序包狀態失敗,因爲這些包是32位的包,而我們的系統是64位的,所以不用理會,點擊“全部忽略”。然後點擊“下一步”。
可以保存響應文件,以後安裝oracle時可以使用這個腳本執行安裝,就不用配置這麼多了。
13、安裝中......
14、當彈出“口令管理”的窗口時,單擊“口令管理”按鈕,將用戶scott解鎖,修改完成後,單擊“確定”按鈕。
15、完成安裝
文件複製及相關部署結束之後,會彈出“執行配置腳本”對話框,根據提示切換爲root用戶並以此執行腳本,如下所示。
最後單擊“確定”按鈕,會提示訪問https://oracleserver:1158/em/,使用此地址訪問OEM(企業管理器)平臺,以便對oracle數據庫實例進行管理。
1、訪問OEM平臺(OEM平臺可以進行圖像化管理oracle,比較方便)。
在瀏覽器中輸入:https://oracleserver:1158/em/,輸入用戶名:sys,密碼pwd123,連接身份選擇SYSDBA
2、使用sqlplus命令行訪問oracle數據庫
首先,解決sqlplus命令行方向鍵不能用問題
安裝過程:
[root@oradb temp]# tar -xvf rlwrap-0.28.tar
[root@oradb temp]# cd rlwrap-0.28
[root@oradb rlwrap-0.28]# ./configure
[root@oradb rlwrap-0.28]# make
[root@oradb rlwrap-0.28]# make install
這樣就可以使用 rlwarp 了.
[oracle@oradb ~]$ rlwrap sqlplus "/ as sysdba"
這樣登錄數據庫 , 就可以使用上 下 鍵查找上次執行的命令.
如果每次都需要輸入 rlwrap 感覺麻煩的話 , 還可以加入到 .bash_profile 中, 就不用每次都輸入了.
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
1.在命令行界面中輸入:sqlplus sys/pwd123 AS SYSDBA
或者:
1)執行HELP INDEX命令查看所有可以使用的命令
2)執行SHOW USER可以查看當前登錄的用戶
3、建立oracle服務的啓動腳本:(補充)
雖然通過各種服務組件程序能夠啓動、停止整個oracle11g數據庫系統,但顯然還不夠方便,在RHEL6服務器中,更好的做法是將相關操作編寫爲服務腳本,交給chkconfig工具來管理,從而實現隨系統開、關機自動啓動、停止oracle數據庫。
vi /etc/init.d/oracle ,輸入如下內容:
拷貝到/etc/init.d下,並設置權限。
給腳本設置權限並添加爲系統服務
添加好oracle服務後,就可以通過腳本的start、stop、status、restart參數來控制oracle數據庫的啓動、停止、查看狀態、重啓了。
六、常見系統控制命令
1、執行”lsnrctl start”命令可以啓動oracle監聽器。
2、執行”lsnrctl status”命令可以查看oracle監聽器的狀態。
3、執行”emctl stop dbconsole”命令可以關閉OEM管理控制檯。
4、執行”dbshut $ORACLE_HOME”命令可以停止數據庫實例。
5、執行”dbstart $ORACLE_HOME”命令可以啓動數據庫實例。
6、使用sqlplus命令工具時,若以超級管理員sys登錄,則在”SQL>”環境中執行”STARTUP;”、”SHUTDOWN IMMEDIATE;”指令也可以啓用、關閉默認的數據庫實例。
七:創建數據庫
如果在安裝oracle產品時選擇不建立數據庫,那麼要使用oracle系統就必須先創建數據庫,如果在安裝oracle產品時選擇建立數據庫,也可以再創建第二個數據庫。
創建數據庫有兩種方法:一種通過圖形界面;另一種採用create database命令,下面介紹圖形界面的方法。
在linux中,運行數據庫配置助手(DBCA),執行$ORACLE_HOME/bin目錄下執行DBCA
1、執行netca啓用監聽的方法(如果沒有啓用需要做這一步)(爲了使客戶端能連接到oracle實例,以及有些命令也需要啓用監聽)
後面下一步即可。
或者使用命令啓動監聽:
1)啓用監聽
6)使用oem如何連接不同的oracle服務器
export ORACLE_SID=benet
emctl status dbconsole
如果沒有啓動則啓動:
emctl start dbconsole
八:啓動關閉數據庫
1、數據庫的啓動
啓動(startup)一個數據庫需要3個步驟
1)啓動oracle實例
2)由實例安裝數據庫
3)打開數據庫
在startup命令中,可以通過不同的選項來控制數據庫的不同的啓動步驟。
NOMOUNT選項:
nomount:已經通過參數文件知道控制文件在哪個位置,但是還沒有讀取控制文件。主要的作用就是啓動一個實例,讀取init.ora初始化參數文件,啓動後臺進程,初始化全局SGA
MOUNT選項:
讀取了控制文件,通過控制文件知道了其他文件(數據文件和日誌文件),此時並沒有讀取數據文件和日誌文件,這個狀態叫mount狀態。啓動實例並且安裝了數據庫,但沒有打開數據庫。這種打開方式常在數據庫維護操作中使用,例如對數據文件更名,改變重做日誌及打開歸檔方式等,在這種打開方式下,除了可以看到SGA系統列表以外,系統還會給出“數據庫裝載完畢”提示。
Open選項:
讀取完控制文件之後,找到了數據文件和日誌文件,數據庫就處於OPEN狀態了。
startupnomount|mount|open
shudownnormal|immedieate|transactional|abort
注意:如果僅僅執行startup命令,將會完成啓動實例,安裝實例和打開數據庫的所有3個步驟,這是系統出了可以看到前面startup mount方式下所有提示外,還會給出一個“數據庫已經打開”的提示,此時,數據庫系統處於正常的工作狀態,可以接收用戶請求。
如果使用startup nomount 命令或者startup mount命令,必須採用alter database命令執行打開數據庫操作,例如:如果以startup nomount方式打開數據庫,也就是說實例已經啓動,但是數據庫沒有安裝和打開,這是必須運行下面的兩條命令,數據庫才能正確啓動。
ALTER DATABASE MOUNT;
ALTER DATABASE OPEN;
如果以startup mount方式啓動數據庫,只需要運行下面一條命令即可打開數據庫
ALTER DATABASE OPEN
2、執行startup命令
可以看出數據庫已經打開
注意:
oracle11g數據庫在執行dbca或者調整sga後重啓oracle的時候可能會出現ORA-00845 MEMORY_TARGET not supported on this system 錯誤。 究其原因就是Linux系統的shm的大小比SGA設置的小,造成的,距離來說,SGA設置4G,而shm可能只有1G 解決辦法: 調整shm的大小,具體操作如下: vi /etc/fstab 修改如下行的設置 tmpfs /dev/shm tmpfs defaults 0 0 改成 tmpfs /dev/shm tmpfs defaults,size=6G 0 0 保存退出 重新mount下shm使其生效 mount -o remount /dev/shm
|
3、關閉數據庫
4、開始startup nomount狀態
可以看出現在處於STARTED狀態
5、修改數據庫到open狀態
6、數據庫的關閉
normal:這是默認選項,使用該選項時,不允許任何新的用戶連接,但是允許繼續當前的所有連接,只有所有用戶(自願的)退出登錄時,數據庫才能真正的關閉
通常,正常的數據庫關閉是沒有意義的,即使只剩下database control在運行,也總是存在未退出登錄的用戶。也許關閉一個數據庫需要幾天或更長的事件(如果用戶一直沒有自己關閉)
immediate:使用這個選項時,不允許任何新的用戶連接,當前的所有連接的會話都被終止。任何活動的事務都會都將回滾,隨後數據庫會被關閉。是一種常用的關閉數據庫方式,快速關閉數據庫。
transactional:使用這個選項時,不允許任何新的用戶連接,沒有存在於某個事務中的現有會話被終止,允許當前位於某個事務中的會話在完成該事務之後終止。一但所有會話終止,數據就會被關閉(使用shutdown immediate)
abort:就oracle而言,使用這個選項相當於斷電。實例被立即終止。此時,任何數據都不會被寫入磁盤。但是在下一次啓動數據庫的時候,速度比較慢(需要實例恢復)。建議在以下情況使用這種方式。
1)數據庫一直處於非正常的工作狀態,不能用shutdown normal或者shutdown immediate命令關閉。
2)需要立即關閉數據庫
3)在啓動數據庫實例時遇到問題
如果你改了忘記了,可以利用如下方法重置:
1)進入cmd
2)sqlplus / as sysdba
3)alter user sys identified by 新密碼;
說明:oracle有兩種登錄方式,一種是系統賬戶,一種是oracle,修改sys口令的時候,Oracle採用的是操作系統認證方式,當屬於操作系統DBA組用戶登陸到數據庫服務器,那麼Oracle認爲這樣的用戶就可以授權以SYSDBA身份登錄數據庫,這時的用戶名和密碼隨便輸什麼,都能連上庫,使用show user命令查看登陸用戶,其實都是SYS用戶。