通常我们配置DATA GUARD,都需要对主库进行备份,再把备份的备份集复制到备库端进行配置。但是当数据库非常大时,尤其是数据库采用ASM作为存储方案时,如果没有足够的空间用于存放备份集,这样显然就无法通过常规的方式来配置STANDBY。利用DBMS_FILE_TRANSFER则可以方便地将主库的数据文件直接传递至备库的ASM磁盘组,这样再也不需要使用中间存储存放备份文件。下面简单介绍一下通过DBMS_FILE_TRANSFER配置基于ASM存储方案的DATA GUARD和克隆数据库的方法。
一、在备用数据库端创建好ASM磁盘组和一个中间数据库。
首先必须要在备用数据库端配置好ASM实例,创建好ASM磁盘组,并且ASM磁盘组的名字最好是和主库一样的。当然,名字不一样也可以,那就需要一些额外的设置。另外由于DBMS_FILE_TRANSFER远程传输是基于DB LINK的,因此需要在备用库端创建一个中间数据库,这个中间数据库的主要作用便是用于DB LINK传输数据文件。假定我们创建的ASM磁盘组叫DATA,中间数据库名字叫transfer。
二、在备用库的中间数据库上创建一个到主库的DB LINK。做之前需要配置好到主库的TNS。
SQL>create database link lnk_pri connect to system identified by password using ‘primary’;
三、在主库端创建到数据文件目录的directory。
SQL> create or replace directory pri_dir as ‘+DATA/TEST/datafile’;
四、在备库端创建好备库的相应目录,比如bdump,udump等目录,另外在备库的ASM实例中创建备库的数据文件、控制文件等目录。
SQL> alter diskgroup DATA add directory ‘+DATA/TEST/’;
SQL> alter diskgroup DATA add directory ‘+DATA/TEST/DATAFILE’;
SQL> alter diskgroup DATA add directory ‘+DATA/TEST/CRONTROLFILE’;
SQL> alter diskgroup DATA add directory ‘+DATA/TEST/TEMPFILE’;
五、在备库的中间数据库上创建好两个DIRECTORY,用于存放传递过来的数据文件和控制文件。
SQL> create or replace directory stb_dir as ‘+DATA/TEST/datafile’;
SQL> create or replace directory stb_ctl_dir as ‘+DATA/TEST/controlfile’;
六、在中间数据库开始传输数据文件。
由于是在线配置STANDBY,在传输数据文件之前,必须先在主库把相应的表空间置于恢复模式,然后利用dbms_file_transfer进行数据文件的传输,最后再把相应的表空间置为正常状态:
SQL> conn sys/password@lnk_pri as sysdba
SQL> alter tablespace system begin backup;
SQL> conn /as sysdba
SQL>begin
dbms_file_transfer.get_file(
source_directory_object => ‘ pri_dir ‘,
source_file_name => ‘ system.286.650339101′,
destination_directory_object => ‘ stb_dir ‘,
destination_file_name => ‘ system01.dbf ‘,
source_database => ‘lnk_pri’);
end;
/
SQL> conn sys/password@lnk_pri as sysdba
SQL> alter tablespace system end backup;
这样依次对主库的每个数据文件进行处理传递后,主库上的数据文件都会传递至备库的ASM磁盘组上。
七、 传输备库的控制文件。
首先在主库端生成备库的控制文件:
SQL> alter database create standby controlfile as ‘+DATA/TEST/datafilefile/standby.ctl’;
如果是克隆数据库的话,那么生成一个普通备份控制文件即可:
SQL> alter database backup controlfile to ‘+DATA/TEST/datafilefile/standby.ctl’;
然后传输控制文件:
SQL>begin
dbms_file_transfer.get_file(
source_directory_object => ‘ pri_dir ‘,
source_file_name => ‘ standby.ctl’,
destination_directory_object => ‘ stb_ctl_dir ‘,
destination_file_name => ‘ control01.ctl ‘,
source_database => ‘lnk_pri’);
end;
/
八、 配置备用库。
首先配置好备库的参数文件,并且配置好主库和备库的TNS,接下就可以配置备用库了:
启动备库至mount状态
SQL > startup nomount
SQL > alter database mount standby database;
如果是配置克隆数据库的话,则直接将数据库MOUNT就行:
SQL > alter database mount;
执行RMAN的catalog命令,以使控制文件能够识别传输过来的数据文件:
RMAN> catalog start with ‘+DATA/TEST/DATAFILE’;
然后将这些数据文件转换为备库的数据文件:
RMAN >switch database to copy;
如果是配置DATA GUARD的话,则可以将备库置为恢复模式:
SQL > alter database recover managed standby database disconnect from session;
如果是配置克隆数据库的话,那么直接恢复数据库并打开:
SQL >recover database until cancel;
SQL >alter database open resetlogs;
这样DATA GUARD和克隆数据库就配置完成了。最后可以把中间操作创建的directory,DB LINK和中间数据库删除掉。