搭建DG(data guard),及搭建過程中遇到的一些小問題


一.准備工作:主庫:虛擬機名稱host06 主機名:host06 IP:192.168.100.60 db_name&SID:ENMO  db_unique_name:PROD 存儲:文件系統

                 備庫:虛擬機名稱:host07 主機名:host07 IP:192.168.100.70 db_name&SID:ENMO db_unique_name:SBDB 存儲:文件系統

 

二.主庫:

1.數據庫歸檔並強制生成日志

[oracle@host06 ~]$ sqlplus / as sysdba

SQL> select status from v$instance;

SQL> archive log list;

Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Oldest online log sequence     4
Current log sequence           6

SQL> shutdown immediate;

SQL> alter database archivelog;

SQL> alter database force logging;

SQL> alter database open;

SQL> archive log list; 
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Oldest online log sequence     4
Next log sequence to archive   6
Current log sequence           6
SQL> select force_logging from v$database;

FOR
---
YES

2.主庫創建 standby logfile,原則是最大日志組數+1

SQL> select group#,member from v$logfile; 查看日志組數

SQL> select group#,bytes/1024/1024 as size_m from v$log; 查看日志組大小

SQL> alter database add standby logfile group 4 ('/u01/app/oracle/oradata/ENMO/standby_redo04.log') size 50m;  創建standby logfile

SQL> alter database add standby logfile group 5 ('/u01/app/oracle/oradata/ENMO/standby_redo05.log') size 50m;

SQL>  alter database add standby logfile group 6 ('/u01/app/oracle/oradata/ENMO/standby_redo06.log') size 50m;

SQL> alter database add standby logfile group 7 ('/u01/app/oracle/oradata/ENMO/standby_redo07.log') size 50m;

3.查看添加的日志組

SQL> select group#,sequence#,bytes,status from v$standby_log;

    GROUP#  SEQUENCE#      BYTES STATUS
---------- ---------- ---------- ----------
         4          0   52428800 UNASSIGNED
         5          0   52428800 UNASSIGNED
         6          0   52428800 UNASSIGNED
         7          0   52428800 UNASSIGNED

SQL> select group#,type,member from v$logfile;

4.主庫查看當前參數文件

SQL> host                   
[oracle@host06 ~]$ cd $ORACLE_HOME/dbs
[oracle@host06 dbs]$ ls
hc_ENMO.dat  init.ora  lkENMO  orapwENMO  spfileENMO.ora

5.生成pfile文件並修改

SQL> create pfile from spfile;

File created.

SQL> host
[oracle@host06 ~]$ cd $ORACLE_HOME/dbs
[oracle@host06 dbs]$ ls
hc_ENMO.dat  initENMO.ora  init.ora  lkENMO  orapwENMO  spfileENMO.ora
[oracle@host06 dbs]$ vi initENMO.ora

追加如下內容

db_unique_name=PROD
log_archive_format=%t_%s_%r.arc
log_archive_config='DG_CONFIG=(PROD,SBDB)'
LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/FRA
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PROD'
LOG_ARCHIVE_DEST_2='SERVICE=ENMO70      LGWR                               SYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=SBDB'
log_archive_dest_state_1=ENABLE
log_archive_dest_state_2=ENABLE
LOG_ARCHIVE_MAX_PROCESSES=4
## Paraneters which using for switch over from Primary to Standby.
fal_server=ENMO70
standby_file_management=AUTO
db_file_name_convert='ENMO','ENMO'
log_file_name_convert='ENMO','ENMO'

6.通過pfile重新生成spfile並啟動數據庫

SQL> shutdown immediate;

SQL> create spfile from pfile;

SQL> startup

SQL> show parameter name;

7.主庫配置tnsnames(注:數據庫service_name默認與db_unique_name相同)

