DataGuard 搭建 uweb 分行資料庫

beatony發表於2010-05-18

STANDBY 建立步驟 (分行資料庫uweb)

環境:

   104 主庫資料庫環境

   89  備庫資料庫環境

主庫環境(104

 1: 主庫Enable Force Logging

  ALTER DATABASE FORCE LOGGING; 

 2:主庫配置 Standby Redo Log 

ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 '/rman/standby_log/redo1_1.log' size 314572800;

ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 '/rman/standby_log/redo2_1.log' size 314572800;

ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 '/rman/standby_log/redo3_1.log' size 314572800;

ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 '/rman/standby_log/redo7_1.log' size 314572800;

二:tnsnames.ora下新增

1:104環境

uweb=

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.160.1.104)(PORT = 1521))

    )

    (CONNECT_DATA =

     (SID = uweb)

    )

  )

uweb2=

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.160.67.104)(PORT = 1521))

    )

    (CONNECT_DATA =

     (SID = uweb2)

    )

  )

測試:

sqlplus system/system@uweb

sqlplus system/system@uweb2

2:89環境:

uweb =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.160.1.104)(PORT = 1521))

    )

    (CONNECT_DATA =

     (SID = uweb)

    )

  )

uweb2=

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.160.67.104)(PORT = 1521))

    )

    (CONNECT_DATA =

     (SID = uweb2)

    )

  )

Sqlplus system/system@uweb

Sqlplus system/system@uweb2

三:更改引數

1:備份主環境spfile (104)

   create pfile='/home/oracle/inituweb_bak.ora from spfile;

2: 修改主環境spfile(104) 見附件(beadb_pfile.ora)

   

Alter  system set  log_archive_dest_1='location=/rman/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=uweb';

Alter system set  LOG_ARCHIVE_DEST_2='SERVICE=uweb2 OPTIONAL LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=uweb2';

Alter system set  DB_UNIQUE_NAME=uweb scope=spfile;

Alter system set  SERVICE_NAMES=uweb scope=spfile;

Alter system set  LOG_ARCHIVE_CONFIG='DG_CONFIG=(uweb,uweb2)';

Alter system set  LOG_ARCHIVE_DEST_STATE_1=ENABLE;

Alter system set  LOG_ARCHIVE_DEST_STATE_2=ENABLE;

Alter system set  REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE scope=spfile;

Alter system set  STANDBY_FILE_MANAGEMENT=AUTO;

Alter system set  INSTANCE_NAME=uweb scope=spfile;

Alter system set  FAL_SERVER=uweb2;

Alter system set  FAL_CLIENT=uweb;

3: 修改standby pfile 見附件(beadb2_pfile.ora)(89環境)

  /home/oracle/uweb2pfile.ora

4: 建立spfile (89環境)

 create spfile from pfile='/home/oracle/uweb2pfile.ora';

四:RMAN備份主庫(104)

1:

SQL> archive log list

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /archive

Oldest online log sequence     1

Next log sequence to archive   1

Current log sequence           1

2:

rman target /

crosscheck archivelog all;

delete noprompt expired archivelog all;

crosscheck backup;

delete noprompt obsolete;

delete expired copy;

run {

allocate channel c1 type disk;

allocate channel c2 type disk;

allocate channel c3 type disk;

allocate channel c4 type disk;

allocate channel c5 type disk;

allocate channel c6 type disk;

backup database format '/rman/archive/rman/full_level_%U';

backup current controlfile format '/rman/archive/rman/control_bak_%T';

backup current controlfile for standby format '/rman/archive/rman/control_stdbak_%T';

release channel c1;

release channel c2;

release channel c3;

release channel c4;

release channel c5;

release channel c6;

}

delete archivelog all completed before 'sysdate-1/2';

shutdown immediate;

startup

3: 傳輸rman備份(主庫與備庫的rman路徑需要一致)

