Oracle活動資料庫複製

llnnmc發表於2017-04-11

Oracle可以從現有的資料庫中複製出一份新的資料庫。這在一些場合是很有用的。例如從生產庫中複製出一個測試庫來搭建開發和測試環境,生成大型報表而不影響生產系統的響應時間,從複製資料庫中匯出無意從生產庫中刪除的一個表,然後將它重新匯入到生產庫中,以及Data guard等應用。

 

在這裡,我們把原生產資料庫稱之為目標資料庫,而由生產庫複製出來的庫稱之為輔助資料庫。11g之前建立輔助資料庫過程需要將目標資料庫的備份(包括增量備份和歸檔日誌)事先儲存在輔助資料庫例項可以訪問到的檔案系統上。而11g開始無需為操作事先建立或複製備份,可直接從已開啟或已載入的目標資料庫中複製出輔助資料庫,這種技術稱之為活動資料庫複製(Active Database Duplicate)。

 

能夠建立輔助資料庫的基本要求是原目標資料庫應處於歸檔模式。當然,正常的生產庫都應當是具備這個條件的。

 

下面用例項說明,如何從我們網路上的一個生產資料庫mes中複製出一個輔助資料庫newdb到本地機器,實現活動資料庫複製。

 

1、建立口令檔案

 

輔助資料庫的口令必須與目標資料庫口令相同,透過在作業系統命令提示符下執行orapwd命令來完成

orapwd file=%Oracle_home%\database\PWDnewdb.ora password=mes entries=3 force=y

 

這裡口令檔案採用Windows系統下Oracle口令檔案標準的命名方式,即PWD<sid>.ora的形式。

 

2、編制靜態初始化引數檔案並建立相應目錄

 

檔案中一般需要指定以下幾個重要引數:

db_name:資料庫名稱

db_block_size:資料塊大小,應當與原資料庫匹配,如果未指定,則預設為2KB。而一般建立的資料庫塊大小預設都是8KB,所以這裡需要特別指定

control_files:控制檔案路徑

db_file_name_convert:用於轉換資料檔案和臨時檔案路徑的字串對

log_file_name_convert:用於轉換聯機日誌檔案路徑的字串對

log_archive_dest_1:歸檔日誌檔案目標位置

log_archive_format:歸檔日誌檔案命名格式

db_recovery_file_dest:閃回恢復區目標位置

db_recovery_file_dest_size:閃回恢復區大小

 

引數檔案路徑放置於%ORACLE_HOME%\database,按照pfile檔案的命名規則,檔名應為INITnewdb.ora,文字內容如下,缺少的目錄需手工建立

db_name=newdb

db_block_size=8192

control_files=('D:\ORADATA\NEWDB\CONTROL01.CTL','D:\ORADATA\FLASH_RECOVERY_AREA\NEWDB\CONTROL02.CTL')

db_file_name_convert=('D:\ORADATA\MES','D:\ORADATA\NEWDB')

log_file_name_convert=('D:\ORADATA\MES','D:\ORADATA\NEWDB')

log_archive_dest_1='location=d:\oradata\newdb\archivelog'

log_archive_format='arc_%d_%t_%r_%s.log'

db_recovery_file_dest='d:\oradata\flash_recovery_area'

db_recovery_file_dest_size=4g

 

3、建立Oracle例項服務

 

在作業系統命令提示符下執行oradim命令

oradim -new -sid newdb

 

4、連線空閒例項並啟動到nomount狀態

 

在作業系統命令提示符下切換SID到輔助庫

set oracle_sid=newdb

sqlplus / as sysdba

 

啟動例項到nomount狀態

startup nomount

 

5、構建spfile並重啟例項到nomount狀態

 

由pfile建立spfile

create spfile from pfile;

 

重啟例項到nomount狀態

shutdown abort

startup nomount

 

6、配置監聽和服務名

 

配置好本地機器的資料庫監聽和服務名,同時也要配置好目標機器上的服務名,確保本地機器和目標機器都能夠彼此連線到目標資料庫和輔助資料庫。

 

7、對目標庫做日誌切換

 

由於Duplicate過程對輔助庫執行不完整恢復,一直恢復到目標庫最後的歸檔日誌檔案為止。因此輔助庫並不包含目標庫尚未進入歸檔的事務。若要儘可能的與目標庫一致,可在Duplicate前先對目標庫做幾次日誌切換。

 

在作業系統命令提示符下切換SID到目標庫

set oracle_sid=mes

sqlplus / as sysdba

 

連續做三次日誌切換

alter system switch logfile;

alter system switch logfile;

alter system switch logfile;

 

8、用RMAN命令同時連線到目標資料庫和輔助資料庫

 

在作業系統命令提示符下啟動RMAN,這裡使用者名稱和密碼不能省略,否則複製不會成功

rman target sys/mes@mes auxiliary sys/mes@newdb

 

9、執行Duplicate活動資料庫複製

 

duplicate target database to newdb from active database nofilenamecheck;

 

命令中nofilenamecheck表示不對檔名進行檢查,如果輔助庫和目標庫檔名稱相同則需要該選項。

 

至此完成活動資料庫複製,從生產庫mes中複製出一份新的資料庫newdb到本地機器。於是我們可以在本地克隆出的資料庫上進行自己的開發、測試和學習研究,而不影響原庫的執行。

 

說明:複製過來的庫聯機日誌檔案預設在閃回恢復區,根據需要可以考慮重定向。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28974745/viewspace-2137058/,如需轉載,請註明出處,否則將追究法律責任。

相關文章