本文为离线方式克隆
一.环境介绍
1. 主数据库环境
- 操作系统版本 : redhat5 x64
- 数据库版本 : Oracle 11.2.0.3 x64
- 数据库名 : dg1
- 数据库SID : dg1
- db_unique_name: dg1
- IP:192.168.58.5
- hostname:oradg1
2. 备库环境
- 操作系统版本 : redhat5 x64
- 数据库版本 : Oracle 11.2.0.3 x64 (只安装oracle数据库软件,no netca dbca)
- 数据库名 : dg1
- 数据库SID : dg1
- db_unique_name: dg1
- IP:192.168.58.6
- hostname:oradg2
二.主数据库环境准备
1. 目标库环境重新创建口令文件
su - oracle
orapwd file='/u01/app/oracle/product/11.2.0/db_1/dbs/orapwdg1' password=oracle entries=10 force=y
2. lisener监听文件
$ vim /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = oradg1)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dg1)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = dg1)
)
)
ADR_BASE_LISTENER = /u01/app
4. tnsname.ora
说明:dg1是主库的服务名
$ vim /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
TARGETORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradg2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dg1)
)
)
master =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradg1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dg1)
)
)
secondary =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradg2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dg1)
)
)
5. 检查数据库模式:
sqlplus /nolog
conn /as sysdba
archive log list
(查看数据库是否处于归档模式中)若为非归档,则修改数据库归档模式。
startup mount
alter database archivelog
alter database open
如果数据库打开了,这时要关闭才行:
shutdown immediate
改为归档模式后,再查看:
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 8
Next log sequence to archive 11
Current log sequence 11
为什么要修改为归档模式呢,因为会丢失数据的。不归档那就只有online redo的数据,没有archive redo的数据。
6. rman备份主库
创建rman备份目录
$ mkdir -p /u01/app/myrman
连接到target准备备份
$ rman target /
开始备份:
RMAN> backup format '/u01/app/myrman/fulldb_%d_%U' database include current controlfile plus archivelog delete input;
等待时间可能比较久,成功后会有:完成 backup 于 05-9月 -15
RMAN> quit
之后会将备份拷贝到oradg2服务器上。
三.目标库配置(要恢复的服务器)
1. 新建配置lisener监听文件
$ vim /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = oradg2)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dg1)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = dg1)
)
)
ADR_BASE_LISTENER = /u01/app
2. 新建tnsname.ora文件
说明:dg1是服务名,oradg1是master主机。
$ vim /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
TARGETORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradg2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dg1)
)
)
master =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradg1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dg1)
)
)
secondary =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradg2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dg1)
)
)
测试服务名连通性:
tnsping orcl
3. 创建11g数据库基本目录
这里的具体路径,可能每个人的都不同不要照抄,要参考:$ORACLE_HOME/dbs/init+实例名.ora
我的文件是:$ORACLE_HOME/dbs/initdg1.ora
su - oracle
mkdir -p /u01/app/admin/dg1/{adump,dpdump,pfile,scripts}
mkdir -p /u01/app/oracle/oradata/dg1
mkdir -p /u01/app/fast_recovery_area/dg1/
mkdir -p /u01/app/archivelog
4. 拷贝主库口令文件(也可直接创建一个新的口令文件)
su -oracle
$ cd /u01/app/oracle/product/11.2.0/db_1/dbs/
$ scp oracle@oradg1:/u01/app/oracle/product/11.2.0/db_1/dbs/orapwdg1 $ORACLE_HOME/dbs/
5. 拷贝rman备份
$ scp -r oracle@oradg1:/u01/app/myrman /u01/app/
6. 启动到nomount状态
些时先创建一个文件:
$ echo 'db_name=dg1' > $ORACLE_HOME/dbs/initdg1.ora
启动nomount状态:
sqlplus /nolog
SQL> conn / as sysdba;
SQL> startup nomount;
四.开始在RMAN duplicate数据库
1. RMAN同进连接主库与备库
$ rman auxiliary /
2. 开始duplicate数据库
RMAN> duplicate target database to dg1 backup location '/u01/app/myrman/' nofilenamecheck;
3. 查看备库状态
说明:duplicate数据库之后,备库只是处于mount状态,查看备库状态。
$ sqlplus / as sysdba
查看备库状态
SQL> select open_mode from v$database;
重启数据库、开启监听,可以看到跟原来的库一样。
五.结束语
些时复制数据已经成功了,可以用PL/SQL去试一下,登录密码跟原来的一样。两台机子的实例最好同名,不然会遇到很大麻烦.