scp /rman/archive/rman/* 10.161.67.104:/rman/archive/rman

五:建立並複製密碼檔案

1:

建立主庫密碼檔案(檢視是否存在)不存在即建立 (104環境)

orapwd file='$ORACLE_HOME/dbs/orapwuweb' password=sys

orapwd file='$ORACLE_HOME/dbs/orapwuweb2' password=sys

2:複製密碼檔案

echo $ORACLE_HOME

scp $ORACLE_HOME/dbs/orapwuweb 192.168.143.219:/oracle/product/10.2.0/db_1/dbs/orapwuweb2

六:standby環境建立目錄

c$ORACLE_BASE/admin/uweb2

mkdir adump udump bdump cdump

七:使用RMAN Duplicate 建立standby 資料庫

1:備庫上將資料庫開啟至nomount狀態

sqlplus  /as sysdba

Sql>startup nomount;

2:在主庫上執行(104環境) 

Sql>alter system archive log current;

3: 備庫上利用RMAN恢復資料庫

rman target sys/sys@uweb auxiliary /


run {

allocate auxiliary channel c1 type disk;

allocate auxiliary channel c2 type disk;

allocate auxiliary channel c3 type disk;

allocate auxiliary channel c4 type disk;

allocate auxiliary channel c5 type disk;

allocate auxiliary channel c6 type disk;

duplicate target database for standby dorecover nofilenamecheck;

release channel c1;

release channel c2;

release channel c3;

release channel c4;

release channel c5;

release channel c6;

}

4: 備庫上建立standby redo log(如不存在的話)

備庫執行

Select * from v$standby_log;

(如不存在standby redo log的話,執行以下命令建立standby redo log)

alter database recover managed standby database cancel;

ALTER DATABASE ADD STANDBY LOGFILE GROUP 1 '/rman/standby_log/redo1_1.log' size 314572800;

ALTER DATABASE ADD STANDBY LOGFILE GROUP 2 '/rman/standby_log/redo2_1.log' size 314572800;

ALTER DATABASE ADD STANDBY LOGFILE GROUP 3 '/rman/standby_log/redo3_1.log' size 314572800;

ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 '/rman/standby_log/redo7_1.log' size 314572800;

5:將備庫資料庫置於恢復模式

備庫執行

select name,db_unique_name,database_role from v$database;

alter database recover managed standby database disconnect;  

主庫執行:

alter system set log_archive_dest_state_2 = 'defer';

alter system set log_archive_dest_state_2 = 'enable'; 

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; 

select name,database_role,switchover_status from v$database; 

八:檢視主庫與備庫是否一致

主庫上執行:

alter system switch logfile;

語句一:主庫上執行:

SELECT THREAD# "Thread",SEQUENCE# "Last Sequence Generated" 
FROM V$ARCHIVED_LOG 
WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#) 
ORDER BY 1;

語句二:備庫上執行:

SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received", APPL.SEQUENCE# "Last Sequence Applied", (ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference" 
FROM 
(SELECT THREAD# ,SEQUENCE# FROM V$ARCHIVED_LOG WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)) ARCH, 
(SELECT THREAD# ,SEQUENCE# FROM V$LOG_HISTORY WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$LOG_HISTORY GROUP BY THREAD#)) APPL 
WHERE 
ARCH.THREAD# = APPL.THREAD# 
ORDER BY 1;

語句三: 主庫與備庫均執行

SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

1. Check for GAP on standby 

檢視語句三的執行結果:

(結果必須均為no row select,如果存在查詢結果,表示在備庫上缺少歸檔日誌

2. 檢視日誌接受情況

檢視語句一與語句二的執行結果

主庫上的Last Sequence Generated 值必須與備庫上的Last Sequence Generated一致,如果不一致代表主庫與備庫不一致。

3. 檢視備庫上日誌應用情況

  檢視語句二的執行結果

  欄位Difference的值必須為0,為0代表已接受的日誌已經被應用到備庫上面,主庫與備庫一致。

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

相關文章