在計算機信息安全領域中,數據庫系統無疑有着舉足輕重的地位。好比:SQL Server、MySQL、DB二、Oracle等,都是比較知名的數據庫管理軟件,因爲Oracle數據庫的安全性,因此在一些比較重要的場合被廣泛使用,好比:電信、銀行、政府部門等。html
本次博文以Oracle 12c數據庫的64位企業版爲例,學習如何在Centos 操做系統中的安裝和基本配置,包括安裝的準備等。linux
博文大綱:
1、安裝Oracle 12c
2、建立Oracle 12c數據庫
3、Oracle 12c數據庫的啓動與關閉
4、將Oracle數據庫設置爲開機自啓動c++
因爲本次安裝Oracle 12c軟件是在CentOS 7系統上實現的,那麼首次安裝CentOS 7操做系統有幾點要求:sql
Oracle數據庫是一個相對龐大的應用軟件,對服務器的系統類型、內存和交換分區、硬盤空阿金、內核參數、軟件環境、用戶環境等都有相應的要求。只要知足了這些必備的條件,才能確保Oracle 12c安裝成功並穩定運行。數據庫
Oracle 12c明確支持的Linux操做系統包括Oracle Linux 七、Oracle Linux 六、Oracle Linux 五、Red Hat Enterprise Linux 七、Red Hat Enterprise Linux 六、Red Hat Enterprise Linux 5等,由於Red Hat Enterprise 和CentOS屬於同步並行的操做系統,因此Oracle 12 c一樣支持CentOS 七、CentOS 六、CentOS 5操做系統。在其餘Linux系統中安裝時,個別軟件或配置文件可能須要進行適當的調整。vim
[root@localhost ~]# cat /etc/centos-release //查看系統版本信息 CentOS Linux release 7.5.1804 (Core) [root@localhost ~]# uname -r //查看系統內核信息 3.10.0-862.el7.x86_64
Linux操做系統要求:centos
若是交換分區空間不足的話,可使用如下方式擴展交換分區安全
[root@localhost ~]# dd if=/dev/zero of=/swap_file bs=1024 count=2097152 //這是擴展了2GB的交換分區,2097152除以1024等於2048,因此是2GB [root@localhost ~]# mkswap /swap_file [root@localhost ~]# swapon /swap_file //完成以後,再次查詢就會發現交換分區多了2GB的空間
[root@localhost ~]# grep MemTotal /proc/meminfo MemTotal: 7992344 kB [root@localhost ~]# grep SwapTotal /proc/meminfo SwapTotal: 18568716 kB //交換分區空間及內存空間已經知足要求
對於Oracle 12c數據庫,若程序文件和數據文件安裝在同一分區,則該分區硬盤空間的最要要求爲企業級爲6.4G,標準版6.1G;除此以外,還應確保/tmp目錄的可用空間很多於1G。總的來講,建議安裝Oracle 12c準備至少15G的硬盤空間。bash
[root@localhost ~]# df -hT /tmp //查看/tmp目錄的磁盤使用狀況 文件系統 類型 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root xfs 50G 21G 30G 42% / //很明顯,知足了要求
安裝Oracle數據庫前,要求規劃好主機名和IP。服務器的主機名、IP地址應提早確認無誤,一旦Oracle數據庫安裝完成,建議不要輕易的修改主機名,不然會致使數據庫啓動失敗。方法以下:服務器
[root@localhost ~]# sed -i '1c oracle' /etc/hostname //設置主機名爲oracle [root@localhost ~]# echo -e "192.168.1.1 oracle" >> /etc/hosts //添加主機名與IP地址的對應關係
Oracle 12c的安裝過程一般是在圖形界面中進行,所以建議使用已安裝有GNOME中文桌面環境的CentOS服務器,軟件開發工具固然是必不可少的,應使用yum方式安裝如下必要的軟件環境。
[root@localhost ~]# yum -y install binutils compat-* gcc gcc-c++ glibc glibc-devel ksh \ libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat \ unixODBC unixODBC-devel //使用本地光盤或者網絡yum均可以
Oracle 12c自身集成了Java運行環境,但安裝界面對中文的支持並不完善,所以若但願使用中文的Oracle安裝界面,建議提早安裝好Java軟件包。
爲了確保數據庫運行穩定,Oracle 12c針對Linux內核參數,進程會話限制提出了一些要求,其中一部分設置能夠在安裝過程當中自動檢測並進行修復,但並必定很完整,因此最好的作法是根據安裝文檔提早進行配置。
內核參數調總體如今/etc/sysctl.conf文件中,主要包括與內存調度、端口範圍、打開文件數、I/O請求等相關的一些設置,相關數值不可低於安裝要求。以下:
[root@localhost ~]# vim /etc/sysctl.conf ……………… //省略部份內容,在末尾添加便可! fs.aio-max-nr = 1048576 fs.file-max = 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_max = 4194304 net.core.rmem_default = 262144 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 [root@localhost ~]# sysctl -p //從新加載配置文件
各參數詳解:
- fs.aio-max-nr:此參數限制併發未完成的請求,應該設置避免I/O子系統故障;
- fs.file-max:該參數決定了系統中所容許的最大能夠打開的文件數量;
- kernel.shmall:該參數控制可使用的共享內存的總頁數;.
- kernel.shmmax:是核心參數中最重要的參數之一,用於定義單個共享內存段的最大值。
建議:
32位linux系統:可取最大值爲4GB(4294967296bytes)-1byte,即4294967295。建議值爲多於內存的一半,因此若是是32爲系統,通常可取值爲4294967295。
64位linux系統:可取的最大值爲物理內存值-1byte,建議值爲多於物理內存的一半,例如,若是爲12GB物理內存,可取1210241024*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:表示套接字發送緩衝區大小的最大值;
Oracle 12c須要固定的運行用戶oracle、安裝組oinstall、管理組dba,這些帳號應提早建立好。用於存放Oracle程序及數據庫文件的基本目錄也應提早建立好。
[root@localhost ~]# groupadd oinstall [root@localhost ~]# groupadd dba [root@localhost ~]# useradd -g oinstall -G dba oracle [root@localhost ~]# echo '123456' | passwd --stdin oracle 更改用戶 oracle 的密碼 。 passwd:全部的身份驗證令牌已經成功更新。 [root@localhost ~]# mkdir -p /u01/app/oracle [root@localhost ~]# chown -R oracle:oinstall /u01/app [root@localhost ~]# chmod -R 775 /u01/app/oracle
Oracle 12c的安裝任務應以運行用戶oracle的身份執行,需適當調整oracle用戶的環境配置以知足需求。
[root@localhost ~]# vim /home/oracle/.bash_profile ……………… //省略部份內容,在末尾添加便可! umask 022 ORACLE_BASE=/u01/app/oracle #oracle基本目錄 ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1/ #安裝家目錄 ORACLE_SID=orcl #定義數據庫實例名稱 NLS_LANG="SIMPLIFIED CHINESE_CHINA".UTF8 #是針對Oracle語言、地區、字符集的設置 PATH=$PATH:$ORACLE_HOME/bin LANG=zh_CN.UTF-8 #LANG是針對Linux系統的語言、地區、字符集的設置。 DISPLAY=:0.0 #在哪一個終端可使用圖形 export PATH LANG NLS_LANG ORACLE_BASE ORACLE_HOME ORACLE_SID DISPLAY #將變量導出爲全局變量
進程會話限制能夠採用pam_limits認證模塊來實現,經過修改登陸程序login的PAM設置以啓用該認證,而後修改/etc/security/limits.conf 文件,使用戶oracle可以打開的進程數、進程使用的文件數加大。
[root@localhost ~]# vim /etc/pam.d/login ……………… //省略部份內容,在末尾添加便可! session required /lib/security/pam_limits.so session required pam_limits.so [root@localhost ~]# vim /etc/security/limits.conf ……………… //省略部份內容,在末尾添加便可! oracle soft nproc 2047 #設置進程數軟限制 oracle hard nproc 16384 #設置進程數硬限制 oracle soft nofile 1024 #設置文件數軟限制 oracle hard nofile 65536 #設置文件數硬限制 oracle soft stack 10240 # Oracle軟堆棧限制
配置oracle用戶資源限制,不配置也不會影響oracle數據庫的成功安裝,可是考慮到如有糟糕的sql語句對服務器資源的無限佔用,致使長時間對用戶請求無響應,建議提早限制oracle用戶資源。
[root@localhost ~]# 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
準備工做完成後從新啓動系統,重啓以後,再次檢查以前的配置是否生效。
Oracle的中文官方網址是https://www.oracle.com/index.html 能夠自行進行下載,也可經過本人提供的Oracle安裝包 進行安裝。
[root@oracle ~]# cd / [root@oracle /]# unzip /root/linuxx64_12201_database.zip //進入根目錄對下載的Oracle軟件包進行解壓 [root@oracle /]# ls database/ //解壓以後生成database目錄 install response rpm runInstaller sshsetup stage welcome.html
受權容許用戶oracle使用圖形終端,例如執行:xhost + oracle@localhost,表示容許用戶oracle從本機訪問,或者執行xhost + 表示取消全部限制,這裏執行xhost +便可。
[root@oracle /]# xhost + //必定要以root用戶的身份在圖形環境中操做 [root@oracle /]# su - oracle //切換到oracle用戶 [oracle@oracle ~]$ cd /database/ [oracle@oracle database]$ export DISPLAY=:0.0 設置DISPLAY環境變量 [oracle@oracle database]$ ./runInstaller //執行安裝腳本
執行完成後會彈出圖形化界面,進行如下操做:
執行過程當中,會有這樣的提示信息:
[root@oracle ~]# /u01/app/oraInventory/orainstRoot.sh [root@oracle ~]# /u01/app/oracle/product/12.2.0/dbhome_1/root.sh //執行第二個腳本,遇到提示,一路回車便可!
Web頁面訪問以下:
接下來使用命令行進行登陸訪問:
首先須要解決sqlplus命令行方向鍵不能使用的問題,方法以下:
獲取rlwrap軟件包
[root@oracle ~]# yum -y install ncurses* readline* //安裝軟件包所需依賴 [root@oracle ~]# tar zxf rlwrap-0.30.tar.gz.zip -C /usr/src [root@oracle ~]# cd /usr/src/rlwrap-0.30/ [root@oracle rlwrap-0.30]# ./configure && make && make install //使用root身份進行編譯安裝,安裝完成後便可使用! [oracle@oracle ~]$ rlwrap sqlplus "/ as sysdba" SQL*Plus: Release 12.2.0.1.0 Production on 星期二 11月 26 10:51:44 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. 鏈接到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL>
這樣登陸到數據庫庫時,就可使用方向鍵了。可是這樣每次登陸數據庫時都須要使用 rlwrap 命令稍嫌麻煩,能夠進行一下操做:
[oracle@oracle ~]$ vim /home/oracle/.bash_profile ……………… //在末尾添加如下內容 alias sqlplus='rlwrap sqlplus' alias rman='rlwrap rman' //就是將命令建立別名而已
退出當前oracle用戶,從新登陸纔可以使用。
[oracle@oracle ~]$ sqlplus sys/123456 as sysdba //使用命令行登陸 SQL*Plus: Release 12.2.0.1.0 Production on 星期二 11月 26 10:57:41 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. 鏈接到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL>
或者
[oracle@oracle ~]$ sqlplus /nolog SQL*Plus: Release 12.2.0.1.0 Production on 星期二 11月 26 10:59:10 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. SQL> conn sys/123456 as sysdba 已鏈接。 //也可使用這樣方式登陸Oracle數據庫
若是在安裝oracle產品時不建立數據庫,那麼要使用oracle系統就必須先建立數據庫。若是在安裝oracle時選擇創建數據庫,也能夠再建立第二個數據庫(不過爲了使oracle數據庫充分利用系統資源,建議一個服務器上只建立一個數據庫)。
建立數據庫的方法有兩種:經過圖形化界面,或者採用「CREATE DATABASE」命令,這裏說一下圖形化界面建立數據庫的方法:
[oracle@oracle ~]$ dbca //使用oracle用戶建立數據庫 //執行這條命令就會彈出圖形化界面建立數據庫
若是沒有彈出窗口,能夠參考前面的步驟,以root用戶運行「xhost +」命令,再以oracle身份運行「export DISPLAY=:0.0」命令。
彈出的圖形化界面以下:
數據庫已經建立完成!
oracle數據庫的啓動與關閉是平常工做之一。對於大多數oracle DBA來講,啓動和關閉oracle數據庫最經常使用的方式是在命令行方式下執行。
要啓動和關閉數據庫,必須具備Oracle管理員權限的用戶登陸,一般以具備SYSDBA權限的用戶登陸。
啓動一個數據庫須要三個步驟:①啓動oracle實例(非裝載階段);②由實例裝載數據庫(裝載階段);③打開數據庫(打開階段)。
在startup命令中,可使用不一樣的選項來控制數據庫的不一樣啓動步驟。
1)startup nomount(該命令不經常使用)
nomount選項僅僅啓動一個oracle實例,讀取init.ora初始化參數文件、啓動後臺進程、初始化SGA。當實例啓動後,系統將顯示一個SGA內存結構和大小的列表,以下:
[oracle@oracle ~]$ sqlplus / as sysdba //以oracle用戶登陸數據庫 SQL*Plus: Release 12.2.0.1.0 Production on 星期二 11月 26 11:18:36 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. 鏈接到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> startup nomount
2)startup mount(某些時候會用到該命令)
startup mount 命令啓動實例而且裝載數據庫,可是沒有打開數據庫。oracle系統讀取控制文件中關於數據文件和重作日誌文件的內容,但並不打開該文件。這種打開方式常在數據庫維護操做中使用,如對數據文件的改名、改變重作日誌及打開歸檔模式等。在這種打開方式下,除了能夠看到SGA系統列表之外,系統還會給出「數據庫裝載完畢」的提示。
SQL> alter database mount; //因爲上面已經執行了startup nomount命令,因此再更改它的狀態,就須要使用該命令
3)startup(正常時使用的命令)
startup命令完成啓動實例,裝載數據庫和打開數據庫三個步驟。此時,數據庫使數據文件和重作日誌文件在線,一般還會請求一個或者多個回滾段;系統除了能夠看到前面startup mount 方式下的全部提示外,還會給出一個「數據庫已經打開」的提示;數據庫系統處於正常的工做狀態,能夠接收用戶的請求。
若是採用startup nomount或者startup mount的數據庫打開方式,必須採用alter database命令來執行裝載或打開數據庫的操做。
前面兩條命令都執行過了(startup nomount和alter database mount),因此這裏再執行下面命令,數據庫就能夠說是正確啓動完成了。以下:
SQL> alter database open;
正常來講,能夠直接使用下面一條命令來正常啓動數據庫,以下:
SQL> startup //在數據庫關閉狀態下執行該命令,數據庫會依次啓動、裝載、打開。 ORACLE 例程已經啓動。 Total System Global Area 1593835520 bytes Fixed Size 8793256 bytes Variable Size 1023411032 bytes Database Buffers 553648128 bytes Redo Buffers 7983104 bytes 數據庫裝載完畢。 數據庫已經打開。
對於數據庫的關閉,有四種不一樣的關閉選項。
1)shutdown normal
shutdown normal是shutdown命令的默認選項。也就是說,若是用戶發出shutdown命令,即執行shutdown normal命令。
發出該命令後,任何新的鏈接都將再也不容許鏈接到數據庫。在數據庫關閉以前,oracle將等待目前鏈接的全部用戶都從數據庫中退出後纔開始關閉數據庫。採用這種方式關閉數據庫,在下一次啓動時不須要進行任何的實例恢復。但須要注意的是,採用這種方式時,也許關閉一個數據庫須要幾天或更長的時間。
2)shutdown immediate
shutdown immediate是經常使用的一種關閉數據庫的方式。若即想很快地關閉數據庫,又想讓數據庫「乾淨」的關閉,則常採用這種方式。
發出該命令後,當前正在被oracle處理的SQL語句當即中斷,系統中任何沒有提交的事務所有回滾。若是系統中存在一個很長的未提交的事務,那麼採用這種方式關閉數據庫也須要一段時間(該事務回滾時間)。系統不會等待鏈接到數據庫的全部用戶退出系統,而會強行回滾當前全部的活動事務,而後斷開全部的鏈接用戶。
3)shutdown transactional
shutdown transactional 命令經常使用來計劃關閉數據庫,它會等待當前鏈接到系統且正在活動的事務執行完畢,運行該命令後,任何新的鏈接和事務都是不容許的。它全部活動的事務執行完成後,數據庫將以和shutdown immediate一樣的方式關閉數據庫。
4)shutdown abort
shutdown abort是關閉數據庫方式的最後選擇,是在沒有任何辦法關閉數據庫的狀況下不得不採用的方式,通常不要採用。在下列狀況出現時能夠考慮採用這種方式關閉數據庫。
在啓動數據庫實例時遇到問題。
發出該命令後,全部正在運行的SQL語句將當即停止,全部未提交的事務將不回滾,oracle也不等待目前鏈接到數據庫的用戶退出系統;下一次啓動數據庫時須要實例恢復,所以,下一次啓動可能比平時須要更多的時間。
在關閉數據庫時最好使用shutdown immediate方式,由於這種方式安全且相對較快。不是萬不得已不要使用shutdown abort 方式,由於這種方式會形成數據丟失,而且恢復數據庫也須要較長時間。
當oracle數據庫實例啓動完成後,爲了使客戶端用戶能鏈接到oracle實例,DBA還須要在oracle所在的服務器上使用lsnrctl命令啓動監聽進程。若是數據庫實例關閉,通常也要關閉監聽進程。
啓動監聽是oracle用戶在操做系統下執行的命令,能夠直接在lsnrctl後加參數,也可在該命令提示符後進行操做,具體以下:
[oracle@oracle ~]$ lsnrctl //執行該命令 LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 25-9月 -2019 21:59:04 Copyright (c) 1991, 2016, Oracle. All rights reserved. 歡迎來到LSNRCTL, 請鍵入"help"以得到信息。 LSNRCTL> start //啓動監聽 啓動/u01/app/oracle/product/12.2.0/dbhome_1//bin/tnslsnr: 請稍候... TNSLSNR for Linux: Version 12.2.0.1.0 - Production 系統參數文件爲/u01/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora 寫入/u01/app/oracle/diag/tnslsnr/oracle/listener/alert/log.xml的日誌信息 監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521))) 監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) 正在鏈接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521))) LISTENER 的 STATUS ------------------------ 別名 LISTENER 版本 TNSLSNR for Linux: Version 12.2.0.1.0 - Production 啓動日期 25-9月 -2019 21:59:12 正常運行時間 0 天 0 小時 0 分 0 秒 跟蹤級別 off 安全性 ON: Local OS Authentication SNMP OFF 監聽程序參數文件 /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora 監聽程序日誌文件 /u01/app/oracle/diag/tnslsnr/oracle/listener/alert/log.xml 監聽端點概要... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) 監聽程序不支持服務 命令執行成功
也能夠直接使用如下命令「來啓動監聽:
[oracle@oracle ~]$ lsnrctl start //啓動監聽
[oracle@oracle ~]$ lsnrctl stop //關閉監聽 LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 25-9月 -2019 22:00:31 Copyright (c) 1991, 2016, Oracle. All rights reserved. 正在鏈接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521))) 命令執行成功
注意先啓動監聽再啓動數據庫!
[root@oracle ~]# vim /etc/oratab ……………… //修改如下內容 orcl:/u01/app/oracle/product/12.2.0/dbhome_1:Y [root@oracle ~]# vim /etc/rc.local su - oracle -c 'dbstart' //啓動數據庫 su - oracle -c 'lsnrctl start' //啓用監聽進程 [root@oracle ~]# chmod +x /etc/rc.d/rc.local //添加執行權限
重啓以後,進行驗證:
[root@oracle ~]# netstat -anpt | grep 5500 //oracle數據庫的監聽端口 tcp6 0 0 :::5500 :::* LISTEN 2144/tnslsnr [root@oracle ~]# netstat -anpt | grep 1521 //oracle數據庫監聽進程 tcp 0 0 192.168.1.1:24251 192.168.1.1:1521 ESTABLISHED 1816/ora_lreg_orcl tcp6 0 0 :::1521 :::* LISTEN 2144/tnslsnr tcp6 0 0 192.168.1.1:1521 192.168.1.1:24251 ESTABLISHED 2144/tnslsnr tcp6 0 0 192.168.1.1:1521 192.168.1.1:24143 TIME_WAIT -
———————— 本文至此結束,感謝閱讀 ————————