在有些情況,服務器是的操作系統是最小安裝的,最小安裝并不包括圖形界面,網上很多Oracle的安裝文章都是在有圖形界面下完成的,本篇文章介紹如何在非圖形界面下安裝Oracle,再安裝完畢后總結了日常的啟動和關閉數據庫的方式,同時也綜合總結了sqlplus的一些可以改進的方法和navicat遠程連接數據庫的時候遇到的問題以及對應的解決方案,本文部分素材、方法步驟來源于網絡,再結合本人實踐而得出的結果,來源資料在文末給出
文章目錄
- 一、安裝環境
- 二、安裝包下載
- 三、環境配置準備
- 四、安裝部署及配置
- 五、數據庫啟動與關閉
- 六、sqlplus改進
- 七、navicat遠程數據庫遇到的問題及解決方案
一、安裝環境
以下安裝環境是在虛擬機測試環境,僅供參考
操作系統:CentOS 7
內存:2G
CPU:雙核
硬盤:50G
二、安裝包下載
1、百度“Oracle”,第一個結果進到官網
2、依次點擊菜單->開發人員->數據庫
3、在下載一欄選擇Oracle
4、點擊同意協議,然后找到對應的版本點擊file 1
之后就會進入下載界面,如果提示需要注冊的話那就注冊一個賬號就好了,注冊是免費的
三、環境配置準備
在下載的同時可以在服務器上準備一下需要安裝的環境
1、關閉防火墻
# systemctl stop firewalld.service --關閉防火墻
# systemctl disable firewalld.service -- 禁止防火墻開機啟動
2、關閉selinux
# setenforce 0
# vim /etc/selinux/config -- 編輯文件
文件中設置SELINUX=disabled
修改host名稱(其實可以省略)
# vim /etc/hosts
在文件末尾加上
192.168.15.206 oracleVM
3、安裝必要的依賴包
期間可能會出現錯誤的情況,執行多幾次就好了
# yum -y install binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33*i686 compat-libstdc++-33*.devel compat-libstdc++-33 compat-libstdc++-33*.devel gcc gcc-c++ glibc glibc*.i686 glibc-devel glibc-devel*.i686 ksh libaio libaio*.i686 libaio-devel libaio-devel*.devel libgcc libgcc*.i686 libstdc++ libstdc++*.i686 libstdc++-devel libstdc++-devel*.devel libXi libXi*.i686 libXtst libXtst*.i686 make sysstat unixODBC unixODBC*.i686 unixODBC-devel unixODBC-devel*.i686
安裝完后檢查是否安裝成功,成功是31個包
# rpm -q binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel
4、創建用戶和用戶組
創建oinstall和dba組
# groupadd oinstall
# groupadd dba
創建Oracle用戶
# useradd -g oinstall -G dba oracle
設置Oracle用戶密碼
# passwd oracle
查看創建結果
# id oracle
5、修改內核參數(根據需要修改)
編輯打開配置文件
# vim /etc/sysctl.conf
在文件中加上:
fs.aio-max-nr=1048576
fs.file-max=6815744
kernel.shmall=524288
kernel.shmmax=2147483647
kernel.sem=250 32000 100 128
kernel.shmmni=4096
kernel.panic_on_oops=1
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576
net.ipv4.conf.all.rp_filter=2
net.ipv4.conf.default.rp_filter=2
fs.aio-max-nr=1048576
net.ipv4.ip_local_port_range=9000 65500
付上各個參數說明:
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物理內存,可取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:
表示套接字發送緩沖區大小的最大值。
使配置文件生效
# sysctl -p
6、修改配置
(1)打開并編輯文件/etc/security/limits.conf
# 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 hard stack 10240
第1行是設置進程數軟限制;
第2行是設置進程數硬限制;
第3行是設置文件數軟限制;
第4行是設置文件數硬限制
(2)打開并編輯文件/etc/pam.d/login
# vim /etc/pam.d/login
添加以下內容
session required /lib64/security/pam_limits.so
session required pam_limits.so
(3)打開并編輯文件/etc/profile
# 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
使配置文件生效
# source /etc/profile
(4)創數據庫目錄
# mkdir -p /database/oracle
# chown -R oracle:oinstall /database/oracle/
# chmod -R 775 /database/oracle/
(5)配置Oracle用戶
切換到oracle用戶下
# su - oracle
打開并編輯環境變量文件,配置oracle用戶環境變量
$ vim ~/.bash_profile
在末尾添加
export ORACLE_BASE=/database/oracle/oracle
export ORACLE_SID=orcl
使配置生效
$ source ~/.bash_profile
四、安裝部署及配置
1、上傳Oracle安裝包
創建一個文件夾
# mkdir /home/oracle/oradb
2、安裝解壓工具
切換到root用戶
# su - root
安裝解壓工具
# yum install -y unzip zip
3、解壓文件
切換到oracle用戶
# su - oracle
解壓文件
$ unzip xxx.zip
4、復制相應的模板
為了不影響原來的文件內容(后面文件腳本內容會作修改),將相應的模板復制一份,當然也可以省略這步
$ cd /home/oracle
$ mkdir etc
$ cp /home/oracle/oradb/database/response/* /home/oracle/etc/
切換到root用戶
# su - root
設置權限
# chmod 700 /home/oracle/etc/*.rsp
5、編輯文件內容
切換到oracle用戶
# su - oracle
打開編輯db_install.rsp
$ vim /home/oracle/etc/db_install.rsp
找出以下項,并作修改(根據個人實際情況修改,比如我這邊的oracle的目錄是做過調整的)
oracle.install.option=INSTALL_DB_SWONLY // 安裝類型
UNIX_GROUP_NAME=oinstall // 安裝組
INVENTORY_LOCATION=/database/oracle/oraInventory //INVENTORY目錄(不填就是默認值)
ORACLE_HOME=/database/oracle/oracle/product/12/db_1
ORACLE_BASE=/database/oracle/oracle
oracle.install.db.InstallEdition=EE // 企業版本
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oinstall
oracle.install.db.OSBACKUPDBA_GROUP=oinstall
oracle.install.db.OSDGDBA_GROUP=oinstall
oracle.install.db.OSKMDBA_GROUP=oinstall
oracle.install.db.OSRACDBA_GROUP=oinstall
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE //數據庫類型
oracle.install.db.config.starterdb.globalDBName=orcl
oracle.install.db.config.starterdb.SID=orcl
oracle.install.db.config.starterdb.memoryLimit=81920 //自動管理內存的內存(M)
oracle.install.db.config.starterdb.password.ALL=oracle//設定所有數據庫用戶使用同一個密碼
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
6、開始安裝
執行db_install.rsp文件
$ cd /home/oracle/oradb/database
$ ./runInstaller -ignoreSysPrereqs -ignorePrereq -waitforcompletion \
-showProgress -silent -responseFile /home/oracle/database/response/db_install.rsp
在安裝快完成的時候會提示要切換到root用戶執行兩個腳本,這步跟著照做就是
$ su - root
# /database/oracle/oraInventory/orainstRoot.sh
# /database/oracle/oracle/product/12/db_1/root.sh
7、修改oracle用戶環境變量
切換到oracle用戶,打開并編輯用戶編輯變量文件
# su - oracle
$ vim ~/.bash_profile
按需求將以下內容加上
export ORACLE_BASE=/database/oracle/oracle
export ORACLE_SID=orcl
export ROACLE_PID=oral12
#export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export ORACLE_HOME=/database/oracle/oracle/product/12/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export LANG="zh_CN.UTF-8"
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
使配置生效
$ source ~/.bash_profile
配置監聽
$ netca /silent /responsefile /home/oracle/etc/netca.rsp
啟動監聽
$ lsnrctl start
修改靜默建庫文件
$ vim /home/oracle/etc/dbca.rsp
其中文件內容修改如下(根據實際情況修改)
responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v12.2.0
gdbName=orcl
sid=orcl
databaseConfigType=SI
createAsContainerDatabase=true
numberOfPDBs=1
pdbName=orclpdb
templateName=/database/oracle/oracle/product/12/db_1/assistants/dbca/templates/General_Purpose.dbc
emExpressPort=5500
omsPort=0
characterSet=AL32UTF8
listeners=LISTENER
memoryPercentage=40
automaticMemoryManagement=false
totalMemory=0
執行靜默建庫
$ dbca -silent -createDatabase -responseFile /home/oracle/etc/dbca.rsp
此時數據庫已安裝成功
8、登進數據庫開啟實例
$ sqlplus / as sysdba
SQL>startup
五、數據庫啟動與關閉
概述:只有具備sysdba和sysoper系統特權的用戶才能啟動和關閉數據庫。
在啟動數據庫之前應該啟動監聽程序,否則就不能利用命令方式來管理數據庫,包括啟動和關閉數據庫。
雖然數據庫正常運行,但如果沒有啟動監聽程序,客戶端就不能連接到數據庫。
1、啟動
Oracle數據庫的完整啟動過程包含以下3個步驟:
簡單地說,就是:啟動實例-->加載數據庫-->打開數據庫.
具體說明:
1.創建并啟動與數據庫對應的實例。
在啟動實例時,將為實例創建一系列后臺進程和服務進程,并且在內存中創建SGA區等內存結構。在實例啟動的過程中只會使用到初始化參數文件,數據庫是否存在對實例的啟動沒有影響。如果初化參數設置有誤,實例將無法啟動。
2.為實例加載數據庫。
加載數據庫時實例將打開數據庫的控制文件,從控制文件中獲取數據庫名稱、數據文件的位置和名稱等有關數據庫物理結構的信息,為打開數據庫做好準備。如果控制文件損壞,則實例將無法加載數據庫。在加載數據庫階段,實例并不會打開數據庫的物理文件----數據文件和重做日志文件。
3.將數據庫設置為打開狀態。
打開數據庫時,實例將打開所有處于聯機狀態的數據文件和重做日志文件。控制文件中的任何一個數據文件或重做日志文件無法正常打開,數據庫都將返回錯誤信息,這時需要進行數據庫恢復。
只有將數據庫設置為打開狀態后,數據庫才處于正常狀態,這時普通用戶才能夠訪問數據庫。在很多情況下,啟動數據庫時并不是直接完成上述3個步驟,而是逐步完成的,然后執行必要的管理操作,最后才使數據庫進入正常運行狀態。所以,才有了各種不同的啟動模式用于不同的數據庫維護操作。
因為Oracle數據庫啟動過程中不同的階段可以對數據庫進行不同的維護操作,對應我們不同的需求,所以就需不同的模式啟動數據庫。
各種模式詳解:
1.NoMount 模式(啟動實例不加載數據庫)
命令:startup nomount
講解:這種啟動模式只會創建實例,并不加載數據庫,Oracle僅為實例創建各種內存結構和服務進程,不會打開任何數據文件。在NoMount模式下,只能訪問那些與SGA區相關的數據字典視圖,包括V$PARAMETER、V$SGA、V$PROCESS 和 V$SESSION等,這些視圖中的信息都是從SGA區中獲取的,與數據庫無關。非安裝啟動,這種方式啟動下可執行:重建控制文件、重建數據庫、讀取init.ora文件,啟動instance,即啟動SGA和后臺進程,這種啟動只需要init.ora文件。
模式用途:
(1)創建新數據庫;
(2)重建控制文件。
2.Mount模式(加載數據庫但不打開數據庫)
命令:startup mount
講解:這種啟動模式將為實例加載數據庫,但保持數據庫為關閉狀態。因為加載數據庫時需要打開數據庫控制文件,但數據文件和重做日志文件都都無法進行讀寫,所以用戶還無法對數據庫進行操作。 在Mount模式下,只能訪問那些與控制文件相關的數據字典視圖,包括V$THREAD、V$CONTROLFILE、V$DATABASE、V$DATAFILE 和 V$LOGFILE等,這些視圖都是從控制文件中獲取的。
模式用途:
(1)重命名數據文件;
(2)添加、刪除或重命名重做日志文件;
(3)執行數據庫完全恢復操作;
(4)改變數據庫的歸檔模式。
3.Open模式(正常打開數據庫)
命令:startup [open]
講解:正常按3個步驟啟動數據庫。
模式用途:平時不對數據庫做什么維護,像只做應用開發,用這個模式就好了。
4.強制啟動模式
命令:startup force
用途&講解:在某些情況下,使用前面的各種模式都無法成功啟動數據庫時,可以嘗試強制啟動模式。
使用Alter Database語句,還可以在各啟動模式間切換。并且,還可以對數據庫設置不同的狀態用于不同的操作,如受/非受限抽狀態、只讀。
使用Alter Database語句,在各啟動模式間切換。
(1)從NoMount模式切換到Mount模式(沒有從mount切換到nomount的):
命令:ALTER DATABASE MOUNT;
(2)當數據庫狀態為關閉時,切換到Open模式
命令:ALTER DATABASE OPEN;
(3)在Open模式下,還可以選擇將數據庫設置為非受限狀態和受限狀態。
命令:
在啟動Open模式時,添加restrict關鍵字:startup restrict
設置或取消受限狀態:alter system enable\disable restricted session;
講解:
非受限狀態,就是我們平時應用程序開發用到的狀態。
受限狀態,當打開的數據庫被設置為受限狀態時,只有Create Session 和 Restricted Session系統權限 或者 具有SYSDBA 和 SYSPORE 系統權限的用戶才能連接到數據庫。但進入受限狀態后,系統中仍然可能會存在活動的普通用戶會話。
受限狀態用途:
(1)執行數據導入或導出操作;
(2)暫時拒絕普通用戶訪問數據庫;
(3)進行數據庫移植或升級操作。
(4) 只讀狀態
設置只讀命令:alter database open read only;
取消只讀命令:alter database open read write;
用途&講解:當一個正常打開的數據庫被設置為只讀狀態時,用戶只能查詢數據,但不能以任何方式對數據庫對象進行修改。處于只讀狀態,可能保證數據文件和重做日志文件中的內容不被修改,但是并不限制那些不會寫入數據文件與重做日志文件的操作。
2、關閉
與數據庫啟動一樣,關閉數據庫與實例也分為3步:關閉數據庫-->實例卸載數據庫--->終止實例。
詳細步驟為:
(1)關閉數據庫,oracle將重做日志高速緩存中的內容寫入重做日志文件,并且將數據庫高速緩存中被改動過的數據寫入數據文件,然后再關閉所有的數據文件和重做日志文件,這時數據庫的控制文件仍然處于打開狀態,但是由于數據庫處于關閉狀態,所以用戶無法訪問數據庫。
(2)卸載數據庫,關閉數據庫后,例程才能被卸載,控制文件再這個時候被關閉,但例程仍然存在 。
(3)終止例程,進程終止,分配給例程的內存sga區被回收。
1.Nomal(正常關閉方式)
命令:shutdown nomal
講解:正常方式關閉數據時,Oracle執行如下操作:
(1)阻止任何用戶建立新的連接。
(2)等待當前所有正在連接的用戶主動斷開連接(此方式下Oracle不會立即斷掉當前用戶的連接,這些用戶仍然操作相關的操作)
(3)一旦所有的用戶都斷開連接,則立即關閉、卸載數據庫,并終止實例。(所以,一般以正常方式關閉數據庫時,應該通知所有在線的用戶盡快斷開連接)
2.Immediate(立即關閉方式)
命令:shutdown immediate
講解:
(1)阻止任何用戶建立新的連接,同時阻止當前連接的用戶開始任何新的事務。
(2)Oracle不等待在線用戶主動斷開連接,強制終止用戶的當前事務,將任何未提交的事務回退。(如果存在太多未提交的事務,此方式將會耗費很長時間終止和回退事務)
(3)直接關閉、卸載數據庫,并終止實例。
3.Transactional(事務關閉方式)
命令:shutdown transactional
講解:這種方式介于正常關閉方式跟立即關閉方式之間,響應時間會比較快,處理也將比較得當。執行過程如下:
(1)阻止任何用戶建立新的連接,同時阻止當前連接的用戶開始任何新的事務。
(2)等待所有未提交的活動事務提交完畢,然后立即斷開用戶的連接。
(3)直接關閉、卸載數據庫,并終止實例。
4.Abort(終止關閉方式)
命令:shutdown abort
講解:這是比較粗暴的一種關閉方式,當前面3種方式都無法關閉時,可以嘗試使用終止方式來關閉數據庫。但是以這種方式關閉數據庫將會丟失一部份數據信息,當重新啟動實例并打開數據庫時,后臺進程SMON會執行實例恢復操作。一般情況下,應當盡量避免使用這種方式來關閉數據庫。執行過程如下:
(1)阻止任何用戶建立新的連接,同時阻止當前連接的用戶開始任何新的事務。
(2)立即終止當前正在執行的SQL語句。
(3)任何未提交的事務均不被退名。
(4)直接斷開所有用戶的連接,關閉、卸載數據庫,并終止實例。
3、sqlplus登錄
- sqlplus / as sysdba
sqlplus / as sysdba
無需數據庫進入可用狀態,就可用用該命令登錄,運行startup來啟動。
sqlplus “/as sysdba”
sqlplus username/pwd@host/service_name
sqlplus tiger/scott@localhost/orcl
sqlplus tiger/scott@172.16.10.1:1521/orcl
以用戶名/密碼、IP:Port、服務名 為參數登錄。
- sqlplus /nolog
sqlplus /nolog
先使用sqlplus命令,而不連接數據庫,然后用conn命令登錄。
conn tiger/scott
conn tiger/scott@172.16.0.1/orcl
六、sqlplus改進
概述:在默認的sqlplus的使用過程中發現是比較難用的,最好的例子就是不能用退格鍵以及掉出歷史命令的上下鍵,這里介紹退格鍵的改進,至于掉出歷史命令的上下鍵可參考文末的文章
切換至oracle用戶
# su - oracle
打開并編輯用戶環境變量配置文件
$ vim ~/.bash_profile
在文件末尾加上以下代碼并保存退出
stty erase ^h
使配置文件生效
$ source ~/.bash_profile
此時再進入sqlplus測試發現,退格鍵已經能用了
七、navicat遠程數據庫遇到的問題及解決方案
一般數據庫是安裝在遠程服務器上,然后用本機的管理軟件去連接,此時需要配置一下
在oracle用戶下,打開并編輯listener.ora文件(一般在安裝目錄下)
$ vim /database/oracle/oracle/product/12/db_1/network/admin/listener.ora
然后將其中的HOST改為服務器的IP(這里為了保留之前的配置所以直接在文件后面復制了上面的配置然后作修改)
保存退出
打開并編輯tnsnames.ora文件
$ vim /database/oracle/oracle/product/12/db_1/network/admin/tnsnames.ora
跟上面操作一樣,將HOST改為服務器的IP
保存退出
然后重啟數據庫實例和數據庫監聽,此時可以用navicat來連接數據庫了
可能會遇到的錯誤:
1、
ORA-12170:TNS:連接超時
檢查步驟及解決方法:
(1)從本機ping服務器IP是否能ping通
(2)使用tnsping或者telnet測試端口是否通暢
(3)服務器防火墻是否已關閉
(4)服務器selinux是否已關閉
(5)數據庫監聽是否開啟
(6)如果是用PL/SQL的話,tns配置中,host是否為服務器的IP
2、
ORA-28040:No matching authentication protocol
錯誤原因是因為navicat的oci.dll版本不匹配,通常是因為版本過低,即低版本的oci.dll連接高版本的數據
根據下面步驟查看oci.dll的版本
可看到這個版本是10_2,需要上官網找到最新的版本(截至到本篇文章的日期,最新版本是18_5)
地址:https://www.oracle.com/technetwork/database/database-technologies/instant-client/overview/index-4369172.html
下載好后解壓,并找到以下三個文件,然后替換掉原來版本的三個文件然后重啟navicat即可(10_2跟18_5的有兩個文件文件名會有點不同)
參考文章:
Oracle安裝:
https://www.cnblogs.com/pachulia/p/9261721.html
https://blog.csdn.net/zwl18210851801/article/details/80774980
oracle啟動與關閉:
https://www.cnblogs.com/kevingrace/p/7694659.html
https://www.cnblogs.com/fiberhome/p/7414220.html
sqlplus改進:
https://www.cnblogs.com/mengfanrong/p/4680281.html
Oracle遠程連接:
https://blog.csdn.net/kangguowei/article/details/53039195
https://blog.csdn.net/wanghailong_qd/article/details/85887825
https://www.cnblogs.com/gw666/p/7889287.html