oracle 11gr2 活動資料庫複製(active database duplication)

selectshen發表於2015-10-29

        oracle的自動化程度越來越高,在oracle 11g中,可以直接在網路上覆制一個資料庫而不必備份和提供源資料庫檔案到目的庫.
在測試中發現和以往的duplicate在細節上有此不同,容易出一些小錯誤,下面測試並對錯誤說明.


os:centos 6.6
oracle:11.2.0.4
host:ct6605(192.108.56.121) ct6604(192.108.56.120)
這裡要把ct6605上的ct6605資料庫複製到ct6604上,並且資料庫名更改為ct66

1.在ct6604上建相應目錄
[oracle@ct6604 db_1]$ mkdir -p /u01/app/oracle/admin/ct66/adump
[oracle@ct6604 db_1]$ mkdir -p /u01/app/oracle/fast_recovery_area/ct66
[oracle@ct6604 db_1]$ mkdir -p /u02/oradata/ct66
[oracle@ct6604 db_1]$ mkdir -p /u03/archivelog/ct66

2.在ct6604上建立和ct6605相同密碼的密碼檔案,當然也可以直接從ct6605上scp過來
[oracle@ct6604 dbs]$ cd /u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@ct6604 dbs]$ orapwd file=orapwct66 password=system entries=20 ignorecase=n

3.在ct6604上啟動ct66例項.
此處其實是可以不用pfile啟動的,指定ORACLE_SID,用nopfile啟動,這樣最簡單.
如果$ORACLE_HOME/dbs下存在initct66.ora或spfilect66.ora,刪除.
[oracle@ct6604 dbs]$ ORACLE_SID=ct66
[oracle@ct6604 dbs]$ rman target /
RMAN> startup nomount;
RMAN> exit

使用spfile啟動來複制,會報
RMAN-05537: DUPLICATE without TARGET connection when auxiliary instance is started with spfile cannot use SPFILE clause

也許你沒有建spfile,但這可能是你上次複製報錯的步驟中產生的.


4.在ct6605 tnsnames.ora上新增到ct66連線的tnsname
t_ct66 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.108.56.120)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ct66)
    )
  )

這裡如果沒有新增或者和第5步中的tnsname名字不同,在複製時就會報
ORA-17627: ORA-12154: TNS:could not resolve the connect identifier specified
ORA-17629: Cannot connect to the remote database server
 
 
5.在ct605 tnsnames.ora上新增到ct6605和自身ct66的連線
s_ct6605 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.108.56.121)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ct6605)
    )
  )
t_ct66 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.108.56.120)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ct66)
    )
  )

這裡ct66自身也是要新增tnsname的,不新增自身的tnsname,透過 rman auxiliary / 連線,在複製時會報
RMAN-06217: not connected to auxiliary database with a net service name

6.在ct6604 listener.ora檔案中新增ct66的靜態註冊
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ct66)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = ct66)
    )
)

這裡是為了讓ct66 nomount時,對應的監聽處於unknown狀態,否則複製時會報
RMAN-04006: error from auxiliary database: ORA-12528: TNS:listener: all appropriate instances are blocking new connections

7.開始複製資料庫
[oracle@ct6604 dbs]$ rman target sys/system@s_ct6605 auxiliary sys/system@t_ct66

RMAN> duplicate target database
to ct66
from active database
spfile
parameter_value_convert 'ct6605','ct66'
set log_file_name_convert 'ct6605','ct66'
db_file_name_convert 'ct6605','ct66';

到此,ct66資料庫就建立完成併為開啟狀態.

這裡還可以透過set sga_max_size,set sga_target等來設定ct66的引數.

上面在複製過程中更改了資料庫名,如果不準備更改,可能就不需要parameter_value_convert/log_file_name_convert/db_file_name_convert,
但在測試中發現如果ct6605的spfile中本身存在db/log_file_convert這些引數,複製到ct6604上後,這些引數會因為生效而可能導致錯誤,
此時可以在duplicate時還是設這些引數來遮蔽.

duplicate target database
to ct6605
from active database
spfile
parameter_value_convert 'xxxx','xxxx'
set log_file_name_convert 'xxxx','xxxx'
db_file_name_convert 'xxxx','xxxx'
nofilenamecheck;

備註:
此功能同樣支援加入for standby子句來建standby.


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

相關文章