ITPub博客

首页 > Linux操作系统 > Linux操作系统 > RMAN异机恢复总结

RMAN异机恢复总结

原创 Linux操作系统 作者:xccheese 时间:2012-03-15 16:04:55 0 删除 编辑
一、RMAN的"rman: can't open target"错误
这是因为调用的是非Oracle的RMAN的缘故。
修正这个问题,我们只需要在Oracle用户的环境变量下,将$ORACLE_HOME/bin放在PATH变量前就可以了:
export PATH=$ORACLE_HOME/bin:$PATH:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin

二、RMAN恢复到异机的步骤
1、准备工作:
确认备份(含控制文件,数据文件,归档文件)有效(没归档应该也可以,只要能确认数据文件和控制文件是一致备份)。在目标服务器上创建与源服务器上一致的oracle目录结构,主要创建$ORACLE_BASE/admin/$ORACLE_SID/下的六个目录;$ORACLE_BASE/oradata下创建$ORACLE_SID目录;rman备份路径目录(这个地方必须要与源数据库一致,创建好后,把源数据库备份的数据文件复制到这个目录里);归档日志目录(同样,创建好后,把需要的归档日志文件复制到此目录)。
以下均在目标服务器上操作
2、连接到该sid
$export ORACLE_SID=cms
$rman target /
RMAN> set dbid 345935189
RMAN> startup nomount
3、从备份的控制文件恢复初始化参数文件
RMAN>restore spfile to pfile '/usr/oracle/product/10.2.0/dbs/initcms.ora' from '/usr/oracle/backup/ctl_c-345935189-20090609-00';
RMAN> startup force nomount pfile='/usr/oracle/product/10.2.0/dbs/initcms.ora';
4、恢复控制文件并进入到加载状态
RMAN> restore controlfile from '/usr/oracle/backup/ctl_c-345935189-20090609-00';
RMAN> alter database mount;
5、修复数据库(这里是源路径修复,如果你要恢复的文件地址与源库地址不同的话,需要通过SET NEWNAME FOR DATAFILE命令来为数据文件重新设定路径。)
RMAN> restore database;
6、恢复数据库
RMAN> recover database until time '2009-06-09 14:00:00'
7、通过open resetlogs方式打开数据库
RMAN> alter database open resetlogs;
测试,OK,到此使用RMAN异机恢复成功,剩下的就是其他简单的工作了。

三、ORA-01861: literal does not match format string
RMAN中使用recover database until time '2009-06-09 14:00:00'
命令进行基于时间点的恢复时报的一个错误。
这个错误是由于时间日期格式设置的问题,设置正确的时间格式:
$ export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'

四、ORA-06553: PLS-801: internal error [56319]错误
目标数据库恢复成功,登陆进去,一切正常。结果在执行最简单的sql查询的时候报这个错,执行多个不同的sql反复报这个错误,但sql语句可以正常执行。rapidsql等工具无法连接。
原因:源库是64位的OS,目标库是32位(9.36安装64位10g,5.186安装32位10g)
解决方法:
1、Shutdown immediate
2、startup migrate
注:startup migrate表示降级,在9i,无论升级/降级 数据库都是startup migrate;10g后增加了upgrade参数,升级可直接用startup upgrade,降级仍是startup migrate.
3、@$ORACLE_HOME/rdbms/admin/utlirp.sql;
4、Shutdown immediate
5、Startup
6、@$ORACLE_HOME/rdbms/admin/utlrp.sql;
7、Shutdown immediate
8、Startup

五、一个小技巧
SQL*Plus允许建立一个login.sql文件,每次启动SQL*Plus时都会执行这个脚本。另外,还允许设置一个环境变量SQLPATH,这样不论这个login.sql脚本具体在哪个目录中,SQL*Plus都能找到它。
login.sql内容可以根据自己的需要添加,下面是Thomas Kyte的例子:
define _editor=vi
set serveroutput on size 1000000
set trimspool on
set long 5000
set linesize 100
set pagesize 9999
column plan_plus_exp format a80
column global_name new_value gname
set termout off
define gname=idle
column global_name new_value gname
select lower(user) || '@' || substr( global_name, 1,decode( dot, 0, length(global_name), dot-1) ) global_name
from (select global_name, instr(global_name,'.') dot from global_name );
set sqlprompt '&gname> '
set termout on
一些sqlplus的设置,从define gname=idle这句以下,用于建立SQL*Plus提示符,sqlplus登录后的提示符形如:
sys@CMS>
很清楚的可以看到当前登录用户和实例名,在多实例的服务器上,相当好使,可以避免因忘记export ORACLE_SID= 引起的莫名的问题。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25148509/viewspace-718657/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-12-27

  • 博文量
    14
  • 访问量
    52032