1、資料庫備份
資料庫的備份分為一緻性備份 和 非一緻性備份。。。。備份資料庫也就是備份資料庫的四個檔案:資料檔案、控制檔案、參數檔案、密碼檔案。
資料庫的一緻性備份: 需要關閉資料庫,是以也就是傳說中的冷備份,基本步驟非常簡單:
1)列出資料庫内的所有資料檔案和控制檔案:通過查詢v$controlfile和v$datafile中的name列即可。
2)關閉資料庫SQL>shutdown immediate
3)利用作業系統指令拷貝所有的:資料檔案,控制檔案,參數檔案、密碼檔案到指定的目錄中。
4)重新啟動資料庫SQL>startup 備份完成。
資料庫的非一緻性備份: 不需要關閉資料庫,資料庫處于open狀态,不影響業務正常的運作。注意非一緻性資料庫備份隻能在archivelog模式下,而一緻性備份可以在archivelog和noarchivelog模式下都是可以的。
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表空間。但是其缺點是産生大量的重做日志資訊和歸檔資訊。
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
/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.
SQL> startup force mount;
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;
好了,現在資料庫可以正常啟動了,再看一下現在對應的資料檔案的狀态:
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、使用者管理的完全恢複