搭建ORACLE 10G DATAGUARD示例

2010年因爲需要評估DATAGUARD 和 GOLDENGATE某些功能,搭建了環境做了一些功能比較測試
以下就是搭建環境的操作步驟


ORACLE VERSION  10.2.0.3

示例環境:

DATABASE  HOSTNAME     IP        DB_UNIQUE_NAME   ORACLE NET SERVICE NAME
主         DG1     192.168.128.2    DG1                 DG1
備         DG2     192.168.128.3    DG2                 DG2

主庫配置
將主庫設爲歸檔模式:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /oracle/archivelog
Oldest online log sequence     25
Next log sequence to archive   27
Current log sequence           27

把主庫改成強制歸檔模式:
SQL> alter database force logging;

Database altered.

在主庫添加STANDBY LOG
SQL> alter database add standby logfile group 4
  2  ('/oracle/oradata/DG1/redo04c.log') size 30m;

Database altered.

SQL> alter database add standby logfile group 5
  2   ('/oracle/oradata/DG1/redo05c.log') size 30m;

Database altered.

驗證是否添加成功
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;

    GROUP#    THREAD#  SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
         4          0          0 YES UNASSIGNED
         5          0          0 YES UNASSIGNED


主庫初始參數設置
產生主庫的PFILE
SQL>CREATE PFILE FROM SPFILE;
然後設置以下參數:
*.db_name='DG1'
*.db_unique_name='DG1'
*.log_archive_config='DG_CONFIG=(DG1,DG2)'
*.log_archive_dest_1='LOCATION=/oracle/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DG1'
*.log_archive_dest_2='SERVICE=DG2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DG2'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.remote_login_passwordfile='EXCLUSIVE'
*.FAL_SERVER=DG2
*.FAL_CLIENT=DG1
*.DB_FILE_NAME_CONVERT='/oracle/oradata/DG2','/oracle/oradata/DG1'
*.LOG_FILE_NAME_CONVERT='/oracle/oradata/DG2','/oracle/oradata/DG1'
*.STANDBY_FILE_MANAGEMENT=AUTO
*.log_archive_max_processes=5

備份主庫
SQL> SHUTDOWN IMMEDIATE;
使用OS 命令將所有數據文件 LOG 文件備份並COPY到備庫

產生備庫控制文件
SQL>STARTUP MOUNT;
SQL>ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/TMP/DG2.CTL';
SQL>ALTER DATABASE OPEN;



在備機建立相應文件夾

備庫設置:
建立相關文件夾
[oracle@DG2 ~]$ mkdir -p /oracle/oradata
[oracle@DG2 ~]$ mkdir -p /oracle/archivelog
[oracle@DG2 ~]$ mkdir -p /oracle/app/admin/DG2/adump
[oracle@DG2 ~]$ mkdir -p /oracle/app/admin/DG2/bdump
[oracle@DG2 ~]$ mkdir -p /oracle/app/admin/DG2/cdump
[oracle@DG2 ~]$ mkdir -p /oracle/app/admin/DG2/udump

備庫初始化參數設置:
將主庫的PFILE COPY到備庫$ORACLE_HOME/dbs下
將從主庫產生的STANDBY 控制文件COPY到相應目錄
更改如下:
DG2.__db_cache_size=75497472
DG2.__java_pool_size=4194304
DG2.__large_pool_size=4194304
DG2.__shared_pool_size=79691776
DG2.__streams_pool_size=0
*.audit_file_dest='/oracle/app/admin/DG2/adump'
*.background_dump_dest='/oracle/app/admin/DG2/bdump'
*.core_dump_dest='/oracle/app/admin/DG2/cdump'
*.user_dump_dest='/oracle/app/admin/DG2/udump'
*.control_files='/oracle/oradata/DG2/control01.ctl','/oracle/oradata/DG2/control02.ctl','/oracle/oradata/DG2/control03.ctl'
*.db_name='DG1'
*.db_unique_name='DG2'
*.log_archive_config='DG_CONFIG=(DG1,DG2)'
*.log_archive_dest_1='LOCATION=/oracle/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DG2'
*.log_archive_dest_2='SERVICE=DG1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DG1'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.remote_login_passwordfile='EXCLUSIVE'
*.FAL_SERVER=DG1
*.FAL_CLIENT=DG2
*.DB_FILE_NAME_CONVERT='/oracle/oradata/DG1','/oracle/oradata/DG2'
*.LOG_FILE_NAME_CONVERT='/oracle/oradata/DG1','/oracle/oradata/DG2'
*.STANDBY_FILE_MANAGEMENT=AUTO
*.log_archive_max_processes=5

在備庫創建密碼文件
orapwd file=orapwDG2 entries=5 password=xhl

創建備庫SPFILE,在備庫連接到IDLE INSTANCE後
SQL>CREATE SPFILE FROM PFILE;


主 備 庫都要設置監聽與服務
如下:
備庫
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = DG2)
      (ORACLE_HOME = /oracle/app/product/10.2.0/db_1)
      (SID_NAME = DG2)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = DG2)(PORT = 1521))
  )

DG2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.128.3)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DG2)
    )
  )

DG1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.128.2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DG1)
    )
  )

主庫:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = DG1)
      (ORACLE_HOME = /oracle/app/product/10.2.0/db_1)
      (SID_NAME = DG1)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = DG1)(PORT = 1521))
  )

DG2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.128.3)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DG2)
    )
  )

DG1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.128.2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DG1)
    )
  )

重啓監聽

 
啓動備庫
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;


驗證是否成功
在主庫
SQL> ALTER SYSTEM SWITCH LOGFILE;
在備庫查詢:
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

查看ALTER LOG 
Primary database is in MAXIMUM PERFORMANCE mode
RFS[3]: Successfully opened standby log 4: '/oracle/oradata/DG2/redo04c.log'
Tue Feb 23 15:09:30 2010
Primary database is in MAXIMUM PERFORMANCE mode
RFS[3]: Successfully opened standby log 4: '/oracle/oradata/DG2/redo04c.log'
Tue Feb 23 15:09:42 2010
Primary database is in MAXIMUM PERFORMANCE mode
RFS[3]: Successfully opened standby log 4: '/oracle/oradata/DG2/redo04c.log'
Primary database is in MAXIMUM PERFORMANCE mode
RFS[3]: Successfully opened standby log 4: '/oracle/oradata/DG2/redo04c.log'

至此PHYSICAL DATAGUARD 設置完畢

下面來設置LOGICAL DATAGUARD

備庫
SELECT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_NOT_UNIQUE
 WHERE (OWNER, TABLE_NAME) NOT IN
 (SELECT DISTINCT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED)
 AND BAD_COLLUMN = 'Y';

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;


主庫
SQL> EXECUTE DBMS_LOGSTDBY.BUILD;

備庫
SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY DG2;

SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY DG2;
ALTER DATABASE RECOVER TO LOGICAL STANDBY DG2
*
ERROR at line 1:
ORA-16254: change db_name to DG2 in the client-side parameter file (pfile)


[oracle@DG2 dbs]$ rm orapwDG2
[oracle@DG2 dbs]$ orapwd file=orapwDG2 entries=5 password=xhl


SQL> SHUTDOWN 
SQL> STARTUP MOUNT;

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/oracle/archivelogDG2/ VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DG2' SCOPE=BOTH;

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='LOCATION=/oracle/archivelog/ VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=DG2' SCOPE=BOTH

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_3=ENABLE SCOPE=BOTH;


SQL> ALTER DATABASE OPEN RESETLOGS;

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY IMMEDIATE;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章