复制数据库两种方式 第一种 把备份集复制到目标数据库
sqlplus sys/oracle@erps as sysdba
rman target sys/oracle@erp auxiliary sys/oracle@erps
duplicate target database for standby from active database;
2、在源库生成一个备份,并复制到目标机器。rman target /
RMAN> backup database include current controlfile format '/full/full_%d_%s_%T_%p.bak';
备份成功后,最后会还会备份控制文件,控制文件也需要COPY到目标机器。
Starting Control File and SPFILE Autobackup at 04-JUN-21
piece handle=/u01/app/oracle/fra/ORCL/autobackup/2021_06_04/o1_mf_s_1074316419_jcmvtwog_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 04-JUN-21
---最新说明,控制文件的备份可以不用单独复制到目标机器。因为上面的语句(include current controlfile),实际上备份已经包含了控制文件了。
备份归档日志
RMAN> BACKUP ARCHIVELOG ALL FORMAT '/full/arch/ar_%t_%s_%p'
scp /full/full_ORCL_* 192.168.56.111:/home/oracle/bak
scp /full/arch/ar* 192.168.56.111:/home/oracle/bak
rman auxiliary /
duplicate database to newdb backup location '/home/oracle/bak' nofilenamecheck;
RMAN的恢复过程解释:
第1步,先恢复控制文件,如下可以看到是从全量备份里面提取出来的
contents of Memory Script:
{
restore clone primary controlfile from '/home/oracle/bak/full_ORCL_206_20210604_1.bak';
}
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:00
output file name=/u01/app/oracle/oradata/NEWDB/control01.ctl
第2步,恢复表空间(即数据文件)
contents of Memory Script:
{
set until scn 3887310;
set newname for datafile 1 to
"/u01/app/oracle/oradata/NEWDB//system01.dbf";
set newname for datafile 3 to
"/u01/app/oracle/oradata/NEWDB//sysaux01.dbf";
set newname for datafile 4 to
"/u01/app/oracle/oradata/NEWDB//undotbs01.dbf";
set newname for datafile 7 to
"/u01/app/oracle/oradata/NEWDB//users01.dbf";
restore
clone database
;
}
第3步,就是所谓media recovery了。即通过归档日志进行数据推进。
starting media recovery
channel ORA_AUX_DISK_1: starting archived log restore to default destination
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=85
channel ORA_AUX_DISK_1: reading from backup piece /home/oracle/bak/ar_1074378119_210_1
channel ORA_AUX_DISK_1: piece handle=/home/oracle/bak/ar_1074378119_210_1 tag=TAG20210604T222155
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:09
archived log file name=/u01/app/oracle/oradata/NEWDB/arch/1_85_1073900400.dbf thread=1 sequence=85
channel clone_default: deleting archived log(s)
archived log file name=/u01/app/oracle/oradata/NEWDB/arch/1_85_1073900400.dbf RECID=1 STAMP=1074380003
最后成功会显示
database opened
Cannot remove created server parameter file
Finished Duplicate Db at 04-JUN-21
6)检查目标库,及后续工作
RMAN复制完后,会自动OPEN目标库。此时,你可以用sqlplus重新连接。
[oracle@oracle19c-toclone admin]$ sqlplus / as sysdba
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL> select count(*) from hr.employees;
COUNT(*)
----------
107
6.2)最后,你可以在目标库手动删除pfile里面的convert行。再用pfile启动。
启动完后(create spfile from memory),生成spfile。
下次正常启动,你就不再需要pfile了。
总结,归档日志开启与不开启对于ORACLE数据库的影响与不同?
先问题自己几个问题。
1)什么是REDO日志,它的作用是什么?为何REDO至少需要2个日志组?
2)为何需要归档日志?
3)为何未开启归档,只能是MOUNT方式下进行全量备份?
而开启了归档,就可以在OPEN状态下备份?
4)为何RMAN duplicate恢复时,一定需要归档日志?
redo是进行数据库恢复所用的(异常掉电,可以用redo恢复)。
但是REDO是一个循环使用的,也即随时时间的推移,前面的数据可能被覆盖。
简单来说两个文件可以在一个写满后,写下一个,再直接TRUNCATE第一个文件。
归档日志在REDO未被覆盖前,进行保存,这样你就相当于有了所有的REDO日志。
现实情况数据库只要服务在,会一直有业务数据更新。
没有归档,数据一致性无法保证。所以MOUNT下(应用无法连接),可保证数据一致性。
有了归档,虽然备份数据文件开始后,还会一直有数据更新。
但archive log可以在备份完成后,再应用重做,从而实现一个一致性的数据备份。
这也是为何RMAN duplicate恢复时,一定需要归档日志的原因了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析