Oracle 如何快速的 duplicate 一个数据库

来源:这里教程网 时间:2026-03-03 17:35:55 作者:

首先

  1.duplicate daabase干什么的

   快速复制一个数据库。通常用在系统迁移、测试系统搭建。

   使用active方式复制,可以不需要有备份文件的情况下,直接复制数据库到新的地方。

   如果有备份系统,我是不建议从生产直接duplicate数据库的。因为直接操作生产系统还是有些风险的,比如你搞错源和目标了,删库跑路了。

  

那么开搞吧

  

1.新的数据库一定要使用使用新的dbname有别于生产

  因为如果使用了相同的名字,你将在最后的时候发现新的数据库无法OPEN。

*.audit_file_dest='/data/app/oracle/admin/gtmstt/adump' *.audit_trail='db' *.compatible='11.2.0.4.0' *.control_files='/data/app/oracle/oradata/gtmstt/control01.ctl','/data/app/oracle/fast_recovery_area/gtmstt/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='gtmstt' *.db_recovery_file_dest='/data/app/oracle/fast_recovery_area' *.db_recovery_file_dest_size=4385144832 *.diagnostic_dest='/data/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=gtmsttXDB)' *.open_cursors=300 *.pga_aggregate_target=2434793472 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=4293918720 *.undo_tablespace='UNDOTBS1' *.log_file_name_convert='/data/app/oracle/oradata/gtmsdb','/data/app/oracle/oradata/gtmstt' *.db_file_name_convert='/data/app/oracle/oradata/gtmsdb','/data/app/oracle/oradata/gtmstt','/data/app/oracle/oradata','/data/app/oracle/oradata/gtmstt'

2.创建新的路径

mkdir -p /data/app/oracle/admin/gtmstt/adump

mkdir -p /data/app/oracle/oradata/gtmstt

mkdir -p /data/app/oracle/fast_recovery_area/gtmstt

3.新库要在listener中静态注册

listenser.ora 和 tnsnames.ora文件中的 行缩进是不能省略的。否则你会遇到奇奇怪怪的问题。

LISTENER =   (DESCRIPTION_LIST =     (DESCRIPTION =       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))       (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.3)(PORT = 1521))     )   )

SID_LIST_LISTENER =    (SID_LIST =     (SID_DESC =       (SID_NAME = gtmstt)       (ORACLE_HOME = /data/app/oracle/product/11.2.0/dbhome_1)     )   )

ADR_BASE_LISTENER = /data/app/oracle

 

[oracle@gtmstestdb ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-NOV-2020 17:13:54

Copyright (c) 1991, 2013, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production Start Date 07-NOV-2020 16:57:03 Uptime 0 days 0 hr. 16 min. 50 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /data/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora Listener Log File /data/app/oracle/diag/tnslsnr/gtmstestdb/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.1.1.3)(PORT=1521))) Services Summary... Service "gtmstt" has 2 instance(s). Instance "gtmstt", status  UNKNOWN, has 1 handler(s) for this service...  这个UNKNOWN 就是静态注册上的意思。 The command completed successfully

4.一定要检查防火墙是否关闭

[root@gtmstestdb ~]$ /bin/systemctl status firewalld

● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1)

 

Nov 05 17:22:39 gtmstestdb systemd[1]: Starting firewalld - dynamic firewall daemon... Nov 05 17:22:39 gtmstestdb systemd[1]: Started firewalld - dynamic firewall daemon. Nov 06 16:11:54 gtmstestdb systemd[1]: Stopping firewalld - dynamic firewall daemon... Nov 06 16:11:54 gtmstestdb systemd[1]: Stopped firewalld - dynamic firewall daemon.

 

5.配置源库tnsnames.ora 或者配置 测试库tnsnames.ora均可,取决于你想在哪一边进行操作

gtmsdb_du =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.3)(PORT = 1521))       (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME= gtmsdb)     )   )

gtmsdb=   (DESCRIPTION=     (ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.2)(PORT=1521))     (CONNECT_DATA=       (SERVER=dedicated)       (SERVICE_NAME=gtmsdb)     )   )

5.开始duplicate在哪一端操作均可以,命令是一样的

target 后面加源库 auxiliary 后面加新库

rman target sys/oracle@gtmsdb auxiliary sys/oracle@gtmsdb_du

run{ allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; allocate channel c4 type disk; allocate AUXILIARY channel c5 type disk; allocate AUXILIARY channel c6 type disk; allocate AUXILIARY channel c7 type disk; allocate AUXILIARY channel c8 type disk; duplicate target database to gtmstt from active database nofilenamecheck ; release channel c1; release channel c2; release channel c3; release channel c4; release channel c5; release channel c6; release channel c7; release channel c8;

}

 

相关推荐