[oracle@host06 dbs]$ cd $ORACLE_HOME/network/admin
[oracle@host06 admin]$ ls
listener.ora  samples  shrept.lst
[oracle@host06 admin]$ vi tnsnames.ora
ENMO60 =
  (DESCRIPTION =
    (ADDESS_LIST =
      (ADDERSS = (PROTOCOL = TCP)(HOST = 192.168.100.60)(PORT = 1521))
    )
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = PROD)
    )
   )

ENMO70 =
 (DESCRIPTION =
  (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.70)(PORT = 1521))
  )
  (CONNECT_DATA =
   (SERVER = DEDICATED)
   (SERVICE_NAME = SBDB)
  )
 )

8.主庫 拷貝相關文件至備庫

找到主庫文件所在目錄

[oracle@host06 admin]$ cd $ORACLE_HOME/dbs

[oracle@host06 dbs]$ ls
hc_ENMO.dat  initENMO.ora  init.ora  lkENMO  lkPROD  orapwENMO  spfileEN

拷貝密碼文件

[oracle@host06 dbs]$ scp orapwENMO oracle@192.168.100.70:$ORACLE_HOME/dbs/orapwENMO

拷貝pfile參數文件

[oracle@host06 dbs]$ scp initENMO.ora oracle@192.168.100.70:$ORACLE_HOME/dbs/initENMO.ora

拷貝tnsnames配置文件

[oracle@host06 dbs]$ scp $ORACLE_HOME/network/admin/tnsnames.ora oracle@192.168.100.70:$ORACLE_HOME/network/admin/tnsnames.ora

二.備庫

1.備庫創建靜態監聽並啟動

[oracle@host07 admin]$ cd $ORACLE_HOME/dbs
[oracle@host07 dbs]$ ls
initENMO.ora  init.ora  orapwENMO
[oracle@host07 dbs]$ vi initENMO.ora

因為主庫備庫的DB_NAME和SID相同,所以只需改如下參數(已加粗)即可

db_unique_name=SBDB

log_archive_format=%t_%s_%r.arc

log_archive_config='DG_CONFIG=(PROD,SBDB)'

LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/FRA

VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=SBDB'

LOG_ARCHIVE_DEST_2='SERVICE=SBDB60      LGWR                               SYNC

VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PROD'

log_archive_dest_state_1=ENABLE

log_archive_dest_state_2=ENABLE

LOG_ARCHIVE_MAX_PROCESSES=4

## Paraneters which using for switch over from Primary to Standby.

fal_server=SBDB60

standby_file_management=AUTO

db_file_name_convert='ENMO','ENMO'

"initENMO.ora" 38L, 1415C written

2.按照參數創建文件目錄

[oracle@host07 dbs]$ mkdir -p /u01/app/oracle/admin/ENMO/adump
[oracle@host07 dbs]$ mkdir -p /u01/app/oracle/oradata/ENMO/
[oracle@host07 dbs]$ mkdir -p /u01/app/oracle/FRA

3.備庫通過pfile生成spfile並啟動數據庫至nomount

[oracle@host07 dbs]$ echo $ORACLE_SID

SQL> create spfile from pfile;

SQL> startup nomount;

三.在主庫操作,用RMAN auxiliary恢復數據庫

[oracle@host06 dbs]$ rman target sys/oracle@enmo60 auxiliary sys/oracle@enmo70

Recovery Manager: Release 11.2.0.4.0 - Production on Tue May 2 02:47:05 2017

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:

ORA-12533: TNS:illegal ADDRESS parameters

加粗部分報錯說明 tnsnames.ora 的 ‘ADDRESS ’寫錯了

action:cd $ORACLE_HOME/network/admin

          vi tnsnames.ora

注:修改完畢一定要在主庫和備庫都重新啟動一下監聽(lsnrctl stop  lsnrctl start)

4.再次執行連接rman的命令

[oracle@host06 dbs]$ rman target sys/oracle@enmo60 auxiliary sys/oracle@enmo70

5.連接成功

