Oracle442个应用场景-----------Oracle数据库物理结构
?
-------------------------Oracle數據庫物理結構-------------------------------
Oracle數據庫物理結構
??? oracle的數據,實際上是以文件的形式來保存的,文件里出了保存用戶的數據之外,
還須要保存管理數據和日志數據等等。作為一個DBA。必須須要知道自己的數據分別保存在什么位置上,
并且經驗豐富的管理員還應該在設計數據庫的時候合理的規劃文件的保存位置、初始大小以及增量屬性等,
這樣既能滿足用戶應用程序的須要,還能保證數據庫高效的執行。
每一個Oracle數據都三種類型的文件組成,即控制文件、數據文件以及日志文件。
這些文件提供了真正的數據存儲的物理存儲。
1、控制文件
每個Oracle數據庫都有一個控制文件,用來保存數據庫的物理結構信息。
控制文件包括數據庫名、數據庫數據文件和日志文件的名字、位置和數據庫建立日期等信息。
數據庫的控制文件用于標識數據庫和日志文件,當開始數據庫操作時,它們必須被打開。
當數據庫的組成更改的時候。Oracle自己主動更新該數據庫的控制文件。數據恢復的時候,也須要用到控制文件。
當數據庫打開的時候,Oracle數據庫必須寫控制文件。沒有控制文件,數據庫將沒有辦法裝在,恢復數據庫的時候也很的困難。
2、數據文件
進行數據操作的時候,系統將從數據文件里讀取數據。而且存儲到Oracle的內存緩沖區中。
新建或者更新的數據不必馬上寫入到數據文件里,而是把數據暫時放到內存中。由數據庫寫入進程(DBWn)決定在適當的時間一次性寫入到數據文件里。
這樣能夠大大減少訪問磁盤的次數,從而加強系統的性能。
3、日志文件
每一個數據庫都有兩個或者多個日志文件組,用于收集數據庫日志。
日志的主要功能就是記錄對數據所作的改動。全部對數據庫進行的改動都記錄在日志中。
在出現問題的時候。假設不能將改動數據永久的寫入數據文件。則能夠通過日志得到改動后的記錄,
從而保證已經發生的操作結果不會丟失。
日志文件的主要作用是防止數據庫在出現問題的時候丟失數據。
為了防止日志文件本身的故障,
Oracle同意使用鏡像日志。在不同的磁盤上維護兩個以上的日志副本。
--------------------------------------------------------------------------------
重做日志管理
?重做日志(Redo Log)由兩個以上的文件組成,用于保護數據庫的全部變化信息.
每一個Oracle數據庫實例都有一個相關的重做日志,從而保證數據庫的安全.
???
重做日志由重做記錄組成,而每一個重做記錄由一組變化元素組成,變化元素中記錄了數據庫中每一個單獨的數據塊的變化情況,比如:
當用戶改動了表中的某一條數據的時候,系統將會自己主動的生成一條重做記錄。
能夠使用重做日志來恢復數據庫的變化,保護回滾數據。當使用重做數據恢復數據庫的時候,
數據庫將從重做日志中讀取變化元素。然后將變化應用到相關的數據塊其中。
數據庫中至少包括兩個重做日志。一個始終保持可寫的狀態。用于記錄數據庫的變化,
另外一個用于歸檔操作(當系統的achievelog模式打開的時候)。
那么Oracle是怎么記錄重做日志的呢?日志寫入進程LGWR負責記錄重做日志。
假設重做日志文件已經被填充滿了,那么LGWR將變化數據寫入下一個重做日志文件;
假設最后一個有效的重做日志被填滿了。那么LGWR將變化數據寫入第一個重做日志。
為了防止重做日志本身被破壞,Oracle提供了一種多元重做日志,也就是說,系統在不同的位置上自己主動維護日志的兩個或者多個副本。
從安全的角度出發,這些副本的保存位置應該在不同的磁盤上。
??? 多元性是通過創建重做日志組來實現的,組包含一個重做日志文件和它的多元副本。
每一個重做日志組由數字來定義。比如組1。組2等等。每一個日志文件必須處于激活狀態。這樣LGWR就能夠同一時候寫入這兩個日志文件LGWR不會同一時候寫入不同組的日志文件。
??? 在不同的情況下,當重做日志無效的時候,LGWR鎖採用的動作例如以下:
1)LGWR能夠寫入組中的至少一個成員文件:正常完畢寫操作。LGWR寫入組中的可訪問的成員文件,忽略不可訪問的成員文件。
2)在日志切換的時候,LGWR無法訪問下一個組,由于該組須要被歸檔:暫時停止數據庫操作,等待該組能夠被訪問或者該組已經被歸檔。
3)在日志切換的時候,因為介質被損壞,下一組的全部成員都無法被訪問:ORACLE數據庫返回錯誤。數據庫實例被關閉。
此時須要從有效的重做日志中運行介質恢復操作(數據庫恢復操作)。假設數據庫的檢查點已經超出了丟失的重做日志,
則不須要進行介質恢復了,由于重做日志中記錄的數據寫入到數據文件里。如今僅僅須要刪除無效的重做日志組。
假設數據庫還沒有對失效的日志進行歸檔操作。則運行ALTER DATABASE CLEAR UNARCHIVED LOG禁止歸檔操作,
這樣就能夠刪除日志文件了。
4)當LGWR寫入的時候,全部的組中的成員文件忽然無法訪問:Oracle返回錯誤,數據庫實例被關閉。
此時,須要從有效的重做日志文件里運行介質恢復操作。假設介質沒有被破壞,僅僅是不小心掉線了,則不須要進行介質恢復,
僅僅要將介質恢復在線,然后讓數據庫運行自己主動實例恢復就能夠了。
???
能夠通過例如以下參數來設置重做日志的數量:
MAXLOGFILES:在CREATE DATABASE語句中使用MAXLOGFILES參數能夠指定每一個數據庫中重做日志文件組的最大數量。
MAXLOGMEMBERS:在CREATE DATABASE語句中使用MAXLOGMEMBERS參數能夠指定每一個日志文件組中包括的日志文件的最大數量。
--------------------------------------------------------------------------------
歸檔日志文件和歸檔模式
??? 歸檔日志文件是重做日志文件組成員的備份,它由重做項目和唯一的日志序列號組成。
當數據庫處于歸檔模式的時候。寫日志進程(LGWR)不可以對未歸檔的重做日志組進行重用和改寫操作。
假設設置了自己主動歸檔模式。則后臺進行ARCn將自己主動的運行歸檔操作。數據庫會啟動多個進程歸檔。確保一旦日志文件被填滿立即會被歸檔。
能夠使用歸檔日志文件達到下面目的:
1)恢復數據庫
2)更新備用數據庫
3)使用LogMiner獲取數據庫的歷史信息
用戶能夠選擇自己主動歸檔或者手動歸檔,可是自己主動歸檔模式更加的方便和快捷。
LGWR進程向在線重做日志文件寫入日志信息。一旦重做日志被寫滿。則由ARC0進程進行歸檔操作。
--------------------------------------------------------------------------------
SCN
SCN是System Change Number的縮寫。它是數據庫的重要機制,能夠用來記錄和標識運行數據庫操作的先后順序。
在運行回滾事務、備份以及恢復數據庫等操作的時候,數據庫操作的先后順序是很重要的。
???
SCN是一個僅僅能增大的整數。系統能夠保證這個整數是不會越界的。當用戶改動數據庫中的數據(添加。改動,刪除)時,
Oracle數據庫并非馬上將其保存到數據文件里,而是將數據保存在緩沖區(buffer cache)中,當提交事務的時候。
才會將數據寫進數據文件。
以下是改動數據的簡單過程:
1)開始一個事務,事務是包括一組數據庫操作的邏輯工作單元。
2)在緩沖區中尋找要改動的數據。假設沒有找到,那么就從數據文件里找到這個數據,而且將其載入到數據緩沖區中。
3)改動緩沖區中的數據塊,并將改動的結果保存到日志緩沖區中。
由于此時緩沖區中的數據與數據文件里的數據不一致,
因此將這樣的數據稱之為“臟數據”
4)當用戶提交數據的時候。LGWR進程會將緩沖區中的數據和新生成的SCN寫入到重做日志文件里,。
可是為了降低I/O操作,Oracle不會馬上將臟數據寫入到數據文件其中。
5)假設發生檢查點(CheckPoint。檢查點是一個事件,當這個事件發生的時候。
DBWn進程將把SGA中全部改變的數據庫緩沖區寫入到數據文件里)。則CKPT進程喚醒DBWn進程。
更新數據庫中的全部的數據文件和控制文件,而且標記最新的檢查點,從而下一次更新從最新的檢查點開始。
--------------------------------------------------------------------------------
通常在運行SHUTDOWN NORMAL和SHUTDOWN IMMEDIATE語句的時候,會觸發Checkpoint事件
當發生Checkpoint事件的時候。Oracle會將SCN寫入到以下的四個地方:
1)系統檢查點SCN(SYSTEM CHECKPOINT SCN)
當一個CheckPoint動作完畢之后。Oracle會將系統檢查點的SCN保存到控制文件里,能夠從視圖V$DATABASE中查看到系統檢查點SCN的值,
代碼例如以下:
SELECT CHECKPOINT_CHANGE# FROM V$DATABASE;
2)數據文件檢查點SCN(DATAFILE CHECKPOINT SCN)
當一個CheckPoint動作完畢之后,Oracle會將每一個數據文件的SCN保存到控制文件里。
能夠從系統視圖V$DATAFILE中看到數據文件檢查點SCN的值,
代碼例如以下:
SELECT NAME,CHECKPOINT_CHANGE# FROM V$DATAFILE;
3)啟動SCN(START SCN)
Oracle把每一個數據文件的檢查點SCN存儲在每一個數據文件的文件頭中,稱為啟動SCN。
由于在數據庫實例啟動的時候。Oracle會檢查每一個數據庫文件的啟動SCN與控制文件檢查點SCN是否一致,
假設不一致的話,則從重做日志文件里找到丟失的SCN。又一次寫入數據文件里進行恢復。
能夠從系統視圖V$DATAFILE_HEADER中查看到啟動SCN的值。
代碼例如以下:
SELECT NAME,CHECKPOINT_CHANGE# FROM V$DATAFILE_HEADER;
4)結束SCN(STOP SCN)
每一個數據文件的結束SCN都保存在控制文件里。正常情況下,全部處于聯機狀態讀寫模式下的數據文件的SCN都為NULL。
能夠從系統視圖V$DATAFILE中查看到結束SCN的值,
代碼例如以下:
SELECT NAME,LAST_CHANGE# FROM V$DATAFILE;
數據庫正常關閉(運行SHUTDOWN NORMAL和SHUTDOWN IMMEDIATE)的時候,會觸發CHECKPOINT事件,
將重做日志文件里的數據寫入數據文件里,而且將上面的4中SCN都更新為最新的值。
當Oracle數據庫正常啟動而且執行的時候。控制文件檢查點SCN,數據文件檢查點SCN。每一個數據文件里的啟動SCN都是一致的,
控制文件里的每一個數據文件的結束SCN都是NULL。
在須要的時候,系統會自己主動依據時間戳自己主動生成新的SCN,能夠從DUAL表中查看到當前系統生成的最新的SCN,代碼例如以下:
SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;
?
-----------------------------------------------------------------------------------
應用場景99:查看控制文件的信息
應用場景100:創建初始控制文件
應用場景101:創建控制文件副本
應用場景102:創建新的控制文件
SELECT MEMBER FROM V$LOGFILE;
SELECT NAME FROM V$DATAFILE;
應用場景103:恢復空進文件
1.控制文件被破壞,但存儲控制文件的文件夾仍能夠訪問:
使用SHUTDOWN命令關閉數據庫實例。然后操作系統命令將控制文件副本拷貝到控制文件的文件夾下,最后使用STARTUP命令開啟數據庫實例。
2.存儲介質被破壞。導致存儲控制文件的文件夾無法訪問
首先關閉數據庫實例,然后使用操作系統命令將控制文件副本拷貝到一個新的能夠訪問的文件夾下。改動contro_files參數,將無效的控制文件文件夾改動為新的文件夾。最后。使用STARTUP命令打開數據庫實例。
應用場景104:刪除控制文件
步驟:
(1)關閉數據庫
(2)編輯CONTROL_FILES參數的值,刪除指定的控制文件信息。
(3)將要刪除的控制文件被分到其它介質。讓后使用操作系統命令將文件刪除。
(4)重新啟動數據庫
應用場景105:查看數據文件信息
SELECT NAME,STATUS,BYTES FROM V$DATAFILE;
應用場景106:創建數據文件
創建表空間,同一時候創建一個50MB的數據文件
CREATE TABLESPACE MYTABS DATAFILE 'C:\Users\Administrator\Desktop\test\mytemfile01.dbf' SIZE 50M
創建暫時表空間,創建10MB的暫時文件
CREATE TEMPORARY TABLESPACE TEMTBS TEMPFILE 'C:\Users\Administrator\Desktop\test\mytemp01.dbf'SIZE 50M ENTENT MANAGEMENT LOCAL;
使用alter tablespace語句改動表空間,能夠使用add datafilekeyword向表空間店家文件
ALTER TABLESPACE MYTABS ADD DATAFILE 'C:\Users\Administrator\Desktop\test\mydata.dbf' SIZE 50M;
應用場景108:改動數據文件的在線狀態
將在線的文件改動為脫機狀態
ALTER DATABASE DATAFILE 'C:\Users\Administrator\Desktop\test\USERS01.DBF' OFFLINE;
指定數據文件設置成在線狀態
ALTER TABLESPACE HRMAN DATAFILE ONLINE;
應用場景109:刪除數據文件
刪除表空間的mytab,同一時候刪除數據文件
DROP TABLESPACE MYTAB INCLUDING CONTENTS CASCADE CONSTRAINTS;
刪除指定的數據文件
ALTER DATABASE DATAFILE 'C:\Users\Administrator\Desktop\test\MYTAB.DBF' OFFLINE DROP;
應用場景110:查看重做日志信息
查看查詢視圖V$LOGFILE
SELECT GROUP#,STATUS,MEMBER FROM V$LOGFILE;
查看視圖V$LOG_HISTORY能夠顯示重做日志的歷史信息
SELECT RECID, FIRST_CHANGE#, NEXT_CHANGE#, RESETLOGS_CHANGE# FROM V$LOG_HISTORY;
應用場景111:創建重做日志組合成員
1.創建日志組
ALTER DATABASE ADD LOGFILE ('log1c.rdo', 'log2c.rdo') SIZE 5000k;
ALTER DATABASE ADD LOGFILE GROUP 10 ('log1a.rdo', 'log2a.rdo') SIZE 5000k;
2.創建重做日志成員
將重做日志文件log3a.rdo加入到編號為10的重做日志組中
ALTER DATABASE ADD LOGFILE MEMBER 'log3a.rdo' TO GROUP 10;
應用場景112:重命名重做日志文件
所需權限:
alter database系統權限
拷貝文件到指定文件的操作系統權限
打開和備份數據庫的權限。
步驟:
(1)使用shutdown命令關閉數據庫
(2)將重做日志文件拷貝到新的位置嗎。然后使用操作系統命名對其進行重命名。
(3)使用startup mount 命令裝載到數據庫。
(4)使用帶rename file 子句的alter datafile語句重命名數據庫的重做數據文件
ALTER DATABASE
RENAME FILE 'log1a.rdo', 'log2a.rdo'
TO 'log1b.rdo', 'log2b.rdo';
(5)使用alter database open命令打開數據庫
驗證重做日志文件是否被改名
SELECT GROUP#,STATUS,MEMBER FROM V$LOGFILE;
應用場景113:刪除重做日志組合成員
刪除重做日志組:
ALTER DATABASE DROP LOGFILE GROUP 10;
刪除重做日志成員:
ALTER DATABASE DROP LOGFILE MEMBER 'log2c.rdo';
應用場景114:清空重做日志文件
ALTER DATABASE CLEAR LOGFILE GROUP 10;
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 10;
應用場景115:指定歸檔目的地
指定多個歸檔目的地的過程例如以下:
(1)使用SHUTDOWN命令關閉數據庫
(2)使用SERBICE設置有效的網絡服務名
LOG_ARCHIVE_DEST_1 = 'LOCATION = C:\app\Administrator\product\11.1.0\db_1\database\archive'
LOG_ARCHIVE_DEST_2 = 'LOCATION = D:\app\Administrator\product\11.1.0\db_1\database\archive'
LOG_ARCHIVE_DEST_3 = 'LOCATION = F:\app\Administrator\product\11.1.0\db_1\database\archive'
(3)能夠編輯初始化參數LOG_ARCHIVE_FORMAT設置文檔文件的初始化模式
LOG_ARCHIVE_DEST_4 = 'SERVICE = standby1'
LOG_ARCHIVE_FORMAT = arch_%t_%s_%r.arc
LOG_ARCHIVE_DEST = 'C:\app\Administrator\product\11.1.0\db_1\database\archive
LOG_ARCHIVE_DUPLEX_DEST = 'D:\app\Administrator\product\11.1.0\db_1\database\archive'
應用場景116:管理歸檔模式
歸檔日志的操作模式分為兩種:ARCHIVELOG(歸檔模式)和NOARCHIVELOG(非歸檔模式)
切換歸檔模式的步驟
(1)使用SHUTDOWN關閉數據文件
(2)備份數據庫。
(3)編輯初始化參數文件,設置歸檔日志文件的位置
(4)使用STARTUP MOUNT語句歸檔日志文件的位置
(5)使用ALTER DATABASE ARCHIVELOG語句切換到歸檔模式,或是切換到非歸檔模式。
(6)使用ALTER DATABASE OPEN語句又一次打開數據庫。
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=4;
應用場景117:運行手動歸檔
設置數據庫手動歸檔模式:
ALTER DATABASE ARCHIVELOG MANUAL;
手動歸檔全部日志文件:
ALTER SYSTEM ARCHIVE LOG ALL;
應用場景118:查看當前數據庫實例歸檔模式
SELECT LOG_MODE FROM V$DATABASE;
應用場景119:查看日志信息
應用場景120:使用V$ARCHIVED_LOG視圖查看歷史歸檔日志信息
SELECT NAME, SEQUENCE#, STATUS FROM V$ARCHIVED_LOG;
應用場景121:使用V$ARCHIVE_DEST視圖查看歸檔目的地的信息
COL DEST_NAME FORMAT A20
COL DESTINATION FORMAT A20
SELECT DEST_NAME, STATUS, DESTINATION FROM V$ARCHIVE_DEST;
應用場景122:使用V$ARCHIVE_PROCESSES視圖查看歸檔進程信息
SELECT * FROM V$ARCHIVE_PROCESSES;
應用場景123:使用V$TEMPFILE視圖暫時文件信息
SELECT RECID, STAMP, THREAD#, SEQUENCE# FROM V$BACKUP_REDOLOG;
應用場景124:使用V$TEMPFILE查看視圖暫時文件信息
COL NAME FORMAT A40
SELECT NAME, STATUS, BYTES FROM V$TEMPFILE;
應用場景125:查看警告日志文件
SELECT VALUE FROM V$PARAMETER
WHERE NAME= 'background_dump_dest';
?
總結
以上是生活随笔為你收集整理的Oracle442个应用场景-----------Oracle数据库物理结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一张图搞懂容器所有操作 - 每天5分钟玩
- 下一篇: linux cmake编译源码,linu