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 ( ...
随机推荐
- c# 封装Dapper操作类
using Dapper; using DapperExtensions; using System.Collections.Generic; using System.Configuration; ...
- c# 对html字符串进行编码
/// <summary> /// 对html字符串进行编码 /// </summary> /// <param name="html">htm ...
- 【mysql】service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误
service MySQL start出错,mysql启动不了,解决mysql: unrecognized service错误的方法如下: [root@ctohome.com ~]# service ...
- Manjaro使用笔记-使用中国源的方法
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错!生成可用中国镜像站列表: sudo pacman-mirrors -i -c China -m rank 勾选弹窗里面的所有源刷新 ...
- BZOJ3413: 匹配(后缀自动机 线段树合并)
题意 题目链接 Sol 神仙题Orz 后缀自动机 + 线段树合并... 首先可以转化一下模型(想不到qwq):问题可以转化为统计\(B\)中每个前缀在\(A\)中出现的次数.(画一画就出来了) 然后直 ...
- 洛谷P2572 [SCOI2010]序列操作(ODT)
题解 题意 题目链接 Sol ODT板子题..... // luogu-judger-enable-o2 #include<bits/stdc++.h> #define LL long l ...
- MySQL 性能优化--优化数据库结构之优化数据大小
MySQL性能优化--优化数据库结构之优化数据大小 By:授客 QQ:1033553122 尽量减少表占用的磁盘空间.通常,执行查询期间处理表数据时,小表占用更少的内存. 表列 l 尽可能使 ...
- Android Stuido代码混淆
一.Android Studio 代码混淆基本配置首先我们要在build.gradle里设置 miifyEnabled 里改为true,表示可以混淆 proguardFiles getDefaultP ...
- Five Android layouts
线性布局: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:an ...
- Fragment 中 ListView绑定ContextMenu
package com.example.administrator.imbobo.controller.fragment; import android.content.BroadcastReceiv ...