Oracle Active Database Duplication

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.