天天看點

備份恢複基礎複習

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、使用者管理的完全恢複