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日志并进行多维度分析。
相关文章
|
4月前
|
SQL Oracle 关系型数据库
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 (
69 2
|
4月前
|
Oracle 关系型数据库
19c 开启Oracle Database Vault
19c 开启Oracle Database Vault
136 1
|
4月前
|
SQL Oracle 关系型数据库
Connect to Autonomous Database Using Oracle Database Tools
Connect to Autonomous Database Using Oracle Database Tools
46 1
|
3月前
|
Oracle 关系型数据库 Linux
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)
33 0
|
4月前
|
数据库
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
105 0
|
4月前
|
人工智能 Oracle 关系型数据库
一篇文章弄懂Oracle和PostgreSQL的Database Link
一篇文章弄懂Oracle和PostgreSQL的Database Link
|
4月前
|
SQL Oracle 安全
Oracle Database Vault Access Control Components
Oracle Database Vault Access Control Components
35 0
|
4月前
|
Oracle 安全 关系型数据库
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
34 0
|
4月前
|
Oracle 关系型数据库 Linux
服务器Centos7 静默安装Oracle Database 12.2
服务器Centos7 静默安装Oracle Database 12.2
240 0
|
1月前
|
存储 自然语言处理 Oracle
Oracle数据库字符集概述及修改方式
【8月更文挑战第15天】Oracle 数据库字符集定义了数据的编码方案,决定可存储的字符类型及其表示方式。主要作用包括数据存储、检索及跨系统传输时的正确表示。常见字符集如 AL32UTF8 支持多语言,而 WE8MSWIN1252 主用于西欧语言。修改字符集风险高,可能导致数据问题,需事先备份并评估兼容性。可通过 ALTER DATABASE 语句直接修改或采用导出-导入数据的方式进行。完成后应验证数据完整性。此操作复杂,须谨慎处理。

推荐镜像

更多