ORACLE数据库备份入门:第三部分:4-数据库克隆(DUPLICATE)

克隆是将源数据库进行完整的拷贝,包括所有的数据文件、参数文件、控制文件和日志等,再利用这些数据创建一套新的数据库。克隆数据库的目的是什么?通常是用于创建Data Guard备库或搭建测试环境。以我个人的经验,想要实现相同的目的,完全是可以通过备份恢复的方式,因此也很少使用拷贝技术。这两种方式的区别在于:
克隆是从源数据库直接传输数据到目的数据库,操作流程更简单,但是对网络传输能力有要求,需要较低的延时。使用克隆技术创建的目标库,默认会产生新的DBID(创建standby库时可保持DBID不变),不再与源数据库有任何关联;
备份是从源数据库创建备份数据,再传输到目标数据,然后进行恢复。很显然,备份需要在源数据库和目标数据库同时消耗存储空间,用于临时存放备份数据,但是它对网络传输的要求不高,即使不稳定的网络也能完成备份数据的传输。通过备份数据创建的数据库,DBID与源数据库相同。如果需要修改DBID或DBNAME,通过调用NID命令实现。
具体选择什么样的技术,因时、因地制宜,只要能满足需求就是适合的,不必纠结。同样是使用备份数据,也可以选择使用恢复技术或拷贝技术创建目标数据库。

1. 辅助库(auxiliary)

辅助库是一个临时数据库,用于读取数据库数据,使用完成后可清除。在什么场景需要辅助库?例如单个表空间恢复、单表恢复场景。借助辅助库恢复整个数据库,再使用数据泵工具从辅助库中提取出表空间或单表,还原到原始或指定位置。恢复完成后删除辅助库。另外一个场景就是数据库克隆。
在进行数据克隆时,需要目标端启用了数据库的进程,作为数据的接收端。在目标端启用辅助库从源端接收数据,如果需要还可以进行再次编辑,创建一套完成的数据库所需的全部数据。在传输和编辑完成后,删除辅助库。
ORACLE数据库备份入门:第三部分:4-数据库克隆(DUPLICATE)_第1张图片

操作过程简介:
1) 在目标库创建临时的PFILE,内容只需要DB_NAME即可
2) 将辅助库启动到NOMOUNT状态
3) 在源端或目标端都可以操作,使用RMAN进行数据库克隆
4) RMAN执行脚本中可指定新的数据参数,或者保持与源库相同
5) 克隆完成后,删除辅助库相关信息

2. 克隆操作场景举例

2.1 对生产库进行克隆

1) 确保源端和目标端都配置了静态监听
2) 在目标端编辑参数文件,例如:

[oracle ~]$ cat /tmp/pfile.ora
db_name=test
[oracle ~]$ export ORACLE_SID=test

3) 启动辅助库

RMAN> startup nomount pfile='/tmp/pfile.ora';

4) RMAN连接方式

[oracle ~]$ rman target sys/password@source auxiliary sys/password@test

Source为生产端,test为目标端
5) 进行克隆

RMAN> run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate auxiliary channel a1 device type disk;
allocate auxiliary channel a2 device type disk;
duplicate target database to test from active database nofilenamecheck
spfile 
set db_name='test' 
set enable_pluggable_database='true'
set control_files='/u01/app/oracle/test/control01.ctl'
set db_create_file_dest='/u01/app/oracle/test';
}

如果保持与生产库相同,不需要设置spfile相关参数,但是要存储路径与生产相同。执行完成后,系统自动使用新生成SPFILE启动数据库,关将数据库置于OPEN状态。
6) 清除辅助库
数据库克隆完成后,辅助库已经自动被关闭,仅临时的PFILE痕迹需要清除。

2.2 使用备份数据进行克隆

如果生产环境不允许直接进行克隆,也可以通过利用生产数据库的备份数据作为源的方式进行克隆。RMAN脚本调整为:

[oracle ~]$ rman auxiliary sys/password@test
RMAN> run {
allocate auxiliary channel a1 device type disk;
allocate auxiliary channel a2 device type disk;
duplicate database dbtest to dbtest1 backup location '/tmp/bk' nofilenamecheck
spfile 
set db_name='test' 
set enable_pluggable_database='true'
set control_files='/u01/app/oracle/test/control01.ctl'
set db_create_file_dest='/u01/app/oracle/test';
}

/tmp/bk为备份数据存储的路径

2.3 创建Data Guard备库

在创建Data Guard环境的备库时,需要保持与生产端相同的DBID、DB_NAME和不同的DB_UNIQUE_NAME。RMAN脚本调整为:

[oracle ~]$ rman auxiliary sys/password@standby
RMAN> run {
allocate auxiliary channel a1 device type disk;
allocate auxiliary channel a2 device type disk;
duplicate database for standby backup location '/tmp/backup/' nofilenamecheck
spfile
set standby_file_management=auto
set db_name=primary
set db_unique_name=standby
}

你可能感兴趣的:(oracle,数据库,备份)