用戶管理的備份(一)
一.首先要知道數據庫中表空間和文件的信息,有幾個性能視圖,v$datafile,v$tablespace,v$tempfile,v$logfile,v$controlfile,dba_tablespaces,dba_data_files可以用它們來查看錶空間或者文件的位置和名字,其中dba_data_files可以查看到每個數據文件屬於哪個表空間。
對於查看每個數據文件屬於哪個表空間也可以用$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>是實例名稱。如果口令文件某個時刻被損壞,那麼簡單運行該腳本來重新創建它。