1. 程式人生 > 實用技巧 >Data Guard Physical Standby Setup in Oracle11.2 & 後加 Data Guard Broker 之01(先無Broker)

Data Guard Physical Standby Setup in Oracle11.2 & 後加 Data Guard Broker 之01(先無Broker)

1.假設條件

您有兩臺伺服器,其中裝有作業系統,並在其上安裝了Oracle Linux 7 和Oracle Database 11.2.0.4。
主伺服器xag1124a 上安裝了例項。
備伺服器xag1124b 上僅軟體安裝及監聽。

2.檢查主資料庫是否處於存檔日誌模式

[oracle@xag1124a ~]$ sqlplus / as sysdba

SQL> select log_mode,open_mode,flashback_on from v$database;

LOG_MODE     OPEN_MODE		  FLASHBACK_ON
------------ -------------------- ------------------
ARCHIVELOG   READ WRITE 	  NO

SQL> show parameter recovery;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest		     string	 /u02/fra
db_recovery_file_dest_size	     big integer 10G
recovery_parallelism		     integer	 0

3.主庫如果是noarchivelog模式,則切換到archivelog模式(可選)

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

4.主庫啟用強制日誌記錄

ALTER DATABASE FORCE LOGGING;

ALTER SYSTEM SWITCH LOGFILE;

5.主檢查DB_NAME和DB_UNIQUE_NAME引數的設定

SQL> show parameter db_name

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_name 			     string	 DB11G

SQL> show parameter db_unique_name

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_unique_name			     string	 DB11G

SQL> alter system set db_unique_name='DB11G_PRI' scope=spfile;

SQL> shutdown immediate;

SQL> startup;

SQL> show parameter db_unique_name

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_unique_name			     string	 DB11G_PRI

6.初始化引數

ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB11G_PRI,DB11G_STBY)';

--Maximum Performance
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;

ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=30;
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

ALTER SYSTEM SET FAL_SERVER=DB11G_STBY;
-- ALTER SYSTEM SET DB_FILE_NAME_CONVERT='DB11G_STBY','DB11G_PRI' SCOPE=SPFILE;
--ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='DB11G_STBY','DB11G_PRI'  SCOPE=SPFILE;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

7.Service Setup(主備)

cat  $ORACLE_HOME/network/admin/tnsnames.ora
------------------------------------------------------------------------------
DB11G_PRI =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = xag1124a)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DB11G)
    )
  )

DB11G_STBY =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = xag1124b)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DB11G)
    )
  )
------------------------------------------------------------------------------

7.主庫備份(可選)

$ rman target=/

RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

8.建立備用控制檔案和PFILE(在主庫上操作)

ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/db11g_stby.ctl';
CREATE PFILE='/tmp/initDB11G_stby.ora' FROM SPFILE;

#修改PFILE,使條目與備用資料庫相關。我正在複製原始伺服器,因此在我的情況下,我只需要修改以下引數。
*.db_unique_name='DB11G_STBY'
*.fal_server='DB11G_PRI'
*.log_archive_dest_2='SERVICE=db11g_pri ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_PRI'

9.手動方式建立備庫(和如下方法二選一)--備機上操作

9.1 在備用伺服器上建立必要的目錄

$ mkdir -p /u01/app/oracle/oradata/DB11G
$ mkdir -p /u01/app/oracle/fast_recovery_area/DB11G
$ mkdir -p /u01/app/oracle/admin/DB11G/adump

9.2 將檔案從主伺服器複製到備用伺服器

$ # Standby controlfile to all locations.
$ scp oracle@xag1124a:/tmp/db11g_stby.ctl /u01/app/oracle/oradata/DB11G/control01.ctl
$ cp /u01/app/oracle/oradata/DB11G/control01.ctl /u01/app/oracle/oradata/DB11G/control02.ctl

$ # Archivelogs and backups
$ scp -r oracle@ol5-112-dga1:/u02/fra/DB11G/archivelog /u02/fra/DB11G
$ scp -r oracle@ol5-112-dga1:/u02/fra/DB11G/backupset  /u02/fra/DB11G

$ # Parameter file.
$ scp oracle@xag1124a:/tmp/initDB11G_stby.ora /tmp/initDB11G_stby.ora

$ # Remote login password file.
$ scp oracle@xag1124a:$ORACLE_HOME/dbs/orapwDB11G $ORACLE_HOME/dbs

9.3 啟動監聽器

lsnrctl start

9.4 恢復備份

$ export ORACLE_SID=DB11G
$ sqlplus / as sysdba

SQL> CREATE SPFILE FROM PFILE='/tmp/initDB11G_stby.ora';

9.5 恢復備份檔案

$ export ORACLE_SID=DB11G
$ rman target=/

RMAN> STARTUP MOUNT;
RMAN> RESTORE DATABASE;

9.6 建立重做日誌

#為備用資料庫建立聯機重做日誌
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL;
ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/DB11G/online_redo01.log') SIZE 50M;
ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/DB11G/online_redo02.log') SIZE 50M;
ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/DB11G/online_redo03.log') SIZE 50M;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

#在備用資料庫和主資料庫上都建立備用重做日誌
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 ('/u01/app/oracle/oradata/DB11G/standby_redo01.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 11 ('/u01/app/oracle/oradata/DB11G/standby_redo02.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 12 ('/u01/app/oracle/oradata/DB11G/standby_redo03.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 13 ('/u01/app/oracle/oradata/DB11G/standby_redo04.log') SIZE 50M;

10.自動方式建立備庫(和如上方法二選一)

10.1 在備用伺服器上建立必要的目錄

$ mkdir -p /u01/app/oracle/oradata/DB11G
$ mkdir -p /u01/app/oracle/fast_recovery_area/DB11G
$ mkdir -p /u01/app/oracle/admin/DB11G/adump

10.2 將檔案從主伺服器複製到備用伺服器

$ # Standby controlfile to all locations.
$ scp oracle@xag1124a:/tmp/db11g_stby.ctl /u01/app/oracle/oradata/DB11G/control01.ctl
$ cp /u01/app/oracle/oradata/DB11G/control01.ctl /u01/app/oracle/oradata/DB11G/control02.ctl

$ # Parameter file.
$ scp oracle@xag1124a:/tmp/initDB11G_stby.ora /tmp/initDB11G_stby.ora

$ # Remote login password file.
$ scp oracle@xag1124a:$ORACLE_HOME/dbs/orapwDB11G $ORACLE_HOME/dbs

10.3 使用 active duplicate 時 備用伺服器需要在“ listener.ora”檔案中進行靜態偵聽器配置

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = DB11G)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = DB11G)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = xag1124b)(PORT = 1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

10.4 在備用伺服器上啟動偵聽器

$ lsnrctl start

10.5 在主伺服器上建立備用重做日誌

#該DUPLICATE命令在備用資料庫上自動建立備用資料庫重做日誌。為了確保將主資料庫配置為進行切換,我們必須在主伺服器上建立備用重做日誌
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo01.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo02.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo03.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo04.log') SIZE 50M;

10.6 在備用伺服器上啟動輔助例項

$ export ORACLE_SID=DB11G
$ sqlplus / as sysdba

SQL> STARTUP NOMOUNT PFILE='/tmp/initDB11G_stby.ora';