Oracle 11.2.0.1升级到11.2.0.4并做rman备份异机恢复

14 篇文章 0 订阅
4 篇文章 0 订阅

下载好数据库升级包,想去Oracle官网下载的,提示没有授权
只能在csdn找付费的了,9块1个,下载了前2个。
注意,总共有7个包,如果Oracle是安装在linux服务器,且无图形界面管理的
只需要第一,第二个包即可(即使博主说必须下载7个,其实也是2个就可以了)

unzip p13390677_112040_Linux-x86-64_1of7.zip
unzip p13390677_112040_Linux-x86-64_2of7.zip

unzip 命令解压后,如下图
在这里插入图片描述

直接cd database ,执行下面的命令安装数据库:

./runInstaller -silent -debug -force -ignorePrereq DECLINE_SECURITY_UPDATES=true oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/home/oracle/11.2.0.4/oraInventory ORACLE_HOME=/data/oracle/product/11.2.0.4 ORACLE_BASE=/data/oracle/new/ oracle.install.db.InstallEdition=EE oracle.install.db.DBA_GROUP=dba oracle.install.db.OPER_GROUP=oracle

这里ORACLE_HOME设置为:/data/oracle/product/11.2.0.4,原来的目录为/data/oracle/product/11.2.0.1

软件升级之后
同步旧库的oradata文件过来(根据实际情况拷贝数据文件),dbs里面的ora文件同步过来

rsync -avl /data/oracle/product/11.2.0.4/oradata/* /data/oracle/product/11.2.0.1/oradata/
rsync -avl /data/oracle/product/11.2.0.4/dbs/* /data/oracle/product/11.2.0.1/dbs/

如果11.2.0.4里面没有oradata目录,新建一个即可

重启一下进程,然后启动数据库:

lsnrctl stop
lsnrctl start

在这里插入图片描述

启动数据库

sqlplus / as sysdba
startup upgrade;

看看数据库是否能正常启动,可以正常启动后

去源库查看undo参数:show parameter undo;
如果我们的库和源库这个参数不一致,恢复后启动会报错,找不到undo文件的

启动数据库到MOUNT; 这个状态设置undo相关参数

shutdown abort;
startup mount;
CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE '/data/oracle/product/11.2.0.4/db_1/oradata/UNDOTBS1.DBF' SIZE 100M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED; 
alter system set undo_tablespace='UNDOTBS1';
alter system set db_recovery_file_dest_size=12G;
COMMIT;
alter database open;
create pfile='/data/oracle/pfile_0630.ora' from spfile;
shutdown abort;

我们这里当前库是UNDOTBS01,源库是UNDOTBS1,所以要把当前库的设置一下,根源库一样才行
这里顺便设置了db_recovery_file_dest_size,show parameter db_recovery_file查看这个的值,原来是2G,太小了,第一次做的时候报错是这个内存不足,所以这里给设置成了12G,免除后患
保存一个ora文件后,关闭数据库。
保存的.ora文件,里面的值必须改为升级后的数据库版本,compatible=‘11.2.0.4.0’(必须改,否则恢复后会提示control文件版本不兼容)

下面开始恢复数据库:

rman target /
startup nomount pfile=/data/oracle/pfile_0630.ora;
restore controlfile from '/data/oracle/tdata_2024-05-30/c-24543xxxxxxx';
alter database mount;

用我们保存后修改过的.ora文件启动,启动数据库到nomount模式
恢复控制文件
启动数据库到mount模式
如果上面的操作都没报错,继续RMAN操作:

catalog start with '/data/oracle/tdata_2024-05-30/';
run{
allocate channel c1 device type disk;
set newname for database to '/data/oracle/product/11.2.0.4/db_1/oradata/%b';
restore database;
switch datafile all;
switch tempfile all;
release channel c1;
}

/data/oracle/tdata_2024-05-30/是我们从源库拷贝过来的rman备份文件
包括了控制文件、数据文件、归档日志这些
在这里插入图片描述
/data/oracle/product/11.2.0.4/db_1/oradata/%b
这里是我们要恢复的数据保存的目标路径,
%b 指定的文件名从目录路径中剥离,只获取数据文件名称.
执行run命令后,可以用这个语句SQL查看进度

SELECT 
(select sysdate from dual) as systime,
SID,
       SERIAL#,
       CONTEXT,
       SOFAR,
       TOTALWORK,
       ROUND(SOFAR / TOTALWORK * 100, 2) "%_COMPLETE"
  FROM gV$SESSION_LONGOPS
WHERE OPNAME LIKE 'RMAN%' AND OPNAME NOT LIKE '%aggregate%' AND
       TOTALWORK != 0 AND SOFAR <> TOTALWORK
       order by 7 desc;

上面的命令跑完之后,恢复数据库

recover database;

这里会有一个报错,可以这样处理,也有说不处理也没关系的
在这里插入图片描述
(最后验证的时候,指定到某个时间点的话,有些表的数据行数跟源库不一致,根这个报错有关系吗?还没确定是业务导致的还是这个报错导致的)
然后用resetlogs参数打开数据库

alter database open resetlogs;

恢复完成。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值