Oracle11g新特性:Active Database Duplicate

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

利用Rman的duplicate命令,可以很方便的将原库复制出一个新库,这在诸如data guard等应用中非常有用。但是在Oracle11g之前,执行duplicate要求首先对原库用rman进行备份,然后将备份复制到复制库,同时连接原库(做为target)和复制库(做为auxiliary),执行duplicate命令进行复制。在Oracle11g中推出的active database duplicate特性,则省略了进行rman备份的步骤,能够直接从原库复制出新库,对于一些大型的数据库来说,这个特性可以节省很多操作时间。本文将简单的演示一下操作过程(在同一个主机上执行duplicate):

 

原库:ora11g(归档模式)

新库:oradup

操作系统:windows

 

一、首先手工创建新的instance

包括windows服务,dump路径,初始化参数文件,password文件,监听配置等等,这些步骤就不赘述了。理论上,初始化参数最少只需要指定db_name一个参数就可以了。当然,简单起见,最好还是设置如下参数:

 

DB_NAME=ORADUP

CONTROL_FILES=(‘F:\ORACLE\ORADATA\ORADUP\CONTROL01.CTL’,

‘F:\ORACLE\ORADATA\ORADUP\CONTROL02.CTL’)

DB_FILE_NAME_CONVERT=(‘F:\ORACLE\ORADATA\ORA11G’,'F:\ORACLE\ORADATA\ORADUP’)

LOG_FILE_NAME_CONVERT=(‘F:\ORACLE\ORADATA\ORA11G’,'F:\ORACLE\ORADATA\ORADUP’)

log_archive_dest_1=F:\ORACLE\ARCH\ORADUP

compatible=11.1.0

 

经过试验,必须加入compatible=11.1.0的参数,如果不加,默认是compatible=11.0.0,那么rman duplicate最后在创建控制文件的时候会报错:

 

RMAN-03002: Duplicate Db 命令 (在 10/23/2007 22:43:40 上) 失败

RMAN-06136: 来自辅助数据库的 ORACLE 错误: ORA-01503: CREATE CONTROLFILE 失败

ORA-01130: 数据库文件版本 11.1.0.0.0 与 ORACLE 版本 11.0.0.0.0 不兼容

ORA-01110: 数据文件 1: ‘F:\ORACLE\ORADATA\ORADUP\SYSTEM01.DBF’

 

这个应该算是一个bug吧,11.0.0应该是beta版的版本号

加入log_archive_dest_1参数,则是因为最后需要复制原库的归档日志到备库,如果两个库都没有设置归档路径,那么都会放在默认的$ORACLE_HOME\rdbms目录下,就会发生冲突。当然,如果原库和新库在不同的主机上,则只需要db_name和compatible就足够了。

二、将oradup启动到nomount状态

C:\>set oracle_sid=oradup

C:\>sqlplus /nolog

SQL*Plus: Release 11.1.0.6.0 - Production on 星期二 10月 23 21:43:18 2007

Copyright (c) 1982, 2007, Oracle. All rights reserved.

SQL> conn / as sysdba

已连接到空闲例程。

SQL> startup nomount

ORACLE 例程已经启动。

三、启动rman,同时连接原库和新库

C:\>rman target sys/pass@ora11g auxiliary sys/pass@oradup

恢复管理器: Release 11.1.0.6.0 - Production on 星期二 10月 23 23:01:04 2007

Copyright (c) 1982, 2007, Oracle. All rights reserved.

连接到目标数据库: ORA11G (DBID=4032954551)

已连接到辅助数据库: ORADUP (未装载)

这里连接auxiliary库必须提供用户名和密码,采用os认证的话可以连接进去但是duplicate会出错,估计这个应该也是bug

 

RMAN-03002: Duplicate Db 命令 (在 10/23/2007 22:43:40 上) 失败

RMAN-06136: 来自辅助数据库的 ORACLE 错误: ORA-01503: CREATE CONTROLFILE 失败

ORA-01130: 数据库文件版本 11.1.0.0.0 与 ORACLE 版本 11.0.0.0.0 不兼容

ORA-01110: 数据文件 1: ‘F:\ORACLE\ORADATA\ORADUP\SYSTEM01.DBF’

 

四、执行duplicate

RMAN> duplicate target database to oradup

2> from active database;

启动 Duplicate Db 于 23-10月-07

使用目标数据库控制文件替代恢复目录

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: SID=99 设备类型=DISK

内存脚本的内容:

{

set newname for datafile 1 to

"F:\ORACLE\ORADATA\ORADUP\SYSTEM01.DBF";

set newname for datafile 2 to

"F:\ORACLE\ORADATA\ORADUP\SYSAUX01.DBF";

set newname for datafile 3 to

"F:\ORACLE\ORADATA\ORADUP\UNDOTBS01.DBF";

set newname for datafile 4 to

"F:\ORACLE\ORADATA\ORADUP\USERS01.DBF";

backup as copy reuse

datafile 1 auxiliary format

"F:\ORACLE\ORADATA\ORADUP\SYSTEM01.DBF" datafile

2 auxiliary format

"F:\ORACLE\ORADATA\ORADUP\SYSAUX01.DBF" datafile

3 auxiliary format

"F:\ORACLE\ORADATA\ORADUP\UNDOTBS01.DBF" datafile

4 auxiliary format

"F:\ORACLE\ORADATA\ORADUP\USERS01.DBF" ;

sql 'alter system archive log current';

}

正在执行内存脚本

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

启动 backup 于 23-10月-07

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=138 设备类型=DISK

通道 ORA_DISK_1: 启动数据文件副本

输入数据文件: 文件号=00001 名称=F:\ORACLE\ORADATA\ORA11G\SYSTEM01.DBF

输出文件名=F:\ORACLE\ORADATA\ORADUP\SYSTEM01.DBF 标记=TAG20071023T230115 RECID=0 STAMP=0

通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:35

通道 ORA_DISK_1: 启动数据文件副本

输入数据文件: 文件号=00002 名称=F:\ORACLE\ORADATA\ORA11G\SYSAUX01.DBF

输出文件名=F:\ORACLE\ORADATA\ORADUP\SYSAUX01.DBF 标记=TAG20071023T230115 RECID=0 STAMP=0

通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:15

通道 ORA_DISK_1: 启动数据文件副本

输入数据文件: 文件号=00003 名称=F:\ORACLE\ORADATA\ORA11G\UNDOTBS01.DBF

输出文件名=F:\ORACLE\ORADATA\ORADUP\UNDOTBS01.DBF 标记=TAG20071023T230115 RECID=0 STAMP=0

通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:15

通道 ORA_DISK_1: 启动数据文件副本

输入数据文件: 文件号=00004 名称=F:\ORACLE\ORADATA\ORA11G\USERS01.DBF

输出文件名=F:\ORACLE\ORADATA\ORADUP\USERS01.DBF 标记=TAG20071023T230115 RECID=0 STAMP=0

通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:01

完成 backup 于 23-10月-07

sql 语句: alter system archive log current

sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "ORADUP" RESETLOGS ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 ( 'F:\ORACLE\ORADATA\ORADUP\REDO01.LOG' ) SIZE 5 M REUSE,

GROUP 2 ( 'F:\ORACLE\ORADATA\ORADUP\REDO02.LOG' ) SIZE 5 M REUSE,

GROUP 3 ( 'F:\ORACLE\ORADATA\ORADUP\REDO03.LOG' ) SIZE 5 M REUSE

DATAFILE

'F:\ORACLE\ORADATA\ORADUP\SYSTEM01.DBF'

CHARACTER SET ZHS16GBK

内存脚本的内容:

{

backup as copy reuse

archivelog like "F:\ORACLE\PRODUCT\11.1.0\DB_1\RDBMS\ARC00122_0636754423.001" auxiliary format

"F:\ORACLE\ARCH\ORADUP\ARC00122_0636754423.001" ;

catalog clone archivelog "F:\ORACLE\ARCH\ORADUP\ARC00122_0636754423.001";

switch clone datafile all;

}

正在执行内存脚本

启动 backup 于 23-10月-07

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在开始复制归档日志

输入归档日志线程=1 序列=122 RECID=6 STAMP=636764560

输出文件名=F:\ORACLE\ARCH\ORADUP\ARC00122_0636754423.001 RECID=0 STAMP=0

通道 ORA_DISK_1: 归档日志复制完成, 经过时间: 00:00:01

完成 backup 于 23-10月-07

已编目的归档日志

归档日志文件名=F:\ORACLE\ARCH\ORADUP\ARC00122_0636754423.001 RECID=1 STAMP=636764566

数据文件 2 已转换成数据文件副本

输入数据文件副本 RECID=1 STAMP=636764566 文件名=F:\ORACLE\ORADATA\ORADUP\SYSAUX01.DBF

数据文件 3 已转换成数据文件副本

输入数据文件副本 RECID=2 STAMP=636764567 文件名=F:\ORACLE\ORADATA\ORADUP\UNDOTBS01.DBF

数据文件 4 已转换成数据文件副本

输入数据文件副本 RECID=3 STAMP=636764567 文件名=F:\ORACLE\ORADATA\ORADUP\USERS01.DBF

内存脚本的内容:

{

set until scn 208584;

recover

clone database

delete archivelog

;

}

正在执行内存脚本

正在执行命令: SET until clause

启动 recover 于 23-10月-07

使用通道 ORA_AUX_DISK_1

正在开始介质的恢复

线程 1 序列 122 的归档日志已作为文件 F:\ORACLE\ARCH\ORADUP\ARC00122_0636754423.001 存在于磁盘上

归档日志文件名=F:\ORACLE\ARCH\ORADUP\ARC00122_0636754423.001 线程=1 序列=122

介质恢复完成, 用时: 00:00:00

完成 recover 于 23-10月-07

内存脚本的内容:

{

shutdown clone immediate;

startup clone nomount ;

}

正在执行内存脚本

数据库已卸装

Oracle 实例已关闭

已连接到辅助数据库 (未启动)

Oracle 实例已启动

系统全局区域总计 146472960 字节

Fixed Size 1331740 字节

Variable Size 92278244 字节

Database Buffers 50331648 字节

Redo Buffers 2531328 字节

sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "ORADUP" RESETLOGS ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 ( 'F:\ORACLE\ORADATA\ORADUP\REDO01.LOG' ) SIZE 5 M REUSE,

GROUP 2 ( 'F:\ORACLE\ORADATA\ORADUP\REDO02.LOG' ) SIZE 5 M REUSE,

GROUP 3 ( 'F:\ORACLE\ORADATA\ORADUP\REDO03.LOG' ) SIZE 5 M REUSE

DATAFILE

'F:\ORACLE\ORADATA\ORADUP\SYSTEM01.DBF'

CHARACTER SET ZHS16GBK

内存脚本的内容:

{

set newname for tempfile 1 to

"F:\ORACLE\ORADATA\ORADUP\TEMP01.DBF";

switch clone tempfile all;

catalog clone datafilecopy "F:\ORACLE\ORADATA\ORADUP\SYSAUX01.DBF";

catalog clone datafilecopy "F:\ORACLE\ORADATA\ORADUP\UNDOTBS01.DBF";

catalog clone datafilecopy "F:\ORACLE\ORADATA\ORADUP\USERS01.DBF";

switch clone datafile all;

}

正在执行内存脚本

正在执行命令: SET NEWNAME

临时文件 1 在控制文件中已重命名为 F:\ORACLE\ORADATA\ORADUP\TEMP01.DBF

已将数据文件副本列入目录

数据文件副本文件名=F:\ORACLE\ORADATA\ORADUP\SYSAUX01.DBF RECID=1 STAMP=636764585

已将数据文件副本列入目录

数据文件副本文件名=F:\ORACLE\ORADATA\ORADUP\UNDOTBS01.DBF RECID=2 STAMP=636764585

已将数据文件副本列入目录

数据文件副本文件名=F:\ORACLE\ORADATA\ORADUP\USERS01.DBF RECID=3 STAMP=636764585

数据文件 2 已转换成数据文件副本

输入数据文件副本 RECID=1 STAMP=636764585 文件名=F:\ORACLE\ORADATA\ORADUP\SYSAUX01.DBF

数据文件 3 已转换成数据文件副本

输入数据文件副本 RECID=2 STAMP=636764585 文件名=F:\ORACLE\ORADATA\ORADUP\UNDOTBS01.DBF

数据文件 4 已转换成数据文件副本

输入数据文件副本 RECID=3 STAMP=636764585 文件名=F:\ORACLE\ORADATA\ORADUP\USERS01.DBF

内存脚本的内容:

{

Alter clone database open resetlogs;

}

正在执行内存脚本

数据库已打开

完成 Duplicate Db 于 23-10月-07

五、检查新库状态

C:\>set oracle_sid=oradup

C:\>sqlplus /nolog

SQL*Plus: Release 11.1.0.6.0 - Production on 星期二 10月 23 23:04:30 2007

Copyright (c) 1982, 2007, Oracle. All rights reserved.

SQL> conn / as sysdba

已连接。

SQL> select instance_name,status from v$instance;

INSTANCE_NAME STATUS

---------------- ------------

oradup OPEN

这种方式确实比较快捷方便,但是我在测试过程中碰到了很多的问题,一方面可能因为我没有做很好的准备,只是一个即兴的测试,但这个新东西确实问题也不少,要到实用的阶段估计还需要打几个补丁了。











本文转自东方之子736651CTO博客,原文链接: http://blog.51cto.com/ecloud/1118364,如需转载请自行联系原作者







相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
143
分享
相关文章
WARNING: Too Many Parse Errors With error=911 When Running a JDBC Application Connected to an Oracle 19c database
WARNING: Too Many Parse Errors With error=911 When Running a JDBC Application Connected to an Oracle 19c database (
118 2
19c 开启Oracle Database Vault
19c 开启Oracle Database Vault
187 1
|
9月前
|
Greenplum【部署 09】has an active database process on port = 6000 和 [Errno 2] No such file or directory
Greenplum【部署 09】has an active database process on port = 6000 和 [Errno 2] No such file or directory
135 0
Connect to Autonomous Database Using Oracle Database Tools
Connect to Autonomous Database Using Oracle Database Tools
83 1
Requirements for Installing Oracle Database/Client 19c on OL8 or RHEL8 64-bit (x86-64) (Doc ID 2668780.1)
Requirements for Installing Oracle Database/Client 19c on OL8 or RHEL8 64-bit (x86-64) (Doc ID 2668780.1)
73 0
Oracle Database Vault Access Control Components
Oracle Database Vault Access Control Components
67 0
What Is Oracle Database Vault?
The Oracle Database Vault security controls protect application data from unauthorized access, and helps you to comply with privacy and regulatory requirements. You can deploy controls to block privileged account access to application data and control sensitive operations inside the database using
56 0
服务器Centos7 静默安装Oracle Database 12.2
服务器Centos7 静默安装Oracle Database 12.2
353 0
windows Oracle Database 19c 卸载教程
打开任务管理器 ctrl+Shift+Esc可以快速打开任务管理器,找到oracle所有服务然后停止。 停止数据库服务 在开始卸载之前,确保数据库服务已经停止。你可以使用以下命令停止数据库服务: net stop OracleServiceORCL Universal Installer 卸载Oracle数据库程序 一般情况运行Oracle自带的卸载程序,如使用Universal Installer 工具卸载。 点击开始菜单找到Oracle,然后点击Oracle安装产品,再点击Universal Installer。 点击之后稍等一会然后会进入进入下图界面,点击卸载产品。 选中要删除的Orac
761 1

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等