Bo's Oracle Station

12
返回列表 发新帖
楼主: ry715

[求助]关于oracle跨平台RMAN恢复错误

[复制链接]

81

主题

181

帖子

781

积分

高级会员

Rank: 4

积分
781
发表于 2017-3-12 13:47:42 | 显示全部楼层
本帖最后由 lujiaguai 于 2017-3-12 14:16 编辑

如果数据库版本不一致,比如linux上的版本高,那么用dump比较省事,否则做完以后还要升级
除非唐老师说的dump出现额外的问题

其实建议,你还是要等唐老师的课,大概在传送表空间的那一堂课会有完整的说明和演示
因为这里还有一些大小码机的问题,和一些细节还需要完整听一次才能弄得懂
如果涉及到linux上还要把数据放入ASM,就不能用上面的办法。
还要在做转换一次,这又会涉及到文件系统到ASM的转换操作顺序,需要听ASM的最后一堂课
唐老师教的做法从逻辑上到实际操作,都是最简的,再此之前不建议去搜索和模仿江湖上的其他做法,容易误入歧途。
你听完课,再去搜索,发现一下子思路能清晰很多

如下是我的课后整理的笔记,缺2张v$transportable_platform的截图:
最后一部分是修改db_name和dbid的内容,可以不做



先查看v$transportable_platform表,查询支持的版本信息

select * fromv$transportable_platfor

Endian_format列中区分了跨平台迁移的处理器版本区别,分为大码机与小码机


注意:跨平台迁移只能发生在小码与小码,大码与大码之间,不可以跨大小码迁移




ADMcpu标识为X86 6-bit  INTELcpu标识为IA 64-bit


本例从windows IA 64-bit迁移至linux IA 64-bit操作的时候注意不要选错。




可以做以下查询匹配,看看可以对应哪些平台的迁移


SQL> select d.platform_name"Source", t.platform_name "Compatible Targets",endian_format


    from v$transportable_platform t, v$database d


    where t.endian_format = (select endian_format


    from v$transportable_platform t, v$database d


    where d.platform_name = t.platform_name);




windows上的源数据库处于只读状态


SQL> shutdown immediate;


SQL> startup mount


SQL> alter database open read only;




rman下,进行convert转换操作,注意这里'Linux IA (64-bit)'的格式不能错。


建议直接从select * fromv$transportable_platform;中复制出来。


RMAN> convert database to platform 'Linux IA (64-bit)' format'c:\data\newland\%


U.dbf';


启动 conversion at source 06-7 -16


使用目标数据库控制文件替代恢复目录


分配的通道: ORA_DISK_1


通道 ORA_DISK_1: SID=8 设备类型=DISK


在数据库中找到目录 SYS.ORACLECLRDIR


在数据库中找到目录 SYS.XMLDIR


在数据库中找到目录 SYS.DATA_PUMP_DIR


在数据库中找到目录 SYS.ORACLE_OCM_CONFIG_DIR


在口令文件中找到用户 SYS (具有 SYSDBA and SYSOPER 权限)


通道 ORA_DISK_1: 启动数据文件转换


输入数据文件: 文件号=00003 名称=C:\APP\ADMINISTRATOR\ORADATA\NEWLAND\UNDOTBS01.D


BF


已转换的数据文件 =C:\DATA\NEWLAND\DATA_D-NEWLAND_I-2996260363_TS-UNDOTBS1_FNO-3


_01RA0RLU.DBF


通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:15


通道 ORA_DISK_1: 启动数据文件转换


输入数据文件: 文件号=00001 名称=C:\APP\ADMINISTRATOR\ORADATA\NEWLAND\SYSTEM01.DB


F


已转换的数据文件 =C:\DATA\NEWLAND\DATA_D-NEWLAND_I-2996260363_TS-SYSTEM_FNO-1_0


2RA0RMD.DBF


通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:07


通道 ORA_DISK_1: 启动数据文件转换


