老師名字:劉鐵
@oracle.com
msn:
@hotmail.com
關於OCP考試,
SQL 70道題 DBAI 88道題(69%)通過
OCP:通過 OCA認證,考 workshop2,需要註冊:通過原廠培訓的註冊號
dba2:64道題 (61%) 1個半小時
OCM:參加 至少兩門原廠培訓,進階的,(拿到OCP 10G的認證)
北京/上海/廣州 考
DBA 1/DBA 2 PERFORMANCE TUNNING,SQL TUNNING,GRIDCONTROL,BACKUP AND RECOVER,RAC,DATAGUARD,STREAM
SECURITY(VPD,FGA) DATAWARE HOUSE:物化視圖重新整理
datawarehouse:物化視圖重新整理(考試兩天,17題,全是操作題)最後判分都是根據字典視圖給的資訊來判斷操作情況.
本身不多,全世界 OCM只有200個(中國130個)把握/理解+操作能力
學習方向
消化OCP:需要 兩年工作經驗
1.官方網站:
otn.oracle.com
document 文檔plsql,tab reference
2.軟體的下載
metalink.oracle.com
3. AskTom.oracle.com
plsql:從入門到精通(sql Regex)
4.itpub.net 論壇(oracle在中國的研究者網站)
5.eagle.com
6.oracle 8i 備份與還原手冊
從8到10到11 備份的原理沒變.
備份與恢複手冊
1.RMAN (手工備份,命令列方式)
ERP:Manage resoure 控制資源
job schedule:計劃任務
練習和進度
建立:schema:使用者下的對象集合(表,索引)
帳戶:指使用者角色許可權
oracle 10g開始的新特性:ASM
Portalbal cluster:RS:cluster Ready Service
Resource manager:控制資源的分配(用它來系統管理使用者組的資源分派情況)
oracle stream:流的進階複製和物化視圖的不一樣.
Database control:一對一,獨立安裝連接埠號碼,(訪問的時候必須用獨立的連接埠號碼,如果某個伺服器
上有兩個DB,則有兩個獨立的連接埠號碼)
Grid contol:(一個連接埠,4889,管理所有的DB資訊,安裝grid control需要單獨的光碟片)
oracle 10g自管理: oracle tunning advisor,undo advisor
Memory:載入在實體記憶體之上的物理區,一個部分叫 SGA,一個部分 叫原來進程.
資料庫關鍵檔案:資料庫控制檔案,data檔案,redo
other key datafiles:備份檔案,trc檔案,spfile
shared pool:解析SQL,並負責儲存 sql的語句
database buffer:資料區塊緩衝
java pool:jvm需要,調用外部預存程序
large pool:備份還原
stream poll:進階複製(oracle 10 才有)
PGA_AGGREGATE:每個會話的PGA是總的PGA的一個部分,
dedicated 情況下,user_process和 server_process是一對一的情況,
PGA大小為1M左右:儲存的資訊有 ,user 名,登陸,cursor資訊,PGA區
設定PGA:可以是很大,(大於記憶體都可以,因為PGA初始化只需要使用90M空間)
如,是一個sql語句解析和分析的過程
1 〉使用者建立一個到伺服器的串連,connect,串連到listener,這個時候listener 會fork 一個進程server process,
這個server process不等於後台進程。(影子進程,姚老師說過的)
update emp set sal=1000 where ....
2> sever process接受使用者的sql查詢,放入 library cache,
首先在library cache裡檢查它的語法錯誤,再放入dictionary cache檢查是否許可權是對的,如果使用者擁有這個許可權,則
把語句再放入 library cache,進一步解析(parse),這個時候oracle會做比較,選出哪種最優;產生一個執行計畫,
(explain plan),最後把這個資料庫執行計畫傳輸到database buffer裡面。
3>在buffer cache中尋找資料,尋找兩個列,一個名字叫lru,一個叫做 checkpoint queue。
如果裡面都沒有這個資料,則要從磁碟中把這些資料讀出來,緩衝到lru上面。(old imgage 是放在這個 lru上的)
4>拷貝映像
從 lru 拷貝映像到 current image,(那麼以前的就變成old img了), 會寫到 undo上去不,( old img 會寫到undo 上去)
5>修改 current image,修改塊內容+scn
6>記錄到 checkpoint queue,( current image吧?),所有沒有寫到資料檔案的塊都被放到這裡 (current img 記錄所有相關資訊)
7>dbwr寫回物理塊,redo log buffer寫入redo log file,(當dbwr寫回物理塊之後,清空相關的checkpoint queue裡的資料)
一個instance只有一個lgwr進程.
所有做過的操作都會紀錄到 checkpoint queue,所有select 讀進來的資料都放到lru上面。(經過老師確認)
pga 起到了什麼作用? 會緩衝 user_name,cursor資訊,這裡的cursor主要指的是 user 會話裡緩衝的 cursor資訊,和sql裡面緩衝的pga資訊是不一致的。
CKPT:進程
做檢查點之後,會檢查checkpoint queue的,所有的髒資料都會被寫回資料檔案
修改控制檔案 header,也會修改file header.
large pool (rman )分配記憶體區,放讀出來的資料(如果沒有設定這個,rman的資料會匯出到 share 記憶體)
stream pool(流複製使用: capture,propagate,apply)
pmon:回退資料快的鎖
smon:執行個體down機了,oracle會做一個完整的對比過程,smon會從最後一個成功的完整檢查點做比較(如果redo 的scn大於控制塊的scn,
需要做 前滾),最後做復原操作.
dump 的時候,session 層級的dump 都會用到alert 檔案,
用OMF 建立檔案,預設將會建立 100M的檔案.
os block:512位元組
oracle datablock(2k,4k,8k,16k,32k)
extent 與segment
extent:一組連續塊的集合,無法跨資料表空間和datafile
segment:幾種表,partition,段可以跨越資料表空間,不同的檔案
對日誌組建立的member,某個group中的兩個member大小需要是一樣的.
IOT:溢出段,索引組可以跨越資料表空間
針對big tablespace:
alter datafile=alter tablespace
(administrator 和concept)
用rman備份時,使用控制檔案與使用catalog比較:
控制檔案和 catalog儲存備份資訊的不同:
1>控制檔案資訊會被自動清除,catalog不會
2>catalog庫裡可以存放指令碼(scripts)
rman ,只有sysdba許可權使用者才能做
建立 catalog 過程
create user rman identified by rman default tablespace tbs1;
grant resource to rman;
grant connect to rman;
grant recovery_catalog_owner to rman;
rman target / catalog rman/rman
rman>create catalog
rman >register database(註冊同步 database)
EM管理器:查看當前的百分比(P17)
查看不再使用的備份日誌:
report obsolete
刪除不再使用的備份日誌
delete obsolete
把閃迴文件備份出來
rman>backup recovery files;
選擇把備份的檔案備份到磁帶機.
自動管理,自動清空
control_file_record_keep_time:控制資訊在控制檔案裡儲存的時間(預設七天)
DB_RECOVERY_FILE_DEST:歸檔的位置
NLS_DATE_FORMAT:日期格式
NLS_LANG:語言/地區,字元集
環境變數和資料庫語言不匹配會產生亂碼
串連RMAN 形式:Auxiliary,Recovery catalog,target database
次要資料庫對於dataguard來是很有作用的:
sqlplus / as sysdba
'/'表示用作業系統使用者登陸
rman target sys/oracle log=$HOME/oradata/u03/rman.log APPEND
rman target sys/oracle cmdfile=$HOME/scripts/scr.rcv
backup optimization:
備份與上次資料區塊比較,如果與以前一樣就不備份了.
rman / 自動備份控制檔案
show all:備份的規定儲存在控制檔案裡,如果這些預設的規定被修改,會放在字典視圖裡.
configure backupset :2進位壓縮
configure copy:從一個檔案拷貝到另一個檔案
parallelism:並行度
/u01/app/oracle/%u_%p_%c
'%u_%p_%c'='%U'
%u 8位隨機數
%p piece number個數
%c:拷貝個數
備份結果集,包含多個資料檔案,越過那些空塊最多,壓縮到原來的50%.
選擇img:變成鏡象拷貝(通過把log 切換到拷貝印象來馬上把資料庫變成正常情況)
拷貝到磁帶無法用image copy
什麼是備份組,什麼是備份片
備份片可以組成 backup set(一個BACKUP SET可以被分為多個 backup piece)
保證備份片不能超過 128M,
(老版本中,資料庫檔案備份不能超過4G,否則就不認了,所以才需要備份片來組成大的備份組)
並行度
c盤, %c=1
D盤, %c=2
控制檔案資料檔案可以放在一個備份組
歸檔不能和其他類型的備份放在一個backup set.
選擇optimize參數,則下次備份和上一次備份匹配,如果不變則不備份(生產庫中不建議開,因為生產庫資料肯定是不斷變化的)
RECOVERY WINDOW:作為一個清除的標準,決定了備份結果集是否obsolete,
REDUNDANCY:如果設定它為2,則備份組前一個為1,再前一個為2,只保留最近的兩次備份組.
rman > show exclude (全庫備份排除了哪些檔案)
channel 可以被自動分配.
自動分配通道:configure default device type to sbt;
rman> run {
allocate channel c1 device type disk;(手動分配通道)
backup datafile
}
以三個並行通道來執行並行備份
parallism=3
delete input(備份掉歸檔檔案之後,把備份過的歸檔記錄檔從系統裡刪除)
rman>report scheme; 當前資料庫裡可以備份的資料檔案
rman>backup spfile;
rman>backup archivelog all;
run{
backup as backupset
FORMAT '/u01/db01/backup/%d_%s_%p'
duration 10:00 minimize load
(database);
sql ' alter system archivelog current';
}
上面語句 'duration 10:00 minimize load'
表示把備份的工作制定在10個小時內均勻完成,減少對生產系統IO的過分消耗。
crosscheck:檢查哪些檔案存在,那些檔案不存在,
做這個操作的時候,會把控制檔案的紀錄中歸檔檔案和實際歸檔檔案進行比較,
如果實際位置上不存在歸檔日誌,則把不存在的歸檔日誌標識為expired.(實驗) (是這樣的)
list expired archivelog all;
可以察看所有失效的 archive log.
crosscheck archivelog all;
obsolete: 超過保留原則以上的備份組
expired:控制檔案記錄它是好的,但物理上這個檔案已經被刪除掉了(delete expired)
(更詳細資料請參照 oracle 9i fundamental1)
noarchive 模式下必須在mount 狀態下備份,或者把資料庫檔案offline備份(但是 immediate offline不行),
選擇那種offline normal方式可以。(實驗證明是 可以的)
閃回過去,閃回回來(實驗)
backup as compressed backupset database;適合往磁碟備份的方式,在原來backup 前提條件下大小是前者大小的50%)
backup as copy datafile '/oradata/users_01_db01.dbf'
format '/backup/users01.dbf';
backup scn數值不等於鎖定資料檔案.
report list:會把 存在的(stored scipts)拿出來,這個只適合于歸檔資料庫。
backup as copy
datafile '/ORADATA/users_01_db01.dbf'
format '/BACKUP/USERS01.dbf';
鎖定backup 的 scn值不等於鎖定資料檔案。
oracle 在恢複的時候,標籤可以被指定為結果集。
rman備份的時候,會自動檢查被備份的檔案的壞塊,並報道哪個檔案哪個塊壞掉了。rman 甚至能夠檢查邏輯上的損壞。
比如索引應該是唯一的,但是如果出現兩個唯一索引在一個表中,rman也可以檢查到。
validate:校正備份,對輸入檔案進行校正。
備份歸檔檔案( 備份歸檔前,會自動切換聯機日誌,做一個歸檔)(實驗)
既然是上面這種情況,那麼備份之後再用這個命令有什麼含義 sql ' alter system archivelog current';?
(答:這個只是對9i的rman script的一個延續,沒有什麼實際意義)
備份歸檔的時候,可以出現failover
如,如果源庫找不到sequence為50的日誌,
rman就會自動到備庫區尋找。
(流複製下是否可以這樣,老師也不確定)
備份結束後,自動刪除被成功備份的歸檔日誌
rman> run{
backup
format '/disk1/backup/arc_%t_%s_%p'
archivelog from sequence=234
delete input;
} (實驗) 成功刪除最近的,並在檔案系統中也刪除了相關的內容
RMAN 備份
對於T層級的備份,作全庫備份之後每天可以做增量備份,減少備份所需要的時間
兩種類型 cumulative 和 a different level
cumulative(累計增量)
尋找n-1或者更小
差異
尋找n或更小
預設是差異的,如果需要備份成增量,需要加一個cumulative參數
RMAN > BACKUP incremental level 0 database;
RMAN >BACKUP incremental level 1 database;
RMAN >backup incremental level 1 cumulative database;
累計備份和差異備份是可以在一個資料庫裡的備份組中共存的。
block change 備份:
通常情況下備份,如有有 1T的資料,如果只改動了 20G,進行rman備份的時候,oracle 也要掃描 1個T的block,為了避免這種浪費資源的現象,我們使用block change檔案。 用到的概念是block change tracking,如下:
alter database enable block change tracking
using file '/mydir/rman_change_track.f'
reuse;(實驗)
可以察看 v$block_change_tracking 視圖。
sql>alter database enable block change tracking
using file '/home/oracle/rman_change_track.f'
reuse;
sql>alter database enable block change tracking;
sql>select * from v$block_change_tracking;
增量的拷貝,
incremental updating backups
增量的拷貝。
用增量拷貝恢複資料庫的步驟
1>image copy(原始的)
2〉增量 image copy(增量的,總是只有一個)
3>恢複(從原始的和增量的恢複)
recover copy of datafile {n|'n'}
with tag 'increupd_df1';
如何察看塊的scn: dump 可以察看到
檔案的scn:察看 v$datafile
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
就這個問題擴充一下: 查看itpub 討論貼子:
對於一個DBA來說,他該很明晰自己的系統是否要做介質恢複。
如上判斷是做介質恢複還是執行個體恢複是源於scn號的概念
如果系統scn與資料檔案scn及資料檔案的start scn三項相同時則不需做介質恢複
如有一項不同則需介質恢複。
正常關閉的資料庫的start scn與end scn是相同的
如果這兩項不同則需執行個體恢複。
另LZ的報錯為:
ORA-01194: file 1 needs more recovery to be consistent
明顯為需要更多日誌做執行個體恢複
檢查oracle 檔案的狀態:
SELECT
a.name,
a.checkpoint_change#,
b.checkpoint_change#,
CASE
WHEN ((a.checkpoint_change# - b.checkpoint_change#) = 0) THEN 'Startup Normal'
WHEN ((a.checkpoint_change# - b.checkpoint_change#) > 0) THEN 'Media Recovery'
WHEN ((a.checkpoint_change# - b.checkpoint_change#) < 0) THEN 'Old Control File'
ELSE 'what the ?'
END STATUS
FROM v$datafile a, -- control file SCN for datafile
v$datafile_header b -- datafile header SCN
WHERE a.file# = b.file#;
Tip
The V$DATAFILE_HEADER view uses the physical datafile on disk as its source. The V$DATAFILE view
uses the control file as its source.
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BS KEY:backup set
可以刪除檔案的內容
delete backup;set 156;
檔案BP key(backup 狀態)
status:( Available) 還原是否有效
piece handle:備份片的名字
rman> report need backup(察看哪些檔案需要備份)
for example
rman > report need backup incremental 3;
rman > report need backup days 3;
delete backup set:刪除備份資訊+刪除備份檔案
rman> report obsolete redundancy 2;
監視rman的狀態,
set command id
v$session_longops:已讀了多少,需讀多少( 實驗 )
total
Monitoring RMAN Backups
To correlate a process with a channel during a backup, perform the following steps:
1. Start Recovery Manager and connect to the target database and, optionally, the recovery
catalog.
2. Set the COMMAND ID parameter after allocating the channels and then copy the desired
object. The string specified by the SET COMMAND ID command is entered into the
V$SESSION.CLIENT_INFO column of all allocated channels.
run {
allocate channel t1 type disk;
set command id to 'rman';
backup datafile 1;
release channel t1;}
3. Query the V$PROCESS and V$SESSION views to get the session identifier (SID) and the
operating system process identifier (SPID) for the channels using the previously specified
COMMAND ID string.
SELECT sid, spid, client_info
FROM v$process p, v$session s
WHERE p.addr = s.paddr
AND client_info LIKE '%id=rman%';
4. Query the V$SESSION_LONGOPS view to get the status of the copy.
SELECT sid, serial#, context, sofar, totalwork,
round(sofar/totalwork*100,2) "% Complete"
FROM V$SESSION_LONGOPS
WHERE opname LIKE 'RMAN:%'
AND opname NOT LIKE 'RMAN: aggregate%'
AND totalwork != 0;
5. If you use a channel of type sbt and the copy process appears to hang, query
V$SESSION_WAIT by using the SID obtained in step 3 to determine whether RMAN is
waiting for a media manager function call to complete.
SELECT * FROM V$SESSION_WAIT WHERE event LIKE '%sbt%';
排出某個資料表空間不備份:
rman>configure exclude for tablespace users;
如果對資料的rman備份策略修改了,會記錄到字典中去,
下次再啟動rman,視圖v$rman_configuration會去修改
控制檔案。(覆蓋控制檔案裡面的預設設定)
select * from v$rman_configuration; (實驗)
CONF# NAME VALUE
1 CONTROLFILE AUTOBACKUP ON
2 RETENTION POLICY TO REDUNDANCY 2
閃回資料庫操作(實驗)