Centos 7下安裝Oracle 12c 以及裝後優化(附軟件包)
ORACLE數據庫系統是美國ORACLE公司(甲骨文)提供的以分布式數據庫為核心的一組軟件產品,是目前最流行的客戶/服務器(CLIENT/SERVER)或B/S體系結構的數據庫之一。比如SilverStream就是基於數據庫的一種中間件。ORACLE數據庫是目前世界上使用最為廣泛的數據庫管理系統,作為一個通用的數據庫系統,它具有完整的數據管理功能;作為一個關系數據庫,它是一個完備關系的產品;作為分布式數據庫它實現了分布式處理功能。但它的所有知識,只要在一種機型上學習了ORACLE知識,便能在各種類型的機器上使用它。
Oracle 12c 可插拔數據庫體系結構
Oracle 12c 中引入了一個新功能就是Oracle Multitenant
,這個功能可以在多租戶容器數據庫中,創建並維護許多個可插拔數據庫。Oracle Multitenant是Oracle企業版中需要額外付費的組件。然而,在所有Oracle版本中都可以在一個可插拔數據庫中免費使用它。
多租戶容器數據庫(CDB)是指能夠容納一個或者多個可插拔數據庫的數據庫。容器是指CDB中的數據文件和元數據的集合。可插拔數據庫是指可以通過克隆另一個數據庫輕松創建的數據容器。如果有必要,也可將可插拔數據庫從一個CDB傳送到另一個CDB。
所有含有一組主數據文件和元數據的CDB都是根容器。每個CDB也會含有種子容器,它是用於創建其它可插拔數據庫的模板。每個CDB都由一個根容器、一個種子容器和0個、1個或多個可插拔數據庫構成。
----------------安裝環境------------------
安裝系統:CentOS 7
IP地址:192.168.100.135
安裝所需硬盤大小:40G 或重新掛載一塊40G硬盤 (安裝就需要15G左右,大小當然越大越好)
內存:4G(不建議少於4G)
SWAP(虛擬內存) : 8G (不建議少於8G)
Oracle 數據庫軟件包,無需解壓縮,可直接調用。
百度網盤:鏈接:https://pan.baidu.com/s/1v1h2_wrB6er8HCpONh9xRQ 密碼:a0h1
準備工作:
關閉防火墻
[root@oracle ~]# systemctl stop firewalld.service [root@oracle ~]# systemctl disable firewalld.service [root@oracle ~]# setenforce 0
掛載新硬盤以便安裝
步驟:
[root@localhost ~]# cd /dev
[root@localhost dev]# fdisk /dev/sdb
n
p
回車
回車
回車
w
[root@localhost dev]# mkfs -t xfs /dev/sdb1
[root@localhost dev]# mkdir /orc
[root@localhost dev]# vim /etc/hostname
HOSTNAME=oracle #修改主機名,便於管理,修改完成後保存退出
[root@localhost dev]# vim /etc/hosts
192.168.100.135 oracle #末尾插入一行
重啟虛擬機,識別硬盤
[root@oracle ~]# mount /dev/sdb1 /orc
[root@oracle ~]# df -h
----------------安裝步驟------------------
1.yum安裝環境依賴包
[root@oracle ~]# yum -y install binutils compat-libcapl compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel
2.調整內核參數
[root@oracle ~]# vim /etc/sysctl.conf
#末行添加
fs.aio-max-nr = 1048576 #異步IO請求數目,推薦值是:1048576(1024*1024也就是1024K個)
fs.file-max = 6815744 #打開的文件句柄的最大數量,防止文件描述符耗盡的問題
kernel.shmall = 2097152 #共享內存總量 頁為單位,內存除以4K所得
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128 #數值對應含義:SEMMSL: 每個信號集的最大信號數量
#SEMMNS:用於控制整個 Linux 系統中信號的最大數
#SEMOPM:內核參數用於控制每個semop系統調用可以執行的信號操作的數量
#SEMMNI:內核參數用於控制整個 Linux 系統中信號集的最大數量
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 #套接字發送緩沖區大小的最大值
#修改完成後保存退出
[root@oracle ~]# sysctl -p #使其生效
3.添加管理用戶,組
[root@oracle ~]# groupadd oinstall
[root@oracle ~]# groupadd dba
[root@oracle ~]# useradd -g oinstall -G dba oracle
[root@oracle ~]# passwd oracle
更改用戶 oracle 的密碼 。
新的 密碼:
123123
4.創建並修改Oracle安裝目錄權限
[root@oracle ~]# mkdir -p /orc/app/oracle
[root@oracle ~]# chown -R oracle.oinstall /orc/app/
[root@oracle ~]# chmod -R 755 /orc/app/oracle/
5.修改Oracle源碼包權限
[root@oracle oracle]# chown -R oracle:oinstall /home/oracle/database/
[root@oracle oracle]# chmod -R 755 /home/oracle/database/
6.修改oracle用戶環境配置
[root@oracle ~]# vim /home/oracle/.bash_profile
#刪除末尾兩行數據並插入以下內容
umask 022 #權限,設置的是反掩碼
ORACLE_BASE=/opt/app/oracle #指定基目錄
ORACLE_HOME=/opt/app/oracle/product/12.2.0/dbhome_1/ #指定數據存放路徑
ORACLE_SID=orcl #指定實例名稱
NLS_LANG="SIMPLIFIED CHINESE_CHINA".UTF8 #簡體中文語言字符集
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/bin
LANG=zh_CN.UTF-8
export PATH LANG NLS_LANG ORACLE_BASE ORACLE_HOME ORACLE_SID
#修改完成後保存退出
7.配置Oracle用戶資源限制
#使用pam_limits認證模塊
[root@oracle ~]# vim /etc/pam.d/login
#在第7行左右下插入以下內容
session required /lib/security/pam_limits.so
session required pam_limits.so
#修改完成後保存退出
[root@oracle ~]# 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 #堆棧設置
#修改完成後保存退出
[root@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.安裝Oracle安裝包
Oracle 數據庫軟件包,無需解壓縮,可直接調。
百度網盤:鏈接:https://pan.baidu.com/s/1v1h2_wrB6er8HCpONh9xRQ 密碼:a0h1
下載文件後掛載到 /opt 下面
[root@oracle ~]# xhost + #允許所有用戶訪問Xserver
access control disabled, clients can connect from any host
[root@oracle ~]# chmod -R 777 /opt/database/
[root@oracle ~]# su - oracle #切換用戶
[oracle@oracle ~]$ export DISPLAY=:0.0
[oracle@oracle ~]$ cd /opt/database/
[oracle@oracle database]$ ls
install response rpm runInstaller sshsetup stage welcome.html
[oracle@oracle ~]$ ./runInstaller #執行安裝腳本
正在啟動 Oracle Universal Installer...
8.進入圖形化安裝(無圖片演示的均為默認選項)
點擊單實例數據庫安裝,下一步
典型安裝,自行設置口令 ,下一步
操作安裝後,在安裝到79%左右的時候彈出小窗口,要求運行兩個腳本,這時候用root用戶進行操作
#另開一個終端,以ROOT身份登錄
[root@oracle abc]# /orc/app/oraInventory/orainstRoot.sh
[root@oracle abc]# /orc/app/oracle/product/12.2.0/dbhome_1/root.sh
等待完成再回到圖形化界面點確定,繼續安裝。(需要等待一段時間)
至此Oracle數據庫安裝完畢
但是新安裝的Oracle數據庫是十分不安全的,接下來會介紹基本的裝後優化
首先需要理解的是控制文件的概念和基本管理
-------------控制文件管理--------------
控制文件:為二進制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN備份。
- 記錄了當前數據庫的結構信息,同時也包含數據文件及日誌文件的信息以及相關的狀態,歸檔信息等等。
- 在參數文件中描述其位置,個數等等。通常采用分散放開,多路復用的原則。在mount階段被讀取,open階段一直被使用。
- 維護數據庫一致性(數據庫啟動時會比較控制文件與聯機日誌文件中的ckpt,即起始scn號,如相等則正常啟動,否則需要介質恢復)。
- 一個控制文件只能屬於一個數據庫。
- 控制文件的任意修改將寫入到初始化參數中指定的所有控制文件中,讀取時則僅讀取第一個控制文件。
- 控制文件只能連接一個數據庫,控制文件的大小一般不要超過MB,最多為個,最少一個,互為鏡像.
-
控制文件中包含的內容
- 數據庫的名字、ID、創建的時間戳
- 表空間的名字
- 聯機日誌文件、數據文件的位置、個數、名字
- 聯機日誌的Sequence號碼
- 檢查點的信息
- 撤銷段的開始或結束
- 歸檔信息
- 備份信息
-
數據庫啟動從nomount狀態啟動到mount狀態時必須讀取控制文件,以獲取數據文件和日誌文件的位置;如果控制文件實效,數據庫將無法啟動;而且數據庫實時運行過程中,系統也在不停向控制文件中寫入stop scn以及checkpoint scn,如果控制文件無法寫入,數據庫也會宕機。遇到這種情況如果有備份的控制文件,只需要在nomount狀態將正確的備份控制文件覆蓋到已實效的控制文件,然後啟動數據庫到open狀態即可解決問題。因此系統默認至少同時有幾個相同的控制文件互為備份,而且相同的控制文件最好是放在不同的磁盤目錄,分散風險。
-
12c安裝完成後默認情況下,控制文件有2個,由上述可知,如果Oracle在安裝完成後沒有更改控制文件的話,會存在很大的安全隱患,所以建議優化控制文件等。
準備工作:
需要使用root用戶,給/opt 777權限,以便於Oracle用戶讀寫操作
[root@HOSTNAMEoracle ~]# chmod 777 /opt/進入Oracle
[root@HOSTNAMEoracle ~]# su - oracle
[oracle@HOSTNAMEoracle ~]$ sqlplus / as sysdba
1.查看控制文件位置
SQL> select name from v$controlfile;
2.查看控制文件內容
#控制文件中存放,創建數據庫信息、重做日誌信息、數據文件及歸檔日誌文件記錄等信息
SQL> select type,record_size,records_total,records_used from v$controlfile_record_section;
3.存儲多重控制文件
SQL> alter system set
2 control_files=‘/orc/app/oracle/oradata/orcl/control01.ctl‘,
3 ‘/opt/control02.ctl‘ scope=spfile; #變更控制文件02的路徑,增加安全性
參數更改完畢後需要關閉Oracle數據庫,在/orc/app/oracle/oradata/orcl控制文件的路徑中進行更改,並重啟Oracle才能生效
SQL> shutdown immediate; #關閉數據庫
SQL> ho cp /orc/app/oracle/oradata/orcl/control02.ctl /opt/control02.ctl #使用 ho命令在不退出數據庫的情況下執行系統命令
SQL> startup #開啟數據庫
SQL> select name from v$controlfile; #查看控制文件位置
4.備份控制文件
SQL> alter database backup controlfile to ‘/opt/control.bak‘; #執行備份
數據庫已更改。
SQL> ho ls /opt #在sql環境中運行系統命令
control02.ctl control.bak ORCLfmap rh
--------------重做日誌-------------
Oracle數據庫在運行當中,用戶更改的數據首先會存放在數據庫高速緩沖區當中,為了提升磁盤讀寫,oracle機制不會頻繁的將緩沖區的數據寫到磁盤,而是等到檢查點或者數據高速緩沖區達到一定數量時才會寫入數據庫文件;倘若在檢查點或者數據量等條件還沒滿足系統就掛了,那麽此時用戶提交的數據就會丟失,因為數據還在內存裏,為了防止數據丟失,oracle提出了重做日誌。
-
日誌的模式:
在線日誌:在線日誌模式,不會主動提交日誌,服務器關閉就會丟失部分數據。切換日誌組時會自動提交文件並保存,後切換的日誌組內寫入的文件會丟失。
歸檔日誌:只要寫入數據就會提交到硬盤進行保存。
重做日誌組:由一個或多個相同的聯機日誌文件組成一個聯機重做日誌組至少兩個日誌組,每組一個成員(建議每組兩個成員,分散放開到不同的磁盤),由LGWR後臺進程同時將日誌內容寫入到一個組的所有成員。
LGWR的觸發條件
- 在事務提交的時候(COMMIT)
- Redo Log Buffer 三分之一滿
- Redo Log Buffer 多於一兆的變化記錄
- 在DBWn寫入數據文件之前
1.重做日誌查詢
#查看重做日誌組的組號,序列,大小,個數數量,歸檔狀態,日誌組狀態
SQL> select group#,sequence#,bytes,members,archived,status from v$log;
新安裝完Oracle數據庫後,查看下重做日誌文件狀態,確認歸檔文件模式是否開啟。如果沒有開啟,建議開啟,增加安全性,防止部分數據丟失。
2.歸檔日誌管理
#查看歸檔日誌模式
SQL> archive log list;
開啟歸檔日誌模式:
SQL> shutdown immediate; #關閉Oracle數據庫
SQL> startup mount; #啟動實例,加載數據庫但是並不打開數據庫
SQL> alter database archivelog; #啟用歸檔日誌模式
SQL> alter database open; #啟動打開數據庫
SQL> archive log list; #查看歸檔日誌模式
3.方便查看日誌組,可以稍作下修改
SQL> set line 120; //設置顯示寬度120
SQL> col member for a50; //member列顯示寬度50字符寬度
SQL> select group#,status,type,member from v$logfile; //使用logfile視圖查看
PS:status 含義
1:空白 正在使用
2:stale 內容不完整
3:invalid 無法訪問 如剛建立
4:deleted 文件已不再有用
/orc/app/oracle/oradata/orcl/ //控制文件和重做日誌文件都在此路徑
4.關於重做日誌組的新建和刪除
---------------------新增重做日誌組--------------------------------
SQL> alter database add logfile group 4
2 (‘/orc/app/oracle/oradata/orcl/redo04a.log‘,
3 ‘/opt/redo04b.log‘) size 10m;
數據庫已更改。
-------------------刪除重做日誌組--------------------------------
SQL> alter database drop logfile group 4;
數據庫已更改。
#當前日誌組不可刪除 解決方法:切換日誌組: alter system switch logfile;
-------------------添加/刪除重做日誌文件--------------------------
SQL> alter database add logfile member
2 ‘/opt/redo01b.log‘ to group 1,
3 ‘/opt/redo02b.log‘ to group 2;
數據庫已更改。
SQL> alter database drop logfile member
2 ‘/opt/redo02b.log‘;
數據庫已更改。
Centos 7下安裝Oracle 12c 以及裝後優化(附軟件包)