程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle442個應用場景-----------Oracle數據庫物理結構

Oracle442個應用場景-----------Oracle數據庫物理結構

編輯:Oracle教程

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 datafile關鍵字向表空間店家文件

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';

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved