ORACLE數(shù)據(jù)庫系統(tǒng)是美國ORACLE公司(甲骨文)提供的以分布式數(shù)據(jù)庫為核心的一組軟件產(chǎn)品,是目前最流行的客戶/服務(wù)器(CLIENT/SERVER)或B/S體系結(jié)構(gòu)的數(shù)據(jù)庫之一。比如SilverStream就是基于數(shù)據(jù)庫的一種中間件。ORACLE數(shù)據(jù)庫是目前世界上使用最為廣泛的數(shù)據(jù)庫管理系統(tǒng),作為一個通用的數(shù)據(jù)庫系統(tǒng),它具有完整的數(shù)據(jù)管理功能;作為一個關(guān)系數(shù)據(jù)庫,它是一個完備關(guān)系的產(chǎn)品;作為分布式數(shù)據(jù)庫它實(shí)現(xiàn)了分布式處理功能。但它的所有知識,只要在一種機(jī)型上學(xué)習(xí)了ORACLE知識,便能在各種類型的機(jī)器上使用它。
創(chuàng)新互聯(lián)主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁視覺設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、全網(wǎng)整合營銷推廣、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式成都網(wǎng)站建設(shè)公司、移動網(wǎng)站建設(shè)、微商城、網(wǎng)站托管及網(wǎng)頁維護(hù)、WEB系統(tǒng)開發(fā)、域名注冊、國內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個建站步驟的完善服務(wù)體系。一人跟蹤測試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為廣告制作行業(yè)客戶提供了網(wǎng)站營銷服務(wù)。
Oracle 12c 中引入了一個新功能就是Oracle Multitenant,這個功能可以在多租戶容器數(shù)據(jù)庫中,創(chuàng)建并維護(hù)許多個可插拔數(shù)據(jù)庫。Oracle Multitenant是Oracle企業(yè)版中需要額外付費(fèi)的組件。然而,在所有Oracle版本中都可以在一個可插拔數(shù)據(jù)庫中免費(fèi)使用它。
多租戶容器數(shù)據(jù)庫(CDB)是指能夠容納一個或者多個可插拔數(shù)據(jù)庫的數(shù)據(jù)庫。容器是指CDB中的數(shù)據(jù)文件和元數(shù)據(jù)的集合??刹灏螖?shù)據(jù)庫是指可以通過克隆另一個數(shù)據(jù)庫輕松創(chuàng)建的數(shù)據(jù)容器。如果有必要,也可將可插拔數(shù)據(jù)庫從一個CDB傳送到另一個CDB。
所有含有一組主數(shù)據(jù)文件和元數(shù)據(jù)的CDB都是根容器。每個CDB也會含有種子容器,它是用于創(chuàng)建其它可插拔數(shù)據(jù)庫的模板。每個CDB都由一個根容器、一個種子容器和0個、1個或多個可插拔數(shù)據(jù)庫構(gòu)成。
安裝系統(tǒng):CentOS 7
IP地址:192.168.100.135
安裝所需硬盤大小:40G 或重新掛載一塊40G硬盤 (安裝就需要15G左右,大小當(dāng)然越大越好)
內(nèi)存:4G(不建議少于4G)
SWAP(虛擬內(nèi)存): 8G (不建議少于8G)
Oracle 數(shù)據(jù)庫軟件包,無需解壓縮,可直接調(diào)用。
百度網(wǎng)盤:鏈接:https://pan.baidu.com/s/1v1h3_wrB6er8HCpONh9xRQ 密碼:a0h2
[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 #修改主機(jī)名,便于管理,修改完成后保存退出
[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請求數(shù)目,推薦值是:1048576(1024*1024也就是1024K個)
fs.file-max = 6815744 #打開的文件句柄的最大數(shù)量,防止文件描述符耗盡的問題
kernel.shmall = 2097152 #共享內(nèi)存總量 頁為單位,內(nèi)存除以4K所得
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128 #數(shù)值對應(yīng)含義:SEMMSL: 每個信號集的最大信號數(shù)量
#SEMMNS:用于控制整個 Linux 系統(tǒng)中信號的最大數(shù)
#SEMOPM:內(nèi)核參數(shù)用于控制每個semop系統(tǒng)調(diào)用可以執(zhí)行的信號操作的數(shù)量
#SEMMNI:內(nèi)核參數(shù)用于控制整個 Linux 系統(tǒng)中信號集的最大數(shù)量
net.ipv4.ip_local_port_range = 9000 65500 #用于向外連接的端口范圍
net.core.rmem_default = 262144 #套接字接收緩沖區(qū)大小的缺省值
net.core.rmem_max = 4194304 #套接字接收緩沖區(qū)大小的最大值
net.core.wmem_default = 262144 #套接字發(fā)送緩沖區(qū)大小的缺省值
net.core.wmem_max = 1048576 #套接字發(fā)送緩沖區(qū)大小的最大值
#修改完成后保存退出
[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
#刪除末尾兩行數(shù)據(jù)并插入以下內(nèi)容
umask 022 #權(quán)限,設(shè)置的是反掩碼
ORACLE_BASE=/opt/app/oracle #指定基目錄
ORACLE_HOME=/opt/app/oracle/product/12.2.0/dbhome_1/ #指定數(shù)據(jù)存放路徑
ORACLE_SID=orcl #指定實(shí)例名稱
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認(rèn)證模塊
[root@oracle ~]# vim /etc/pam.d/login
#在第7行左右下插入以下內(nèi)容
session required /lib/security/pam_limits.so
session required pam_limits.so
#修改完成后保存退出
[root@oracle ~]# vim /etc/security/limits.conf #編輯對資源的限制
#在末尾插入
oracle soft nproc 2047 #但用戶可用使用的進(jìn)程數(shù)量
oracle hard nproc 16384
oracle soft nofile 1024 #用戶可打開的文件數(shù)量
oracle hard nofile 65536
oracle soft stack 10240 #堆棧設(shè)置
#修改完成后保存退出
[root@oracle ~]# vim /etc/profile #修改環(huán)境變量配置文件
#末尾插入
if [ $USER = "oracle" ]
then
if [$SHELL = "/bin/ksh" ]
then
ulimit -p 16384 #緩沖區(qū)大小
ulimit -n 65536 #文件數(shù)
else
ulimit -u 16384 -n 65536 #進(jìn)程數(shù) 文件數(shù)
fi
fi
#修改完成后保存退出
Oracle 數(shù)據(jù)庫軟件包,無需解壓縮,可直接調(diào)。
百度網(wǎng)盤:鏈接:https://pan.baidu.com/s/1v1h3_wrB6er8HCpONh9xRQ 密碼:a0h2
下載文件后掛載到 /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 #執(zhí)行安裝腳本
正在啟動 Oracle Universal Installer...
點(diǎn)擊單實(shí)例數(shù)據(jù)庫安裝,下一步
典型安裝,自行設(shè)置口令 ,下一步
#另開一個終端,以ROOT身份登錄
[root@oracle abc]# /orc/app/oraInventory/orainstRoot.sh
[root@oracle abc]# /orc/app/oracle/product/12.2.0/dbhome_1/root.sh
首先需要理解的是控制文件的概念和基本管理
控制文件:為二進(jìn)制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN備份。
- 記錄了當(dāng)前數(shù)據(jù)庫的結(jié)構(gòu)信息,同時也包含數(shù)據(jù)文件及日志文件的信息以及相關(guān)的狀態(tài),歸檔信息等等。
- 在參數(shù)文件中描述其位置,個數(shù)等等。通常采用分散放開,多路復(fù)用的原則。在mount階段被讀取,open階段一直被使用。
- 維護(hù)數(shù)據(jù)庫一致性(數(shù)據(jù)庫啟動時會比較控制文件與聯(lián)機(jī)日志文件中的ckpt,即起始scn號,如相等則正常啟動,否則需要介質(zhì)恢復(fù))。
- 一個控制文件只能屬于一個數(shù)據(jù)庫。
- 控制文件的任意修改將寫入到初始化參數(shù)中指定的所有控制文件中,讀取時則僅讀取第一個控制文件。
- 控制文件只能連接一個數(shù)據(jù)庫,控制文件的大小一般不要超過MB,最多為個,最少一個,互為鏡像.
-
控制文件中包含的內(nèi)容
- 數(shù)據(jù)庫的名字、ID、創(chuàng)建的時間戳
- 表空間的名字
- 聯(lián)機(jī)日志文件、數(shù)據(jù)文件的位置、個數(shù)、名字
- 聯(lián)機(jī)日志的Sequence號碼
- 檢查點(diǎn)的信息
- 撤銷段的開始或結(jié)束
- 歸檔信息
- 備份信息
-
數(shù)據(jù)庫啟動從nomount狀態(tài)啟動到mount狀態(tài)時必須讀取控制文件,以獲取數(shù)據(jù)文件和日志文件的位置;如果控制文件實(shí)效,數(shù)據(jù)庫將無法啟動;而且數(shù)據(jù)庫實(shí)時運(yùn)行過程中,系統(tǒng)也在不停向控制文件中寫入stop scn以及checkpoint scn,如果控制文件無法寫入,數(shù)據(jù)庫也會宕機(jī)。遇到這種情況如果有備份的控制文件,只需要在nomount狀態(tài)將正確的備份控制文件覆蓋到已實(shí)效的控制文件,然后啟動數(shù)據(jù)庫到open狀態(tài)即可解決問題。因此系統(tǒng)默認(rèn)至少同時有幾個相同的控制文件互為備份,而且相同的控制文件最好是放在不同的磁盤目錄,分散風(fēng)險(xiǎn)。
-
12c安裝完成后默認(rèn)情況下,控制文件有2個,由上述可知,如果Oracle在安裝完成后沒有更改控制文件的話,會存在很大的安全隱患,所以建議優(yōu)化控制文件等。
準(zhǔn)備工作:
需要使用root用戶,給/opt 777權(quán)限,以便于Oracle用戶讀寫操作
[root@HOSTNAMEoracle ~]# chmod 777 /opt/進(jìn)入Oracle
[root@HOSTNAMEoracle ~]# su - oracle
[oracle@HOSTNAMEoracle ~]$ sqlplus / as sysdba
SQL> select name from v$controlfile;
#控制文件中存放,創(chuàng)建數(shù)據(jù)庫信息、重做日志信息、數(shù)據(jù)文件及歸檔日志文件記錄等信息
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的路徑,增加安全性
參數(shù)更改完畢后需要關(guān)閉Oracle數(shù)據(jù)庫,在/orc/app/oracle/oradata/orcl控制文件的路徑中進(jìn)行更改,并重啟Oracle才能生效
SQL> shutdown immediate; #關(guān)閉數(shù)據(jù)庫
SQL> ho cp /orc/app/oracle/oradata/orcl/control02.ctl /opt/control02.ctl #使用 ho命令在不退出數(shù)據(jù)庫的情況下執(zhí)行系統(tǒng)命令
SQL> startup #開啟數(shù)據(jù)庫
SQL> select name from v$controlfile; #查看控制文件位置
SQL> alter database backup controlfile to '/opt/control.bak'; #執(zhí)行備份
數(shù)據(jù)庫已更改。
SQL> ho ls /opt #在sql環(huán)境中運(yùn)行系統(tǒng)命令
control02.ctl control.bak ORCLfmap rh
Oracle數(shù)據(jù)庫在運(yùn)行當(dāng)中,用戶更改的數(shù)據(jù)首先會存放在數(shù)據(jù)庫高速緩沖區(qū)當(dāng)中,為了提升磁盤讀寫,oracle機(jī)制不會頻繁的將緩沖區(qū)的數(shù)據(jù)寫到磁盤,而是等到檢查點(diǎn)或者數(shù)據(jù)高速緩沖區(qū)達(dá)到一定數(shù)量時才會寫入數(shù)據(jù)庫文件;倘若在檢查點(diǎn)或者數(shù)據(jù)量等條件還沒滿足系統(tǒng)就掛了,那么此時用戶提交的數(shù)據(jù)就會丟失,因?yàn)閿?shù)據(jù)還在內(nèi)存里,為了防止數(shù)據(jù)丟失,oracle提出了重做日志。
-
日志的模式:
在線日志:在線日志模式,不會主動提交日志,服務(wù)器關(guān)閉就會丟失部分?jǐn)?shù)據(jù)。切換日志組時會自動提交文件并保存,后切換的日志組內(nèi)寫入的文件會丟失。
歸檔日志:只要寫入數(shù)據(jù)就會提交到硬盤進(jìn)行保存。
LGWR的觸發(fā)條件
- 在事務(wù)提交的時候(COMMIT)
- Redo Log Buffer 三分之一滿
- Redo Log Buffer 多于一兆的變化記錄
- 在DBWn寫入數(shù)據(jù)文件之前
#查看重做日志組的組號,序列,大小,個數(shù)數(shù)量,歸檔狀態(tài),日志組狀態(tài)
SQL> select group#,sequence#,bytes,members,archived,status from v$log;
新安裝完Oracle數(shù)據(jù)庫后,查看下重做日志文件狀態(tài),確認(rèn)歸檔文件模式是否開啟。如果沒有開啟,建議開啟,增加安全性,防止部分?jǐn)?shù)據(jù)丟失。
#查看歸檔日志模式
SQL> archive log list;
SQL> shutdown immediate; #關(guān)閉Oracle數(shù)據(jù)庫
SQL> startup mount; #啟動實(shí)例,加載數(shù)據(jù)庫但是并不打開數(shù)據(jù)庫
SQL> alter database archivelog; #啟用歸檔日志模式
SQL> alter database open; #啟動打開數(shù)據(jù)庫
SQL> archive log list; #查看歸檔日志模式
SQL> set line 120; //設(shè)置顯示寬度120
SQL> col member for a50; //member列顯示寬度50字符寬度
SQL> select group#,status,type,member from v$logfile; //使用logfile視圖查看
PS:status 含義
1:空白 正在使用
2:stale 內(nèi)容不完整
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;
數(shù)據(jù)庫已更改。
SQL> alter database drop logfile group 4;
數(shù)據(jù)庫已更改。
#當(dāng)前日志組不可刪除 解決方法:切換日志組: alter system switch logfile;
SQL> alter database add logfile member
2 '/opt/redo01b.log' to group 1,
3 '/opt/redo02b.log' to group 2;
數(shù)據(jù)庫已更改。
SQL> alter database drop logfile member
2 '/opt/redo02b.log';
數(shù)據(jù)庫已更改。