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,还原成功

最后记得

你可能感兴趣的:(Oracle)