commit --lgwr
- 事務相關的操作,保證事務的安全
checkpoint --dbwr
- 資料相關的操作,保證資料的安全
實體的恢復 crash recovery
什么時候發生oracle實體恢復
- shutdown abort
- 資料庫例外down掉(機器死機,掉電)
從Redo的什么位置開始恢復?
在某一點,在這一點之前的所有資料,Oracle都已經成功的寫入到了磁盤上,
實體恢復是一個自動的程序,不需要人工干預
實體恢復發生在那個階段?
–sql>startup nomount(讀取spfle) ,沒有實體恢復,
–sql>alter database mount (讀取控制檔案),沒有實體恢復,
–sql>alter database open (檢查控制檔案,資料檔案頭),發生實體恢復,
- 如果直接startup命令,會經過啟動裝載打開三個步驟,
SQL> shutdown abort;
ORACLE 例程已經關閉,
SQL> startup;
ORACLE 例程已經啟動,
Total System Global Area 3307048960 bytes
Fixed Size 2180264 bytes
Variable Size 1828719448 bytes
Database Buffers 1459617792 bytes
Redo Buffers 16531456 bytes
資料庫裝載完畢,
資料庫已經打開,
SQL> shutdown abort;
ORACLE 例程已經關閉,
SQL> startup nomount;
ORACLE 例程已經啟動,
Total System Global Area 3307048960 bytes
Fixed Size 2180264 bytes
Variable Size 1828719448 bytes
Database Buffers 1459617792 bytes
Redo Buffers 16531456 bytes
SQL> alter database mount;
資料庫已更改,
SQL> alter database open;
資料庫已更改,
oracle在打開資料庫時(alter database open),會檢查每個檔案頭上的資訊(SCN),并同控制檔案中相應的資訊(SCN)比較,如果不一致就進行實體恢復,
實體恢復的程序
- 前滾rolling forward
讀取狀態為current和active狀態的日志(redo log),將發生crash時,沒有來得及寫磁盤的資料塊,使用redo資訊來恢復,
- 打開資料庫alter database open
- 回滾rolling back
將沒有提交的事務進行回滾
介質恢復
當發生以下情況時,實體恢復無效,需要進行介質恢復:
- 資料檔案丟失,損壞,
- 在線日志檔案(onlineredo)丟失,損壞,
- 資料檔案太舊(比如從一個備份集中恢復過來的檔案,)
- 檔案太新(比如,其它所有的檔案都是從備份中恢復過來的)
資料損壞時基本都要進行介質恢復
Oracle的備份方式
Rman(物理備份)--Recovery Manager
備份和還原資料庫檔案、歸檔日志和控制檔案,它也可以用來執行完全或不完全的資料庫恢復,
Rman比較慢,相同情況下一般使用Dataguard
Rman是是oracle資料庫自帶的一個備份工具,用Rman備份的步驟如下:
C:\Users\clg>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期二 3月 8 17:33:37 2016
Copyright (c) 1982, 2010, Oracle. All rights reserved.
連接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> alter database open;
資料庫已更改,
SQL> quit;
從 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 斷
開
C:\Users\clg>rman target /
恢復管理器: Release 11.2.0.1.0 - Production on 星期二 3月 8 17:34:10 2016
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
連接到目標資料庫: ORCL (DBID=1433387646)
RMAN> backup database;
啟動 backup 于 08-3月 -16
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=134 設備型別=DISK
通道 ORA_DISK_1: 正在啟動全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集內的資料檔案
輸入資料檔案: 檔案號=00001 名稱=D:\APP\CLG\ORADATA\ORCL\SYSTEM01.DBF
輸入資料檔案: 檔案號=00002 名稱=D:\APP\CLG\ORADATA\ORCL\SYSAUX01.DBF
輸入資料檔案: 檔案號=00003 名稱=D:\APP\CLG\ORADATA\ORCL\UNDOTBS01.DBF
輸入資料檔案: 檔案號=00005 名稱=D:\APP\CLG\ORADATA\ORCL\EXAMPLE01.DBF
輸入資料檔案: 檔案號=00004 名稱=D:\APP\CLG\ORADATA\ORCL\USERS01.DBF
通道 ORA_DISK_1: 正在啟動段 1 于 08-3月 -16
通道 ORA_DISK_1: 已完成段 1 于 08-3月 -16
段句柄=D:\APP\CLG\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2016_03_08\O1_MF_NNNDF_TAG2
0160308T173510_CFX76H7L_.BKP 標記=TAG20160308T173510 注釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:35
通道 ORA_DISK_1: 正在啟動全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集內的資料檔案
備份集內包括當前控制檔案
備份集內包括當前的 SPFILE
通道 ORA_DISK_1: 正在啟動段 1 于 08-3月 -16
通道 ORA_DISK_1: 已完成段 1 于 08-3月 -16
段句柄=D:\APP\CLG\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2016_03_08\O1_MF_NCSNF_TAG2
0160308T173510_CFX77M5Q_.BKP 標記=TAG20160308T173510 注釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:01
完成 backup 于 08-3月 -16
如果這是備份表空間,可以用一下陳述句實作
SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
EXAMPLE
已選擇6行,
SQL> quit;
C:\Users\clg>rman target /
RMAN>
RMAN> backup tablespace users;
這樣就可以備份制定的表空間,
exp,expdp(邏輯備份)
–用戶,資料庫物件(表,磁區...)
只讀表空間+傳遞表空間
OLAP(Online Analytical Process)資料庫的一種備份方案
Dataguard--重點
最簡單的備份方案
- 備份自動
- 故障恢復時間非常短
缺點和限制
- 需要資料庫歸檔(OLAP型別的資料庫不適宜歸檔)
- 對于海量資料不合適
Oracle的閃回技術--flashback
資料庫的閃回
默認資料庫的閃回是關閉的,
可以用以下命令查詢看是否是開啟的
select flashback_on from v$database;
可以用以下命令開啟,建議開啟flashback
alter database flashback on;
基于SCN的閃回
一般不太容易知道SCN,不易獲得SCN
基于時間的閃回
資料庫閃回到具體時間
表的閃回
system用戶洗掉的table不進recyclebin,普通用戶洗掉的table會進入recyclebin,具體如下:
SQL> show user;
USER 為 "SYS"
SQL> create table t1(id int);
表已創建,
SQL> drop table t1;
表已洗掉,
SQL> show recyclebin;
SQL> SELECT * FROM RECYCLEBIN;
未選定行
/*可見回收站中并沒有t1表*/
SQL> conn liuyifei/a4852396
已連接,
SQL> create table t1(id int);
表已創建,
SQL> drop table t1;
表已洗掉,
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T1 BIN$EqiCMfIYSHGQW4KrIX0Alg==$0 TABLE 2016-03-08:19:20:23
SQL> flashback table t1 to before drop;
閃回完成,
SQL> desc t1;
名稱 是否為空? 型別
----------------------------------------- -------- ----------------------------
ID NUMBER(38)
徹底洗掉表,不進入回收站的辦法
SQL> drop table t1 purge;
關于回收站的資料如下:
http://www.jb51.net/article/34733.htm
DML操作的閃回
事務的閃回
版本的閃回
上面三種閃回后面在進行補充
以下是關于歸檔模式和非歸檔模式的知識:
歸檔模式轉換為非歸檔模式:
查看資料庫是否是歸檔模式:兩種方式
SQL> select name,log_mode from v$database;
NAME LOG_MODE
--------- ------------
ORCL NOARCHIVELOG
SQL> archive log list;
資料庫日志模式 非存檔模式
自動存檔 禁用
存檔終點 USE_DB_RECOVERY_FILE_DEST
最早的聯機日志序列 28
當前日志序列 30
非歸檔模式轉換為歸檔模式:
SQL>SHUTDOWN NORMAL/IMMEDIATE; 先down下資料
SQL>START MOUNT; 啟動資料庫實體到mount狀態,但不要打開
SQL>ALTER DATABASE ARCHIVELOG; 設定資料庫為歸檔日志模式
SQL>ALTER DATABASE OPEN; 打開資料庫
SQL>archive log list; 確認資料庫現在處于歸檔日志模式
一般設定資料庫為歸檔日志模式時會出現如下錯誤:
ORA-00265: 要求實體恢復, 無法設定 ARCHIVELOG 模式
這是我們可以按照如下步驟解決:
SQL> alter database archivelog;
alter database archivelog
*
第 1 行出現錯誤:
ORA-00265: 要求實體恢復, 無法設定 ARCHIVELOG 模式
SQL> shutdown immediate;
ORA-01109: 資料庫未打開
已經卸載資料庫,
ORACLE 例程已經關閉,
SQL> startup restrict;
ORACLE 例程已經啟動,
Total System Global Area 3307048960 bytes
Fixed Size 2180264 bytes
Variable Size 1828719448 bytes
Database Buffers 1459617792 bytes
Redo Buffers 16531456 bytes
資料庫裝載完畢,
資料庫已經打開,
SQL> shutdown immediate;
資料庫已經關閉,
已經卸載資料庫,
ORACLE 例程已經關閉,
SQL> startup mount;
ORACLE 例程已經啟動,
Total System Global Area 3307048960 bytes
Fixed Size 2180264 bytes
Variable Size 1828719448 bytes
Database Buffers 1459617792 bytes
Redo Buffers 16531456 bytes
資料庫裝載完畢,
SQL> archive log list;
資料庫日志模式 非存檔模式
自動存檔 禁用
存檔終點 USE_DB_RECOVERY_FILE_DEST
最早的聯機日志序列 30
當前日志序列 32
SQL> alter database archivelog;
資料庫已更改,
SQL> archive log list;
資料庫日志模式 存檔模式
自動存檔 啟用
存檔終點 USE_DB_RECOVERY_FILE_DEST
最早的聯機日志序列 30
下一個存檔日志序列 32
當前日志序列 32
SQL> alter database open;
資料庫已更改,
記得幫我點贊哦!
精心整理了計算機各個方向的從入門、進階、實戰的視頻課程和電子書,按照目錄合理分類,總能找到你需要的學習資料,還在等什么?快去關注下載吧!!!

念念不忘,必有回響,小伙伴們幫我點個贊吧,非常感謝,
我是職場亮哥,YY高級軟體工程師、四年作業經驗,拒絕咸魚爭當龍頭的斜杠程式員,
聽我說,進步多,程式人生一把梭
如果有幸能幫到你,請幫我點個【贊】,給個關注,如果能順帶評論給個鼓勵,將不勝感激,
職場亮哥文章串列:更多文章

本人所有文章、回答都與著作權保護平臺有合作,著作權歸職場亮哥所有,未經授權,轉載必究!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/1154.html
標籤:Oracle
上一篇:Oracle小練兵之映像租賃系統
