理解恢復目錄,RMAN能夠在沒有恢復目錄(NOCATALOG)下運行,這個時候備份信息保存在控制文件。保存在控制文件的備份信息是很危險的,若是控制文件的破壞將致使備份信息的丟失與恢復的失敗,並且,沒有恢復目錄,不少RMAN的命令將不被支持。因此對於重要的數據庫,建議建立恢復目錄,恢復目錄也是一個數據庫,只不過這個數據庫用來保存備份信息,一個恢復目錄能夠用來備份多個數據庫。 sql
1,建立RMAN目錄:數據庫
SQL> create tablespace rman_tablespace datafile 'G:\ORADATA\ORCL\RMANTBS1.DBF' size 50m
2,建立RMAN用戶:windows
SQL> create user rman 2 identified by rman 3 default tablespace rman_tablespace 4 temporary tablespace temp; 用戶已建立。
3,給RMAN用戶受權:安全
SQL> grant connect, resource, recovery_catalog_owner to rman; 受權成功。
4,打開rman管理器,鏈接數據庫服務器
C:\>rman 恢復管理器: Release 11.2.0.1.0 - Production on 星期五 10月 30 15:46:30 2015 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. RMAN> connect catalog rman/rman@ORCL 鏈接到恢復目錄數據庫
5,建立恢復目錄oracle
RMAN> create catalog tablespace rman_tablespace 恢復目錄已建立
6,註冊目標數據庫,恢復目錄建立成功後,就能夠註冊目標數據庫了,目標數據庫就是須要備份的數據庫,一個恢復目錄能夠註冊多個目標數據庫,註冊目標數據庫的命令爲:異步
quit退出RMAN管理器,執行:ide
C:\>rman target ben/oracle123@ORCL catalog rman/rman@ORCL; 恢復管理器: Release 11.2.0.1.0 - Production on 星期五 10月 30 16:02:32 2015 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 鏈接到目標數據庫: ORCL (DBID=1414372110) 鏈接到恢復目錄數據庫
--若是報下面這個錯誤,是權限不足的問題,【控制面板】-【管理工具】-【計算機管理】-【本地用戶和組】-【用戶】-找到當前登錄用戶-右鍵屬性-【隸屬於】標籤-【添加】-輸入ora_dba,-【檢查名稱】-一路【肯定】返回。從新執行上條命令。工具
RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-00554: 內部恢復管理器程序包初始化失敗 RMAN-04005: 目標數據庫中存在錯誤: ORA-01031: insufficient privileges
7,使用恢復目錄註冊數據庫性能
RMAN> register database; 註冊在恢復目錄中的數據庫 正在啓動所有恢復目錄的 resync 完成所有 resync
················································· 前期工做完成,下面就可使用rman命令備份數據庫了····································
------------------------------------------------------複製黏貼的分割線---------------------------------------------------
RMAN使用腳原本備份數據庫,如下是RMAN進行備份的幾個例子。
a.備份整個數據庫
backup full tag ‘basicdb’ format ‘/bak/oradata/full_%u_%s_%p’ database;
b.備份一個表空間
[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]backup tag ‘tsuser’ format ‘/bak/oradata/tsuser_%u_%s_%p’ tablespace users;
c.備份歸檔日誌
backup tag ‘alog’ format ‘/bak/archivebak/arcbak_%u_%s_%p’ archivelog all delete input;
ii.維護RMAN
RMAN的維護主要分爲幾個方面
一、[nbsp][nbsp][nbsp]查看RMAN的信息
[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]檢查現有備份[nbsp]檢查現有備份[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]RMAN>list backup
[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]列出過時備份[nbsp]列出過時備份[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]RMAN>report obsolete
[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]刪除過時的備份[nbsp]刪除過時的備份[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]RMAN>allocate channel for maintenance type disk;
[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]RMAN>changebackupsetiddelete;[nbsp]RMAN>changebackupsetiddelete;[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]RMAN>release channel;
二、[nbsp][nbsp][nbsp]同步或重置RMAN
若是目標數據庫物理對象發生了變化,如添加了一個數據文件,須要用以下命令同步:
RMAN>resync catalog;
若是目標數據庫reset了數據庫,須要用以下命令同步
RMAN>reset database;
當手工刪除了數據庫的歸檔文件後,要執行如下腳本同步
RMAN>allocate channel for maintenance type disk;
RMAN> change archivelog all crosscheck;
RMAN>release channel;
[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]當手工刪除了數據庫的RMAN備份後,要執行如下腳原本同步[nbsp]當手工刪除了數據庫的RMAN備份後,要執行如下腳原本同步[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]RMAN>allocate channel for maintenance type disk;
RMAN>crosscheck backup;
RMAN>delete expired backup;
RMAN>release channel;
4、定製恰當的備份策略
i.定製正確的策略
正確的備份策略不只能保證數據庫服務器的24*7的高性能的運行,還能保證備份與恢復的快速性與可靠性。咱們將以RMAN的多級增量備份做爲一個備份策略的例子來討論。採用多級備份就是爲了減小天天備份所須要的時間,而又保證系統有良好的恢復性。恢復時間與備份時間要有一個權衡。好比只要進行一個數據庫的全備份,而後就只備份歸檔也能夠保證能把數據庫恢復到最新的狀態,可是這樣的恢復時間將是不可容忍的。多級備份也正是 爲了解決這種問題,如下就是一個多級備份的例子:
每半年作一個數據庫的全備份(包括全部的數據和只讀表空間)
每個月作一次零級備份(不包含只讀表空間)
每一個星期作一次一級備份
天天作一次二級備份
任何數據庫的更改須要從新同步CATALOG目錄並從新備份(如添加數據文件)或從新備份(如修改表空間爲只讀)
每次備份後均可以備份歸檔日誌或按期備份歸檔日誌。
若是可能,能夠直接備份到磁帶上。
數據庫全備份的腳本
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup full tag ‘dbfull’ format ‘/u01/oradata/backup/full%u_%s_%p’ database
include current controlfile;
sql ‘alter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’
archivelog all delete input; #備份歸檔可選,能夠單獨按期備份
release channel c1;
release channel c2;
release channel c3;
}
零級備份的腳本
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 0 tag ‘db0’ format ‘/u01/oradata/backup/db0%u_%s_%p’
database skip readonly;
sql ‘alter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’
archivelog all delete input; #備份歸檔可選,能夠單獨按期備份
release channel c1;
release channel c2;
release channel c3;
}
同理,咱們能夠獲得一級備份,二級備份的腳本,如一級備份的腳本
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 1 tag ‘db1’ format ‘/u01/oradata/backup/db1%u_%s_%p’
database skip readonly;
sql ‘alter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’
archivelog all delete input; #備份歸檔可選,能夠單獨按期備份
release channel c1;
release channel c2;
release channel c3;
}
若是按照以上備份策略,則天天的所須要備份的數據量只有一天的改變量。而作恢復時最多要恢復當月的一個零級備份+三個一級備份+6個二級備份+當天的歸檔文件。若是不能接受這樣的恢復時間,能夠減小零級備份之間的時間間隔。
[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]在每次備份後,原則上在該備份點以前的歸檔日誌就能夠刪除掉了,可是爲了進一步的安全以及往後須要(如使用LOGMNR查找所需信息),建議有條件的話,歸檔日誌保存一年,能夠保存在磁帶等廉價存取設備上。
ii.與RMAN備份有關的優化
備份操做主要是完成如下三個步驟
一、從磁盤上讀取數據
二、在內存中處理數據塊
三、寫入數據到磁盤或磁帶
以上的讀寫操做能夠同步或異步的完成,在同步I/O操做中,一個時間只容許有一個IO操做,可是在異步I/O操做中,一個時間容許有多個IO操做。所以,備份與恢復的調優主要集中在如下幾個方面:
一、[nbsp][nbsp][nbsp]提升同步或異步I/O操做能力
在支持異步操做的操做系統上,能夠經過設置TAPE_AYSNCH_IO,DISK_ASYNCH_IO和BACKUP_TYPE_IO_SLAVES來支持異步操做,提升寫的能力。
二、[nbsp][nbsp][nbsp]提升磁盤讀能力
能夠在backup命令後經過設置DISKRATIO來保證從多個磁盤上讀取數據,保證連續的數據流。
三、[nbsp][nbsp][nbsp]正確設置緩衝區與參數值
設置LARGE_POOL_SIZE,使備份可使用連續的緩衝池,經過設置DB_FIL_DIRECT_IO_COUNT能夠提升緩衝區的利用。若是使用磁帶備份,還能夠設置BACKUP_TYPE_IO_SLAVES來提升磁帶的寫能力。
四、[nbsp][nbsp][nbsp]採用並行備份
開闢多個通道,能夠實現並行備份與恢復
iii.備份RMAN數據庫
RMAN本身的數據庫也須要備份,可是自己很小,並且不是常常發生變化,因此在每次RMAN備份完成後,均可以用以下腳本對RMAN數據庫備份。
EXP pafile =exprman.sql
exprman.sql爲
USERID=RMAN/RMAN
BUFFER=32768
OWNER=RMAN
FILE=RMAN.DMP
ROWS=Y
GRANTS=Y
COMPRESS=Y
CONSISTENT=Y
iv.使自動備份數據庫
自動備份數據庫不外乎如下三種方式
[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]WINDOWS下的任務計劃(At命令)
[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]UNIX下的Crontab
[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]第三方工具如Viritas
在以上三種方式中Viritas屬於第三方工具,不少人可能都沒有接觸,主要說一下windows的任務計劃與unix的cron
一、生成腳本文件,如backup.rcv
假定文件內容以下:
>cat backup.rcv connect target sys/password rcvcat rman/rman@localname; run{ allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’ archivelog all delete input; release channel c1; release channel c2; release channel c3; } [>cat backup.rcv connect target sys/password rcvcat rman/rman@localname; run{ allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’ archivelog all delete input; release channel c1; release channel c2; release channel c3; } [nbsp][nbsp]二、生成執行文件在windows上生成backuparchive.bat,內容包括rmancmdfile=backup.rcv在unix下生成backuparchive.sh,內容包括/oracle/ramn/rmancmdfile=backup.rcv三、加入調度在windows中用任務計劃嚮導便可,或使用at命令。在unix中,在目標機器上編寫一個文件,用以啓動自動備份進程。假定文件名爲ORACLE,文件將放在/var/spool/cron/crontabs目錄下nbsp]二、生成執行文件在windows上生成backuparchive.bat,內容包括rmancmdfile=backup.rcv在unix下生成backuparchive.sh,內容包括/oracle/ramn/rmancmdfile=backup.rcv三、加入調度在windows中用任務計劃嚮導便可,或使用at命令。在unix中,在目標機器上編寫一個文件,用以啓動自動備份進程。假定文件名爲ORACLE,文件將放在/var/spool/cron/crontabs目錄下>cat oracle
0 23 * * 0 backup_archive.sh
#表示星期天23點對數據庫備份
0 12,18 * * * backup_archive.sh
[nbsp][nbsp][nbsp][nbsp][nbsp][nbsp]#表示天天12點,18點備份 Crontab文件的每一行由六個域(minutes,hours,day of month,month,day of week,command)組成,域之間用空格或Tab分隔開來