在日常的工作中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/
再次,将源数据库的相关文件复制到目标数据库中相应的位置,可以使用FTP,NFS,scp等方式,具体步骤在这里就不演示了,很简单的就可以完成,注意使用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>
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 和名字是相同的。