在日常的工作中DBA经常会遇到数据的转移,最典型的就是要将在线系统运行的数据库导入到测试环境中,以进行相关的升级测试和压力测试等。

下面介绍两种方式克隆数据库。

 

一、直接的物理拷贝克隆

此种方式比较简单,只要将必要的数据文件,redo,控制文件,参数文件,监听文件等拷贝到目标服务器相同的位置即可,下面介绍具体步骤:

首先,已经存在一台运行完好的数据库,可以是生产库或者练习使用的,我这里是一个练习使用的10Gr2的库:

主机名:dg1.andylhz.com  IP地址:192.168.1.254 源数据库  实例名:LHZ

目标数据库只安装数据库软件不建库:

主机名:dg2.andylhz.com  IP地址:192.168.1.253 目标数据库

先停止源数据库和监听使用shutdown lsnrctl stop 命令

然后找到源数据库的数据文件和REDO文件,控制文件,系统参数文件、密码文件和网络监听配置文件等。

 

数据库文件、REDO文件、控制文件:

[oracle@dg1 ~]$ cd /u01/app/oracle/oradata/lhz/

[oracle@dg1 lhz]$ ll

total 1071516

-rw-r-----  1 oracle oinstall   7061504 Jan 16 08:13 control01.ctl

-rw-r-----  1 oracle oinstall   7061504 Jan 16 08:13 control02.ctl

-rw-r-----  1 oracle oinstall   7061504 Jan 16 08:13 control03.ctl

-rw-r-----  1 oracle oinstall 104865792 Jan 16 07:39 example01.dbf

-rw-r-----  1 oracle oinstall  52429312 Jan 16 07:39 redo01.log

-rw-r-----  1 oracle oinstall  52429312 Jan 16 07:39 redo02.log

-rw-r-----  1 oracle oinstall  52429312 Jan 16 08:09 redo03.log

-rw-r-----  1 oracle oinstall 251666432 Jan 16 07:55 sysaux01.dbf

-rw-r-----  1 oracle oinstall 503324672 Jan 16 08:09 system01.dbf

-rw-r-----  1 oracle oinstall  22028288 Aug 28 11:03 temp01.dbf

-rw-r-----  1 oracle oinstall  31465472 Jan 16 08:09 undotbs01.dbf

-rw-r-----  1 oracle oinstall   5251072 Jan 16 07:39 users01.dbf

 

系统参数文件、密码文件:

[oracle@dg1 dbs]$ cd /u01/app/oracle/10g/dbs/

total 44

-rw-r-----  1 oracle oinstall  1544 Aug 28 11:00 hc_lhz.dat

-rw-r-----  1 oracle oinstall 12920 May  3  2001 initdw.ora

-rw-r-----  1 oracle oinstall  8385 Sep 11  1998 init.ora

-rw-r-----  1 oracle oinstall    24 Aug 28 11:00 lkLHZ

-rw-r-----  1 oracle oinstall  1536 Aug 28 11:29 orapwlhz

-rw-r-----  1 oracle oinstall  2560 Jan 16 07:39 spfilelhz.ora

网络监听配置文件:

[oracle@dg1 admin]$ cd /u01/app/oracle/10g/network/admin/

[oracle@dg1 admin]$ ll

total 20

-rw-r-----  1 oracle oinstall  479 Jan 16 07:53 listener.ora

drwxr-x---  2 oracle oinstall 4096 Aug 28 10:56 samples

-rw-r-----  1 oracle oinstall  172 Dec 26  2003 shrept.lst

-rw-r-----  1 oracle oinstall  175 Aug 28 11:15 sqlnet.ora

-rw-r-----  1 oracle oinstall  599 Jan 16 07:36 tnsnames.ora

其次,在目标数据库上建立和上面列出数据文件目录结构相同的目录,系统参数文件,密码文件和网络监听配置文件都已经存在不必创建。

mkdir –p /u01/app/oracle/oradata/lhz/

再次,将源数据库的相关文件复制到目标数据库中相应的位置,可以使用FTPNFSscp等方式,具体步骤在这里就不演示了,很简单的就可以完成,注意使用oracle用户完成。

最后启动数据库:

 

[oracle@dg2 ~]$ sqlplus /nolog


SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jan 16 08:50:11 2012

 

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

 

SQL> conn /as sysdba

Connected to an idle instance.

SQL> startup

ORACLE instance started.

 

Total System Global Area  167772160 bytes

Fixed Size                  1218316 bytes

Variable Size              67111156 bytes

Database Buffers           96468992 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

SQL>

 

验证结果:

[oracle@dg1 ~]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jan 16 08:52:13 2012

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

SQL> conn /as sysdba

Connected.

SQL> select dbid,name from v$database;

 

      DBID NAME

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

1330247278 LHZ


[oracle@dg2 ~]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jan 16 08:52:57 2012

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

SQL> conn /as sysdba

Connected.

SQL> select dbid,name from v$database;

      DBID NAME

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

1330247278 LHZ

两个数据库的DBID 和名字是相同的。