Recovery Manager: Release 11.2.0.4.0 - Production on Tue May 2 03:29:19 2017

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ENMO (DBID=784235869)
connected to auxiliary database: ENMO (not mounted)

6.執行恢復命令

RMAN> duplicate target database for standby from active database dorecover nofilenamecheck;

四。在備庫應用日志同步數據

[oracle@host07 dbs]$ sqlplus / as sysdba

SQL> select database_role,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY MOUNTED

SQL> alter database recover managed standby database using current logfile disconnect from session;

五。啟庫

開啟備庫應用日志之后沒取消應用日志,直接啟庫,報錯

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-10456: cannot open standby database; media recovery session may be in
progress

備庫取消應用日志,啟庫

SQL> alter database recover managed standby database cancel;

Database altered.

SQL> alter database open;

Database altered.

六。做快照

切換物理備庫為snapshot standby,報錯

SQL> alter database convert to snapshot standby;
alter database convert to snapshot standby
*
ERROR at line 1:
ORA-38784: Cannot create restore point 'SNAPSHOT_STANDBY_REQUIRED_05/02/2017
04:43:13'.
ORA-38786: Recovery area is not enabled.

解決辦法:(1)SQL> show parameter recovery;

                      NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string
db_recovery_file_dest_size           big integer 0
recovery_parallelism                 integer     0
SQL> alter system set db_recovery_file_dest='/u01/recovery';
alter system set db_recovery_file_dest='/u01/recovery'

               (2)SQL> alter system set db_recovery_file_dest_size=3G;

                (3) 創建一個目錄用於存放快速恢復區

                      [oracle@host07 ~]$ cd /u01

                      [oracle@host07 u01]$ mkdir recovery

                 (4)SQL> alter system set db_recovery_file_dest='/u01/recovery';

解決完報錯就可以執行快照

SQL> alter database convert to snapshot standby;

七:查看快照信息(可以查看alert日志,會發現數據庫創建了一個guaranteed restore point,確保我們切回主備,可應用日志)

 

SQL> show parameter user_dump;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest                       string      /u01/app/oracle/diag/rdbms/sbd
b/ENMO/trace

[oracle@host07 u01]$ cd /u01/app/oracle/diag/rdbms/sbdb/ENMO/trace

[oracle@host07 trace]$ tail -100f alert_ENMO.log

 alter database convert to snapshot standby
Starting background process RVWR
Tue May 02 04:47:40 2017
RVWR started with pid=28, OS id=24152
Allocated 3981120 bytes in shared pool for flashback generation buffer
Created guaranteed restore point SNAPSHOT_STANDBY_REQUIRED_05/02/2017 04:47:40
Killing 3 processes with pids 24140,24144,24148 (all RFS) in order to disallow current and future RFS connections. Requested by OS process 24071
All dispatchers and shared servers shutdown

八。查看備庫數據庫狀態,並從快照狀態恢復至物理狀態

SQL> select database_role,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE
---------------- --------------------
SNAPSHOT STANDBY MOUNTED

 

報錯

SQL> alter database convert to physical standby;
alter database convert to physical standby
*
ERROR at line 1:
ORA-16433: The database must be opened in read/write mode.

解決:SQL> alter database open;

       Database altered.

       SQL> select open_mode from v$database;

       OPEN_MODE
       --------------------
       READ WRITE

      

SQL> select database_role,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE
---------------- --------------------
SNAPSHOT STANDBY READ WRITE

SQL> shutdown immediate

 SQL> startup mount;
 SQL> alter database convert to physical standby;

SQL> select status from v$instance;

STATUS
------------
STARTED

切換完成后需要重啟到mount應用日志

SQL> shutdown immediate;

 SQL> startup mount;
SQL> alter database recover managed standby database using current logfile disconnect from session
 

SQL> select database_role,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY MOUNTED

  SQL> alter database recover managed standby database cancel;
  SQL> alter database open; 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM