標籤:database oracle standby 資料庫
Active Database Duplication
簡介
---------
Active database duplication功能是從11g開始引入的一個新功能,它是對比以前版本中的基於備份組的複製資料庫功能。
下面簡單的回顧一下關於ORACLE Duplicate Database功能,Duplicate database可以按照用途分為2種,一種是duplicate database,第二種是duplicate standby database,本文主要介紹duplicate database功能,會在以後介紹duplicate standby database。
Duplicate Database又可以按照複製資料的來源不同分為2種方式:Active Database Duplication(從正在啟動並執行資料庫上複製資料)和Backup-based duplication(基於備份組的資料複製)
1. Backup-based duplication 又分為下面3中形式:
o 複製的過程不串連到來源資料庫,RMAN從Catalog 資料庫取得備份資訊。
o 複製的過程不串連到來源資料庫,也不串連到Catalog資料庫,RMAN從已有的備份組取得備份資訊。
o 複製的過程串連到來源資料庫,RMAN從來源資料庫的控制檔案取得備份資訊。
2. Active Database Duplication
這種複製資料庫要求來源資料庫是open狀態或者mount狀態,複製的過程一定要串連到來源資料庫,RMAN直接從源庫複製資料庫到Duplication伺服器,這種方式不需要提前備份源庫。
Duplicate Database 特點
------------------------
1. 複製的Database會自動分配一個新的DBID,與來源資料庫的DBID不同,這樣Duplicate資料庫和源庫可以註冊到同一個catalog 資料庫。
如果使用作業系統的命令來做異機複製恢複的話,新建立的資料庫和源庫是相同的DBID。
2. 複製的資料庫可以是源庫的一個完全鏡像,也可以是源庫的一個子集。
3. 複製的資料庫和源庫必須是相同的作業系統平台,我們認為同平台下的32-bit 和 64-bit是同一個平台,例如Linux IA (32-bit) 和Linux IA (64-bit),認為是相同的平台,可以實施duplicate 功能,但是最後一定要運行下面的指令碼來轉換PL/SQL:
ORACLE_HOME/rdbms/admin/utlirp.sql
Active Database Duplication 和 Backup-based duplication對比
-------------------------------------------------------------
Active database duplication 直接複製來源資料庫,通過網路傳輸資料庫到複製伺服器,因此複製時對源庫有一定的壓力,而且資料轉送時對網路條件要求較高。
Backup-based duplication :需要提前備份資料庫,磁碟空間大小能夠滿足備份的需要。
Active Database Duplication 原理
-------------------------------------
1. 手動建立一個臨時的pfile檔案,pfile檔案至少包括一個參數DB_NAME,然後啟動到nomount狀態。
2. RMAN從源庫拷貝spfile檔案到複製資料庫上,並且修改spfile的名字。
3. RMAN從源庫拷貝最新的control file到複製資料庫,並且mount 複製資料庫。
4. RMAN從源庫拷貝datafile和必要的歸檔日誌到複製資料庫。
5. RMAN執行不完全的恢複。
6. RMAN建立新的control file,並且設定新的DBID。
7. 以RESETLOGS方式開啟複製的database。
如果使用spfile,那麼在pfile檔案裡只需要設定一個DB_NAME參數,其他參數會在duplicate 命令中自己設定。
如果使用pfile,那麼需要設定如下參數:
<1> DB_NAME
<2> CONTROL_FILES
<3> DB_BLOCK_SIZE
<4> DB_FILE_NAME_CONVERT
<5> LOG_FILE_NAME_CONVERT
<6> DB_RECOVERY_FILE_DEST
在Auxiliary庫建立Password File 檔案
對於Backup-based duplication,Password File 不是必須的,但是對於Active Database Duplication,Password File是必須的。
因為Active Database Duplication 使用相同的SYSDBA 密碼直接連接到auxiliary 庫。所以,確保target 和Auxiliary庫的SYSDBA 密碼一樣很重要。
當然,我們也可以在duplicate 命令中加上PASSWORD FILE 選項(也是預設值), 這樣RMAN 在copy 的時候也會從target 庫把密碼檔案copy過來,
如果auxiliary庫上已經存在了Password file,那麼該操作會重寫那個檔案。
如:
RMAN> DUPLICATE TARGET DATABASE TO Dave
2> FROM ACTIVE DATABASE
3> NOFILENAMECHECK
4> PASSWORD FILE
5> SPFILE;
實驗步驟:
源庫:10.6.0.207 test
目標庫:10.6.0.179 aaa(本來想用test,但是在rman 那步驟會報錯)
準備工作
1.config tnsnames.ora
2.create password file
3.mkdir necessary folder
4.create spfile to startup nomount
5.config duplicate database listener.ora
6.duplicate a database
RMAN> duplicate target database to newdb
from active database
db_file_name_convert ‘/nf/‘,‘/duptest/‘
spfile
parameter_value_convert ‘/db/‘,‘/newdb/‘
set log_file_name_convert ‘/db/‘,‘/newdb/‘
1.源庫上建立pfile並且SCP到目標庫上
SQL> create pfile=‘/tmp/pfile20151022.ora‘ from spfile;
scp /tmp/pfile20151022.ora [email protected]:/u01/app/oracle/12.1.0.1/db_1/dbs/inittest.ora
目標庫上
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/test/system01.dbf
/u01/app/oracle/oradata/test/sysaux01.dbf
/u01/app/oracle/oradata/test/undotbs01.dbf
/u01/app/oracle/oradata/test/users01.dbf
/u01/app/oracle/oradata/test/qwerty.dbf
/u01/app/oracle/oradata/test/testbig.dbf
/u01/app/oracle/oradata/test/data_01.dbf
/u01/app/oracle/oradata/test/cai.dbf
SQL> select MEMBER from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/test/redo01.log
/u01/app/oracle/oradata/test/redo02.log
/u01/app/oracle/oradata/test/redo03.log
配置好源庫的linstener.ora
[[email protected] admin]$ cat listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = test)
(ORACLE_HOME = /u01/app/oracle/12.1.0.1/db_1)
(SID_NAME = test)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = test)(PORT = 1521))
)
配置好源庫上的tnsname.ora
[[email protected] admin]$ cat tnsnames.ora
test =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.0.207)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)
test2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.0.179)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)
因為源庫跟目標庫資料檔案,記錄檔,控制檔案放的位置都不一樣,所以要修改目標庫上的pfile,
增加db_file_name_convert和log_file_name_convert
在目標庫上修改pfile
vi /u01/app/oracle/12.1.0.1/db_1/dbs/inittest.ora
修改controlfile路徑
增加
db_file_name_convert=‘/u01/app/oracle/oradata/test‘,‘/u01/app/oracle/oradata/test/datafile‘
log_file_name_convert=‘/u01/app/oracle/oradata/test‘,‘/u01/app/oracle/oradata/test/onlinelog‘
配置好目標庫上的listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = test)
(ORACLE_HOME = /u01/app/oracle/12.1.0.1/db_1)
(SID_NAME = test)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.0.179)(PORT = 1521))
)
配置好目標庫上的tnsname.ora
[[email protected] admin]$ cat tnsnames.ora
test =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.0.207)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)
test2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.0.179)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)
rman target sys/[email protected] auxiliary sys/[email protected]
--rman這裡對test字元有限制,加上單引號後解決問題
RMAN> duplicate target database to ‘test‘ from active database;
Starting Duplicate Db at 22-OCT-15
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=12 device type=DISK
current log archived
contents of Memory Script:
{
sql clone "create spfile from memory";
}
executing Memory Script
sql statement: create spfile from memory
contents of Memory Script:
{
shutdown clone immediate;
startup clone nomount;
}
executing Memory Script
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area 838860800 bytes
.....
datafile 2 switched to datafile copy
input datafile copy RECID=1 STAMP=893782472 file name=/u01/app/oracle/oradata/test/datafile/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=893782472 file name=/u01/app/oracle/oradata/test/datafile/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=893782472 file name=/u01/app/oracle/oradata/test/datafile/users01.dbf
contents of Memory Script:
{
Alter clone database open resetlogs;
}
executing Memory Script
database opened
Cannot remove created server parameter file
Finished Duplicate Db at 22-OCT-15
RMAN> exit
以上就是Active Database Duplication測試過程
本文出自 “Sysdba” 部落格,請務必保留此出處http://sysdba.blog.51cto.com/10492366/1705317
Oracle Active Database Duplication