主庫不停的情況下聯機創建active dataguard

 

目標:在主庫不停機的情況下搭建active standby  數據庫

環境說明:
數據庫版本:Release 11.2.0.4.0
操作系統  :Red Hat Enterprise Linux Server release 5.5 (Tikanga)
Primary db_unique_name : hjprddb1 
standby db_unique_name : hjprddb2

解決方案
1.對主數據庫進行必要的更改。
a. 啓用 force logging。
b. 如果沒有密碼文件,則創建密碼文件。
c. 創建備用 redo 日誌。
d. 修改參數文件,使其適用於 Dataguard。
2. 確保 sql*net 連接正常。
3. 使用主數據庫活動文件,通過網絡創建備用數據庫。
a. 創建密碼文件
b. 爲備用數據庫(輔助數據庫)創建初始化參數文件
c. 爲數據庫文件創建需要的裝載點或文件夾
d. 連接至主數據庫作爲其目標數據庫,以運行創建備用 ON STANDBY。
DUPLICATE TARGET DATABASE
 FOR STANDBY
 FROM ACTIVE DATABASE
 SPFILE
    PARAMETER_VALUE_CONVERT '', ''
    SET DB_FILE_NAME_CONVERT '', ''
    SET LOG_FILE_NAME_CONVERT '', ''
    SET SGA_MAX_SIZE 200M
    SET SGA_TARGET 125M;
 4. 檢查日誌傳送和應用。
 
 操作過程:
 1. 爲生產數據庫成爲主數據庫做準備

a. 確保數據庫是 archivelog 模式。

SQL> select log_mode from v$database;

 LOG_MODE
 ------------
 ARCHIVELOG
 
 b. 啓用 force logging

 SQL> ALTER DATABASE FORCE LOGGING;
 c. 創建備用 redo 日誌

SQL> alter database add standby logfile '<name>' size <size>;
SQL> alter database add standby logfile thread 1 group 4 ('/opt/app/oracle/hjprddb1/redo01_a.log') size 50m ;

Database altered.

SQL> alter database add standby logfile thread 1 group 5 ('/opt/app/oracle/hjprddb1/redo02_a.log') size 50m ;

Database altered.

SQL> alter database add standby logfile thread 1 group 6 ('/opt/app/oracle/hjprddb1/redo03_a.log') size 50m ;

Database altered.


d. 修改主要初始化參數,使其適用於主數據庫的 dataguard

SQL> alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(hjprddb1,hjprddb2)';

System altered.

SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=/opt/app/oracle/hjprddb1 VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=hjprddb1';

System altered.

SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=hjprddb2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=hjprddb2';

System altered.

SQL> alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;

System altered.

SQL> alter system set FAL_SERVER=hjprddb2;

System altered.

SQL> alter system set FAL_CLIENT=hjprddb1;

System altered.

SQL> alter system set DB_FILE_NAME_CONVERT='/opt/app/oracle/hjprddb2','/opt/app/oracle/hjprddb1' scope=spfile;

System altered.

SQL> alter system set LOG_FILE_NAME_CONVERT='/opt/app/oracle/hjprddb2','/opt/app/oracle/hjprddb1' scope=spfile;

System altered.

 2. 確保 sql*net 連接正常。
 在備庫的 listener.ora 文件中插入 hjprddb2 的靜態條目。

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST =hjprddb2.com.cn )(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = /opt/app/oracle

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
     (GLOBAL_DBNAME = hjprddb2.com.cn )
     (ORACLE_HOME = /opt/app/oracle/product/10.2.0/db_1 )
     (SID_NAME = hjprddb2)
    )
   )


主庫和備庫的 TNSNAMES.ORA 應該有兩個條目
hjprddb1=
          (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.236.128)(PORT = 1521))
    )
    (CONNECT_DATA =
      (service_name =hjprddb1)
    )
  )

hjprddb2=
           (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.236.129)(PORT = 1521))
    )
    (CONNECT_DATA =
      (service_name = hjprddb2.com.cn )
    )
  )

在主數據庫和備用數據庫中使用以下命令,檢查 SQL*Net 配置
% tnsping hjprddb1
 % tnsping hjprddb2
 
 3. 創建備用數據庫

a. 從主數據庫 $ORACLE_HOME/dbs 中複製密碼文件,並將其重命名爲備用數據庫名稱。

 用戶名必須爲 SYS 且主數據庫和備用數據庫的密碼需相同。
 此處的最佳做法是按照建議複製密碼文件。
 密碼文件名稱必須和備用站點上使用的實例名稱/SID 匹配,而非 DB_NAME。

b. 僅用一個參數 DB_NAME 創建初始化參數。

DB_NAME=chicago
 DB_UNIQUE_NAME=boston
 DB_BLOCK_SIZE=<same as primary>

 c. 在備庫創建需要的目錄以放置 $ADR_HOME 中的數據文件和跟蹤文件。

d. 將環境變量 ORACLE_SID 設置爲備用服務並啓動備用實例。

% export ORACLE_SID=boston
 % sqlplus "/ as sysdba"
     SQL> startup nomount pfile=$ORACLE_HOME/dbs/initcore1.ora注意:使用 PFILE 或 SPFILE
 # 附加註釋
# 如果使用了 DUPLICATE without TARGET connection,則不能使用 SPFILE
 # 否則將得到以下錯誤消息

RMAN-05537: DUPLICATE without TARGET connection when auxiliary instance is started with spfile cannot use SPFILE clause

 e. 驗證“AS SYSDBA”連接正在運行

% sqlplus /nolog
 SQL> connect sys/<passwd<@boston AS SYSDBA
         connect sys/<passwd>@chicago AS SYSDBA
 f. 在主系統上執行RMAN 並連接主數據庫和輔助數據庫(即備用數據庫)
 [oracle@hjprddb1 ~]$ rman target sys/oracle@hjprddb1 auxiliary sys/oracle@hjprddb2

Recovery Manager: Release 11.2.0.4.0 - Production on Sat Dec 28 22:34:31 2013

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

connected to target database: HJPRDDB1 (DBID=3777025748)
connected to auxiliary database: HJPRDDB2 (not mounted)

RMAN> run {
2>  allocate channel prmy1 type disk;
3>  allocate channel prmy2 type disk;
4>  allocate channel prmy3 type disk;
5>  allocate channel prmy4 type disk;
6>  allocate auxiliary channel stby type disk;
7>
8>  duplicate target database for standby from active database spfile
9>    parameter_value_convert 'hjprddb1','hjprddb2'
10>    set db_unique_name='hjprddb2'
11>    set db_file_name_convert='/hjprddb1/','/hjprddb2/'
12>    set log_file_name_convert='/hjprddb1/','/hjprddb2/'
13>    set control_files='/opt/app/oracle/hjprddb2/control01.ctl'    ---該路徑爲備庫上控制文件的存放路徑
14>    set log_archive_max_processes='5'
15>    set fal_client='hjprddb2'
16>    set fal_server='hjprddb1'
17>    set standby_file_management='AUTO'
18>    set log_archive_config='dg_config=(hjprddb1,hjprddb2)'
19>    set log_archive_dest_2='service=hjprddb1 ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=hjprddb1' ;
20>  }

using target database control file instead of recovery catalog
allocated channel: prmy1
channel prmy1: SID=1 device type=DISK

allocated channel: prmy2
channel prmy2: SID=47 device type=DISK

allocated channel: prmy3
channel prmy3: SID=32 device type=DISK

allocated channel: prmy4
channel prmy4: SID=43 device type=DISK

allocated channel: stby
channel stby: SID=20 device type=DISK

Starting Duplicate Db at 28-DEC-13

contents of Memory Script:
{
   backup as copy reuse
   targetfile  '/opt/app/oracle/product/11.2.0/db_1/dbs/orapwhjprddb1' auxiliary format
 '/opt/app/oracle/product/10.2.0/db_1/dbs/orapwhjprddb2'   targetfile
 '/opt/app/oracle/product/11.2.0/db_1/dbs/spfilehjprddb1.ora' auxiliary format
 '/opt/app/oracle/product/10.2.0/db_1/dbs/spfilehjprddb2.ora'   ;
   sql clone "alter system set spfile= ''/opt/app/oracle/product/10.2.0/db_1/dbs/spfilehjprddb2.ora''";
}
executing Memory Script

Starting backup at 28-DEC-13
Finished backup at 28-DEC-13

sql statement: alter system set spfile= ''/opt/app/oracle/product/10.2.0/db_1/dbs/spfilehjprddb2.ora''

contents of Memory Script:
{
   sql clone "alter system set  audit_file_dest =
 ''/opt/app/oracle/admin/hjprddb2/adump'' comment=
 '''' scope=spfile";
   sql clone "alter system set  dispatchers =
 ''(PROTOCOL=TCP) (SERVICE=hjprddb2XDB)'' comment=
 '''' scope=spfile";
   sql clone "alter system set  log_archive_dest_1 =
 ''LOCATION=/opt/app/oracle/hjprddb2 VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=hjprddb1'' comment=
 '''' scope=spfile";
   sql clone "alter system set  db_unique_name =
 ''hjprddb2'' comment=
 '''' scope=spfile";
   sql clone "alter system set  db_file_name_convert =
 ''/hjprddb1/'', ''/hjprddb2/'' comment=
 '''' scope=spfile";
   sql clone "alter system set  log_file_name_convert =
 ''/hjprddb1/'', ''/hjprddb2/'' comment=
 '''' scope=spfile";
   sql clone "alter system set  control_files =
 ''/opt/app/oracle/hjprddb2/control01.ctl'' comment=
 '''' scope=spfile";
   sql clone "alter system set  log_archive_max_processes =
 5 comment=
 '''' scope=spfile";
   sql clone "alter system set  fal_client =
 ''hjprddb2'' comment=
 '''' scope=spfile";
   sql clone "alter system set  fal_server =
 ''hjprddb1'' comment=
 '''' scope=spfile";
   sql clone "alter system set  standby_file_management =
 ''AUTO'' comment=
 '''' scope=spfile";
   sql clone "alter system set  log_archive_config =
 ''dg_config=(hjprddb1,hjprddb2)'' comment=
 '''' scope=spfile";
   sql clone "alter system set  log_archive_dest_2 =
 ''service=hjprddb1 ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=hjprddb1'' comment=
 '''' scope=spfile";
   shutdown clone immediate;
   startup clone nomount;
}
executing Memory Script

sql statement: alter system set  audit_file_dest =  ''/opt/app/oracle/admin/hjprddb2/adump'' comment= '''' scope=spfile

sql statement: alter system set  dispatchers =  ''(PROTOCOL=TCP) (SERVICE=hjprddb2XDB)'' comment= '''' scope=spfile

sql statement: alter system set  log_archive_dest_1 =  ''LOCATION=/opt/app/oracle/hjprddb2 VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=hjprddb1'' comment= '''' scope=spfile

sql statement: alter system set  db_unique_name =  ''hjprddb2'' comment= '''' scope=spfile

sql statement: alter system set  db_file_name_convert =  ''/hjprddb1/'', ''/hjprddb2/'' comment= '''' scope=spfile

sql statement: alter system set  log_file_name_convert =  ''/hjprddb1/'', ''/hjprddb2/'' comment= '''' scope=spfile

sql statement: alter system set  control_files =  ''/opt/app/oracle/hjprddb2/control01.ctl'' comment= '''' scope=spfile

sql statement: alter system set  log_archive_max_processes =  5 comment= '''' scope=spfile

sql statement: alter system set  fal_client =  ''hjprddb2'' comment= '''' scope=spfile

sql statement: alter system set  fal_server =  ''hjprddb1'' comment= '''' scope=spfile

sql statement: alter system set  standby_file_management =  ''AUTO'' comment= '''' scope=spfile

sql statement: alter system set  log_archive_config =  ''dg_config=(hjprddb1,hjprddb2)'' comment= '''' scope=spfile

sql statement: alter system set  log_archive_dest_2 =  ''service=hjprddb1 ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=hjprddb1'' comment= '''' scope=spfile

Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area     551165952 bytes

Fixed Size                     2255112 bytes
Variable Size                436209400 bytes
Database Buffers             109051904 bytes
Redo Buffers                   3649536 bytes
allocated channel: stby
channel stby: SID=18 device type=DISK

contents of Memory Script:
{
   backup as copy current controlfile for standby auxiliary format  '/opt/app/oracle/hjprddb2/control01.ctl';
}
executing Memory Script

Starting backup at 28-DEC-13
channel prmy1: starting datafile copy
copying standby control file
output file name=/opt/app/oracle/product/11.2.0/db_1/dbs/snapcf_hjprddb1.f tag=TAG20131228T223457 RECID=1 STAMP=835396499
channel prmy1: datafile copy complete, elapsed time: 00:00:07
Finished backup at 28-DEC-13

contents of Memory Script:
{
   sql clone 'alter database mount standby database';
}
executing Memory Script

sql statement: alter database mount standby database

contents of Memory Script:
{
   set newname for tempfile  1 to
 "/opt/app/oracle/hjprddb2/temp01.dbf";
   switch clone tempfile all;
   set newname for datafile  1 to
 "/opt/app/oracle/hjprddb2/system01.dbf";
   set newname for datafile  2 to
 "/opt/app/oracle/hjprddb2/sysaux01.dbf";
   set newname for datafile  3 to
 "/opt/app/oracle/hjprddb2/undotbs01.dbf";
   set newname for datafile  4 to
 "/opt/app/oracle/hjprddb2/users01.dbf";
   backup as copy reuse
   datafile  1 auxiliary format
 "/opt/app/oracle/hjprddb2/system01.dbf"   datafile
 2 auxiliary format
 "/opt/app/oracle/hjprddb2/sysaux01.dbf"   datafile
 3 auxiliary format
 "/opt/app/oracle/hjprddb2/undotbs01.dbf"   datafile
 4 auxiliary format
 "/opt/app/oracle/hjprddb2/users01.dbf"   ;
   sql 'alter system archive log current';
}
executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to /opt/app/oracle/hjprddb2/temp01.dbf in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting backup at 28-DEC-13
channel prmy1: starting datafile copy
input datafile file number=00001 name=/opt/app/oracle/hjprddb1/system01.dbf
channel prmy2: starting datafile copy
input datafile file number=00002 name=/opt/app/oracle/hjprddb1/sysaux01.dbf
channel prmy3: starting datafile copy
input datafile file number=00003 name=/opt/app/oracle/hjprddb1/undotbs01.dbf
channel prmy4: starting datafile copy
input datafile file number=00004 name=/opt/app/oracle/hjprddb1/users01.dbf
output file name=/opt/app/oracle/hjprddb2/users01.dbf tag=TAG20131228T223511
channel prmy4: datafile copy complete, elapsed time: 00:00:19
output file name=/opt/app/oracle/hjprddb2/undotbs01.dbf tag=TAG20131228T223511
channel prmy3: datafile copy complete, elapsed time: 00:07:46
output file name=/opt/app/oracle/hjprddb2/sysaux01.dbf tag=TAG20131228T223511
channel prmy2: datafile copy complete, elapsed time: 00:13:56
output file name=/opt/app/oracle/hjprddb2/system01.dbf tag=TAG20131228T223511
channel prmy1: datafile copy complete, elapsed time: 00:14:26
Finished backup at 28-DEC-13

sql statement: alter system archive log current

contents of Memory Script:
{
   switch clone datafile all;
}
executing Memory Script

datafile 1 switched to datafile copy
input datafile copy RECID=1 STAMP=835397373 file name=/opt/app/oracle/hjprddb2/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=2 STAMP=835397373 file name=/opt/app/oracle/hjprddb2/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=3 STAMP=835397373 file name=/opt/app/oracle/hjprddb2/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=4 STAMP=835397373 file name=/opt/app/oracle/hjprddb2/users01.dbf
Finished Duplicate Db at 28-DEC-13
released channel: prmy1
released channel: prmy2
released channel: prmy3
released channel: prmy4
released channel: stby

RMAN> exit

4. 現在連接備用數據庫 sqlplus 並啓動 MRP(管理恢復進程)。比較主數據庫的最新序列和 MRP(管理恢復進程)的應用序列。

 示例:

SQL> alter database recover managed standby database disconnect from session;
 5. 如果您是購買了ADG 許可證的客戶可以用只讀模式打開 DB 並啓動恢復。

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

參考metalink文檔 ID 1526160.1)

發佈了47 篇原創文章 · 獲贊 8 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章