输入数据文件: 文件号=00002 名称=C:\APP\ADMINISTRATOR\ORADATA\NEWLAND\SYSAUX01.DB


F


已转换的数据文件 =C:\DATA\NEWLAND\DATA_D-NEWLAND_I-2996260363_TS-SYSAUX_FNO-2_0


3RA0RMK.DBF


通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:07


通道 ORA_DISK_1: 启动数据文件转换


输入数据文件: 文件号=00004 名称=C:\APP\ADMINISTRATOR\ORADATA\NEWLAND\USERS01.DBF


已转换的数据文件 = C:\DATA\NEWLAND\DATA_D-NEWLAND_I-2996260363_TS-USERS_FNO-4_04


RA0RMR.DBF


通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:01


编辑 init.ora 文件 C:\DATA\NEWLAND\INIT_00RA0RLU_1_0.DBF.ORA。此 PFILE 将用于在


目标平台上创建数据库据


要重新编译所有 PL/SQL 模块, 请在目标平台上运行 utlirp.sql utlrp.sql


要更改内部数据库标识符, 请使用 DBNEWID 实用程序


完成 conversion at source 06-7 -16


完成后,源数据库可以read write,不再需要了。


SQL> shutdown immediate;


SQL> startup;




此时在路径c:\data\newland下,可见数据文件(dbf)及参数文件(init),但还缺少控制文件的trace脚本,可在c:\app\oracle(administrator)\diag\rdbms\newland\newland\trace下查找(*ora_*.trc)。


建议查找是按照时间排序,时间对应c:\data\newland下各数据文件生成的时间。


找到后将其复制到c:\data\newland文件夹下。






