Oracle—使用者管理的備份(一)
一.首先要知道資料庫中資料表空間和檔案的資訊,有幾個效能檢視,v$datafile,v$tablespace,v$tempfile,v$logfile,v$controlfile,dba_tablespaces,dba_data_files可以用它們來查看錶空間或者檔案的位置和名字,其中dba_data_files可以查看到每個資料檔案屬於哪個資料表空間。
參考閱讀:
Oracle教程:使用者管理的備份
推薦閱讀:
Oracle基礎教程之通過RMAN複製資料庫
RMAN備份策略制定參考內容
RMAN備份學習筆記
OracleDatabase Backup加密 RMAN加密
對於查看每個資料檔案屬於哪個資料表空間也可以用$datafile,v$tablespace來join一下。
例如:
SQL> select t.name tablespace,d.name datafile from v$tablespace t join v$datafile d on t.ts#=d.ts#;
TABLESPACE DATAFILE
------------------------------ -----------------------------------
SYSTEM /u01/oradata/wilson/system01.dbf
SYSAUX /u01/oradata/wilson/sysaux01.dbf
UNDOTBS1 /u01/oradata/wilson/undotbs01.dbf
USERS /u01/oradata/wilson/users01.dbf
EXAMPLE /u01/oradata/wilson/example01.dbf
PAUL /u01/oradata/wilson/paul01.dbf
SUN /u01/oradata/wilson/sun01.dbf
SMALLUNDO /u01/oradata/wilson/smallundo1.dbf
ASSM /u01/oradata/wilson/assm_1.dbf
MSSM /u01/oradata/wilson/mssm_1dbf
PAUL /u01/oradata/wilson/paul02.dbf
二.備份的方式
1.處於非歸檔模式
在非歸檔模式下,關閉資料庫執行完整的備份是唯一的選擇。
在上面給出的視圖中找到每個檔案的位置,要備份的有控制檔案和整個資料檔案集,最好把臨時檔案和spfile,password檔案(它們在/u01/oracle/dbs中)一起也備份了。
在備份之前必須乾淨的關閉資料庫,那麼對於聯機重做日誌沒有必要備份。但是如果是出現不乾淨的關閉資料庫,那麼必須備份聯機重做日誌,不然還原後無法開啟資料庫。(其實無論在什麼情況下,最好都備份)
2.處于歸檔模式
在歸檔模式下,既可以在關閉資料庫時備份也可以在開啟資料庫時備份;
(一)在關閉資料庫時備份和非歸檔模式備份是一樣,有一個差別就是不備份聯機重做日誌了,改為備份歸檔日誌。
(二)在開啟資料庫時備份,備份是非一致性的,所以必須備份歸檔記錄檔。
有下面三個步驟:
(1)備份控制檔案
備份控制檔案有兩種方式,
alter database backup confile to <filename>;
alter database backup confile to trace as <filename>;
第一種形式產生一個二進位備份,輸出檔案將是當前控制檔案的嚴格的讀一致性副本;
第二種形式產生一個邏輯備份,在指定檔案中使用一組SQL命令來建立一個新的控制檔案,並且包含與當前的控制檔案相同的資料庫物理結構資訊。
這裡說明一下create controlfile命令,它必須在非載入模式下執行,並且在control_files參數指定的位置產生一個新的控制檔案;這個命令產生的新控制檔案只包含與物理結構有關的資料;例如RMAN備份將會丟失。
在作業系統下建立個目錄/tmp/con,用第一種形式備份控制檔案;
SQL> alter database backup controlfile to '/tmp/con/c1.ctl';
Database altered.
SQL> !ls -l /tmp/con
total 9636
-rw-r----- 1 oracle oinstall 9846784 Aug 23 10:07 c1.ctl
用第二種形式備份控制檔案;
SQL> alter database backup controlfile to trace as '/tmp/con/c2.ctl';
Database altered.
SQL> !ls -l /tmp/con
total 9648
-rw-r----- 1 oracle oinstall 9846784 Aug 23 10:07 c1.ctl
-rw-r--r-- 1 oracle oinstall 7107 Aug 23 10:11 c2.ctl
只要控制檔案發生變化就要備份它,建議每次備份時都備份一下控制檔案。
(2)關于歸檔記錄檔備份
先執行alter system archive log current,再找到歸檔日誌位置,複製到別的地方即可。
有關歸檔日誌的設定請參照:歸檔模式
(3)當他們的資料表空間置於備份模式時複製資料檔案;
有關備份模式請參照:oracle中backup模式
查看有哪些資料表空間;
SQL> select tablespace_name,contents from dba_tablespaces;
TABLESPACE_NAME CONTENTS
------------------------------ ---------
SYSTEM PERMANENT
SYSAUX PERMANENT
UNDOTBS1 UNDO
TEMP TEMPORARY
USERS PERMANENT
EXAMPLE PERMANENT
PAUL PERMANENT
MYTEMP TEMPORARY
SUN PERMANENT
SMALLUNDO UNDO
ASSM PERMANENT
TABLESPACE_NAME CONTENTS
------------------------------ ---------
MSSM PERMANENT
12 rows selected.
查看一下資料表空間中有哪些資料檔案;
SQL> select tablespace_name,file_name from dba_data_files;
TABLESPACE_NAME FILE_NAME
------------------------------ -----------------------------------
PAUL /u01/oradata/wilson/paul01.dbf
USERS /u01/oradata/wilson/users01.dbf
UNDOTBS1 /u01/oradata/wilson/undotbs01.dbf
SYSAUX /u01/oradata/wilson/sysaux01.dbf
SYSTEM /u01/oradata/wilson/system01.dbf
EXAMPLE /u01/oradata/wilson/example01.dbf
SUN /u01/oradata/wilson/sun01.dbf
SMALLUNDO /u01/oradata/wilson/smallundo1.dbf
ASSM /u01/oradata/wilson/assm_1.dbf
MSSM /u01/oradata/wilson/mssm_1dbf
PAUL /u01/oradata/wilson/paul02.dbf
11 rows selected.
在備份前,先建立個目錄/tmp/hb
把sun資料表空間改為backup模式下,
SQL> alter tablespace sun begin backup;
Tablespace altered.
備份資料表空間下的資料檔案,
SQL> !cp /u01/oradata/wilson/sun01.dbf /tmp/hb
查看一下結果,
SQL> !ls -l /tmp/hb
total 20516
-rw-r----- 1 oracle oinstall 20979712 Aug 22 23:01 sun01.dbf
結束備份,
SQL> alter tablespace sun end backup;
Tablespace altered.
在資料庫開啟的情況下手動備份(在歸檔模式下),必須執行begin backup,雖然可以在作業系統層面上備份,但是其備份的將不能使用。
也可以使用SQL> alter database begin backup;
Database altered.
把所有的資料表空間一次性的全部處於backup模式。
還有一點就是不能備份暫存資料表空間,甚至不能將他們置於備份模式。
SQL> alter tablespace temp begin backup;
alter tablespace temp begin backup
*
ERROR at line 1:
ORA-03217: invalid option for alter of TEMPORARY TABLESPACE
(4)備份參數檔案和口令檔案
對它們的備份不是必須的,但是為了方便的還原它們,最好還是備份了;
參數檔案,為了備份spfile,使用下面的命令產生個文字檔。
SQL> create pfile='initwilson.ora' from spfile;
如果動態參數檔案在某個時候受損,那麼在非載入模式下使用該命令重新建立它或者在關閉執行個體時也可以執行,、
Create spfile from pfile=’initwilson.ora’;
口令檔案,為了備份口令檔案,儲存用來建立它的命令的一個副本。如:
orapwd file=$ORACLE_HOME/dbs/orapwd<SID> password=oracle entries=5;
其中<SID>是執行個體名稱。如果口令檔案某個時刻被損壞,那麼簡單運行該指令碼來重新建立它。
續:Oracle—使用者管理的備份(二)