oracle營運之–dataguard 主備庫遷移

來源:互聯網
上載者:User

task1:收集資訊準備備份:

1.在主節點,建立一個臨時目錄,比如
  mkdir -p /opt/oracle/stage
2.在目標節點建立一個同樣的目錄
  mkdir -p /opt/oracle/stage
3.在主節點,串連到主庫,並建立一個PFILE(從現有的SPFILE),並儲存到 臨時目錄裡
  SQL>create pfile='/opt/oracle/stage/initCHICAGO.ora' from spfile;
4.在主接點,建立一個主庫的備份,並把所有的塊放入臨時目錄裡
rman target /
RMAN>BACKUP DEVICE TYPE DISK FORMAT '/opt/oracle/stage/%U' database plus archivelog;
RMAN>BACKUP DEVICE TYPE DISK FORMAT '/opt/oracle/stage/%U' CURRENT CONTROLFILE FOR STANDBY;
5.在主節點,對linstener.ora,tnsnames.ora,sqlnet.ora 放入臨時目錄。
cp
$ORACLE_HOME/network/admin/*.ora /opt/oracle/stage

6.把主節點的資料拷貝到備節點
(這步我們不需要做了,因為是通過NFS mount過來的)

task2:在備節點上 建立網路服務,

1.在standby節點,把臨時的檔案夾裡listener.ora ,tnsnames.ora,sqlnet.ora 的資料拷貝到
所有standby的節點上。

2.修改standby 節點listener.ora參數,來保證每個 standby主機包含了 本節點的VIP地址。

3.修改standby 節點 的tnsnames.ora檔案,包含主RAC 節點的內容和 STANDBY節點的內容,包含了所有主和從網路的名字。你還應該修改被 local_listener以及remote_listener參數使用的 ORACLE 網路別名參數來指向每個standby主機。下面舉例,每個tnsnames.ora檔案應該包含了 下面表中所有的網路服務名字。

CHICAGO=
(DESCRIPTION =
  (ADDRESS =
    (PROTOCOL = TCP)
    (HOST = chicago_host1vip)
    (HOST = chicago_host2vip)
    (PORT = 1521)
  (CONNECT_DATA =
   (SERVICE = DEDICATED)
   (SERVICE_NAME = CHICAGO)
   )
)

BOSTON=
(DESCRIPTION =
  (ADDRESS =
    (PROTOCOL = TCP)
    (HOST = boston_host1vip)
    (HOST = boston_host2vip)
    (PORT = 1521)
  (CONNECT_DATA =
   (SERVICE = DEDICATED)
   (SERVICE_NAME = BOSTON)
   )
)

task3:建立備用的執行個體和庫

1.使能redo資料的秘密傳輸,請確定主庫和備庫之間使用了密碼檔案,並確定兩邊SYS使用者的密碼
是一致的。
 $cd $ORACLE_HOME/dbs
$orapwd file=orapwBOSTON password=oracle

2.從臨時的檔案佳中,把pfile檔案拷貝到standby 主機上並重新命名,文法如下
cp initCHICAGO1.ora  $ORACLE_HOME/dbs/initBOSTON1.ora

3.修改(從 primary 節點上拷貝過來的) standby 的初始化參數檔案,包含data guard的參數,
放在下面的table中

cluster_database = true
*.db_unique_name=CHICAGO
CHICAGO1.instance_name = CHICAGO1
CHICAGO2.instance_name = CHICAGO2
CHICAGO1.instance_number = 1
CHICAGO2.instance_number = 2
CHICAGO1.thread=1
CHICAGO2.thread=2
CHICAGO1.undo_tablespace=UNDOTBS1
CHICAGO2.undo_tablespace=UNDOTBS2
*.remote_listener=LISTENERS_CHICAGO
CHICAGO1.LOCAL_LISTENER=LISTENER_CHICAGO_HOST1
CHICAGO2.LOCAL_LISTENER=LISTENER_CHICAGO_HOST2

*.backgroup_dump_dest=
/opt/oracle/admin/CHICAGO/bdump
*.core_dump_dest=
/opt/oracle/admin/CHICAGO/cdump
*.user_dump_dest=
/opt/oracle/admin/CHICAGO/udump
*.audit_file_dest=
/opt/oracle/admin/CHICAGO/adump
*.db_recovery_dest='+RECOVERY'
*.log_archive_dest_1=
  'LOCATION=+DATA/CHICAGO/'
*.dispatchers=CHICAGOXDB

修改為
cluster_database = true
*.db_unique_name=BOSTON
CHICAGO1.instance_name = BOSTON1
CHICAGO2.instance_name = BOSTON2
CHICAGO1.instance_number = 1
CHICAGO2.instance_number = 2
CHICAGO1.thread=1
CHICAGO2.thread=2
CHICAGO1.undo_tablespace=UNDOTBS1
CHICAGO2.undo_tablespace=UNDOTBS2
*.remote_listener=LISTENERS_BOSTON
CHICAGO1.LOCAL_LISTENER=LISTENER_BOSTON_HOST1
CHICAGO2.LOCAL_LISTENER=LISTENER_BOSTON_HOST2

*.log_archive_config='dg_config=(BOSTON,CHICAGO)'
*.log_archive_dest_2='service=CHICAGO
  valid_for=(online_logfiles,primary_role)
  db_unique_name=CHICAGO'
*.db_file_name_convert='+DATA/CHICAGO/',
  '+DATA/BOSTON/','+RECOVERY/CHICAGO',
  '+RECOVERY/BOSTON'
*.log_file_name_convert='+DATA/CHICAGO/',
  '+DATA/BOSTON/','+RECOVERY/CHICAGO',
  '+RECOVERY/BOSTON'
*.standby_file_management=auto
*.fal_server='CHICAGO'
*.fal_client='BOSTON'
*.servcie_names='BOSTON'

*.backgroup_dump_dest=
/opt/oracle/admin/BOSTON/bdump
*.core_dump_dest=
/opt/oracle/admin/BOSTON/cdump
*.user_dump_dest=
/opt/oracle/admin/BOSTON/udump
*.audit_file_dest=
/opt/oracle/admin/BOSTON/adump
*.db_recovery_dest='+RECOVERY'
*.log_archive_dest_1=
  'LOCATION=USE_DB_RECOVERY_FILE_DEST'
*.dispatchers=BOSTONXDB

4.在STANDBY主機上串連到 ASM 執行個體,在磁碟組上建立一個檔案夾,這個檔案夾名字
和standby 資料庫的 DB_UNIQUE_NAME 名字一樣。
   SQL>ALTER DISKGROUP data ADD DIRECTORY '+DATA/BOSTON';

5.從standby主機 串連到 standby 資料庫上,當standby的資料庫處於IDLE狀態的時候,
建立一個SPFILE,這個SPFILE 位於 資料的磁碟組中
SQL>CREATE SPFILE='+DATA/BOSTON/spfileBOSTON.ora' FROM pfile='?/dbs/initBOSTON.ora';

6.在每個standby 主機上的 $ORACLE_HOME/dbs 檔案夾下,建立一個 pfile,名字是
initoracle_sid.ora ,包含了一個指標指向 spfile.
舉例如下:
cd $ORACLE_HOME/dbs
echo
"SPFILE='+DATA/BOSTON/spfileBOSTON.ora'">initBOSTON1.ora
7.在standby database裡面建立dump檔案夾(和初始化參數裡面設定成一樣)
mkdir -p $ORACLE_BASE/admin/BOSTON/bdump
mkdir -p $ORACLE_BASE/admin/BOSTON/cdump
mkdir -p $ORACLE_BASE/admin/BOSTON/udump
mkdir -p $ORACLE_BASE/admin/BOSTON/adump

8.當把相關的環境參數設定好了之後,(比如ORACLE_SID,ORACLE_HOME,PATH),在有臨時目錄
的standby 主機上啟動instance.
SQL>startup nomount

9.從 剛啟動 standby 執行個體的standby主機上,把主庫的內容匯入 ASM 磁碟組中。
比如
$rman target sys/oracle@CHICAGO auxiliary /
RMAN>DUPLICATE TARGET DATABASE FOR STANDBY;

10.串連到 standby的資料庫上,建立standby redo日誌來支援 standby的角色。
standby redo的大小必須和主庫的 online 日誌大小一致。建議的standby redo 日誌
的數量情況如下:
 (maximum # of logfiles +1)*maximum # of threads
這個例子為每個thread 使用了兩個線上日誌。這樣的話,standby redo 日誌的數量應該是
(2+1)*2.即,每一個thread 對應多一個 standby redo 日誌。

SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
GROUP 5 SIZE 10M,
GROUP 6 SIZE 10M,
GROUP 7 SIZE 10M;

SQL>ALTER DATABASE ADD STANDBY LOGFILE THREAD 2
GROUP 8 SIZE 10M,
GROUP 9 SIZE 10M,
GROUP 10 SIZE 10M;

上面的句子為每個組建立了兩個 standby log成員,而且每個成員大小是10M。一個成員是
通過初始化參數(DB_CREATE_FILE_DEST)裡面定義的,另一個成員是通過初始化參數
(DB_RECOVERY_FILE_DEST)設定的。這個例子確保了兩個threads中有兩個redo log組,另一個組是
group 5.
你可以通過如下命令來檢查 redo log資訊的 號碼和組號碼。
SQL>SELECT * FROM V$LOG;

你可以通過 查詢v$standby_log視圖來檢查前一個查詢的結論。
SQL>SELECT * FROM V$STANDBY_LOG;

你也能夠看到 使用查詢 V$LOGFILE 視圖來檢查成員組。
SQL>SELECT * FROM V$LOGFILE;

11.在某一個standby主機上(這個是你指定的redo 應用執行個體),開始 managed recovery 和 standby 日誌的即時應用。
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
(
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
    USING CURRENT LOGFILE  啟動real-time apply,which recovers redo from the standby redo log files as soon as they are written, without requiring them to be archived first at the physical standby database. standby的重做記錄檔是standby自己產生的還是從primary接收到的?
    DISCONNECT        indicate that Redo Apply should be performed in the background. Doing so leaves the current session available for other tasks. The FROM SESSION keywords are optional and are provided for semantic clarity.

)

12.在 cluster的任何節點 上,做註冊 資料庫的執行個體的操作,把執行個體資訊寫入
ORACLE Cluster Registry(OCR),使用 Server Control(SRVCTL) 組建。
比如:
$srvctl add database -d BOSTON -o
/opt/oracle/product/10g_db_rac
$srvctl add instance -d BOSTON -i BOSTON1 -n boston_host1
$srvctl add instance -d BOSTON -i BOSTON2 -N boston_host2

如下是對這些命令選項的描述

-d 選項指定了 資料庫的唯一名
(DB_UNIQUE_NAME)
-i 選項指定了資料庫的執行個體名
-n 選項 描述執行個體在哪個節點運行。
-o 選項指定了資料庫的HOME位置

使用OCR 來註冊ASM 執行個體
$srvctl add asm -n boston_host1 -i +ASM1 -o
/opt/oracle/product/10g_db_rac -p
/opt/oracle/product/10g_db_rac/dbs/spfile+ASM1.ora

$srvctl add asm -n boston_host2 -i +ASM2 -O
/opt/oracle/product/10g_db_rac -p
/opt/oracle/product/10g_db_rac/dbs/spfile+ASM2.ora

如下是對可選項的描述
-i 命令指定了 ASM執行個體名,如果你的ASM執行個體名字是 +ASM1,需要指定+這個選項。
在crs_stat 的輸出裡,資源名字不會有將不包含 + 參數。
-n 選項指定了 節點名字,在該節點上,asm 執行個體正在運行。

-o 選想指定了ASM 執行個體的 home目錄。
-p 選項指定了 完全合格的spfile名字。如果你選用了pfile參數,就不需要指定這個選項了。

如下的命令指定了 資料庫和 asm執行個體的關係,如果 是一個ASM執行個體的話,前面要加一個 ‘+’參數。

$srvctl modify instance -d BOSTON -i BOSTON1 -s +ASM1
$srvctl modify instance -d BOSTON -i BOSTON2 -s +ASM2
$srvctl enable asm -n boston_host1 -i +ASM1
 $srvctl enable asm -n boston_host1 -i +ASM2

-d 命令指定了 資料庫的唯一名字(DB_UNIQUE_NAME)
-i 指定了資料庫的執行個體名
-s 指定了ASM執行個體名。

從OCR的角度來看,所有的ASM執行個體用下面的命令
$srvctl start asm -n boston_host1
$srvctl start asm -n boston_host2

當你想用 多asm執行個體跑在同一個節點,只想啟動某一個 ASM執行個體,指定下面的ASM 執行個體
名。
$srvctl start asm -n boston_host1 -i +ASM1

TASK4.配置主庫的屬性來適合DATA GUARD
1.修改主庫的啟動參數來支援 primary 以及standby 規則。
*.log_archive_config='dg_config=(BOSTON,CHICAGO)'
*.log_archive_dest2='service=BOSTON
  valid_for=(online_logfiles,primary_role)
  db_unique_name=BOSTON'
*.db_file_name_convert='+DATA/BOSTON/','+DATA/CHICAGO/',
'+RECOVERY/BOSTON','+RECOVERY/CHICAGO'
*.log_file_name_convert='+DATA/BOSTON/','+DATA/CHICAGO/',
  '+RECOVERY/BOSTON','+RECOVERY/CHICAGO'
*.standby_file_management=auto
*.fal_server='BOSTON'
*.fal_client='CHICAGO'
*.service_names=CHICAGO
2.在主庫上建立 standby的 redo日誌。(略)

TASK5 確認 dataguard配置
1.在備用的資料庫上,查詢 v$ARCHIVED_LOG 視圖來確認 已歸檔檔案的存在檔案。
SQL>SELECT SEQUENCE#,FIRST_TIME,NEXT_TIME FROM
     V$ARCHIVED_LOG ORDER BY SEQUENCE#;
2.在主要資料庫上,確定如下的命令來強制一次日誌切換,並對當前的日誌進行歸檔
 SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;
3.在備庫上,查詢 V$ARCHIVED_LOG視圖來確認 redo 資訊已經接收而且在standby 接點上
已經歸檔。
sql>select SEQUENCE#,FIRST_TIME,NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.