复制整个c:\data\newland目录到linux下(/u01/app/oracle/oradta


确认或者修改文件夹权限,注意大小写!


chown –R oracleinstall newland




为了方便记忆,重命名转换的数据文件


[oracle@station79 trace]$ ls/u01/app/oracle/oradata/newland


DATA_D-NEWLAND_I-2996260363_TS-SYSAUX_FNO-2_03RA0RMK.DBF   


DATA_D-NEWLAND_I-2996260363_TS-USERS_FNO-4_04RA0RMR.DBF


DATA_D-NEWLAND_I-2996260363_TS-SYSTEM_FNO-1_02RA0RMD.DBF  


DATA_D-NEWLAND_I-2996260363_TS-UNDOTBS1_FNO-3_01RA0RLU.DBF    INIT_00RA0RLU_1_0.DBF.ORA


newland_ora_2604.trc




[oracle@station79 trace]$ mvDATA_D-NEWLAND_I-2996260363_TS-SYSAUX_FNO-2_03RA0RMK.DBF sysaux.dbf


[oracle@station79 trace]$ cd/u01/app/oracle/oradata/newland                                    


[oracle@station79 newland]$ mv DATA_D-NEWLAND_I-2996260363_TS-SYSAUX_FNO-2_03RA0RMK.DBFsysaux.dbf


[oracle@station79 newland]$ mvDATA_D-NEWLAND_I-2996260363_TS-USERS_FNO-4_04RA0RMR.DBF users.dbf  


[oracle@station79 newland]$ mvDATA_D-NEWLAND_I-2996260363_TS-SYSTEM_FNO-1_02RA0RMD.DBF system.dbf


[oracle@station79 newland]$ mvDATA_D-NEWLAND_I-2996260363_TS-UNDOTBS1_FNO-3_01RA0RLU.DBF undotbs1.dbf




把控制文件脚本和参数文件移动出去,控制文件随意,参数文件去$ORACLE_HOME/dbs


[oracle@station79 newland]$ ls


INIT_00RA0RLU_1_0.DBF.ORA  newland_ora_2604.trc  sysaux.dbf system.dbf  undotbs1.dbf  users.dbf


[oracle@station79 newland]$ mv newland_ora_2604.trc/home/oracle/newland.sql


[oracle@station79 newland]$ mv INIT_00RA0RLU_1_0.DBF.ORA/u01/app/oracle/product/11.2.0/dbhome_1/dbs/init_newland.ora


[oracle@station79 newland]$ ls


sysaux.dbf  system.dbf undotbs1.dbf  users.dbf




编辑控制文件脚本:修改日志文件路径,大小,块大小(不是4K盘不用改);修改数据文件路径;字符集不能改;其余内容可以全部删除,后面手动配置即可。


注意保留resetlogs的一段即可:


CREATE CONTROLFILE REUSE SET DATABASE "newland"RESETLOGS  ARCHIVELOG


    MAXLOGFILES 16


    MAXLOGMEMBERS 3


    MAXDATAFILES 100


    MAXINSTANCES 8


    MAXLOGHISTORY 292


LOGFILE


  GROUP 1 '/u01/app/oracle/oradata/newland/redo01.log'  SIZE 50M BLOCKSIZE 512,


  GROUP 2 '/u01/app/oracle/oradata/newland/redo02.log'  SIZE 50MBLOCKSIZE 512,


  GROUP 3 '/u01/app/oracle/oradata/newland/redo03.log'  SIZE 50MBLOCKSIZE 512


DATAFILE


'/u01/app/oracle/oradata/newland/system.dbf',


'/u01/app/oracle/oradata/newland/sysaux.dbf',


'/u01/app/oracle/oradata/newland/users.dbf',


'/u01/app/oracle/oradata/newland/undutbs1.dbf'


CHARACTER SET ZHS16GBK


;




修改参数文件内容,主要的条目不能少即可:


[oracle@station79 dbs]$ cd/u01/app/oracle/product/11.2.0/dbhome_1/dbs


[oracle@station79 dbs]$ ls


hc_DBUA0.dat  init_newland.ora  initorcl.ora orapworcl      peshm_orcl_0


hc_orcl.dat   init.ora          lkORCL        peshm_DBUA0_0  snapcf_orcl.f


[oracle@station79 dbs]$ cp init_newland.orainitnewland.ora


[oracle@station79 dbs]$ vim initnewland.ora


control_files='/u01/app/oracle/oradata/newland/control01.ctl'


db_name='newland'


memory_target=2G


db_block_size=8192         


db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'  


db_recovery_file_dest_size=4G


undo_tablespace='UNDOTBS1'      


undo_management=auto            


undo_retention=900               


open_cursors=300      


processes=150


audit_file_dest='/u01/app/oracle/admin/newland/adump'




创建密码文件(orapwdnewland),位于/u01/app/oracle/product/11.2.0/dbhome_1/dbs


[oracle@station79 dbs]$ cd/u01/app/oracle/product/11.2.0/dbhome_1/dbs


[oracle@station79 dbs]$ ls


hc_DBUA0.dat  init_newland.ora  initorcl.ora orapworcl      peshm_orcl_0


hc_orcl.dat   init.ora          lkORCL        peshm_DBUA0_0  snapcf_orcl.f


[oracle@station79 dbs]$ orapwd file=orapwdnewlandpassword=oracle_4U entries=10;


[oracle@station79 dbs]$ ls


hc_DBUA0.dat    hc_orcl.dat       initnewland.ora  initorcl.ora lkORCL         orapworcl      peshm_newland_0  snapcf_orcl.f


hc_newland.dat  init_newland.ora  init.ora         lkNEWLAND    orapwdnewland  peshm_DBUA0_0 peshm_orcl_0




添加数据库sid及路径


[oracle@station79 ~]$ vim /etc/oratab


+ASM:/u01/app/oracle/product/11.2.0/grid:N


orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N         newland:/u01/app/oracle/product/11.2.0/dbhome_1:N


参数文件修改后,数据库可以到nomount状态


[oracle@station79 ~]$ ls


Desktop     oradiag_oracle      newland.sql  


[oracle@station79 ~]$ . oraenv


ORACLE_SID = [newland]?


The Oracle base forORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle


[oracle@station79 ~]$ sqlplus /nolog


SQL> conn / as sysdba


Connected.


SQL> startup nomount


Total System Global Area 2042241024 bytes


Fixed Size                  1337548 bytes


Variable Size            1124075316 bytes


Database Buffers          905969664 bytes


Redo Buffers               10858496 bytes


生成spfile文件


SQL> create spfile from pfile;


File created.


执行控制文件脚本


SQL> @newland.sql


Control file created.


启动数据库,重印日志,由于是正常关机下导出的数据,所以不需要recover


SQL> alter database open resetlogs;


Database altered.


最后记得添加临时表空间


SQL> alter tablespace temp add tempfile'/u01/app/oracle/oradata/newland/temp01.dbf' size 20m autoextend on;


Tablespace altered.


其余配置,可根据需要陆续自行补上即可。




此时还有一些遗留问题,会有一些对象在新的数据库上无效,虽然实际不产生不影响


先无效掉对象,再编译有效,先关闭数据库


SQL> shutdown immediate


SQL> startup upgrade


SQL> @?/rdbms/utlrp.sql


SQL> shutdown immediate


SQL> startup




修改几个参数,改大以后适应下面的大批量编译工作,加快速度


SQL> alter system set processes=1500scope=spfile;


SQL> alter system setparallel_max_servers=120;


SQL> alter system setjob_queue_processes=1000;






SQL> desc dba_objects


Name                                     Null?    Type


------------------------------------------------- ----------------------------


OWNER                                             VARCHAR2(30)


OBJECT_NAME                                       VARCHAR2(128)


SUBOBJECT_NAME                                    VARCHAR2(30)


OBJECT_ID                                          NUMBER


DATA_OBJECT_ID                                     NUMBER


OBJECT_TYPE                                       VARCHAR2(19)


CREATED                                           DATE


LAST_DDL_TIME                                      DATE


TIMESTAMP                                         VARCHAR2(19)


STATUS                                            VARCHAR2(7)


TEMPORARY                                         VARCHAR2(1)


GENERATED                                          VARCHAR2(1)


SECONDARY                                         VARCHAR2(1)


NAMESPACE                                         NUMBER


EDITION_NAME                                      VARCHAR2(30)




SQL> select OWNER,OBJECT_NAME,STATUSfrom dba_objects where status <> 'valid';




最后可以修改数据库名字


Show parameter db_name


Show parameter instance_name


Select *  from  v$version


Select dbid from v$database


数据库要处于mount的状态


Shutdown immediate


Shutdown mount


Nid  可见命令参数


仅仅该名字用setname


如果名字和dbid一起改就用dbname


[oracle@station76 stage]$ nid


DBNEWID: Release 11.2.0.1.0 - Production onTue Jul 12 09:49:33 2016


Copyright (c) 1982, 2009, Oracle and/or itsaffiliates.  All rights reserved.




Keyword    Description                   (Default)


----------------------------------------------------


TARGET     Username/Password             (NONE)


DBNAME     New database name             (NONE)


LOGFILE    Output Log                    (NONE)


REVERT     Revert failed change           NO


SETNAME    Set a new database name only   NO


APPEND     Append to output log           NO


HELP       Displays these messages        NO




[oracle@station76]$ nidTARGET=sys/oracle_4U DBNAME=nl


提示确认修改控制文件,日志文件


修改以后数据库自动到nomount状态,或者shutdown


Startup报错,参数文件不识别db_name


此时 show parameter db_name 可见依然依然是旧的名称


Alter system set db_name=nl scope=spfile


Shutdown immediate


Startup 提示需要resetlog,因为重写了日志


回复 支持 反对

使用道具 举报

9

主题

40

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
 楼主| 发表于 2017-3-12 14:29:45 | 显示全部楼层
lujiaguai 发表于 2017-3-12 13:47
如果数据库版本不一致,比如linux上的版本高,那么用dump比较省事,否则做完以后还要升级
除非唐老师说的d ...

感谢兄台的耐心分享,其实我也很想听完老师的课再去做,可是时间不等人,我也只能自己先摸索了,或者同事之间相互讨论,那有了你的这个帖子,我相信应该会好一些的,再次感谢啦。
回复 支持 反对

使用道具 举报

9

主题

40

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
 楼主| 发表于 2017-3-12 15:04:47 | 显示全部楼层
lujiaguai 发表于 2017-3-12 13:47
如果数据库版本不一致,比如linux上的版本高,那么用dump比较省事,否则做完以后还要升级
除非唐老师说的d ...

"ADM的cpu标识为X86 6-bit  INTEL的cpu标识为IA 64-bit"

这个地方确定没有写反?
回复 支持 反对

使用道具 举报

9

主题

40

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
 楼主| 发表于 2017-3-12 16:23:22 | 显示全部楼层
ry715 发表于 2017-3-12 14:29
感谢兄台的耐心分享,其实我也很想听完老师的课再去做,可是时间不等人,我也只能自己先摸索了,或者同事 ...

我还想问一个问题,最后open前,我能不能把这段时间生成的归档日志拷贝过来,然后应用一下,再open,尽量减少差异的数据,这个不知道你做过没,是否可行。
回复 支持 反对

使用道具 举报

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2017-3-13 10:27:33 | 显示全部楼层
ry715 发表于 2017-3-12 12:43
老师,如果我的windows和linux的os都是64位,数据库版本一致的话,我是不是可以支持通过winscp之类的工具 ...

windows和linux的os即使都是64位的,整个控制文件,整个日志文件和数据文件的头都是不一样的。所以,以上三点不同导致不能直接拷贝。
回复 支持 反对

使用道具 举报

81

主题

181

帖子

781

积分

高级会员

Rank: 4

积分
781
发表于 2017-3-13 11:29:43 | 显示全部楼层
本帖最后由 lujiaguai 于 2017-3-13 13:22 编辑
ry715 发表于 2017-3-12 16:23
我还想问一个问题,最后open前,我能不能把这段时间生成的归档日志拷贝过来,然后应用一下,再open,尽量 ...

如果要没有差异,只能用data guard
把windows 做成备库,两边数据才能完全一致
然后备库转主库,前端应用AP再把连接指过来

如果不考虑data guard,要减少差异也不是用你说的应用归档的方式
首先要明确一点,没有data guard的情况下,停机一段时间做迁移是必然的,损失部分数据是必然的
问题是停多久,损失多少数据
read only后再去rman下做convert转换,此时转换出来的数据文件,就是read only关库前检查点时间的,这部分内容估计很快就会上课讲到。
后面再照着顺序做,库不是非常大的话,只要控制文件没有写错,一个晚上肯定做完
回复 支持 反对

使用道具 举报

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2017-3-13 11:34:17 | 显示全部楼层
lujiaguai 发表于 2017-3-13 11:29
如果要没有差异,只能用data guard
把windows 做成备库,两边数据才能完全一致
然后备库转主库,前端应 ...

Dataguard他做不了。Dataguard不容许两边操作系统不一致。
回复 支持 反对

使用道具 举报

81

主题

181

帖子

781

积分

高级会员

Rank: 4

积分
781
发表于 2017-3-13 13:31:03 | 显示全部楼层
botang 发表于 2017-3-13 11:34
Dataguard他做不了。Dataguard不容许两边操作系统不一致。

11G好像可以,但没做过
linux上需要Patch 13104881
这个肯定还是以唐老师说的为准

如果不用dataguard,归档日志可以异地恢复吗?
控制文件重建了,scn,sequence可能已经不是原来那个样子了
如果原来有catalog,可以认识吗?这块原以为懂了,其实还是很模糊,还需要好好回炉一次~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Bo's Oracle Station   

GMT+8, 2024-5-4 05:12 , Processed in 0.040918 second(s), 21 queries .

快速回复 返回顶部 返回列表