ORACLE RMAN迁移
1.进入RMAN
rman target /
2.关闭目标数据库
shutdown immediate
3.创建原始参数文件 任意路径均可, 下面会用到
*.audit_file_dest='C:\app\Administrator\admin\orcl\adump' *.audit_trail='db' *.compatible='11.2.0.4.0' *.control_files='C:\app\Administrator\oradata\orcl\control01.ctl','C:\app\Administrator\oradata\orcl\control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='orcl' *.diagnostic_dest='C:\app\Administrator' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.log_archive_dest_1='LOCATION=C:\app\arch' *.memory_target=1234173952 *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.undo_tablespace='UNDOTBS1'
注意与数据库安装路径相对应, 可以参照当前数据库的"ORACLE_HOME\admin\orcl\pfile\init.ora.xxxx"和备份的SPFILE进行编写
4.加载参数文件
startup nomount pfile="参数文件"
5.加载控制文件
restore controlfile from "控制文件备份文件";
6.挂载数据库
alter database mount;
7.将备份集信息重新导入到当前控制文件中
rman target /
catalog start with "/OracleBackup/";
可能会报下面错误:
RMAN-12010: 自动通道分配初始化失败
RMAN-06189: 当前 DBID 1010101010 与目标装载数据库 (3030303030) 不匹配
需要重新设置DBID
shutdown immediate
set dbid=3030303030 (备份数据库的DBID)
exit
重新打开数据库mount状态
> startup nomount pfile="C:\initparam\pfile.ora"
> alter database mount;
> catalog start with "C:\OracleBackup\";
8.检查备份
crosscheck backup;
9.转储数据文件
run{ allocate channel a1 type disk; allocate channel a2 type disk; set newname for datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF' to 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF'; set newname for datafile "E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF" to "C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF"; set newname for datafile "E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF" to "C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF"; set newname for datafile "E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF" to "C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF"; set newname for datafile "E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF" to "C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF"; restore database; switch datafile all; release channel a1; release channel a2; }
或者可以使用一条命令进行整个库的修改,替换红色字体
set newname for database to '/oradata/orapuabis/%b';
switch datafile all;
10. 恢复recover
export ORACLE_BASE=/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1
export ORACLE_SID=orapuabis
export PATH=$ORACLE_HOME/bin:$PATH
rman target / log /backup/log/rman_arch_20191206.log append<<EOF
run{
allocate channel cha1 type disk;
allocate channel cha2 type disk;
recover database;
release channel cha1;
release channel cha2;
}
exit;
EOF
此出可能会遇到无法找到归档文件的情况
请先进行将归档文件恢复
catalog start with '归档文件备份目录'
--------以下是恢复到指定时间------------
> sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''"; > recover database until time '2018-12-26 11:00:00';
11.打开数据库
打开数据库可能会出现无法打开的情况
alter database open resetlogs;
出现下列报错,由于redolog文件没有进行修改
alter database open resetlogs * 第 1 行出现错误:
ORA-00344: 无法重新创建联机日志 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG'
ORA-27040: 文件创建错误, 无法创建文件
OSD-04002: 无法打开文件 O/S-Error: (OS 3) 系统找不到指定的路径。
select * from v$logfile;
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG' to 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG' to 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG' to 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG';
查看日志文件状态
SQL> select group#,bytes/1024/1024||'M',status from v$log; GROUP# BYTES/1024/1024||'M' STATUS ---------- ----------------------------------------- ---------------- 1 50M CLEARING_CURRENT 3 50M CLEARING 2 50M CLEARING
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1;
数据库已更改。
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 2;
数据库已更改。
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 3;
数据库已更改。
SQL> alter database open resetlogs;
alter database open resetlogs * 第 1 行出现错误:
ORA-00392: 日志 1 (用于线程 1) 正被清除, 不允许操作
ORA-00312: 联机日志 1 线程 1: 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG'
报控制文件可能比较老等情况
处理方法如下:打开隐藏函数
SQL> alter system set "_allow_resetlogs_corruption" = true scope=spfile;
SQL> recover database until cancel using backup controlfile;
SQL> alter database open resetlogs;
启动数据库成功 关闭隐藏函数
SQL>alter system set "_allow_resetlogs_corruption" = false scope=spfile;
startup 数据库就OK了

浙公网安备 33010602011771号