备份恢复基础复习
1、數(shù)據(jù)庫備份
數(shù)據(jù)庫的備份分為一致性備份 和 非一致性備份。。。。備份數(shù)據(jù)庫也就是備份數(shù)據(jù)庫的四個(gè)文件:數(shù)據(jù)文件、控制文件、參數(shù)文件、口令文件。
數(shù)據(jù)庫的一致性備份: ? ? ? ? ? ? ? ? 需要關(guān)閉數(shù)據(jù)庫,所以也就是傳說中的冷備份,基本步驟非常簡單:
1)列出數(shù)據(jù)庫內(nèi)的所有數(shù)據(jù)文件和控制文件:通過查詢v$controlfile和v$datafile中的name列即可。
2)關(guān)閉數(shù)據(jù)庫SQL>shutdown immediate
3)利用操作系統(tǒng)命令拷貝所有的:數(shù)據(jù)文件,控制文件,參數(shù)文件、口令文件到指定的目錄中。
4)重新啟動數(shù)據(jù)庫SQL>startup ? 備份完成。
數(shù)據(jù)庫的非一致性備份: ? ? ? ? ? ? ? ?不需要關(guān)閉數(shù)據(jù)庫,數(shù)據(jù)庫處于open狀態(tài),不影響業(yè)務(wù)正常的運(yùn)行。注意非一致性數(shù)據(jù)庫備份只能在archivelog模式下,而一致性備份可以在archivelog和noarchivelog模式下都是可以的。
1)列出數(shù)據(jù)庫內(nèi)的所有數(shù)據(jù)文件和控制文件:通過查詢v$controlfile和v$datafile中的name列即可。
2)將數(shù)據(jù)庫設(shè)置為備份模式,在設(shè)置備份模式后,數(shù)據(jù)庫會做一個(gè)全局的檢查點(diǎn),然后再所有的數(shù)據(jù)文件的頭塊加鎖,以確保數(shù)據(jù)備份中數(shù)據(jù)文件頭塊不會發(fā)生變化,執(zhí)行:alter database begin backup
3)備份數(shù)據(jù)文件和控制文件,其中數(shù)據(jù)文件和一致性備份一樣,使用操作系統(tǒng)命令即可,但是控制文件的備份,需要使用:alter database backup controlfile to '/u01/app/oracle/ctl.bak
4)結(jié)束數(shù)據(jù)庫備份。為了確保數(shù)據(jù)文件備份的同步性,還應(yīng)該歸檔當(dāng)前日志組'SQL>alter database end backup; SQL> alter system archive log current;
2、備份表空間
備份表空間,就是指的是當(dāng)數(shù)據(jù)庫處于open狀態(tài),備份其數(shù)據(jù)文件的方法。。。注意表空間的備份只能是archivelog模式下的備份,而不能是noarchivelog。表空間的備份可以分為脫機(jī)備份和聯(lián)機(jī)備份。
脫機(jī)備份
脫機(jī)備份是指當(dāng)表空間處于offline的時(shí)候,對單個(gè)數(shù)據(jù)文件或多個(gè)數(shù)據(jù)文件進(jìn)行備份,與聯(lián)機(jī)備份的相比,可以產(chǎn)生較少的重做日志。
脫機(jī)備份有一個(gè)缺點(diǎn),那就是system表空間,正在使用的undo表空間,都不能脫機(jī),也就不能備份。下面以備份USER表空間為例,來說明:
1)確定表空間所包含的數(shù)據(jù)文件,可以通過視圖:DBA_DATA_FILES 查看表空間和數(shù)據(jù)文件的對應(yīng)關(guān)系:select file_name ,tablespace_name from dba_data_files;
2)將表空間脫機(jī):alter tablespace USER offline;
3)利用操作系統(tǒng)命令復(fù)制數(shù)據(jù)文件。
4)備份完數(shù)據(jù)文件之后,將表空間設(shè)置為聯(lián)機(jī):alter tablespace USER online;
聯(lián)機(jī)備份
連接備份是指表空間處于online狀態(tài),進(jìn)行數(shù)據(jù)文件的備份,這種備份的優(yōu)點(diǎn)是能對所有的表空間數(shù)據(jù)文件進(jìn)行備份,不管是system還是正在使用的undo表空間。但是其缺點(diǎn)是產(chǎn)生大量的重做日志信息和歸檔信息。
為什么會產(chǎn)生大量的的重做和歸檔呢?這是一個(gè)很復(fù)雜的問題,簡單解釋一下:因?yàn)閷τ谔幱赽ackup 模式的表空間內(nèi)的數(shù)據(jù)文件,當(dāng)?shù)谝淮问艿紻ML操作(此時(shí)dba正在使用操作系統(tǒng)命令來備份數(shù)據(jù)文件)時(shí),因?yàn)椴僮飨到y(tǒng)的copy是以操作系統(tǒng)的數(shù)據(jù)塊大小來執(zhí)行的,而數(shù)據(jù)庫內(nèi)的數(shù)據(jù)文件的數(shù)據(jù)塊的大小一般會比操作系統(tǒng)的大。還有,copy是操作系統(tǒng)命令,不能與oracle內(nèi)部命令進(jìn)行交互,這就造成了多次copy系統(tǒng)塊的的數(shù)據(jù)來完成一個(gè)db數(shù)據(jù)塊的拷貝,這就造成了數(shù)據(jù)的不一致。所以oracle把所有進(jìn)行DML操作的數(shù)據(jù)塊全部先存入redo,然后再進(jìn)行DML操作。。。。這就是為什么聯(lián)機(jī)備份表空間會產(chǎn)生大量的重做信息。更詳細(xì)的資料請參考:http://blog.csdn.net/changyanmanman/article/details/7899056
1)確定表空間所包含的數(shù)據(jù)文件,利用dba_data_files查看就可以了。
2)修改表空間位備份模式,此時(shí)會在表空間的所有數(shù)據(jù)文件塊頭上加上鎖,scn被凍結(jié)。執(zhí)行:alter tablespace USERS begin backup;
3)利用操作系統(tǒng)命令copy數(shù)據(jù)文件。
4)設(shè)置表空間位正常模式:alter tablespace USERS end backup;
模擬并處理聯(lián)機(jī)備份失敗的處理:
在進(jìn)行聯(lián)機(jī)備份數(shù)據(jù)文件的時(shí)候,如果數(shù)據(jù)庫突然因?yàn)閿嚯娀蛘吣承┕收隙鴮?shí)例崩潰,當(dāng)再次進(jìn)行數(shù)據(jù)庫裝載的時(shí)候,會提示需要進(jìn)行實(shí)例恢復(fù):
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/test.dbf'
如何進(jìn)行處理呢?下面我們通過:首先修改表空間備份模式,然后關(guān)閉數(shù)據(jù)庫,再然后啟動數(shù)據(jù)庫,來模擬此情景:
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說明此數(shù)據(jù)文件正在被備份
SQL> alter database datafile '/u01/app/oracle/oradata/orcl/test.dbf' end backup; ? ?
Database altered.
上面這條是關(guān)鍵,通過強(qiáng)制掛載數(shù)據(jù)庫之后,可以使用alter database end backup,也可以使用上面的針對某個(gè)數(shù)據(jù)文件的結(jié)束;還有一種通過recover命令結(jié)束數(shù)據(jù)文件的備份:recover datafile 6;
SQL> alter database open;
Database altered.
好了,現(xiàn)在數(shù)據(jù)庫可以正常啟動了,再看一下現(xiàn)在對應(yīng)的數(shù)據(jù)文件的狀態(tài):
SQL> select * from v$backup where file#=6;
? ? ?FILE# STATUS ? ? ? ? ? ? ? ?CHANGE# TIME
---------- ------------------ ---------- ---------
? ? ? ?6 NOT ACTIVE ? ? ? ? ? ?1060636 30-JUL-13
3、備份控制文件
當(dāng)發(fā)生涉及數(shù)據(jù)庫的配置改變,如增加減少表空間,數(shù)據(jù)文件,日志文件組或日志文件成員。當(dāng)執(zhí)行數(shù)據(jù)庫一致性備份的時(shí)候,數(shù)據(jù)庫的控制文件是不活動的,我們可以直接用操作系統(tǒng)命令來備份;當(dāng)數(shù)據(jù)庫處于open狀態(tài)時(shí),我們用alter database 命令既可以建立控制文件副本,也可以把控制文件備份到跟蹤文件中。
演示alter database備份控制文件:
alter database backup controlfile to '/u01/app/oracle/ctl.bak'但是如果該目錄下已經(jīng)有控制文件了,我們可以用:alter database backup controlfile to '/u01/app/oracle/ctl.bak' reuse;
演示備份到跟蹤文件中:
1)查看跟蹤文件位置:show parameter user_dump_dest
2)確定跟蹤文件名稱,我們可以通過v$process,v$session確定當(dāng)前的會話的的操作系統(tǒng)對應(yīng)的pid,為什么需要操作系統(tǒng)的pid呢?這就要從跟蹤文件的命名規(guī)則說起了,跟蹤文件的命名規(guī)則如下:<SID>_ora_<SPID>.trc,其中SID代表數(shù)據(jù)的的sid,SPID對應(yīng)的是此次會話的進(jìn)程id所對應(yīng)的操作系統(tǒng)進(jìn)程號。好了,這就是為什么需要確定操作系統(tǒng)的pid的原因了。
SQL> select a.spid from v$process a,v$session b where a.addr=b.paddr and b.username='SYS';
3)執(zhí)行控制文件備份命令:alter database bakcup controlfile to trace;'
4)跟蹤文件時(shí)文本格式,去掉了其中的注釋,就可以看到真正創(chuàng)建控制文件的語句了。在nomount的模式下,我們創(chuàng)建數(shù)據(jù)文件即可:
4、備份歸檔日志,參數(shù)文件,口令文件
————備份歸檔日志直接用操作系統(tǒng)命令;
————對于參數(shù)文件,如果是用的pfile,那直接可以用操作系統(tǒng)備份copy,但是如果是spfile,因?yàn)槠涫嵌M(jìn)制文件,我們必須用下面的語句進(jìn)行備份:
SQL>create pfile='/u01/app/oracle/pfile.bak' from spfile='$ORACLE_HOME/dbs/spfileorcl.ora'
————備份口令文件直接用操作系統(tǒng)命令。
5、用戶管理的完全恢復(fù)
轉(zhuǎn)載于:https://www.cnblogs.com/cymm/p/3390356.html
總結(jié)
- 上一篇: 为什么感觉一无所获
- 下一篇: Hibernate从入门到精通(十)多对