rman 迁移数据到其他机器实际实验
用rman 跨机器迁移数据
先做好源数据的查询准备并记录结果,为后面迁移奠定基础
SQL> select dbid from v$database;
DBID
----------
1003169116
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\CONTROL01_WIND.CTL
E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\CONTROL02_WIND.CTL
E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\CONTROL03_WIND.CTL
select file_id, file_name from dba_data_files;
FILE_ID
----------
FILE_NAME
--------------------------------------------------------------------------------
1
E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\WINDSYSTEM01.DBF
2
E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\WINDSYSAUX01.DBF
3
E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\WINDUNDOTBS01.DBF
FILE_ID
----------
FILE_NAME
--------------------------------------------------------------------------------
4
E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\WINDBLOBS01.DBF
5
E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\WINDINDEX01.DBF
6
E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\WINDUSERS01.DBF
FILE_ID
----------
FILE_NAME
--------------------------------------------------------------------------------
7
E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\WINDWCAUDIT01.DBF
7 rows selected.
SQL> select * from v$logfile
2 ;
GROUP# STATUS TYPE
---------- ------- -------
MEMBER
--------------------------------------------------------------------------------
IS_
---
1 ONLINE
E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\WINDREDO01.LOG
NO
2 ONLINE
E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\WINDREDO02.LOG
NO
GROUP# STATUS TYPE
---------- ------- -------
MEMBER
--------------------------------------------------------------------------------
IS_
---
3 ONLINE
E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\WINDREDO03.LOG
NO
查询是否归档模式
select name, log_mode from v$database;
NAME LOG_MODE
--------- ------------
WIND NOARCHIVELOG
切换到归档模式
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
查询默认归档路径
ARCHIVE LOG LIST;
//另外备份和查看一下控制文件生成脚本,有助于恢复数据库
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS 'E:\oracle\rman\backup_trace.trc';
备份控制文件
备份数据文件
rman target /
run {
allocate channel ch1 type disk;
allocate channel ch2 type disk;
backup as compressed backupset database format 'E:\oracle\rman\2024121101\data\fulldb_%T_%U';
sql 'alter system archive log current'; 数据没有打开需要注释
backup as compressed backupset archivelog all format 'E:\oracle\rman\2024121101\data\arc_%T_%U' delete all input;
backup current controlfile format 'E:\oracle\rman\2024121101\data\con_%T_%U';
release channel ch2;
release channel ch1;
}
report obsolete;
crosscheck backup;
crosscheck archivelog all;
delete noprompt obsolete;
delete noprompt expired backup;
list backup summary;
另外可以参考
BACKUP DATABASE PLUS ARCHIVELOG FORMAT 'E:\oracle\rman\2024120901\%U'; 归档模式
列出备份的参数文件,如果没有,需要单独备份参数文件
LIST BACKUP OF SPFILE;
列出备份的控制文件
LIST BACKUP OF CONTROLFILE;
查询归档scn
LIST BACKUP OF ARCHIVELOG ALL;
查询备份集合
LIST BACKUP OF DATABASE;
备份参数文件
create pfile='E:\oracle\rman\2024121101\initwind.ora' from spfile
//将所有的备份文件迁移到目标机器上去
在新机器上创建数据库实例
oradim -new -sid WIND -startmode a
C:\Users\Administrator>set sid=wind
C:\Users\Administrator>rman target /
恢复管理器: Release 11.2.0.1.0 - Production on 星期三 12月 11 10:56:01 2024
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库 (未启动)
RMAN> startup nomount
启动失败: ORA-01078: failure in processing system parameters
LRM-00109: ???????????????? 'D:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\INITWIND.ORA'
在没有参数文件的情况下启动 Oracle 实例以检索 spfile
startup nomount 一定需要再rman工具中执行,在sqlplus中执行,下面的restore spfile命令无法执行
恢复参数文件
restore spfile to 'E:\oracle\rman\2024121101\pfile\spfile.ora' from 'E:\oracle\rman\2024121101\data\FULLDB_20241211_1H3CDHJS_1_1';
create pfile='E:\oracle\rman\2024121101\pfile\pfile.ora' from spfile='E:\oracle\rman\2024121101\pfile\spfile.ora';
create spfile from pfile ='E:\oracle\rman\2024121101\pfile\pfile.ora';
shu immediate
startup nomount;
rman target /
这一步不能忘记
set dbid 1003169116
恢复参数文件
restore controlfile from 'E:\ORACLE\RMAN\2024121102\DATA\CON_20241211_1K3CDHKC_1_1';
这一步不能忘记,否则会报错
archive log list
需改归档路径和源环境保持一致
alter system set log_archive_dest_1='location=E:\app\fff\product\11.2.0\dbhome_1\RDBMS'scope=spfile
如果没有这个路径需要创建这个路径 mkdir E:\app\fff\product\11.2.0\dbhome_1\RDBMS
archive log list
恢复数据库文件
catalog start with 'E:\ORACLE\RMAN\2024121101\DATA\';
RUN{
set newname for datafile 1 to 'E:\oracle\oradata\wind\WINDSYSTEM01.DBF';
set newname for datafile 2 to 'E:\oracle\oradata\wind\WINDSYSAUX01.DBF';
set newname for datafile 3 to 'E:\oracle\oradata\wind\WINDUNDOTBS01.DBF';
set newname for datafile 4 to 'E:\oracle\oradata\wind\WINDBLOBS01.DBF';
set newname for datafile 5 to 'E:\oracle\oradata\wind\WINDINDEX01.DBF';
set newname for datafile 6 to 'E:\oracle\oradata\wind\WINDUSERS01.DBF';
set newname for datafile 7 to 'E:\oracle\oradata\wind\WINDWCAUDIT01.DBF';
RESTORE DATABASE;
SWITCH DATAFILE ALL;
RECOVER DATABASE;
}
也可以参考
RUN {
allocate channel d1 type disk;
set until sequence 30 thread 1;
set newname for datafile 1 to 'E:\oracle\oradata\wind\WINDSYSTEM01.DBF';
set newname for datafile 2 to 'E:\oracle\oradata\wind\WINDSYSAUX01.DBF';
set newname for datafile 3 to 'E:\oracle\oradata\wind\WINDUNDOTBS01.DBF';
set newname for datafile 4 to 'E:\oracle\oradata\wind\WINDBLOBS01.DBF';
set newname for datafile 5 to 'E:\oracle\oradata\wind\WINDINDEX01.DBF';
set newname for datafile 6 to 'E:\oracle\oradata\wind\WINDUSERS01.DBF';
set newname for datafile 7 to 'E:\oracle\oradata\wind\WINDWCAUDIT01.DBF';
restore database;
switch datafile all;
recover database;
release channel d1;
}
修改重做日志路径,适应新的机器
alter database rename file 'E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\WINDREDO01.LOG' to 'E:\oracle\oradata\wind\REDO01.LOG';
alter database rename file 'E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\WINDREDO02.LOG' to 'E:\oracle\oradata\wind\REDO02.LOG';
alter database rename file 'E:\PTC\WINDCHILL_10.2\OCU\ORADATA\WIND\WINDREDO03.LOG' to 'E:\oracle\oradata\wind\REDO03.LOG';
// 打开数据库
alter database open resetlogs;
select * from wcadmin.wtdocument
下面是可能遇到异常和解决方法
如果发生这样错误,尝试下面的解决方法
发生报错ORA-06553: PLS-801: 内部错误 [56327]。尝试解决如下:
SQL>shutdown abort
SQL> startup upgrade
SQL> @?/rdbms/admin/utlirp
SQL> shutdown immediate
此时,又发生了报错ORA-12432: LBAC 错误: zllesesinit:OCIStmtExecute。继续尝试执行:
SQL>shutdown abort
SQL> startup upgrade
SQL> @?/rdbms/admin/utlrp
此后在此步骤一直卡住不动了,尝试开启了新的窗口,重新执行:
SQL> shutdown abort
SQL> startup migrate
SQL> @?/rdbms/admin/catnools.sql
此时数据库竟然没报错,再次使用以下命令后,数据库正常启动。
SQL> shutdown immediate
SQL> startup
SQL> select * from v$version where rownum<2;
如果需要手动生成控制文件
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS 'E:\oracle\rman\backup_trace.trc';
无法找到归档日志
归档日志线程=1 序列=160
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 12/11/2024 17:13:49 上) 失败
RMAN-06054: 介质恢复正在请求未知的线程 1 序列 160 的归档日志以及起始 SCN 3541079
如果报错无法找到归档日志
可以采用 方法 recover database until scn 3541079