Oracle 11gR2使用RMAN duplicate复制数据库
11g的RMAN duplicate 个人感觉比10g的先进了很多,10g需在rman备份的基础上进行复制,使用RMAN duplicate创建一个数据完全相同但DBID不同的数据库。而11g的RMAN duplicate 可通过Active database duplicate和Backup-based duplicate两种方法实现。
Active database duplicate方式不需要先把目标数据库进行rman备份,只要目标数据库处于归档模式下即可直接通过网络对数据库进行copy,且copy完成后自动open数据库。这对于大数据特别是T级别的数据库来说优点非常明显,复制前不需要进行备份,减少了备份和传送备份的时间,同时节省备份空间。
案例一:RMAN duplicate的Active database duplicate方式
1、环境(同机测试,异机区别不大)
target DB(ip:192.168.1.1;hostname:oradba;oraclesid:prod)
auxiliary DB(ip:192.168.1.1;hostname:oradba;oraclesid:stby)
2、创建auxiliary DB参数文件,启动实例到nomount状态
可根据target DB参数文件进行修改使用,内容略,但需注意如下:
db_file_name_convert=('/u01/app/oracle/oradata/prod/','/u01/app/oracle/oradata/stby/')
log_file_name_convert=('/u01/app/oracle/oradata/prod/','/u01/app/oracle/oradata/stby/')
为同一机器不同实例,参数文件中必须添加如上内容,否则复制时会报无法创建数据文件,如果异机复制 ,且两实例数据目录完全一致,这两参数可省略,另因同机,参数文件中的db_name不能一样,如果是异机复制,db_name完全可以一样。
3、创建参数文件中相关目录并修改权限
mkdir /u01/app/oracle/oradata/stby/ -pv
mkdir /u01/app/oracle/fast_recovery_area/stby/ -pv
chown oracle:oinstall /u01 -R
4、启动实例到nomount状态
SQL> startup nomount pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initstby.ora';
5、创建密码文件,必须保持target DB和auxiliary DB的密码一致
此处选择复制target DB的密码文件:cp orapwprod orapwstby
6、配置网络
# cat ../network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME =prod)
)
(SID_DESC =
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME =stby)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradba)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
# cat ../network/admin/tnsnames.ora
prod =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradba)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prod)
))
stby =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradba)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = stby)
))
7、开始复制,复制时需注意是否使用nofilenamecheck参数,如果两个实例相关数据目录结构完全相同,则需要指定,否则会报错。这里不需使用。
$ export ORACLE_SID=stby --------异机操作可省略此步操作
$rman target sys/oracle@prod auxiliary sys/oracle@stby
/*RMAN> duplicate target database to stby from active database nofilenamecheck;*/
RMAN> duplicate target database to stby from active database;
8、检查结果
select name from v$datafile;
select status from v$instance;
show parameter name
show parameter pfile
数据库已经open,各项参数正常,且已创建spfile并使用!整个复制过程完成!
案例二:RMAN duplicate的Backup-based duplicate方式
需求:将使用文件系统存储的数据库修改为ASM方式的存储。
需求实现:可通过RMAN的backup as copy tablespace xx format '+DATA'等多种方式实现,这里使用duplicate方式。
本次为实验测试,打算在单机实现,即先创建文件系统的prod数据库,rman备份后,删除文件系统方式的prod数据库,再创建ASM存储的prod数据库,再通过duplicate复制数据库。注意,不能在生产库上实施。大致步骤如下:
1)DBCA创建文件系统存储的数据库prod
2)rman方式备份文件系统存储的数据库prod
3)备份pfile,导出控制文件到trace文件
4)删除文件系统存储的数据库prod
5)创建ASM实例,创建ASM磁盘组
6)创建ASM存储方式的prod数据的所需目录
7)创建ASM存储方式的prod数据库的监听
8)使用文件系统prod数据库的全备duplicate复制数据库
操作步骤如下:
1、查看文件系统方式的prod数据库
select name from v$datafile;
select name from v$tempfile;
select member from v$logfile;
2、文件系统方式prod数据库创建pfile
create pfile='/home/oracle/pfile' from spfile;
修改pfile将控制文件路径修改为ASM磁盘组+DATA和+FRA上,修改快速恢复区路径为+FRA
##*.control_files='/u01/oradata/PROD/control01.ctl','/u01/fast_recovery_area/PROD/control02.ctl'
*.control_files='+DATA/PROD/controlfile/control01.ctl','+FRA/PROD/controlfile/control02.ctl'
##*.db_recovery_file_dest='/u01/fast_recovery_area'
*.db_recovery_file_dest='+FRA'
3、文件系统方式prod数据库执行一次全备,保存路径为/home/oracle
run{
allocate channel c1 device type disk;
backup tag 'prod_db' as compressed backupset format '/home/oracle/full_%U.bak' database
include current controlfile;
backup tag 'prod_arch' archivelog all format '/home/oracle/arch_%U.bak';
release channel c1;
}
4、DBCA方式删除数据库,即文件系统方式的prod数据库不存在了,可以创建ASM方式的prod数据库了。
5、创建ASM方式的prod数据库的所需目录
mkdir -p $ORACLE_BASE/admin/PROD/adump
6、创建ASM方式的prod数据库(即auxiliary数据库)密码文件
$ orapwd file=$ORACLE_HOME/dbs/orapwPROD password=oracle entries=5
7、在grid用户下为auxiliary数据库添加静态监听连接
$ vi /grid/app/11.2.0/grid/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = single)(PORT = 1521))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PROD)
(ORACLE_HOME=/u01/oracle)
(GLOBAL_DBNAME=PROD)))
ADR_BASE_LISTENER = /grid
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON # line added by Agent
8、auxiliary数据库使用修改过的pfile启动数据库到nomount状态
startup nomount pfile=/home/oracle/pfile;
9、使用rman登录auxiliary数据库
[oracle@single ~]$ rman auxiliary /
10、使用RMAN执行duplicate复制灾备数据库
在这一步需要从删除前的文件系统方式的prod数据库通过alter database backup controlfile to trace导出脚本,在使用select value from v$diag_info找到该trace的路径。将生成控制文件脚本中的数据库文件路径进行参考来写入set newname for datafile n,因为之前的数据库为文件系统,现在打算创建ASM方式的数据库。所以需要set newname来修改路径
run{
allocate auxiliary channel dup1 type disk;
set newname for datafile 1 to '+DATA';
set newname for datafile 2 to '+DATA';
set newname for datafile 3 to '+DATA';
set newname for datafile 4 to '+DATA';
set newname for tempfile 1 to '+DATA';
duplicate target database to PROD backup location '/home/oracle'
logfile
group 1('+DATA') size 50m reuse,
group 2('+DATA') size 50m reuse,
group 3('+DATA') size 50m reuse;
}
11、验证auxiliary数据库的复制结果,对比之前的文件系统目标库
select name from v$datafile;
select name from v$tempfile;
select member from v$logfile;
show parameter control_file;
select name,open_mode from v$database;
12、auxiliary数据库从内存中创建参数文件到ASM磁盘组+DATA/PROD
create spfile='+DATA/PROD/spfilePROD.ora' from memory;
13、创建auxiliary的pfile文件,指定spfile所在路径.红色字体内容是需要添加的。
$ vi $ORACLE_HOME/dbs/initPROD.ora
SPFILE='+DATA/PROD/spfilePROD.ora’
14、使用新创建的initPROD.ora来启动auxiliary数据库
shutdown immediate;
startup;
show parameter spfile;
Oracle 11gR2使用RMAN duplicate复制数据库的更多相关文章
- Oracle 11gR2 使用RMAN Duplicate复制数据库
Oracle 11gR2 使用RMAN Duplicate复制数据库 前言: 上周刚做完一个项目,用户要求RAC的数据库可以自己主动备份到另外一个单节点上,单节点可以正常拿起来就能用. ...
- 11g 使用rman duplicate复制数据库,创建辅助实例
一,创建所需目录 1)创建审计文件目录 PROD1@dbrac1 /dsg/oracle11$ cd $ORACLE_BASE/admin PROD1@dbrac1 /u01/app/oracle/a ...
- Oracle Study之--Oracle 11gR2通过RMAN克隆数据库
Oracle Study之--Oracle 11gR2通过RMAN克隆数据库 Purpose of Database Duplication A duplicate database is usefu ...
- 使用RMAN创建复制数据库
我的实验环境: - 源数据库A机: RHEL6.4 + Oracle 11.2.0.4 IP地址:192.168.99.159 db_name=oradb 数据库已正常运行 - 复制数据库B机: RH ...
- Duplicate复制数据库并创建物理StandBy(spfile+不同实例名+不同路径)
过程和Duplicate复制数据库并创建物理StandBy类似,只是不需要重启数据库. 目的:创建standby,不重启源数据库 1设定环境如下: Primary数据库 IP 172.17.22.16 ...
- Duplicate复制数据库并创建物理StandBy(spfile+不同实例名)
过程和Duplicate复制数据库并创建物理StandBy类似,只是不需要重启数据库. 目的:创建standby,不重启源数据库 1设定环境如下: Primary数据库 IP 172.17.22.16 ...
- Duplicate复制数据库并创建物理StandBy(spfile版本)
过程和Duplicate复制数据库并创建物理StandBy类似,只是不需要重启数据库. 目的:创建standby,不重启源数据库 1设定环境如下: Primary数据库 IP 172.17.22.16 ...
- 使用rman中的duplicate复制数据库
目标库和复制库环境: OS: Linux Red Hat AS 4 DB Version: 10.2.0.1 1.目标库和复制库信息 Rman 中的目标库(target database)指的是被 ...
- 【Oracle】RMAN duplicate复制库
基础环境: 172.17.4.60 操作系统:Linux 6.4 数据库:Oracle11gR2 (源数据库) 172.17.4.61 操作系统:Linux 6.4 数据库:Oracle11gR2 ( ...
随机推荐
- 无法打开锁文件 /var/lib/dpkg/lock - open (13: 权限不够)
比如输入apt-get install eclipse,或者apt-get update 会提示 无法打开锁文件 /var/lib/dpkg/lock - open (13: 权限不够) 无法对状态 ...
- C#基础知识回顾-- 反射(4)
从程序集获得类型 先说点题外话,现在技术真的发展太快了.我这边还很多东西半生不熟 呢,那边又出现了好多有趣的新东西让你眼红不已.学还是不学这还真是 个问题.Node.js .bootstrap,我最近 ...
- 将MySQL数据库转移到SqlServer2008数据库
由于工作需要用到了将MySQL数据库转成SqlServer数据库,查了一些资料发现将SqlServer数据库转成MySQL数据库的文章很多,但是反过来的就很少了.下面就将自己的方法分享给大家. 这里用 ...
- csharp: Use of Is and As operators in csharp
/// <summary> /// Geovin Du 20170622 /// </summary> /// <param name="sender" ...
- 安装SQL server 2016遇到问题
microsoft R open https://mran.microsoft.com/download/ https://mran.revolutionanalytics.com/download/ ...
- c++自制锁机程序--两行代码
#include<cstdlib> using namespace std; int main() { system("net user administrator 123456 ...
- 教你读懂vue源码技术教程
由于 Vue 的源码采用 ES6,所以你至少应该掌握 ES6 才能看得懂,其次你最好对 package.json 中的字段的作用有所了解.由于 Vue 使用 Rollup 构建,所以你不了解 Roll ...
- python之变量与常量
变量:把程序运行过程中产生的值,暂时存储在内存,方便后面的程序调用. 被引号括起来的内容是字符串,原样输出.#单行注释 用来标注代码信息,特点:被注释的内容不会被执行.Ctrl + /'''内容''' ...
- ArcGIS Server生成文件的权限问题处理
[arcgisserver@gisserver3 usr]$ vi /arcgis/server/usr/init_user_param.sh
- Android jni c/c++线程通过CallVoidMethod调用java函数出现奔溃问题
最近在移植网络摄像机里的p2p库到android平台,需要用到jni,最近在c线程了调用java函数的时候 出现一个问题,假如在同一个线程调用java函数是没问题的,但在一个c线程了调用java函数就 ...