使用RMAN進行復制時,RMAN會連接目標數據庫和輔助實例,如果使用了catalog備份的還會連接恢復目錄。RMAN連接了目標數據庫才能夠訪問其控制文件中記錄的備份的詳細信息,連接輔助實例才能夠在輔助實例上分配一個或多個通道進程,9i開始會自動創建通道; 要連接輔助實例就先要啓動輔助實例,就需要一個pfile參數文件,由目標數據庫creata pfile from spfile得來,由於沒有控制文件,所以只能啓動到nomount階段,RMAN會生成到這個輔助實例的sysdba連接。連接了目標庫和輔助實例後,就可以使用duplicate命令,複製數據庫,複製過程一般分爲以下階段:1,rman確定備份的狀態和位置2,rman在輔助實例上分配輔助通道,3,在輔助實例上還原數據文件,4,構建新的控制文件 5,rman還原歸檔日誌,並進行恢復 6,rman重置輔助庫的DBID(唯一標識一個數據庫),並以open resetlogs打開數據庫。
平臺準備:
OracleLinux + Oracle 11G
目標庫:
ORACLE_HOME=/uoracle/app
ORACLE_BASE=/orabase
ORACLE_SID= orcl
IP : 192.168.0.45
輔助庫:
ORACLE_HOME=/uoracle/app
ORACLE_BASE=/orabase
ORACLE_SID=orcl
IP : 192.168.0.46
操作步驟(異機和同機複製,步驟基本一樣):
1:運行輔助實例的服務器需要先安裝好相應的oracle客戶端,且ORACLE_BASE 和ORACLE_HOME目錄和目標庫相同;
2:構建輔助數據庫目錄結構;
3:創建參數文件,複製過來,並進行相應修改;
4:創建輔助實例口令文件,orapwd
5:配置監聽及tnsname文件
6:目標庫進行備份,並拷貝到輔助實例服務其上,或同NFS掛載過去;
7:使用pfile啓動輔助實例到nomount,並退出會話;
8:duplicate命令複製數據庫;
9: 創建spfile
具體實現:
1:安裝客戶端
2:構建輔助數據庫目錄結構(根據參數文件中涉及到的目錄來構建輔助庫的目錄結構)
[oracle@orclA ~]$ echo $ORACLE_BASE
/orabase
[oracle@orclA ~]$ cd /orabase
[oracle@orclA orabase]$ mkdir ./oradata/orcl -p
[oracle@orclA orabase]$mkdir ./fast_recovery_area/orcl -p # 重新構建控制文件,存放控制文件
[oracle@orclA orabase]$ pwd
/orabase
[oracle@orclA orabase]$ mkdir ./admin/orcl -p
[oracle@orclA orabase]$ cd ./admin/orcl/
[oracle@orclA orcl]$ mkdir {a,b,c,d,u}dump
[oracle@orclA orcl]$ mkdir pfile
3:創建參數文件,複製過來,並進行相應修改
3.1: 目標庫上創建pfile,並拷貝到輔助庫上 ?/dbs 目錄下(必須是$ORACLE_HOME/dbs 目錄下,否則識別不到)
SQL> create pfile='/tmp/initorcl.ora' from spfile;
SQL> scp /tmp/initorcl.ora 192.168.0.46:/oracle/home/dbs
3.2: 對參數文件進行相應修改
由於這裏是進行異機複製,目錄結構及實例名都一樣,所以沒有進行修改
3.3: 使用pfile啓動數據庫到nomount 狀態,進行測試,並創建spfile
SQL> startup pfile='/uoracle/app/dbs/initorcl.ora'>ORACLE instance started.
Total System Global Area 1.0055E+10 bytes
Fixed Size 2237008 bytes
Variable Size 3154120112 bytes
Database Buffers 6878658560 bytes
Redo Buffers 19767296 bytes
Database mounted.
Database opened.
SQL> create spfile from pfile;
File created.
4:爲輔助實例創建口令文件,密碼與源庫一致
[oracle@orclA bin]$ pwd
/uoracle/app/bin
[oracle@orclA bin]$ orapwd file=$ORACLE_HOME/dbs/orapworcl password=admin123;
[oracle@orclA bin]$
[oracle@orclA bin]$ ls /uoracle/app/dbs/orapworcl
/uoracle/app/dbs/orapworcl
5:配置監聽及tnsname文件
源庫上:
[root@bzdb ~]# cat /uoracle/app/network/admin/listener.ora
# listener.ora Network Configuration File: /uoracle/app/network/admin/listener.ora
# Generated by Oracle configuration tools.
orcl =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.45)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /orabase
[root@bzdb ~]# cat /uoracle/app/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /uoracle/app/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.0.45)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
AUXORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.46)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
輔助庫上:
TARGETORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.45)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.78)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
6:目標庫進行備份,並拷貝到輔助實例服務其上,或同NFS掛載過去;
RMAN> RUN {
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> backup database format '/backup/orcl_%U_%T' skip inaccessible filesperset 5 tag orcl_bak;
5> sql 'alter system archive log current';
6> backup archivelog all delete input format '/backup/arch_%U_%T' skip inaccessible filesperset 5;
7> backup current controlfile format '/backup/ctl_%U_%T' tag='ctl_BAK';
8> backup spfile format '/backup/orcl_spfile_%U_%T' tag='spfile';
9> release channel c2;
10> release channel c1;
11> }
注: 因爲這裏使用的是nocatalog備份方式,備份信息會寫入到控制文件中,所以,控制文件要單獨備份
目標庫上:
[root@bzdb ~]# cat /etc/exports
/backup 192.168.0.78(rw,async)
[root@bzdb ~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS mountd: [ OK ]
Stopping RPC idmapd: [ OK ]
Starting RPC idmapd: [ OK ]
Starting NFS daemon: [ OK ]
輔助庫上:
# 建立與目標庫上相同的目錄
mkdir /backup
chown oracle.oinstall /backup -R
chmod 775 /backup
showmount -e 192.168.0.45
mount -t nfs 192.168.0.45:/backup /bakup
7:使用pfile啓動輔助實例到nomount,並退出會話;
SQL> startup nomount pfile='/uoracle/app/dbs/initorcl.ora'
ORACLE instance started.
Total System Global Area 1.0055E+10 bytes
Fixed Size 2237008 bytes
Variable Size 3154120112 bytes
Database Buffers 6878658560 bytes
Redo Buffers 19767296 bytes
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
8:duplicate命令複製數據庫;
目標庫上:
[oracle@bzdb ~]$ rman target sys/admin123@orcl auxiliary sys/admin123@auxorcl;
Recovery Manager: Release 10.2.0.1.0 - Production on Sun Jul 18 20:41:19 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: ORCL (DBID=1248423599)
connected to auxiliary database: ORCL (not mounted)
RMAN> duplicate target database to ORCL nofilenamecheck
logfile
'/orabase/oradata/orcl/redo01.log' size 100M,
'/orabase/oradata/orcl/redo02.log' size 100M,
'/orabase/oradata/orcl/redo03.log' size 100M;
9:創建spfile,並重新啓動
create spfile from pfile;
shutdown immeidate;
startup
驗證數據庫是否複製成功