备份恢复基础复习
1、數據庫備份
數據庫的備份分為一致性備份 和 非一致性備份。。。。備份數據庫也就是備份數據庫的四個文件:數據文件、控制文件、參數文件、口令文件。
數據庫的一致性備份: ? ? ? ? ? ? ? ? 需要關閉數據庫,所以也就是傳說中的冷備份,基本步驟非常簡單:
1)列出數據庫內的所有數據文件和控制文件:通過查詢v$controlfile和v$datafile中的name列即可。
2)關閉數據庫SQL>shutdown immediate
3)利用操作系統命令拷貝所有的:數據文件,控制文件,參數文件、口令文件到指定的目錄中。
4)重新啟動數據庫SQL>startup ? 備份完成。
數據庫的非一致性備份: ? ? ? ? ? ? ? ?不需要關閉數據庫,數據庫處于open狀態,不影響業務正常的運行。注意非一致性數據庫備份只能在archivelog模式下,而一致性備份可以在archivelog和noarchivelog模式下都是可以的。
1)列出數據庫內的所有數據文件和控制文件:通過查詢v$controlfile和v$datafile中的name列即可。
2)將數據庫設置為備份模式,在設置備份模式后,數據庫會做一個全局的檢查點,然后再所有的數據文件的頭塊加鎖,以確保數據備份中數據文件頭塊不會發生變化,執行:alter database begin backup
3)備份數據文件和控制文件,其中數據文件和一致性備份一樣,使用操作系統命令即可,但是控制文件的備份,需要使用:alter database backup controlfile to '/u01/app/oracle/ctl.bak
4)結束數據庫備份。為了確保數據文件備份的同步性,還應該歸檔當前日志組'SQL>alter database end backup; SQL> alter system archive log current;
2、備份表空間
備份表空間,就是指的是當數據庫處于open狀態,備份其數據文件的方法。。。注意表空間的備份只能是archivelog模式下的備份,而不能是noarchivelog。表空間的備份可以分為脫機備份和聯機備份。
脫機備份
脫機備份是指當表空間處于offline的時候,對單個數據文件或多個數據文件進行備份,與聯機備份的相比,可以產生較少的重做日志。
脫機備份有一個缺點,那就是system表空間,正在使用的undo表空間,都不能脫機,也就不能備份。下面以備份USER表空間為例,來說明:
1)確定表空間所包含的數據文件,可以通過視圖:DBA_DATA_FILES 查看表空間和數據文件的對應關系:select file_name ,tablespace_name from dba_data_files;
2)將表空間脫機:alter tablespace USER offline;
3)利用操作系統命令復制數據文件。
4)備份完數據文件之后,將表空間設置為聯機:alter tablespace USER online;
聯機備份
連接備份是指表空間處于online狀態,進行數據文件的備份,這種備份的優點是能對所有的表空間數據文件進行備份,不管是system還是正在使用的undo表空間。但是其缺點是產生大量的重做日志信息和歸檔信息。
為什么會產生大量的的重做和歸檔呢?這是一個很復雜的問題,簡單解釋一下:因為對于處于backup 模式的表空間內的數據文件,當第一次受到DML操作(此時dba正在使用操作系統命令來備份數據文件)時,因為操作系統的copy是以操作系統的數據塊大小來執行的,而數據庫內的數據文件的數據塊的大小一般會比操作系統的大。還有,copy是操作系統命令,不能與oracle內部命令進行交互,這就造成了多次copy系統塊的的數據來完成一個db數據塊的拷貝,這就造成了數據的不一致。所以oracle把所有進行DML操作的數據塊全部先存入redo,然后再進行DML操作。。。。這就是為什么聯機備份表空間會產生大量的重做信息。更詳細的資料請參考:http://blog.csdn.net/changyanmanman/article/details/7899056
1)確定表空間所包含的數據文件,利用dba_data_files查看就可以了。
2)修改表空間位備份模式,此時會在表空間的所有數據文件塊頭上加上鎖,scn被凍結。執行:alter tablespace USERS begin backup;
3)利用操作系統命令copy數據文件。
4)設置表空間位正常模式:alter tablespace USERS end backup;
模擬并處理聯機備份失敗的處理:
在進行聯機備份數據文件的時候,如果數據庫突然因為斷電或者某些故障而實例崩潰,當再次進行數據庫裝載的時候,會提示需要進行實例恢復:
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/test.dbf'
如何進行處理呢?下面我們通過:首先修改表空間備份模式,然后關閉數據庫,再然后啟動數據庫,來模擬此情景:
SQL> alter tablespace TEST begin backup;
Tablespace altered.
SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
/u01/app/oracle/oradata/orcl/users01.dbf
USERS
/u01/app/oracle/oradata/orcl/sysaux01.dbf
SYSAUX
/u01/app/oracle/oradata/orcl/undotbs01.dbf
UNDOTBS1
FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
/u01/app/oracle/oradata/orcl/system01.dbf
SYSTEM
/u01/app/oracle/oradata/orcl/example01.dbf
EXAMPLE
/u01/app/oracle/oradata/orcl/test.dbf
TEST
6 rows selected.
SQL> host cp /u01/app/oracle/oradata/orcl/test.dbf /u01/app/oracle/test.bak
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area ?608174080 bytes
Fixed Size ? ? ? ? ? ? ? ? ?1220820 bytes
Variable Size ? ? ? ? ? ? 243273516 bytes
Database Buffers ? ? ? ? ?356515840 bytes
Redo Buffers ? ? ? ? ? ? ? ?7163904 bytes
Database mounted.
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/test.dbf'
SQL> startup force mount;
ORACLE instance started.
Total System Global Area ?608174080 bytes
Fixed Size ? ? ? ? ? ? ? ? ?1220820 bytes
Variable Size ? ? ? ? ? ? 243273516 bytes
Database Buffers ? ? ? ? ?356515840 bytes
Redo Buffers ? ? ? ? ? ? ? ?7163904 bytes
Database mounted.
SQL> desc v$backup
?Name ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Null? ? ?Type
?----------------------------------------- -------- ----------------------------
?FILE# ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NUMBER
?STATUS ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? VARCHAR2(18)
?CHANGE# ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NUMBER
?TIME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DATE
SQL> select status,change#,time from v$backup where file#=6;
STATUS ? ? ? ? ? ? ? ?CHANGE# TIME
------------------ ---------- ---------
ACTIVE ? ? ? ? ? ? ? ?1060636 30-JUL-13 ? ? ? ? ? ? -----active說明此數據文件正在被備份
SQL> alter database datafile '/u01/app/oracle/oradata/orcl/test.dbf' end backup; ? ?
Database altered.
上面這條是關鍵,通過強制掛載數據庫之后,可以使用alter database end backup,也可以使用上面的針對某個數據文件的結束;還有一種通過recover命令結束數據文件的備份:recover datafile 6;
SQL> alter database open;
Database altered.
好了,現在數據庫可以正常啟動了,再看一下現在對應的數據文件的狀態:
SQL> select * from v$backup where file#=6;
? ? ?FILE# STATUS ? ? ? ? ? ? ? ?CHANGE# TIME
---------- ------------------ ---------- ---------
? ? ? ?6 NOT ACTIVE ? ? ? ? ? ?1060636 30-JUL-13
3、備份控制文件
當發生涉及數據庫的配置改變,如增加減少表空間,數據文件,日志文件組或日志文件成員。當執行數據庫一致性備份的時候,數據庫的控制文件是不活動的,我們可以直接用操作系統命令來備份;當數據庫處于open狀態時,我們用alter database 命令既可以建立控制文件副本,也可以把控制文件備份到跟蹤文件中。
演示alter database備份控制文件:
alter database backup controlfile to '/u01/app/oracle/ctl.bak'但是如果該目錄下已經有控制文件了,我們可以用:alter database backup controlfile to '/u01/app/oracle/ctl.bak' reuse;
演示備份到跟蹤文件中:
1)查看跟蹤文件位置:show parameter user_dump_dest
2)確定跟蹤文件名稱,我們可以通過v$process,v$session確定當前的會話的的操作系統對應的pid,為什么需要操作系統的pid呢?這就要從跟蹤文件的命名規則說起了,跟蹤文件的命名規則如下:<SID>_ora_<SPID>.trc,其中SID代表數據的的sid,SPID對應的是此次會話的進程id所對應的操作系統進程號。好了,這就是為什么需要確定操作系統的pid的原因了。
SQL> select a.spid from v$process a,v$session b where a.addr=b.paddr and b.username='SYS';
3)執行控制文件備份命令:alter database bakcup controlfile to trace;'
4)跟蹤文件時文本格式,去掉了其中的注釋,就可以看到真正創建控制文件的語句了。在nomount的模式下,我們創建數據文件即可:
4、備份歸檔日志,參數文件,口令文件
————備份歸檔日志直接用操作系統命令;
————對于參數文件,如果是用的pfile,那直接可以用操作系統備份copy,但是如果是spfile,因為其是二進制文件,我們必須用下面的語句進行備份:
SQL>create pfile='/u01/app/oracle/pfile.bak' from spfile='$ORACLE_HOME/dbs/spfileorcl.ora'
————備份口令文件直接用操作系統命令。
5、用戶管理的完全恢復
轉載于:https://www.cnblogs.com/cymm/p/3390356.html
總結
- 上一篇: 为什么感觉一无所获
- 下一篇: Hibernate从入门到精通(十)多对