非归档模式下rman的备份
测试数据库机器即将报废。迁移数据库到新的机器上。
oracle cannot backup or copy active file in NOARCHIVELOG mode
测试数据库NOARCHIVELOG情况下进行数据迁移。
首先将数据库启动到 startup mount 模式;
rman 删除备份记录
RMAN> list backup;
RMAN> delete backupset 1
需要备份三个东东
备份spfile
备份数据库
备份control
RMAN>backup spfile tag='spfile' format='/home/oracle/backup/ORCL_spfile_%U_%T';';
RMAN>backup Database format='/home/oracle/backup/orcl_%U_%T' ;
RMAN>backup current controlfile tag='bak_ctlfile' format='/home/oracle/backup/ctl_file_%U_%T
scp 到新机器
新机器要安装数据库,创建实例。
实例最好和原来的数据库实例一致,如果不一致,有点小麻烦。
修改实例;
[oracle@localhost dbs]$ vi pfile_tmp.ora
db_name=orcl
startup nomount pfile='/data/oracle/product/11.2.0/db_1/dbs/pfile_tmp.ora';
恢复阶段先将数据库切换到startup nomount
恢复 控制文件
RMAN> restore controlfile from '/home/oracle/backup/ctl_file_0hvv8g6g_1_1_20210519';
RMAN> sql 'alter database mount’;
RMAN> restore database;
RMAN> recover database;
RMAN> sql 'alter database open resetlogs';
大功告成。
两个知识点。
1.catalog start with 这个工具非常好用
在我这个样例中,备份文件路径在新旧机器上是相同的。如果不同需要处理,同时也可以切换数据文件路径
RMAN> startup nomount;
RMAN> restore controlfile from '/data01/testdb_CF_c-3148051840-20110813-00'; # 从控制文件备份集恢复控制文件
RMAN> sql 'alter database mount’;
RMAN>catalog start with '/data01/'; (一定要用“/”结尾,不然找不到真实的路径)
RMAN>run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
set newname for datafile '+DATA/icare/datafile/system.309.717426483' to '/backup/supt/suptdata/system.309.717426483';
set newname for datafile '+DATA/icare/datafile/apps_undots1.283.717426031' to '/backup/supt/suptdata/apps_undots1.283.717426031';
set newname for datafile '+DATA/icare/datafile/apps_ts_tx_data.273.717426033' to '/backup/supt/suptdata/apps_ts_tx_data.273.717426033';
set newname for datafile '+DATA/icare/onlinelog/group_16.265.743248917' to '/data02/supt/suptdata/group_16.265.743248917';
restore database force;
switch datafile all;}
2. CONFIGURE CONTROLFILE AUTOBACKUP ON;
在我这个迁移中AUTOBACKUP off,即在备份集中没有备份控制文件。
简单活动处理是先 backup Database 再backup current controlfile。
这样是因为在控制文件中就有此次备份的相关信息了。便于恢复。