分享一下我老師大神的人工智能教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
一、控制文件(Control File):保存有關數據庫的結構信息! 控制文件是一個小型的二進制文件,可以記錄數據庫的物理結構。包括: 一般Oracle數據庫創建時都會創建至少兩個或兩個以上的控制文件。 二、控制文件的標准 select value from v$parameter where name = 'control_files' ; -- 控制文件 ② 關閉數據庫(immediate、abort) ==========================控制文件的相關操作============================== 一、create controlfile錯誤 |
聯機重做日志概念 —— 又叫做日志文件
一、聯機重做日志
1、重做線程
每個數據庫實例的聯機重做日志組都是一個聯機重做的實例線程。
不管有沒有多路復用,一般每個Oracle都只有一個重做線程,當然RAC中每個實例都包含一個重做線程。
2、聯機重做日志內容
重做條目記錄了可以對數據庫重新構造的所有修改數據,包括回滾段。
重做記錄在SGA重做日志緩存區中緩沖,並由LGWR進程寫入某個聯機重做日志文件。
事務被提交時,必定需要用LGWR將日志全部從SGA緩存中寫入聯機重做日志文件,然后才被告知提交完成。
LGWR還會為每個事務分配一個識別重做記錄的系統修改號(SCN)。
當重做日志緩存填滿時LGWR也會將重做條目寫入到重做日志文件,這些是可以回滾的。
3、聯機重做日志寫入方式
數據庫的聯機重做日志組務必要有兩個或兩個以上,這樣可以保持其中一個一直用於寫入,另一個用於歸檔。
LGWR采用循環寫入的方式,即寫滿一個換下一個。或歸檔模式則寫滿了之后歸檔,否則則直接覆蓋。
4、活動與非活動
當前正在寫入的聯機重做日志文件成為“當前的”聯機重做日志文件。
實例恢復時所需的聯機重做日志文件稱為“活動的”聯機重做日志文件。
實例恢復不用的聯機重做日志文件稱為“非活動的”聯機重做日志文件。
已經進行存檔的聯機重做日志文件不能重新使用或重寫,知道ARCn存儲了這個文件內容。
5、日志切換 & 日志順序號
一般默認在一個文件寫滿時切換到寫一個文件,但是也可以規定時間進行切換,這樣就不用理會是否寫滿。
也可以手動進行強制切換。
每次日志切換都會分配一個新的日志順序號,歸檔時也將順序號進行保存。
每個聯機或存檔的重做日志文件都通過它的日志順序號進行唯一標識。
二、規划聯機重做日志
1、多路復用(Group)
多路復用是避免損壞聯機重做日志文件。
多路復用時LGWR將同一重做日志信息同時寫入多個同樣的聯機重做日志文件。
建議必須要使用多路復用(至少兩個組)。
注:當某個成員不可用,則標記為INVALID,並向LGWR跟蹤文件和數據報警文件中寫入錯誤信息。不同問題會不同反映。
* 一個操作成功一個操作失敗時:按正常過程進行,忽略不可用成員
* 日志切換時需要存檔而不能訪問下一個組時:暫時中斷操作,直到歸檔完成
* 介質失敗,切換時不能訪問下一組:關閉數據庫,並返回錯誤信息
* LGWR寫入時不能訪問文件:關閉數據庫,並返回錯誤信息
注:不同的組中不一定需要相同個數的成員。只含有1個組的多路復用是非法的。
2、日志成員存放在不同磁盤
設置多路復用時,將日志組成員放置到不同的磁盤上。這樣當某磁盤失敗時,可以跳過這個成員繼續工作。
另外將成員放置到不同磁盤上可以消除LGWR和ARCn在后台進程對聯機重做日志成員的爭奪。
注:數據文件和聯機重做日志文件也應該放在不同磁盤上,以減少寫數據塊和寫記錄之間出現的競爭。
3、聯機重做日志成員的大小
規定聯機重做日志的大小,以便將填滿的組存檔到脫機存檔介質(磁帶或磁盤)的某個單元中。
例如磁盤上有一個填滿的聯機重做日志組,且磁盤還有49%的未使用存儲空間,此時最好降低聯機重做日志文件的大小。
多路復用時,同一個組中的多有成員比用擁有同樣的大小!
不同組的成員大小不同,但是這樣沒有什么好處,而且會對檢驗點的設置帶來不便。
4、聯機重做日志文件的數量
聯機日志文件數量的確定最好的方法是測試不同的配置的效果。
最佳配置:在不妨礙LGWR向重做日志寫入信息的前提下,使用盡可能少的組(至少2個組)。
仔細檢查LGWR跟蹤文件和數據庫報警文件的內容,如果消息表明:因為檢驗點還沒有完成或者組還沒有存檔的緣故,LGWR不得不頻繁得等待組,那么就需要添加組來解決問題。
注:MAXLOGFILES-最大組數;MAXLOGMEMBERS-最大成員數;要修改這兩個參數需要重建數據庫或控制文件,所以創建數據庫時要慎重。
5、控制存檔延遲
在數據庫中使用聯機重做日志歸檔,然后將歸檔日志放到備用數據庫,通過查詢日志來進行和數據庫中同樣的操作。這兩個操作之間存在一個時間間隔,就叫做存檔延遲。可以通過ARCHIVE_LAG_TARGET初始化參數來嚴格限定延遲的時間長度。
設置了ARCHIVE_LAG_TARGET之后,Oracle將定期檢查實例當前的聯機重做日志,在發生一下情況時切換日志:
* n秒鍾前創建了當前日志,並估計當前日志存檔時間為m秒,而n+m值超過ARCHIVE_LAG_TARGET的值
* 當前日志包含重做記錄
ARCHIVE_LAG_TARGET = 1800 單位是秒,默認為0,表示禁止該功能
在選擇數值時考慮一下因素:
* 切換日志所消耗的系統開銷
* 作為日志完整條件的結果,通常日志切換發生的頻率
* 備用數據庫可以人壽多少重做損失
注:當數據庫本身就經常切換時,設置這個值沒有什么意義,而且當設置值很低時,對性能會產生負面影響。
==================================對日志文件的操作===============================
一、創建聯機重做日志
1、創建聯機重做日志組
alter database add logfile
('/export/home/oracle/oradata/april/log1.log','/export/home/oracle/oradata/april/log2.log') size 500k;
alter database add group 10
('/export/home/oracle/oradata/april/log1.log','/export/home/oracle/oradata/april/log2.log') size 500k;
注:組號必須在1和MAXLOGFILES之間,且不要跳躍使用,否則會耗費數據庫控制文件中的空間。
2、創建聯機重做日志成員
alter database add logfile member '/export/home/oracle/oradata/april/log2.log' to group 2;
alter database add logfile member '/export/home/oracle/oradata/april/log2.log'
to ('/export/home/oracle/oradata/april/log2.log','/export/home/oracle/oradata/april/log2.log')
注:指定組中所有成員也可以表示這個組。新建的日志成員狀態為INVALID,首次使用時變成活動狀態。
二、重定位 & 重命名
① 關閉數據庫:shutdown immediate
② 在操作系統中移動或重命名聯機重做日志文件
③ 啟動並裝載數據庫:startup mount
④ 使用rename語句
alter database rename file
'/export/home/oracle/oradata/april/log1c.log','/export/home/oracle/oradata/april/log2c.log'
to '/export/home/oracle/oradata/april/log1a.log','/export/home/oracle/oradata/april/log2a.log'
三、取消聯機重做日志組成員
1、取消日志組
要注意:
① 至少需要保留兩組聯機重做日志文件
② 日志組狀態為“非活動”時才可以取消,如果是“活動”的,則需要進行強制切換
③ 要確保日志組已經存檔,可以查看V$LOG視圖查看是否存檔
alter database drop logfile group 3;
在執行DROP之后要在操作系統中刪除磁盤文件
2、取消聯機重做日志成員
要注意:
① 可以取消原先對稱的組中的成員,使其暫時不對稱,但最好立即調整這種狀況
② 實例需要至少兩個有效聯機重做日志文件,且不能取消最后一個有效成員,使用V$LOGFILE查看狀態
③ 和取消組一樣,需要成員為非活動狀態,否則需要進行一次強制切換
④ 確保要取消的成員已經經過存檔
alter database drop logfile member '/export/home/oracle/oradata/april/log1.log';
四、強制切換日志
alter system swith logfile;
五、校驗重做日志文件中的塊
設置DB_BLOCK_CHECKSUM初始化參數為TRUE,則對所有寫到磁盤上的Oracle數據塊進行校驗,包括重做數日志塊。
DB_BLOCK_CHECKSUM參數的默認值是FLASE
<具體原理未知>
注:允許校驗會對系統產生額外的開銷,並且降低數據庫性能。需要監視數據庫性能以判斷校驗的代價是否過重。
六、清除聯機重做日志文件
在聯機重做日志損壞時,可以使用CLEAR命令來初始化聯機重做日志文件
但是要注意以下情況不能使用:
* 僅有兩個日志組
* 受到損壞的重做日志文件屬於當前組
alter database clear logfile group 3;
alter database clear unarchived logfile group 3;
注:清除了恢復備份所需的日志文件,則不能再進行恢復,Oracle將在警報文件中寫入一條消息來描述不能恢復的備份。
注:若清除的日志可以將脫機表空間變成聯機狀態,則需要在語句中加上UNRECOVERABLE DATAFILE子句。
因為清除該日志后再也不能把脫機表空間變成聯機狀態,所以不得不撤銷表空間或執行未完成的恢復過程。
七、查看聯機重做日志信息
V$LOG:顯示來自於控制文件的重做日志文件信息
V$LOGFILE:標識重做日志文件組及其成員的狀態
V$LOG_HISTORY:包含日志歷史信息
數據文件
一、DataFile管理准則
1、初始參數DB_FILES
DB_FILES指出了數據文件信息保留的SGA空間數量,所以也指出了可以為該實例創建的數據文件的最大編號。
注:更改DB_FILES值需要重啟實例后才可生效。
DB_FILES太小,則在關閉數據庫前無法添加超過限制數量的數據文件,太大則消耗內存。
2、添加DataFile到表空間
添加DataFile到表空間需要遵循一下的條件:
* 操作系統對一個進程能夠同時打開的文件數加以限制
* 操作系統對數據文件的數量和大小加以限制
* Oracle對實例打開的數據庫文件最大數量有限制(與操作系統有關)
* 不能超過DB_FILES所指定的數據文件數量
* CREATE DATABASE/CONTROLFILE 中 MAXDATAFILES子句的影響
3、考慮性能的影響
4、確定數據文件的大小
SYSTEM表空間的數據文件至少需要150M來包括數據字典和回滾段。
如果安裝了Oracle的其他產品,則可能還需要額外的空間。
5、適當放置數據文件
數據文件全部放在一個磁盤驅動器可能會引起競爭,有條件可以分開存放。
6、與重做日志文件分開存儲
數據文件與重做日志文件存放在一個磁盤容易造成全部數據丟失,盡量分開存放。或保存多個重做日志文件。
二、創建和添加DataFile
create tablespace --創建表空間及其數據文件
create temporary tablespace --創建臨時表空間及其臨時文件
alter tablespace ... add datafile --添加一個數據文件
alter tablespace ... add tempfile --添加一個臨時文件
create database --創建數據庫和關聯的數據文件
alter database ... create datafile --創建一個新的空的數據文件代替原來的
注:推薦指定文件全名,否則按系統默認會比較混亂。
三、改變DataFile大小
1、啟用/禁用數據文件的自動盤區
自動盤區指DataFile可以在額定的范圍內自動增長,這樣可以減少表空間用完時立即干預的必要,也可以確保應用程序不會因為分配盤區而失敗或暫停。
查詢數據文件是否為自動盤區,可以查詢DBA_DATA_FILES視圖的AUTOEXTENSIBLE字段。
要將數據文件設置成自動盤區,可以在以下語句中加入 AUTOEXTEND ON 子句:
CREATE DATABASE ...
CREATE TABLESPACE ...
ALTER TABLESPACE ...
添加的舉例:
ALTER TABLESPACE users
ADD DATAFILE '/export/home/oracle/oradata/april/users03.dbf' SIZE 10M
AUTOEXTEND ON
NEXT 512K
MAXSIZE 250M;
禁用的例子:
ALTER DATABASE DATAFILE '/export/home/oracle/oradata/april/users03.dbf'
AUTOEXTEND OFF;
2、手動調整DataFile
使用以下語句來手動改變DataFile的大小:
ALTER DATABASE DATAFILE '/export/home/oracle/oradata/april/stuff01.dbf'
RESIZE 100M;
四、修改數據文件可用性
要使DataFile脫機或聯機,有兩種方法:
① alter database 語句修改單獨的DataFile
② alter tablespace 語句修改所有的DataFile
1、在ARCHIVRLOG模式下的更改DataFile狀態
alter database datafile '/export/home/oracle/oradata/april/stuff01.dbf' online;
alter database datafile '/export/home/oracle/oradata/april/stuff01.dbf' offline;
注:只有在archivelog 模式下才可使用alter database來更改DataFile
2、在NOARCHIVELOG模式下使DataFile脫機
由於在NOARCHIVELOG模式下,數據文件脫機后會造成數據的遺失,所以只能使用ALTER DATABASE語句下帶有DATAFILE和OFFLINE DROP子句的選項將該DataFile直接取消,例如該DataFile只包含臨時段數據,並沒有備份時
alter database datafile '/export/home/oracle/oradata/april/users3.dbf' offline drop;
3、修改TableSpace中所有DataFile或TempFile的可用性
ALTER TABLESPACE ... DATAFILE {ONLINE|OFFLINE}
ALTER TABLESPACE ... TEMPFILE {ONLINE|OFFLINE}
注:修改某TableSpace中的所有數據文件,但是TableSpace本身的狀態不改變。
總結:
① ALTER TABLESPACE可以在數據庫裝載狀態時發布,無需打開
② 涉及到系統表空間、撤銷表空間、默認臨時表空間時,必須是未打開的數據庫
③ ALTER DATABASE DATAFILE 語句中必須填入文件全名
=================================DataFile 第二部分=================================
一、DataFile的重命名和重定位
1、單個TableSpace的DataFile重命名及重定位
重命名步驟:
① 使包含該DataFile的非SYSTEM TableSpace脫機
ALTER TABLESPACE users OFFLINE NOEMAL;
② 利用操作系統重命名DataFile
③ 使用ALTER TABLESPACE RENAME DATAFILE語句改文件名
ALTER TABLESPACE users
RENAME DATAFILE '/export/home/oracle/oradata/april/user1.dbf','/export/home/oracle/oradata/april/user2.dbf'
TO '/export/home/oracle/oradata/april/users01.dbf','/export/home/oracle/oradata/april/users02.dbf';
④ 備份數據庫
注:重定位的操作基本上與重命名相同,即在改變名稱的基礎上也通過操作系統改變了位置。
2、多個TableSpace中的DataFile重命名和重定位
① 確保數據庫被裝載,但是關閉(必須關閉,與單TableSpace不同)
② 利用操作系統重命名及重定位DataFile
③ 使用ALTER DATABASE命令
ALTER DATABASE
RENAME FILE '/export/home/oracle/oradata/april/sort01.dbf','/export/home/oracle/oradata/april/user3.dbf'
TO '/export/home/oracle/oradata/april/temp01.dbf','/export/home/oracle/oradata/april/users03.dbf';
④ 備份數據庫
二、驗證DataFile中的數據塊
如果需要配置Oracle來校驗數據塊,則需要將DB_BLOCK_CHECHSUM參數項設置為TRUE
注:DB_BLOCK_CHECHSUM的默認值是FALSE,但可以動態改變。
工作過程: 當啟用塊校驗時,Oracle為每個寫到磁盤的塊計算校驗和,包括臨時塊。DBWn為每個塊計算校驗和后,將其存儲在塊的頭部,下一次Oracle讀一個數據塊時,使用它來校驗和檢測塊中的訛誤,若有錯誤則返回ORA-01578,並將錯誤信息寫入跟蹤文件
三、查看數據文件信息
DBA_DATA_FILES:每個數據文件的說明信息,包括所屬表空間和文件標識
DBA_EXTENTS:組成數據庫中所有段的盤區,包括盤區的數據文件標識
DBA_FREE_SPACE:表空間中的空閑盤區,包含該盤區的數據文件標識
V$DATAFILE:來自控制文件的數據文件信息
V$DATAFILE_HEADER:包括來自數據文件頭部的信息
SELECT NAME, FILE#, STATUS, CHECKPOINT_CHANGE# "CHECKPOINT"
FROM V$DATAFILE;
NAME:數據文件全名
FILE#:文件號
STATUS:SYSTEM表空間的DataFile直接標SYSTEM,其他則標ONLINE|OFFLINE(RECOVER)
CHECKPOINT_CHANGE#:最近的檢測點寫入的最終SCN