EMC 存储两块盘亮黄灯,数据库为oracle

灾备机房巡检,偶然发现EMC 存储两块盘亮黄灯,经过层层交流,确定是电子病历历史库,ip  *.*.17.0



经过讨论,业务说偶尔登录上去查看一下历史数据

DBA登录系统查看  select status from v$instance;  为open状态



经过讨论,等业务确认是哪些表需要导出,等了一周左右没有捋清楚,又换一个方案,全库恢复到另外一个机器。




--------


环境检查


*.*.17.0:windows 2008 R2      32G内存    数据库文件分布   D盘,F盘   oracle  11.2.0.4

目标    *.*.10.14   windows   2008 R2     32G内存      仅有E盘,C盘        oracle  11.2.0.1


方案一  exp /expdp  imp/impdp都可以   涉及版本,高版本可以导入到低版本,rman 无法实现

方案二    .*.17.0   rman 备份,异机恢复   .*.10.14( .*.10.14先升级到11.2.0.4


备份脚本.


run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup as compressed backupset
database  fileperset  3

format 'E:\orabak\full_level0_%d_%T_%s_%p' database

sql 'alter system archive log current';

s ql 'alter system archive log current';

s ql 'alter system archive log current';

crosscheck archivelog all;

delete noprompt expired archivelog all;

backup  archivelog format 'E :\orabak\full_archi_%d_%T_%s_%p' delete input;
backup current controlfile format ' E :\orabak\control_%d_%T_%s_p%';
backup spfile format=' E :\orabak\spfile_%d_%T_%s_p%';
release channel c1;
release channel c2;
release channel c3;
crosscheck backup;

delete noprompt obsolete;

delete noprompt expired backup;

}



二   备份+升级

执行备份开始

rman target /


.*.10.14开始升级


由于 .*.10.14是虚拟化平台的虚拟机,硬盘和内存,cpu都可以调整增加,升级前系统管理员说打一个快照


(快照是恢复windows所有数据,包含C,D,E盘等


2.1  快照结束,大概10分钟


2.2  升级oracle

     找到升级包

  database

  p13390677_112040_MSWIN-x86_1of7.zip

 p13390677_112040_MSWIN-x86_2of7.zip 

  升级参照以下博客

yhttps://blog.csdn.net/bjywxc/article/details/103764077


其中,解压两个安装包后,忘了把 p13390677_112040_MSWIN-x86_2of7内容合到


安装过程中出现以下错误


解决:参照 https://blog.csdn.net/singit/article/details/70832723



注  linux 升级包解压,自动到一个文件,这个就是linux和windows的小区别




-----

三   oracle 异机恢复

升级完成....,验证原来数据,没有问题


设置* .*.17.0.备份目录的网络共享,在 *.*.10.14拷贝备份数据


恢复分三个步骤


1  恢复参数文件   

2  回复控制文件    nomount阶段

3 恢复数据文件    mount阶段



3.1   rman 恢复参数文件没有直接从源库copy方便

* .*.17.0 .   show parameter  spfile,确定是spfile启动后


  源库创建pfile文件


create  pfile=‘D:\pfile1212.txt’ from spfile;


copy 到目标库 *.*.10.14,修改参数文件(内存大小,controlfile路径,归档路径,NLS_*, audit_file-dest等主要惨),启动


set  ORACLE_SID=jhmr


sqlplus  / as sysdba

报错:ORA-12560  


无论怎么调试都不行,注册表修改ORACLE_SID 为jhmr,重启,关闭原来的实例都不行

请教两个高手朋友也么有办法,windows实在不友好,linux么有这个问题


灵机一动,dbca 新建一个库,就15分钟左右的事情,只用新建库的参数文件,修改一下


果然凑效,能到nomount   



3.2   恢复控制文件也顺利



rman  target  /


set  dbid=********(   dbid 从源库查询的  desc  v$database有dbid 列)



restore controlfile from   'E:\orabak\ctl_*******';



3.3  恢复数据文件

启动到mount阶段, 注册备份片


alter database mount;

catalog start with  'E:\orabak\';


恢复前  根据v$datafile  ,v$tempfile,v$logfile;在目标系统创建对应目录,或者使用alter 命令修改为新位置

由于源库数据文件在D F盘,目标仅有E盘,而且数据文件99个,使用sql 批量修改



alter database rename file 'D:\ORAGLE\ORADATA\TEMPG1.DEF’ tO 'E:\ORADATA\TEMPB1.DEF'

....


select "alter database rename file '''||name||''' to '''||name''';',from v$datafile

                          

-————————————————

spool /path/setnewnamedf.lst

select 'set newname for datafile ' || file# || ' to ''' ||replace( name,'/old/data/path','/new/data/path' ) || ''';' from v$datafile;

spool off




restore 恢复  经过一夜,早上上班过来一看,一堆报错,如下


幡然醒悟,可能是 * .*.17.0 .磁盘出现问题,数据库虽然可以打开,但是备份的文件在怀的磁盘上,rman备份也没有用户




冷静下来,想想方案出了问题





最终确定    exp或者expdp远程导出


目前在原服务器读没有问题,写入就不确定,只能远程exp/expdp 备份(rman不支持远程备份)


-----再次沟通,仅有一个用户数据导出就可以了



导出前查看用户所属表空间大小

①确认用户所属表空间


desc user_tables

select tablespace_name from user_tables


② 查看用户表空间总大小

select sum(bytes)/1024/1024 from dba_data_files where tablespace_name='AAAA'


第一次  exp 导出没有加任何参数花费20小时没有导出完成


65670 MB


选择空间



目标机器建立单独数据库实例,用户 ,表空间,设置修改redo 组大小 256MB

dbca   字符集和源库一样  查询源库字符集






修改exp参数

exp 加参数优化    direct=y  recordlength=65535   buffer=65536


exp  emr11/****@jhemaa170  file=emr111.dmp   directory=y    recordlength=65535   buffer=65536  owner=emr11

log=exp1218.log



--1个小时完成



导入


先导入表,再导入索引

imp  emr11/****  file=emr111.dmp   feedback=10000    commit=y   buffer=4096000  ignore=y owner=emr11

rows=y  indexes=n  log=imp1218.log



imp  emr11/****  file=emr111.dmp   feedback=10000    commit=y   buffer=4096000  ignore=y owner=emr11

rows=y  indexes=n  log=imp1218_2.log


大概1个半小时。



















  






请使用浏览器的分享功能分享到微信等