rman備份與還原

項目有如下需求,通過遠程服務器安裝的oracle client調用rman 進行全庫的backup,最好能進行熱備份。因爲硬盤空間不足,不希望開啓歸檔模式。

順便吐嘈下,rman真的很不好用,太複雜了。

最後發現不開啓歸檔模式下進行熱備是不行的。

只能妥協,由於我們是開發數據庫,所以短暫停機(1分鐘內)是可以接受的。所以決定採用腳本(Script)進行冷備份。

RMAN> create script full_backup {
2> shutdown immediate;
3> startup mount;
4> allocate channel c1 type disk;
5> backup as compressed backupset database format '/home/oracle/RMAN_BACKUP/%d_%s_%p.bak';
6> alter database open;
7> }


RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of create script command at 09/17/2014 13:12:07
RMAN-06002: command not allowed when not connected to a recovery catalog


建立腳本的時候,發生以上錯誤。這是因爲如果不通過catalog進行備份的話,repository會使用controll file,缺點是不能存儲腳本信息。

不得以先建立catalog數據庫。

1.首先,創建RMAN用戶並授權

SQL> create user rman identified by rman default tablespace users quota unlimited on users;

SQL> grant recovery_catalog_owner to rman;

2.通過rman連接catalog,並創建恢復目錄

[oracle@EBOM01 bin]$ ./rman catalog rman/rman@orcit2


RMAN> create catalog

3.註冊數據庫

[oracle@EBOM01 bin]$ ./rman target XXX/XXX@orcit2 catalog rman/rman@orcit2

RMAN> register database;

4.創建腳本

create script full_backup {
shutdown immediate;
startup mount;
allocate channel c1 type disk;
backup as compressed backupset database format '/home/oracle/RMAN_BACKUP/%d_%s_%p.bak';
alter database open;
}

5.運行腳本

RMAN> run {execute script full_backup;}


database closed
database dismounted
Oracle instance shut down


RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03015: error occurred in stored script full_backup
RMAN-03002: failure of startup command at 09/17/2014 14:15:30
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor


發現數據庫能關不能開。。。

網上一查,是使用動態的問題,當數據庫關閉後,PMON進程終止了,自然就不能連接了。要改成靜態監聽(oracle真難用)

記住這個是針對服務器的修改不是客戶端。

SID_LIST_LISTENER =  
(SID_LIST =    
(SID_DESC =      
(SID_NAME = PLSExtProc)      
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(PROGRAM = extproc)
)
(SID_DESC = 
(SID_NAME = XXXX)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/client) 
(GLOBAL_DBNAME=HJD.COM.CN)  
)  
)

再次試驗,這次報錯不是在Startup上,而是在連接catalog上,由於catalog和目標數據庫放在一個庫上,所以關閉目標數據庫時,自然catalog也不能用了。

好吧,只能分開到兩個庫上,這也是標準作法。

取消註冊,然後在另一個庫重建catalog

RMAN> unregister database;


再次實行後,一切OK。

再寫個shell,以方便jenkins遠程調用。

ORACLE=/u01/app/oracle/product/11.2.0/client
$ORACLE/bin/rman target XXX/XXX@orcit2 catalog rman/rman@orcit1 script 'full_backup'

執行下,一切OK。


再試下還原,記住是還原不是恢復。還原只能還原到備份的時點,恢復是利用歸檔日誌和redo日誌恢復到任意一個時點

首先要先關閉數據庫,直接還原的話會報錯,估計是有人連在數據庫上的時候沒法還原。



RMAN> shutdown immediate

啓動到掛載模式,執行還原

RMAN> startup mount

RMAN> restore database;

RMAN>  recover database;

RMAN> alter database open resetlogs;

一切OK,還原成功

最後記得

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章