ORACLE數據庫系統是美國ORACLE公司(甲骨文)提供的以分佈式數據庫爲核心的一組軟件產品,是目前最流行的客戶/服務器(CLIENT/SERVER)或B/S體系結構的數據庫之一。好比SilverStream就是基於數據庫的一種中間件。ORACLE數據庫是目前世界上使用最爲普遍的數據庫管理系統,做爲一個通用的數據庫系統,它具備完整的數據管理功能;做爲一個關係數據庫,它是一個完備關係的產品;做爲分佈式數據庫它實現了分佈式處理功能。但它的全部知識,只要在一種機型上學習了ORACLE知識,便能在各類類型的機器上使用它。html
Oracle 12c 中引入了一個新功能就是Oracle Multitenant,這個功能能夠在多租戶容器數據庫中,建立並維護許多個可插拔數據庫。Oracle Multitenant是Oracle企業版中須要額外付費的組件。然而,在全部Oracle版本中均可以在一個可插拔數據庫中無償使用它。
多租戶容器數據庫(CDB)是指可以容納一個或者多個可插拔數據庫的數據庫。容器是指CDB中的數據文件和元數據的集合。可插拔數據庫是指能夠經過克隆另外一個數據庫輕鬆建立的數據容器。若是有必要,也可將可插拔數據庫從一個CDB傳送到另外一個CDB。
全部含有一組主數據文件和元數據的CDB都是根容器。每一個CDB也會含有種子容器,它是用於建立其它可插拔數據庫的模板。每一個CDB都由一個根容器、一個種子容器和0個、1個或多個可插拔數據庫構成。
c++
安裝系統:CentOS 7
IP地址:192.168.100.135
安裝所需硬盤大小:40G 或從新掛載一塊40G硬盤 (安裝就須要15G左右,大小固然越大越好)
內存:4G(不建議少於4G)
SWAP(虛擬內存) : 8G (不建議少於8G)sql
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
步驟:vim
[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
[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
[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 #使其生效
[root@oracle ~]# groupadd oinstall [root@oracle ~]# groupadd dba [root@oracle ~]# useradd -g oinstall -G dba oracle [root@oracle ~]# passwd oracle 更改用戶 oracle 的密碼 。 新的 密碼: 123123
[root@oracle ~]# mkdir -p /orc/app/oracle [root@oracle ~]# chown -R oracle.oinstall /orc/app/ [root@oracle ~]# chmod -R 755 /orc/app/oracle/
[root@oracle oracle]# chown -R oracle:oinstall /home/oracle/database/ [root@oracle oracle]# chmod -R 755 /home/oracle/database/
[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 #修改完成後保存退出
#使用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 #修改完成後保存退出
Oracle 數據庫軟件包,無需解壓縮,可直接調。
百度網盤:連接:https://pan.baidu.com/s/1v1h2_wrB6er8HCpONh9xRQ 密碼:a0h1安全
下載文件後掛載到 /opt 下面bash
[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...
點擊單實例數據庫安裝,下一步
典型安裝,自行設置口令 ,下一步
服務器
#另開一個終端,以ROOT身份登陸 [root@oracle abc]# /orc/app/oraInventory/orainstRoot.sh [root@oracle abc]# /orc/app/oracle/product/12.2.0/dbhome_1/root.sh
首先須要理解的是控制文件的概念和基本管理
控制文件:爲二進制文件,初始化大小由CREATE DATABASE指定,可使用RMAN備份。session
- 記錄了當前數據庫的結構信息,同時也包含數據文件及日誌文件的信息以及相關的狀態,歸檔信息等等。
- 在參數文件中描述其位置,個數等等。一般採用分散放開,多路複用的原則。在mount階段被讀取,open階段一直被使用。
- 維護數據庫一致性(數據庫啓動時會比較控制文件與聯機日誌文件中的ckpt,即起始scn號,如相等則正常啓動,不然須要介質恢復)。
- 一個控制文件只能屬於一個數據庫。
- 控制文件的任意修改將寫入到初始化參數中指定的全部控制文件中,讀取時則僅讀取第一個控制文件。
- 控制文件只能鏈接一個數據庫,控制文件的大小通常不要超過MB,最多爲個,最少一個,互爲鏡像.
-oracle
控制文件中包含的內容
- 數據庫的名字、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
SQL> select name from v$controlfile;
#控制文件中存放,建立數據庫信息、重作日誌信息、數據文件及歸檔日誌文件記錄等信息 SQL> select type,record_size,records_total,records_used from v$controlfile_record_section;
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; #查看控制文件位置
SQL> alter database backup controlfile to '/opt/control.bak'; #執行備份 數據庫已更改。 SQL> ho ls /opt #在sql環境中運行系統命令 control02.ctl control.bak ORCLfmap rh
Oracle數據庫在運行當中,用戶更改的數據首先會存放在數據庫高速緩衝區當中,爲了提高磁盤讀寫,oracle機制不會頻繁的將緩衝區的數據寫到磁盤,而是等到檢查點或者數據高速緩衝區達到必定數量時纔會寫入數據庫文件;假若在檢查點或者數據量等條件還沒知足系統就掛了,那麼此時用戶提交的數據就會丟失,由於數據還在內存裏,爲了防止數據丟失,oracle提出了重作日誌。
-
日誌的模式:
在線日誌:在線日誌模式,不會主動提交日誌,服務器關閉就會丟失部分數據。切換日誌組時會自動提交文件並保存,後切換的日誌組內寫入的文件會丟失。
歸檔日誌:只要寫入數據就會提交到硬盤進行保存。
LGWR的觸發條件
- 在事務提交的時候(COMMIT)
- Redo Log Buffer 三分之一滿
- Redo Log Buffer 多於一兆的變化記錄
- 在DBWn寫入數據文件以前
#查看重作日誌組的組號,序列,大小,個數數量,歸檔狀態,日誌組狀態 SQL> select group#,sequence#,bytes,members,archived,status from v$log;
新安裝完Oracle數據庫後,查看下重作日誌文件狀態,確認歸檔文件模式是否開啓。若是沒有開啓,建議開啓,增長安全性,防止部分數據丟失。
#查看歸檔日誌模式 SQL> archive log list;
SQL> shutdown immediate; #關閉Oracle數據庫 SQL> startup mount; #啓動實例,加載數據庫可是並不打開數據庫 SQL> alter database archivelog; #啓用歸檔日誌模式 SQL> alter database open; #啓動打開數據庫 SQL> archive log list; #查看歸檔日誌模式
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/ //控制文件和重作日誌文件都在此路徑
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'; 數據庫已更改。